/*! @preserve
 * luckysheet
 * version: 2.1.13
 * https://github.com/mengshukeji/Luckysheet
 */
var luckysheet = (() => {
  var __create = Object.create;
  var __defProp = Object.defineProperty;
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  var __getOwnPropNames = Object.getOwnPropertyNames;
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
  var __getProtoOf = Object.getPrototypeOf;
  var __hasOwnProp = Object.prototype.hasOwnProperty;
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {enumerable: true, configurable: true, writable: true, value}) : obj[key] = value;
  var __spreadValues = (a, b) => {
    for (var prop in b || (b = {}))
      if (__hasOwnProp.call(b, prop))
        __defNormalProp(a, prop, b[prop]);
    if (__getOwnPropSymbols)
      for (var prop of __getOwnPropSymbols(b)) {
        if (__propIsEnum.call(b, prop))
          __defNormalProp(a, prop, b[prop]);
      }
    return a;
  };
  var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
  var __esm = (fn, res) => function __init() {
    return fn && (res = (0, fn[Object.keys(fn)[0]])(fn = 0)), res;
  };
  var __commonJS = (cb, mod) => function __require() {
    return mod || (0, cb[Object.keys(cb)[0]])((mod = {exports: {}}).exports, mod), mod.exports;
  };
  var __export = (target, all2) => {
    for (var name2 in all2)
      __defProp(target, name2, {get: all2[name2], enumerable: true});
  };
  var __reExport = (target, module, desc) => {
    if (module && typeof module === "object" || typeof module === "function") {
      for (let key of __getOwnPropNames(module))
        if (!__hasOwnProp.call(target, key) && key !== "default")
          __defProp(target, key, {get: () => module[key], enumerable: !(desc = __getOwnPropDesc(module, key)) || desc.enumerable});
    }
    return target;
  };
  var __toModule = (module) => {
    return __reExport(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, "default", module && module.__esModule && "default" in module ? {get: () => module.default, enumerable: true} : {value: module, enumerable: true})), module);
  };

  // src/controllers/luckysheetConfigsetting.js
  var luckysheetConfigsetting, luckysheetConfigsetting_default;
  var init_luckysheetConfigsetting = __esm({
    "src/controllers/luckysheetConfigsetting.js"() {
      luckysheetConfigsetting = {
        autoFormatw: false,
        accuracy: void 0,
        total: 0,
        allowCopy: true,
        showtoolbar: true,
        showinfobar: true,
        showsheetbar: true,
        showstatisticBar: true,
        pointEdit: false,
        pointEditUpdate: null,
        pointEditZoom: 1,
        userInfo: false,
        userMenuItem: [],
        myFolderUrl: null,
        functionButton: null,
        showConfigWindowResize: true,
        enableAddRow: true,
        addRowCount: 100,
        enableAddBackTop: true,
        enablePage: true,
        pageInfo: null,
        editMode: false,
        beforeCreateDom: null,
        workbookCreateBefore: null,
        workbookCreateAfter: null,
        remoteFunction: null,
        fireMousedown: null,
        plugins: [],
        forceCalculation: false,
        defaultColWidth: 73,
        defaultRowHeight: 19,
        defaultTextColor: "#000",
        defaultCellColor: "#fff"
      };
      luckysheetConfigsetting_default = luckysheetConfigsetting;
    }
  });

  // src/store/index.js
  var Store, store_default;
  var init_store = __esm({
    "src/store/index.js"() {
      Store = {
        container: null,
        loadingObj: {},
        luckysheetfile: null,
        defaultcolumnNum: 60,
        defaultrowNum: 84,
        fullscreenmode: true,
        devicePixelRatio: 1,
        currentSheetIndex: 0,
        calculateSheetIndex: 0,
        flowdata: [],
        config: {},
        visibledatarow: [],
        visibledatacolumn: [],
        ch_width: 0,
        rh_height: 0,
        cellmainWidth: 0,
        cellmainHeight: 0,
        toolbarHeight: 0,
        infobarHeight: 0,
        calculatebarHeight: 0,
        rowHeaderWidth: 46,
        columnHeaderHeight: 20,
        cellMainSrollBarSize: 12,
        sheetBarHeight: 31,
        statisticBarHeight: 23,
        luckysheetTableContentHW: [0, 0],
        defaultcollen: 73,
        defaultrowlen: 19,
        jfcountfuncTimeout: null,
        jfautoscrollTimeout: null,
        luckysheet_select_status: false,
        luckysheet_select_save: [{"row": [0, 0], "column": [0, 0]}],
        luckysheet_selection_range: [],
        luckysheet_copy_save: {},
        luckysheet_paste_iscut: false,
        filterchage: true,
        luckysheet_filter_save: {"row": [], "column": []},
        luckysheet_sheet_move_status: false,
        luckysheet_sheet_move_data: [],
        luckysheet_scroll_status: false,
        luckysheetisrefreshdetail: true,
        luckysheetisrefreshtheme: true,
        luckysheetcurrentisPivotTable: false,
        luckysheet_rows_selected_status: false,
        luckysheet_cols_selected_status: false,
        luckysheet_rows_change_size: false,
        luckysheet_rows_change_size_start: [],
        luckysheet_cols_change_size: false,
        luckysheet_cols_change_size_start: [],
        luckysheet_cols_dbclick_timeout: null,
        luckysheet_cols_dbclick_times: 0,
        luckysheetCellUpdate: [],
        luckysheet_shiftpositon: null,
        iscopyself: true,
        orderbyindex: 0,
        luckysheet_model_move_state: false,
        luckysheet_model_xy: [0, 0],
        luckysheet_model_move_obj: null,
        luckysheet_cell_selected_move: false,
        luckysheet_cell_selected_move_index: [],
        luckysheet_cell_selected_extend: false,
        luckysheet_cell_selected_extend_index: [],
        luckysheet_cell_selected_extend_time: null,
        clearjfundo: true,
        jfundo: [],
        jfredo: [],
        lang: "en",
        createChart: "",
        highlightChart: "",
        zIndex: 15,
        chartparam: {
          luckysheetCurrentChart: null,
          luckysheetCurrentChartActive: false,
          luckysheetCurrentChartMove: null,
          luckysheetCurrentChartMoveTimeout: null,
          luckysheetCurrentChartMoveObj: null,
          luckysheetCurrentChartMoveXy: null,
          luckysheetCurrentChartMoveWinH: null,
          luckysheetCurrentChartMoveWinW: null,
          luckysheetCurrentChartResize: null,
          luckysheetCurrentChartResizeObj: null,
          luckysheetCurrentChartResizeXy: null,
          luckysheetCurrentChartResizeWinH: null,
          luckysheetCurrentChartResizeWinW: null,
          luckysheetInsertChartTosheetChange: true,
          luckysheetCurrentChartZIndexRank: 100,
          luckysheet_chart_redo_click: false,
          luckysheetCurrentChartMaxState: false,
          jfrefreshchartall: "",
          changeChartCellData: "",
          renderChart: "",
          getChartJson: ""
        },
        functionList: null,
        luckysheet_function: null,
        chart_selection: {},
        currentChart: "",
        scrollRefreshSwitch: true,
        measureTextCache: {},
        measureTextCellInfoCache: {},
        measureTextCacheTimeOut: null,
        cellOverflowMapCache: {},
        zoomRatio: 1,
        visibledatacolumn_unique: null,
        visibledatarow_unique: null,
        showGridLines: true,
        toobarObject: {},
        inlineStringEditCache: null,
        inlineStringEditRange: null,
        fontList: [],
        defaultFontSize: 10,
        currentSheetView: "viewNormal",
        cooperativeEdit: {
          usernameTimeout: {},
          changeCollaborationSize: [],
          allDataColumnlen: [],
          merge_range: {},
          checkoutData: []
        },
        asyncLoad: ["core"],
        defaultCell: {
          bg: null,
          bl: 0,
          ct: {fa: "General", t: "n"},
          fc: "rgb(51, 51, 51)",
          ff: 0,
          fs: 11,
          ht: 1,
          it: 0,
          vt: 1,
          m: "",
          v: ""
        }
      };
      store_default = Store;
    }
  });

  // src/global/validate.js
  function isRealNull(val) {
    if (val == null || val.toString().replace(/\s/g, "") == "") {
      return true;
    } else {
      return false;
    }
  }
  function isRealNum(val) {
    if (val == null || val.toString().replace(/\s/g, "") === "") {
      return false;
    }
    if (typeof val == "boolean") {
      return false;
    }
    if (!isNaN(val)) {
      return true;
    } else {
      return false;
    }
  }
  function valueIsError(value) {
    let isError = false;
    for (let x in error) {
      if (value == error[x]) {
        isError = true;
        break;
      }
    }
    return isError;
  }
  function hasChinaword(s) {
    let patrn = /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi;
    if (!patrn.exec(s)) {
      return false;
    } else {
      return true;
    }
  }
  function isEditMode() {
    if (luckysheetConfigsetting_default.editMode) {
      return true;
    } else {
      return false;
    }
  }
  function checkIsAllowEdit() {
    if (store_default.allowEdit) {
      return true;
    } else {
      return false;
    }
  }
  function hasPartMC(cfg, r1, r2, c1, c2) {
    let hasPartMC2 = false;
    for (let x in store_default.config["merge"]) {
      let mc = cfg["merge"][x];
      if (r1 < mc.r) {
        if (r2 >= mc.r && r2 < mc.r + mc.rs - 1) {
          if (c1 >= mc.c && c1 <= mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          } else if (c2 >= mc.c && c2 <= mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          } else if (c1 < mc.c && c2 > mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          }
        } else if (r2 >= mc.r && r2 == mc.r + mc.rs - 1) {
          if (c1 > mc.c && c1 < mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          } else if (c2 > mc.c && c2 < mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          } else if (c1 == mc.c && c2 < mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          } else if (c1 > mc.c && c2 == mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          }
        } else if (r2 > mc.r + mc.rs - 1) {
          if (c1 > mc.c && c1 <= mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          } else if (c2 >= mc.c && c2 < mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          } else if (c1 == mc.c && c2 < mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          } else if (c1 > mc.c && c2 == mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          }
        }
      } else if (r1 == mc.r) {
        if (r2 < mc.r + mc.rs - 1) {
          if (c1 >= mc.c && c1 <= mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          } else if (c2 >= mc.c && c2 <= mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          } else if (c1 < mc.c && c2 > mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          }
        } else if (r2 >= mc.r + mc.rs - 1) {
          if (c1 > mc.c && c1 <= mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          } else if (c2 >= mc.c && c2 < mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          } else if (c1 == mc.c && c2 < mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          } else if (c1 > mc.c && c2 == mc.c + mc.cs - 1) {
            hasPartMC2 = true;
            break;
          }
        }
      } else if (r1 <= mc.r + mc.rs - 1) {
        if (c1 >= mc.c && c1 <= mc.c + mc.cs - 1) {
          hasPartMC2 = true;
          break;
        } else if (c2 >= mc.c && c2 <= mc.c + mc.cs - 1) {
          hasPartMC2 = true;
          break;
        } else if (c1 < mc.c && c2 > mc.c + mc.cs - 1) {
          hasPartMC2 = true;
          break;
        }
      }
    }
    return hasPartMC2;
  }
  function checkWordByteLength(value) {
    return Math.ceil(value.charCodeAt().toString(2).length / 8);
  }
  var error;
  var init_validate = __esm({
    "src/global/validate.js"() {
      init_luckysheetConfigsetting();
      init_store();
      error = {
        v: "#VALUE!",
        n: "#NAME?",
        na: "#N/A",
        r: "#REF!",
        d: "#DIV/0!",
        nm: "#NUM!",
        nl: "#NULL!",
        sp: "#SPILL!"
      };
    }
  });

  // src/utils/math.js
  function isInteger(obj) {
    return Math.floor(obj) === obj;
  }
  function toInteger(floatNum) {
    var ret = {times: 1, num: 0};
    if (isInteger(floatNum)) {
      ret.num = floatNum;
      return ret;
    }
    var strfi = floatNum + "";
    var dotPos = strfi.indexOf(".");
    var len = strfi.substr(dotPos + 1).length;
    var times = Math.pow(10, len);
    var intNum = parseInt(floatNum * times + 0.5, 10);
    ret.times = times;
    ret.num = intNum;
    return ret;
  }
  function operation(a, b, op) {
    var o1 = toInteger(a);
    var o2 = toInteger(b);
    var n1 = o1.num;
    var n2 = o2.num;
    var t1 = o1.times;
    var t2 = o2.times;
    var max = t1 > t2 ? t1 : t2;
    var result = null;
    switch (op) {
      case "add":
        if (t1 === t2) {
          result = n1 + n2;
        } else if (t1 > t2) {
          result = n1 + n2 * (t1 / t2);
        } else {
          result = n1 * (t2 / t1) + n2;
        }
        return result / max;
      case "subtract":
        if (t1 === t2) {
          result = n1 - n2;
        } else if (t1 > t2) {
          result = n1 - n2 * (t1 / t2);
        } else {
          result = n1 * (t2 / t1) - n2;
        }
        return result / max;
      case "multiply":
        result = n1 * n2 / (t1 * t2);
        return result;
      case "divide":
        return result = function() {
          var r1 = n1 / n2;
          var r2 = t2 / t1;
          return operation(r1, r2, "multiply");
        }();
    }
  }
  function fixed(num, precision) {
    if (!precision) {
      precision = 2;
    }
    if (!isRealNum(num))
      return num;
    let s = num.toFixed(precision);
    let index2 = s.indexOf(".");
    let prefix = s.substring(0, index2);
    let suffix = s.substring(index2 + 1, s.length);
    if (suffix) {
      for (let i2 = suffix.length - 1; i2 != 0; i2--) {
        if (suffix.charAt(i2) != "0" && i2 == suffix.length - 1) {
          break;
        } else {
          suffix = suffix.substring(0, i2);
        }
      }
    }
    return Number(prefix + "." + suffix);
  }
  var init_math = __esm({
    "src/utils/math.js"() {
      init_validate();
      Number.prototype.add = function(value) {
        let number = parseFloat(value);
        if (typeof number !== "number" || Number.isNaN(number)) {
          throw new Error("\u8BF7\u8F93\u5165\u6570\u5B57\u6216\u8005\u6570\u5B57\u5B57\u7B26\u4E32\uFF5E");
        }
        ;
        return operation(this, number, "add");
      };
      Number.prototype.subtract = function(value) {
        let number = parseFloat(value);
        if (typeof number !== "number" || Number.isNaN(number)) {
          throw new Error("\u8BF7\u8F93\u5165\u6570\u5B57\u6216\u8005\u6570\u5B57\u5B57\u7B26\u4E32\uFF5E");
        }
        return operation(this, number, "subtract");
      };
      Number.prototype.multiply = function(value) {
        let number = parseFloat(value);
        if (typeof number !== "number" || Number.isNaN(number)) {
          throw new Error("\u8BF7\u8F93\u5165\u6570\u5B57\u6216\u8005\u6570\u5B57\u5B57\u7B26\u4E32\uFF5E");
        }
        return operation(this, number, "multiply");
      };
      Number.prototype.divide = function(value) {
        let number = parseFloat(value);
        if (typeof number !== "number" || Number.isNaN(number)) {
          throw new Error("\u8BF7\u8F93\u5165\u6570\u5B57\u6216\u8005\u6570\u5B57\u5B57\u7B26\u4E32\uFF5E");
        }
        return operation(this, number, "divide");
      };
      Number.prototype.tofixed = function(value) {
        let precision = parseFloat(value);
        if (typeof precision !== "number" || Number.isNaN(precision)) {
          throw new Error("\u8BF7\u8F93\u5165\u6570\u5B57\u6216\u8005\u6570\u5B57\u5B57\u7B26\u4E32\uFF5E");
        }
        return fixed(this, precision);
      };
    }
  });

  // src/config.js
  var config_default;
  var init_config = __esm({
    "src/config.js"() {
      config_default = {
        container: "luckysheet",
        loading: {},
        column: 60,
        row: 84,
        allowCopy: true,
        showtoolbar: true,
        showinfobar: true,
        showsheetbar: true,
        showstatisticBar: true,
        pointEdit: false,
        pointEditUpdate: null,
        pointEditZoom: 1,
        data: [{"name": "Sheet1", color: "", "status": "1", "order": "0", "data": [], "config": {}, "index": 0}, {"name": "Sheet2", color: "", "status": "0", "order": "1", "data": [], "config": {}, "index": 1}, {"name": "Sheet3", color: "", "status": "0", "order": "2", "data": [], "config": {}, "index": 2}],
        title: "Luckysheet Demo",
        userInfo: false,
        userMenuItem: [{url: "www.baidu.com", "icon": '<i class="fa fa-folder" aria-hidden="true"></i>', "name": "\u6211\u7684\u8868\u683C"}, {url: "www.baidu.com", "icon": '<i class="fa fa-sign-out" aria-hidden="true"></i>', "name": "\u9000\u51FA\u767B\u9646"}],
        myFolderUrl: "www.baidu.com",
        config: {},
        fullscreenmode: true,
        devicePixelRatio: window.devicePixelRatio,
        allowEdit: true,
        loadUrl: "",
        loadSheetUrl: "",
        gridKey: "",
        updateUrl: "",
        updateImageUrl: "",
        allowUpdate: false,
        functionButton: "",
        showConfigWindowResize: true,
        enableAddRow: true,
        enableAddBackTop: true,
        autoFormatw: false,
        accuracy: void 0,
        pageInfo: {
          "queryExps": "",
          "reportId": "",
          "fields": "",
          "mobile": "",
          "frezon": "",
          "currentPage": "",
          "totalPage": 10,
          "pageUrl": ""
        },
        editMode: false,
        beforeCreateDom: null,
        fireMousedown: null,
        lang: "en",
        plugins: [],
        forceCalculation: false,
        rowHeaderWidth: 46,
        columnHeaderHeight: 20,
        defaultColWidth: 73,
        defaultRowHeight: 19,
        defaultFontSize: 10,
        limitSheetNameLength: true,
        defaultSheetNameMaxLength: 31,
        sheetFormulaBar: true,
        showtoolbarConfig: {},
        showsheetbarConfig: {},
        showstatisticBarConfig: {},
        cellRightClickConfig: {},
        sheetRightClickConfig: {},
        imageUpdateMethodConfig: {}
      };
    }
  });

  // src/locale/en.js
  var en_default;
  var init_en = __esm({
    "src/locale/en.js"() {
      en_default = {
        functionlist: {
          "SUMIF": {
            "d": "Returns a conditional sum across a range.",
            "a": "A conditional sum across a range.",
            "p": [
              {
                "name": "range",
                "detail": "The range which is tested against `criterion`."
              },
              {
                "name": "criterion",
                "detail": "The pattern or test to apply to `range`."
              },
              {
                "name": "sum_range",
                "detail": "The range to be summed, if different from `range`."
              }
            ]
          },
          "TAN": {
            "d": "Returns the tangent of an angle provided in radians.",
            "a": "Tangent of an angle provided in radians.",
            "p": [
              {
                "name": "angle",
                "detail": "The angle to find the tangent of, in radians."
              }
            ]
          },
          "TANH": {
            "d": "Returns the hyperbolic tangent of any real number.",
            "a": "Hyperbolic tangent of any real number.",
            "p": [
              {
                "name": "value",
                "detail": "Any real value to calculate the hyperbolic tangent of."
              }
            ]
          },
          "CEILING": {
            "d": "Rounds a number up to the nearest integer multiple of specified significance `factor`.",
            "a": "Rounds number up to nearest multiple of a factor.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round up to the nearest integer multiple of `factor`."
              },
              {
                "name": "factor",
                "detail": "The number to whose multiples `value` will be rounded."
              }
            ]
          },
          "ATAN": {
            "d": "Returns the inverse tangent of a value, in radians.",
            "a": "Inverse tangent of a value, in radians.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the inverse tangent."
              }
            ]
          },
          "ASINH": {
            "d": "Returns the inverse hyperbolic sine of a number.",
            "a": "Inverse hyperbolic sine of a number.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the inverse hyperbolic sine."
              }
            ]
          },
          "ABS": {
            "d": "Returns the absolute value of a number.",
            "a": "Absolute value of a number.",
            "p": [
              {
                "name": "value",
                "detail": "The number of which to return the absolute value."
              }
            ]
          },
          "ACOS": {
            "d": "Returns the inverse cosine of a value, in radians.",
            "a": "Inverse cosine of a value, in radians.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the inverse cosine. Must be between `-1` and `1`, inclusive."
              }
            ]
          },
          "ACOSH": {
            "d": "Returns the inverse hyperbolic cosine of a number.",
            "a": "Inverse hyperbolic cosine of a number.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the inverse hyperbolic cosine. Must be greater than or equal to `1`."
              }
            ]
          },
          "MULTINOMIAL": {
            "d": "Returns the factorial of the sum of values divided by the product of the values' factorials.",
            "a": "Multinomial distribution function.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider."
              }
            ]
          },
          "ATANH": {
            "d": "Returns the inverse hyperbolic tangent of a number.",
            "a": "Inverse hyperbolic tangent of a number.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the inverse hyperbolic tangent. Must be between -1 and 1, exclusive."
              }
            ]
          },
          "ATAN2": {
            "d": "Returns the angle between the x-axis and a line segment from the origin (0,0) to specified coordinate pair (`x`,`y`), in radians.",
            "a": "Arctangent of a value.",
            "p": [
              {
                "name": "x",
                "detail": "The x coordinate of the endpoint of the line segment for which to calculate the angle from the x-axis."
              },
              {
                "name": "y",
                "detail": "The y coordinate of the endpoint of the line segment for which to calculate the angle from the x-axis."
              }
            ]
          },
          "COUNTBLANK": {
            "d": "Returns the number of empty values in a list of values and ranges.",
            "a": "Number of empty values.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range in which to count the number of blanks."
              }
            ]
          },
          "COSH": {
            "d": "Returns the hyperbolic cosine of any real number.",
            "a": "Hyperbolic cosine of any real number.",
            "p": [
              {
                "name": "value",
                "detail": "Any real value to calculate the hyperbolic cosine of."
              }
            ]
          },
          "INT": {
            "d": "Rounds a number down to the nearest integer that is less than or equal to it.",
            "a": "Rounds number down to nearest integer.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round down to the nearest integer."
              }
            ]
          },
          "ISEVEN": {
            "d": "Checks whether the provided value is even.",
            "a": "Whether the provided value is even.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as even."
              }
            ]
          },
          "ISODD": {
            "d": "Checks whether the provided value is odd.",
            "a": "Whether the provided value is odd.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as odd."
              }
            ]
          },
          "LCM": {
            "d": "Returns the least common multiple of one or more integers.",
            "a": "Least common multiple of one or more integers.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range whose factors to consider in a calculation to find the least common multiple."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges whose factors to consider to find the least common multiple."
              }
            ]
          },
          "LN": {
            "d": "Returns the logarithm of a number, base e (Euler's number).",
            "a": "The logarithm of a number, base e (euler's number).",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the logarithm, base e."
              }
            ]
          },
          "LOG": {
            "d": "Returns the logarithm of a number with respect to a base.",
            "a": "The logarithm of a number with respect to a base.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the logarithm."
              },
              {
                "name": "base",
                "detail": "The base to use for calculation of the logarithm."
              }
            ]
          },
          "LOG10": {
            "d": "Returns the logarithm of a number, base 10.",
            "a": "The logarithm of a number, base 10.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the logarithm, base 10."
              }
            ]
          },
          "MOD": {
            "d": "Returns the result of the modulo operator, the remainder after a division operation.",
            "a": "Modulo (remainder) operator.",
            "p": [
              {
                "name": "dividend",
                "detail": "The number to be divided to find the remainder."
              },
              {
                "name": "divisor",
                "detail": "The number to divide by."
              }
            ]
          },
          "MROUND": {
            "d": "Rounds one number to the nearest integer multiple of another.",
            "a": "Rounds a number to the nearest integer multiple.",
            "p": [
              {
                "name": "value",
                "detail": "The number to round to the nearest integer multiple of another."
              },
              {
                "name": "factor",
                "detail": "The number to whose multiples `value` will be rounded."
              }
            ]
          },
          "ODD": {
            "d": "Rounds a number up to the nearest odd integer.",
            "a": "Rounds a number up to the nearest odd integer.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round to the next greatest odd number."
              }
            ]
          },
          "SUMSQ": {
            "d": "Returns the sum of the squares of a series of numbers and/or cells.",
            "a": "Sum of squares.",
            "p": [
              {
                "name": "value1",
                "detail": "The first number or range whose squares to add together."
              },
              {
                "name": "value2",
                "detail": "Additional numbers or ranges whose squares to add to the square(s) of `value1`."
              }
            ]
          },
          "COMBIN": {
            "d": "Returns the number of ways to choose some number of objects from a pool of a given size of objects.",
            "a": "Number of combinations from a set of objects.",
            "p": [
              {
                "name": "n",
                "detail": "The size of the pool of objects to choose from."
              },
              {
                "name": "k",
                "detail": "The number of objects to choose."
              }
            ]
          },
          "SUM": {
            "d": "Returns the sum of a series of numbers and/or cells.",
            "a": "Sum of a series of numbers and/or cells.",
            "p": [
              {
                "name": "value1",
                "detail": "The first number or range to add together."
              },
              {
                "name": "value2",
                "detail": "Additional numbers or ranges to add to `value1`."
              }
            ]
          },
          "SUBTOTAL": {
            "d": "Returns a subtotal for a vertical range of cells using a specified aggregation function.",
            "a": "Subtotal for a range using a specific function.",
            "p": [
              {
                "name": "function_code",
                "detail": "The function to use in subtotal aggregation."
              },
              {
                "name": "range1",
                "detail": "The first range over which to calculate a subtotal."
              },
              {
                "name": "range2",
                "detail": "Additional ranges over which to calculate subtotals."
              }
            ]
          },
          "ASIN": {
            "d": "Returns the inverse sine of a value, in radians.",
            "a": "Inverse sine of a value, in radians.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the inverse sine. Must be between `-1` and `1`, inclusive."
              }
            ]
          },
          "COUNTIF": {
            "d": "Returns a conditional count across a range.",
            "a": "A conditional count across a range.",
            "p": [
              {
                "name": "range",
                "detail": "The range that is tested against `criterion`."
              },
              {
                "name": "criterion",
                "detail": "The pattern or test to apply to `range`."
              }
            ]
          },
          "RADIANS": {
            "d": "Converts an angle value in degrees to radians.",
            "a": "Converts an angle value in degrees to radians.",
            "p": [
              {
                "name": "angle",
                "detail": "The angle to convert from degrees to radians."
              }
            ]
          },
          "RAND": {
            "d": "Returns a random number between 0 inclusive and 1 exclusive.",
            "a": "A random number between 0 inclusive and 1 exclusive.",
            "p": []
          },
          "COUNTUNIQUE": {
            "d": "Counts the number of unique values in a list of specified values and ranges.",
            "a": "Counts number of unique values in a range.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider for uniqueness."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider for uniqueness."
              }
            ]
          },
          "DEGREES": {
            "d": "Converts an angle value in radians to degrees.",
            "a": "Converts an angle value in radians to degrees.",
            "p": [
              {
                "name": "angle",
                "detail": "The angle to convert from radians to degrees."
              }
            ]
          },
          "ERFC": {
            "d": "Returns the complementary Gauss error function of a value.",
            "a": "Complementary gauss error function of a value.",
            "p": [
              {
                "name": "z",
                "detail": "The number for which to calculate the complementary Gauss error function."
              }
            ]
          },
          "EVEN": {
            "d": "Rounds a number up to the nearest even integer.",
            "a": "Rounds a number up to the nearest even integer.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round to the next greatest even number."
              }
            ]
          },
          "EXP": {
            "d": "Returns Euler's number, e (~2.718) raised to a power.",
            "a": "Euler's number, e (~2.718) raised to a power.",
            "p": [
              {
                "name": "exponent",
                "detail": "The exponent to raise e to."
              }
            ]
          },
          "FACT": {
            "d": "Returns the factorial of a number.",
            "a": "Factorial of a number.",
            "p": [
              {
                "name": "value",
                "detail": "The number or reference to a number whose factorial will be calculated and returned."
              }
            ]
          },
          "FACTDOUBLE": {
            "d": 'Returns the "double factorial" of a number.',
            "a": '"double factorial" of a number.',
            "p": [
              {
                "name": "value",
                "detail": "The number or reference to a number whose double factorial will be calculated and returned."
              }
            ]
          },
          "PI": {
            "d": "Returns the value of Pi to 14 decimal places.",
            "a": "The number pi.",
            "p": []
          },
          "FLOOR": {
            "d": "Rounds a number down to the nearest integer multiple of specified significance `factor`.",
            "a": "Rounds number down to nearest multiple of a factor.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round down to the nearest integer multiple of `factor`."
              },
              {
                "name": "factor",
                "detail": "The number to whose multiples `value` will be rounded."
              }
            ]
          },
          "GCD": {
            "d": "Returns the greatest common divisor of one or more integers.",
            "a": "Greatest common divisor of one or more integers.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range whose factors to consider in a calculation to find the greatest common divisor."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges whose factors to consider to find the greatest common divisor."
              }
            ]
          },
          "RANDBETWEEN": {
            "d": "Returns a uniformly random integer between two values, inclusive.",
            "a": "Random integer between two values, inclusive.",
            "p": [
              {
                "name": "low",
                "detail": "The low end of the random range."
              },
              {
                "name": "high",
                "detail": "The high end of the random range."
              }
            ]
          },
          "ROUND": {
            "d": "Rounds a number to a certain number of decimal places according to standard rules.",
            "a": "Rounds a number according to standard rules.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round to `places` number of places."
              },
              {
                "name": "places",
                "detail": "The number of decimal places to which to round."
              }
            ]
          },
          "ROUNDDOWN": {
            "d": "Rounds a number to a certain number of decimal places, always rounding down to the next valid increment.",
            "a": "Rounds down a number.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round to `places` number of places, always rounding down."
              },
              {
                "name": "places",
                "detail": "The number of decimal places to which to round."
              }
            ]
          },
          "ROUNDUP": {
            "d": "Rounds a number to a certain number of decimal places, always rounding up to the next valid increment.",
            "a": "Rounds up a number.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round to `places` number of places, always rounding up."
              },
              {
                "name": "places",
                "detail": "The number of decimal places to which to round."
              }
            ]
          },
          "SERIESSUM": {
            "d": "Given parameters `x`, `n`, `m`, and `a`, returns the power series sum a",
            "a": "Sum of a power series.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the power series. Varies depending on the type of approximation, may be angle, exponent, or some other value."
              },
              {
                "name": "n",
                "detail": "The initial power to which to raise `x` in the power series."
              },
              {
                "name": "m",
                "detail": "The additive increment by which to increase `x`."
              },
              {
                "name": "a",
                "detail": "The array or range containing the coefficients of the power series."
              }
            ]
          },
          "SIGN": {
            "d": "Given an input number, returns `-1` if it is negative, `1` if positive, and `0` if it is zero.",
            "a": "Sign of a provided number (+/-/0).",
            "p": [
              {
                "name": "value",
                "detail": "The value whose sign will be evaluated."
              }
            ]
          },
          "SIN": {
            "d": "Returns the sine of an angle provided in radians.",
            "a": "Sine of an angle provided in radians.",
            "p": [
              {
                "name": "angle",
                "detail": "The angle to find the sine of, in radians."
              }
            ]
          },
          "SINH": {
            "d": "Returns the hyperbolic sine of any real number.",
            "a": "Hyperbolic sine of any real number.",
            "p": [
              {
                "name": "value",
                "detail": "Any real value to calculate the hyperbolic sine of."
              }
            ]
          },
          "SQRT": {
            "d": "Returns the positive square root of a positive number.",
            "a": "Positive square root of a positive number.",
            "p": [
              {
                "name": "value",
                "detail": "The number for which to calculate the positive square root."
              }
            ]
          },
          "SQRTPI": {
            "d": "Returns the positive square root of the product of Pi and the given positive number.",
            "a": "Square root of the product of pi and number.",
            "p": [
              {
                "name": "value",
                "detail": "The number which will be multiplied by Pi and have the product's square root returned"
              }
            ]
          },
          "GAMMALN": {
            "d": "Returns the logarithm of a specified Gamma function, base e (Euler's number).",
            "a": "Logarithm of gamma function.",
            "p": [
              {
                "name": "value",
                "detail": "The input to the Gamma function. The natural logarithm of Gamma(`value`) will be returned."
              }
            ]
          },
          "COS": {
            "d": "Returns the cosine of an angle provided in radians.",
            "a": "Cosine of an angle provided in radians.",
            "p": [
              {
                "name": "angle",
                "detail": "The angle to find the cosine of, in radians."
              }
            ]
          },
          "TRUNC": {
            "d": "Truncates a number to a certain number of significant digits by omitting less significant digits.",
            "a": "Truncates a number.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be truncated."
              },
              {
                "name": "places",
                "detail": "The number of significant digits to the right of the decimal point to retain."
              }
            ]
          },
          "QUOTIENT": {
            "d": "Returns one number divided by another.",
            "a": "One number divided by another.",
            "p": [
              {
                "name": "dividend",
                "detail": "The number to be divided."
              },
              {
                "name": "divisor",
                "detail": "The number to divide by."
              }
            ]
          },
          "POWER": {
            "d": "Returns a number raised to a power.",
            "a": "A number raised to a power.",
            "p": [
              {
                "name": "base",
                "detail": "The number to raise to the `exponent` power."
              },
              {
                "name": "exponent",
                "detail": "The exponent to raise `base` to."
              }
            ]
          },
          "SUMIFS": {
            "d": "Returns the sum of a range depending on multiple criteria.",
            "a": "Sums a range depending on multiple criteria.",
            "p": [
              {
                "name": "sum_range",
                "detail": "The range to sum."
              },
              {
                "name": "criteria_range1",
                "detail": "The range to check against criterion1."
              },
              {
                "name": "criterion1",
                "detail": "The pattern or test to apply to criteria_range1."
              },
              {
                "name": "criteria_range2",
                "detail": "Additional ranges to check."
              }
            ]
          },
          "COUNTIFS": {
            "d": "Returns the count of a range depending on multiple criteria.",
            "a": "Count values depending on multiple criteria.",
            "p": [
              {
                "name": "criteria_range1",
                "detail": "The range to check against `criterion1`."
              },
              {
                "name": "criterion1",
                "detail": "The pattern or test to apply to `criteria_range1`."
              },
              {
                "name": "criteria_range2",
                "detail": "Additional ranges to check."
              }
            ]
          },
          "PRODUCT": {
            "d": "Returns the result of multiplying a series of numbers together.",
            "a": "Result of multiplying a series of numbers together.",
            "p": [
              {
                "name": "factor1",
                "detail": "The first number or range to calculate for the product."
              },
              {
                "name": "factor2",
                "detail": "More numbers or ranges to calculate for the product."
              }
            ]
          },
          "HARMEAN": {
            "d": "Calculates the harmonic mean of a dataset.",
            "a": "The harmonic mean of a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the population."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the population."
              }
            ]
          },
          "HYPGEOMDIST": {
            "d": "Calculates the probability of drawing a certain number of successes in a certain number of tries given a population of a certain size containing a certain number of successes, without replacement of draws.",
            "a": "Hypergeometric distribution probability.",
            "p": [
              {
                "name": "num_successes",
                "detail": "The desired number of successes."
              },
              {
                "name": "num_draws",
                "detail": "The number of permitted draws."
              },
              {
                "name": "successes_in_pop",
                "detail": "The total number of successes in the population."
              },
              {
                "name": "pop_size",
                "detail": "The total size of the population"
              },
              {
                "name": "cumulative",
                "detail": "Determine the logical value of the function form. \n\nIf cumulative is TRUE(), HYPGEOM.DIST returns the cumulative distribution function;\n\nif FALSE(), it returns the probability density function."
              }
            ]
          },
          "INTERCEPT": {
            "d": "Calculates the y-value at which the line resulting from linear regression of a dataset will intersect the y-axis (x=0).",
            "a": "Y-intercept of line derived via linear regression.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "KURT": {
            "d": 'Calculates the kurtosis of a dataset, which describes the shape, and in particular the "peakedness" of that dataset.',
            "a": "Kurtosis of a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the dataset."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the dataset."
              }
            ]
          },
          "LARGE": {
            "d": "Returns the nth largest element from a data set, where n is user-defined.",
            "a": "Nth largest element from a data set.",
            "p": [
              {
                "name": "data",
                "detail": "Array or range containing the dataset to consider."
              },
              {
                "name": "n",
                "detail": "The rank from largest to smallest of the element to return."
              }
            ]
          },
          "STDEVA": {
            "d": "Calculates the standard deviation based on a sample, setting text to the value `0`.",
            "a": "Standard deviation of sample (text as 0).",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the sample."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the sample."
              }
            ]
          },
          "STDEVP": {
            "d": "Calculates the standard deviation based on an entire population.",
            "a": "Standard deviation of an entire population.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the population."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the population."
              }
            ]
          },
          "GEOMEAN": {
            "d": "Calculates the geometric mean of a dataset.",
            "a": "The geometric mean of a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the population."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the population."
              }
            ]
          },
          "RANK_EQ": {
            "d": "Returns the rank of a specified value in a dataset. If there is more than one entry of the same value in the dataset, the top rank of the entries will be returned.",
            "a": "Top rank of a specified value in a dataset.",
            "p": [
              {
                "name": "value",
                "detail": "The value whose rank will be determined."
              },
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "is_ascending",
                "detail": "Whether to consider the values in `data` in descending or ascending order. If omitted, the default is descending (FALSE)."
              }
            ]
          },
          "RANK_AVG": {
            "d": "Returns the rank of a specified value in a dataset. If there is more than one entry of the same value in the dataset, the average rank of the entries will be returned.",
            "a": "Average rank of a specified value in a dataset.",
            "p": [
              {
                "name": "value",
                "detail": "The value whose rank will be determined."
              },
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "is_ascending",
                "detail": "Whether to consider the values in `data` in descending or ascending order. If omitted, the default is descending (FALSE)."
              }
            ]
          },
          "PERCENTRANK_EXC": {
            "d": "Returns the percentage rank (percentile) from 0 to 1 exclusive of a specified value in a dataset.",
            "a": "Percentage rank (percentile) from 0 to 1 exclusive.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "value",
                "detail": "The value whose percentage rank will be determined."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant figures to use in the calculation. Default is 3."
              }
            ]
          },
          "PERCENTRANK_INC": {
            "d": "Returns the percentage rank (percentile) from 0 to 1 inclusive of a specified value in a dataset.",
            "a": "Percentage rank (percentile) from 0 to 1 inclusive.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "value",
                "detail": "The value whose percentage rank will be determined."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant figures to use in the calculation. Default is 3."
              }
            ]
          },
          "FORECAST": {
            "d": "Calculates the expected y-value for a specified x based on a linear regression of a dataset.",
            "a": "Expected y-value based of linear regression.",
            "p": [
              {
                "name": "x",
                "detail": "The value on the x-axis to forecast."
              },
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "FISHERINV": {
            "d": "Returns the inverse Fisher transformation of a specified value.",
            "a": "Inverse fisher transformation of a specified value.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the inverse Fisher transformation."
              }
            ]
          },
          "FISHER": {
            "d": "Returns the Fisher transformation of a specified value.",
            "a": "Fisher transformation of a specified value.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the Fisher transformation."
              }
            ]
          },
          "MODE_SNGL": {
            "d": "Returns the most commonly occurring value in a dataset.",
            "a": "Most commonly occurring value in a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating mode."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating mode."
              }
            ]
          },
          "WEIBULL_DIST": {
            "d": "Returns the value of the Weibull distribution function (or Weibull cumulative distribution function) for a specified shape and scale.",
            "a": "Weibull distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the Weibull distribution function."
              },
              {
                "name": "shape",
                "detail": "The shape parameter of the Weibull distribution function."
              },
              {
                "name": "scale",
                "detail": "The scale parameter of the Weibull distribution function."
              },
              {
                "name": "cumulative",
                "detail": "Whether to use the cumulative distribution function."
              }
            ]
          },
          "COUNT": {
            "d": "Returns the number of numeric values in a dataset.",
            "a": "The number of numeric values in dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when counting."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when counting."
              }
            ]
          },
          "COUNTA": {
            "d": "Returns the number of values in a dataset.",
            "a": "The number of values in a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when counting."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when counting."
              }
            ]
          },
          "AVEDEV": {
            "d": "Calculates the average of the magnitudes of deviations of data from a dataset's mean.",
            "a": "Average magnitude of deviations from mean.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the sample."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the sample."
              }
            ]
          },
          "AVERAGE": {
            "d": "Returns the numerical average value in a dataset, ignoring text.",
            "a": "Numerical average value in a dataset, ignoring text.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating the average value."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating the average value."
              }
            ]
          },
          "AVERAGEA": {
            "d": "Returns the numerical average value in a dataset.",
            "a": "Numerical average value in a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating the average value."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating the average value."
              }
            ]
          },
          "BINOM_DIST": {
            "d": "Calculates the probability of drawing a certain number of successes (or a maximum number of successes) in a certain number of tries given a population of a certain size containing a certain number of successes, with replacement of draws.",
            "a": "Binomial distribution probability.",
            "p": [
              {
                "name": "num_successes",
                "detail": "The number of successes for which to calculate the probability in `num_trials` trials."
              },
              {
                "name": "num_trials",
                "detail": "The number of independent trials."
              },
              {
                "name": "prob_success",
                "detail": "The probability of success in any given trial."
              },
              {
                "name": "cumulative",
                "detail": "Whether to use the binomial cumulative distribution."
              }
            ]
          },
          "BINOM_INV": {
            "d": "Calculates the smallest value for which the cumulative binomial distribution is greater than or equal to a specified criteria.",
            "a": "Inverse cumulative binomial distribution function.",
            "p": [
              {
                "name": "num_trials",
                "detail": "The number of independent trials."
              },
              {
                "name": "prob_success",
                "detail": "The probability of success in any given trial."
              },
              {
                "name": "target_prob",
                "detail": "The desired threshold probability."
              }
            ]
          },
          "CONFIDENCE_NORM": {
            "d": "Calculates the width of half the confidence interval for a normal distribution.",
            "a": "Confidence interval for a normal distribution.",
            "p": [
              {
                "name": "alpha",
                "detail": "One minus the desired confidence level. E.g. `0.1` for `0.9`, or 90%, confidence."
              },
              {
                "name": "standard_deviation",
                "detail": "The standard deviation of the population."
              },
              {
                "name": "pop_size",
                "detail": "The size of the population."
              }
            ]
          },
          "CORREL": {
            "d": "Calculates r, the Pearson product-moment correlation coefficient of a dataset.",
            "a": "Pearson Product-Moment Correlation Coefficient.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "COVARIANCE_P": {
            "d": "Calculates the covariance of a dataset.",
            "a": "The covariance of a dataset.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "COVARIANCE_S": {
            "d": "Calculates the sample covariance of a dataset.",
            "a": "The sample covariance of a dataset.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "DEVSQ": {
            "d": "Calculates the sum of squares of deviations based on a sample.",
            "a": "The sum of squares of deviations based on a sample.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the sample."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the sample."
              }
            ]
          },
          "EXPON_DIST": {
            "d": "Returns the value of the exponential distribution function with a specified lambda at a specified value.",
            "a": "Exponential distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the exponential distribution function."
              },
              {
                "name": "lambda",
                "detail": "The lambda to specify the exponential distribution function."
              },
              {
                "name": "cumulative",
                "detail": "Whether to use the exponential cumulative distribution."
              }
            ]
          },
          "AVERAGEIF": {
            "d": "Returns the average of a range depending on criteria.",
            "a": "Average of values depending on criteria.",
            "p": [
              {
                "name": "criteria_range",
                "detail": "The range to check against `criterion`."
              },
              {
                "name": "criterion",
                "detail": "The pattern or test to apply to `criteria_range`."
              },
              {
                "name": "average_range",
                "detail": "The range to average. If not included, `criteria_range` is used for the average instead."
              }
            ]
          },
          "AVERAGEIFS": {
            "d": "Returns the average of a range depending on multiple criteria.",
            "a": "Average of values depending on multiple criteria.",
            "p": [
              {
                "name": "average_range",
                "detail": "The range to average."
              },
              {
                "name": "criteria_range1",
                "detail": "The range to check against `criterion1`."
              },
              {
                "name": "criterion1",
                "detail": "The pattern or test to apply to `criteria_range1`."
              },
              {
                "name": "criteria_range2",
                "detail": "Additional ranges to check."
              }
            ]
          },
          "PERMUT": {
            "d": "Returns the number of ways to choose some number of objects from a pool of a given size of objects, considering order.",
            "a": "Number of permutations from a number of objects.",
            "p": [
              {
                "name": "n",
                "detail": "The size of the pool of objects to choose from."
              },
              {
                "name": "k",
                "detail": "The number of objects to choose."
              }
            ]
          },
          "TRIMMEAN": {
            "d": "Calculates the mean of a dataset excluding some proportion of data from the high and low ends of the dataset.",
            "a": "Mean of a dataset excluding high/low ends.",
            "p": [
              {
                "name": "data",
                "detail": "Array or range containing the dataset to consider."
              },
              {
                "name": "exclude_proportion",
                "detail": "The proportion of the dataset to exclude, from the extremities of the set."
              }
            ]
          },
          "PERCENTILE_EXC": {
            "d": "Returns the value at a given percentile of a dataset exclusive of 0 and 1.",
            "a": "Value at a given percentile of a dataset exclusive of 0 and 1.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "percentile",
                "detail": "The percentile, exclusive of 0 and 1, whose value within 'data' will be calculated and returned."
              }
            ]
          },
          "PERCENTILE_INC": {
            "d": "Returns the value at a given percentile of a dataset.",
            "a": "Value at a given percentile of a dataset.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "percentile",
                "detail": "The percentile whose value within `data` will be calculated and returned.`"
              }
            ]
          },
          "PEARSON": {
            "d": "Calculates r, the Pearson product-moment correlation coefficient of a dataset.",
            "a": "Pearson Product-Moment Correlation Coefficient.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "NORM_S_INV": {
            "d": "Returns the value of the inverse standard normal distribution function for a specified value.",
            "a": "Inverse standard normal distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the inverse standard normal distribution function."
              }
            ]
          },
          "NORM_S_DIST": {
            "d": "Returns the value of the standard normal cumulative distribution function for a specified value.",
            "a": "Standard normal cumulative distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the standard normal cumulative distribution function."
              },
              {
                "name": "cumulative",
                "detail": "Determine the logical value of the function form. \n\nIf TRUE(), it returns the cumulative distribution function;\n\nIf it is FALSE(), it returns the probability density function."
              }
            ]
          },
          "NORM_INV": {
            "d": "Returns the value of the inverse normal distribution function for a specified value, mean, and standard deviation.",
            "a": "Inverse normal distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the inverse normal distribution function."
              },
              {
                "name": "mean",
                "detail": "The mean (mu) of the normal distribution function."
              },
              {
                "name": "standard_deviation",
                "detail": "The standard deviation (sigma) of the normal distribution function."
              }
            ]
          },
          "NORM_DIST": {
            "d": "Returns the value of the normal distribution function (or normal cumulative distribution function) for a specified value, mean, and standard deviation.",
            "a": "Normal distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the normal distribution function."
              },
              {
                "name": "mean",
                "detail": "The mean (mu) of the normal distribution function."
              },
              {
                "name": "standard_deviation",
                "detail": "The standard deviation (sigma) of the normal distribution function."
              },
              {
                "name": "cumulative",
                "detail": "Whether to use the normal cumulative distribution function rather than the distribution function."
              }
            ]
          },
          "NEGBINOM_DIST": {
            "d": "Calculates the probability of drawing a certain number of failures before a certain number of successes given a probability of success in independent trials.",
            "a": "Negative binomial distribution probability.",
            "p": [
              {
                "name": "num_failures",
                "detail": "The number of failures to model."
              },
              {
                "name": "num_successes",
                "detail": "The number of successes to model."
              },
              {
                "name": "prob_success",
                "detail": "The probability of success in any given trial."
              },
              {
                "name": "cumulative",
                "detail": "Determine the logical value of the function form. \n\nIf TRUE(), it returns the cumulative distribution function;\n\nIf it is FALSE(), it returns the probability density function."
              }
            ]
          },
          "MINA": {
            "d": "Returns the minimum numeric value in a dataset.",
            "a": "Minimum numeric value in a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating the minimum value."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating the minimum value."
              }
            ]
          },
          "MIN": {
            "d": "Returns the minimum value in a numeric dataset.",
            "a": "Minimum value in a numeric dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating the minimum value."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating the minimum value."
              }
            ]
          },
          "MEDIAN": {
            "d": "Returns the median value in a numeric dataset.",
            "a": "Median value in a numeric dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating the median value."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating the median value."
              }
            ]
          },
          "MAXA": {
            "d": "Returns the maximum numeric value in a dataset.",
            "a": "Maximum numeric value in a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating the maximum value."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating the maximum value."
              }
            ]
          },
          "MAX": {
            "d": "Returns the maximum value in a numeric dataset.",
            "a": "Maximum value in a numeric dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating the maximum value."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating the maximum value."
              }
            ]
          },
          "LOGNORM_INV": {
            "d": "Returns the value of the inverse log-normal cumulative distribution with given mean and standard deviation at a specified value.",
            "a": "Inverse log-normal cumulative distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the inverse log-normal cumulative distribution function."
              },
              {
                "name": "mean",
                "detail": "The mean (mu) of the inverse log-normal cumulative distribution function."
              },
              {
                "name": "standard_deviation",
                "detail": "The standard deviation (sigma) of the inverse log-normal cumulative distribution function."
              }
            ]
          },
          "LOGNORM_DIST": {
            "d": "Returns the value of the log-normal cumulative distribution with given mean and standard deviation at a specified value.",
            "a": "Log-normal cumulative distribution probability.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the log-normal cumulative distribution function."
              },
              {
                "name": "mean",
                "detail": "The mean (mu) of the log-normal cumulative distribution function."
              },
              {
                "name": "standard_deviation",
                "detail": "The standard deviation (sigma) of the log-normal cumulative distribution function."
              },
              {
                "name": "cumulative",
                "detail": "Determine the logical value of the function form. \n\nIf TRUE(), it returns the cumulative distribution function;\n\nIf it is FALSE(), it returns the probability density function."
              }
            ]
          },
          "Z_TEST": {
            "d": "Returns the one-tailed p-value of a Z-test with standard distribution.",
            "a": "One-tailed p-value of a z-test.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "value",
                "detail": "The test statistic to use in the Z-test."
              },
              {
                "name": "standard_deviation",
                "detail": "The standard deviation to assume for the Z-test. If this is not provided, the standard deviation of the data will be used."
              }
            ]
          },
          "PROB": {
            "d": "Given a set of values and corresponding probabilities, calculates the probability that a value chosen at random falls between two limits.",
            "a": "Probability values lie in a range.",
            "p": [
              {
                "name": "data",
                "detail": "Array or range containing the dataset to consider."
              },
              {
                "name": "probabilities",
                "detail": "Array or range containing probabilities corresponding to `data`."
              },
              {
                "name": "low_limit",
                "detail": "The lower bound on the value range for which to calculate the probability."
              },
              {
                "name": "high_limit",
                "detail": "The upper bound on the value range for which to calculate the probability."
              }
            ]
          },
          "QUARTILE_EXC": {
            "d": "Returns a value nearest to a specified quartile of a dataset exclusive of 0 and 4.",
            "a": "Value nearest to a specific quartile of a dataset exclusive of 0 and 4.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "quartile_number",
                "detail": "Which quartile to return."
              }
            ]
          },
          "QUARTILE_INC": {
            "d": "Returns a value nearest to a specified quartile of a dataset.",
            "a": "Value nearest to a specific quartile of a dataset.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "quartile_number",
                "detail": "Which quartile value to return."
              }
            ]
          },
          "POISSON_DIST": {
            "d": "Returns the value of the Poisson distribution function (or Poisson cumulative distribution function) for a specified value and mean.",
            "a": "Poisson distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the Poisson distribution function."
              },
              {
                "name": "mean",
                "detail": "The mean (mu) of the Poisson distribution function."
              },
              {
                "name": "cumulative",
                "detail": "Whether to use the Poisson cumulative distribution function rather than the distribution function."
              }
            ]
          },
          "RSQ": {
            "d": "Calculates the square of r, the Pearson product-moment correlation coefficient of a dataset.",
            "a": "Square of the correlation coefficient.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "T_DIST": {
            "d": "Calculates the left tail probability for a Student's t-distribution with a given input (x).",
            "a": "The left-tailed Student's t-distribution",
            "p": [
              {
                "name": "x",
                "detail": "The input to the t-distribution function."
              },
              {
                "name": "degrees_freedom",
                "detail": "The number of degrees of freedom."
              },
              {
                "name": "cumulative",
                "detail": "If cumulative is TRUE, T.DIST returns the cumulative distribution function; if FALSE, it returns the probability density function."
              }
            ]
          },
          "T_DIST_2T": {
            "d": "Calculates the probability for two tailed Student's t-distribution with a given input (x).",
            "a": "The two tailed Student's t-distribution",
            "p": [
              {
                "name": "x",
                "detail": "The input to the t-distribution function."
              },
              {
                "name": "degrees_freedom",
                "detail": "The number of degrees of freedom."
              }
            ]
          },
          "T_DIST_RT": {
            "d": "Calculates the right tail probability for a Student's t-distribution with a given input (x).",
            "a": "The right-tailed Student's t-distribution",
            "p": [
              {
                "name": "x",
                "detail": "The input to the t-distribution function."
              },
              {
                "name": "degrees_freedom",
                "detail": "The number of degrees of freedom."
              }
            ]
          },
          "T_INV": {
            "d": "Calculates the negative inverse of the one-tailed TDIST function.",
            "a": "T.INV",
            "p": [
              {
                "name": "probability",
                "detail": "The probability associated with the two-tailed t-distribution."
              },
              {
                "name": "degrees_freedom",
                "detail": "The number of degrees of freedom."
              }
            ]
          },
          "T_INV_2T": {
            "d": "Calculates the inverse of the two-tailed TDIST function.",
            "a": "T.INV.2T",
            "p": [
              {
                "name": "probability",
                "detail": "The probability associated with the two-tailed t-distribution."
              },
              {
                "name": "degrees_freedom",
                "detail": "The number of degrees of freedom."
              }
            ]
          },
          "T_TEST": {
            "d": "t-test. Returns the probability associated with Student's t-test. Determines whether two samples are likely to have come from the same two underlying populations that have the same mean.",
            "a": "Returns the probability associated with t-test.",
            "p": [
              {
                "name": "range1",
                "detail": "The first sample of data or group of cells to consider for the t-test."
              },
              {
                "name": "range2",
                "detail": "The second sample of data or group of cells to consider for the t-test."
              },
              {
                "name": "tails",
                "detail": "Specifies the number of distribution tails."
              },
              {
                "name": "type",
                "detail": "Specifies the type of t-test."
              }
            ]
          },
          "F_DIST": {
            "d": "Calculates the left-tailed F probability distribution (degree of diversity) for two data sets with given input x. Alternately called Fisher-Snedecor distribution or Snedecor's F distribution.",
            "a": "F probability distribution (left-tailed).",
            "p": [
              {
                "name": "x",
                "detail": "The input to the F probability distribution function. The value at which to evaluate the function."
              },
              {
                "name": "degrees_freedom1",
                "detail": "The numerator of the number of degrees of freedom."
              },
              {
                "name": "degrees_freedom2",
                "detail": "The denominator of the number of degrees of freedom."
              },
              {
                "name": "cumulative",
                "detail": "Logical value that determines the form of the function."
              }
            ]
          },
          "F_DIST_RT": {
            "d": "Calculates the right-tailed F probability distribution (degree of diversity) for two data sets with given input x. Alternately called Fisher-Snedecor distribution or Snedecor's F distribution.",
            "a": "F probability distribution.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the F probability distribution function. The value at which to evaluate the function."
              },
              {
                "name": "degrees_freedom1",
                "detail": "The numerator of the number of degrees of freedom."
              },
              {
                "name": "degrees_freedom2",
                "detail": "The denominator of the number of degrees of freedom."
              }
            ]
          },
          "VAR_P": {
            "d": "Calculates the variance based on an entire population.",
            "a": "Variance of entire population.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the population."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the population."
              }
            ]
          },
          "VAR_S": {
            "d": "Calculates the variance based on a sample.",
            "a": "Variance.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the sample."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the sample."
              }
            ]
          },
          "VARA": {
            "d": "Calculates the variance based on a sample, setting text to the value `0`.",
            "a": "Variance of sample (text as 0).",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the sample."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the sample."
              }
            ]
          },
          "VARPA": {
            "d": "Calculates the variance based on an entire population, setting text to the value `0`.",
            "a": "Variance of entire population (text as 0).",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the population."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the population."
              }
            ]
          },
          "STEYX": {
            "d": "Calculates the standard error of the predicted y-value for each x in the regression of a dataset.",
            "a": "Standard error of predicted y-values in regression.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "STANDARDIZE": {
            "d": "Calculates the normalized equivalent of a random variable given mean and standard deviation of the distribution.",
            "a": "Normalized equivalent of a random variable.",
            "p": [
              {
                "name": "value",
                "detail": "The value of the random variable to normalize."
              },
              {
                "name": "mean",
                "detail": "The mean of the distribution."
              },
              {
                "name": "standard_deviation",
                "detail": "The standard deviation of the distribution."
              }
            ]
          },
          "SMALL": {
            "d": "Returns the nth smallest element from a data set, where n is user-defined.",
            "a": "Nth smallest element in a data set.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "n",
                "detail": "The rank from smallest to largest of the element to return."
              }
            ]
          },
          "SLOPE": {
            "d": "Calculates the slope of the line resulting from linear regression of a dataset.",
            "a": "Slope of line from linear regression of data.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "SKEW": {
            "d": "Calculates the skewness of a dataset, which describes the symmetry of that dataset about the mean.",
            "a": "Skewness of a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the dataset."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the dataset."
              }
            ]
          },
          "SKEW_P": {
            "d": "Calculates the skewness of a dataset, which describes the symmetry of that dataset about the mean. This assumes the dataset is for the population.",
            "a": "Skewness of a population's dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the dataset."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the dataset."
              }
            ]
          },
          "VLOOKUP": {
            "d": "Vertical lookup. Searches down the first column of a range for a key and returns the value of a specified cell in the row found.",
            "a": "Vertical lookup.",
            "p": [
              {
                "name": "search_key",
                "detail": 'The value to search for. For example, `42`, `"Cats"`, or `I24`.'
              },
              {
                "name": "range",
                "detail": "The range to consider for the search. The first column in the range is searched for the key specified in `search_key`."
              },
              {
                "name": "index",
                "detail": "The column index of the value to be returned, where the first column in `range` is numbered 1."
              },
              {
                "name": "is_sorted",
                "detail": "Indicates whether the column to be searched (the first column of the specified range) is sorted, in which case the closest match for `search_key` will be returned."
              }
            ]
          },
          "HLOOKUP": {
            "d": "Horizontal lookup. Searches across the first row of a range for a key and returns the value of a specified cell in the column found.",
            "a": "Horizontal lookup",
            "p": [
              {
                "name": "search_key",
                "detail": 'The value to search for. For example, `42`, `"Cats"`, or `I24`.'
              },
              {
                "name": "range",
                "detail": "The range to consider for the search. The first row in the range is searched for the key specified in `search_key`."
              },
              {
                "name": "index",
                "detail": "The row index of the value to be returned, where the first row in `range` is numbered 1."
              },
              {
                "name": "is_sorted",
                "detail": "Indicates whether the row to be searched (the first row of the specified range) is sorted."
              }
            ]
          },
          "LOOKUP": {
            "d": "Looks through a sorted row or column for a key and returns the value of the cell in a result range located in the same position as the search row or column.",
            "a": "Look up a value.",
            "p": [
              {
                "name": "search_key",
                "detail": 'The value to search for in the row or column. For example, `42`, `"Cats"`, or `I24`.'
              },
              {
                "name": "search_range|search_result_array",
                "detail": "One method of using this function is to provide a single sorted row or column `search_range` to look through for the `search_key` with a second argument `result_range`. The other way is to combine these two arguments into one `search_result_array` where the first row or column is searched and a value is returned from the last row or column in the array. If `search_key` is not found, a non-exact match may be returned."
              },
              {
                "name": "result_range",
                "detail": "The range from which to return a result. The value returned corresponds to the location where `search_key` is found in `search_range`. This range must be only a single row or column and should not be used if using the `search_result_array` method."
              }
            ]
          },
          "ADDRESS": {
            "d": "Returns a cell reference as a string.",
            "a": "Cell reference as a string.",
            "p": [
              {
                "name": "row",
                "detail": "The row number of the cell reference"
              },
              {
                "name": "column",
                "detail": "The column number (not name) of the cell reference. `A` is column number `1`."
              },
              {
                "name": "absolute_relative_mode",
                "detail": "An indicator of whether the reference is row/column absolute. `1` is row and column absolute (e.g. $A$1), `2` is row absolute and column relative (e.g. A$1), `3` is row relative and column absolute (e.g. $A1), and `4` is row and column relative (e.g. A1)."
              },
              {
                "name": "use_a1_notation",
                "detail": "A boolean indicating whether to use `A1` style notation (TRUE) or `R1C1` style notation (FALSE)."
              },
              {
                "name": "sheet",
                "detail": "Text indicating the name of the sheet into which the address points."
              }
            ]
          },
          "INDIRECT": {
            "d": "Returns a cell reference specified by a string.",
            "a": "A cell reference specified by a string.",
            "p": [
              {
                "name": "cell_reference_as_string",
                "detail": "A cell reference, written as a string with surrounding quotation marks."
              },
              {
                "name": "is_A1_notation",
                "detail": "Indicates if the cell reference is in A1 notation (TRUE) or R1C1 notation (FALSE)."
              }
            ]
          },
          "ROW": {
            "d": "Returns the row number of a specified cell.",
            "a": "Row number of a specified cell.",
            "p": [
              {
                "name": "cell_reference",
                "detail": "The cell whose row number will be returned."
              }
            ]
          },
          "ROWS": {
            "d": "Returns the number of rows in a specified array or range.",
            "a": "Number of rows in a specified array or range.",
            "p": [
              {
                "name": "range",
                "detail": "The range whose row count will be returned."
              }
            ]
          },
          "COLUMN": {
            "d": "Returns the column number of a specified cell, with `A=1`.",
            "a": "Column number of a specified cell.",
            "p": [
              {
                "name": "cell_reference",
                "detail": "The cell whose column number will be returned. Column `A` corresponds to `1`."
              }
            ]
          },
          "COLUMNS": {
            "d": "Returns the number of columns in a specified array or range.",
            "a": "Number of columns in a specified array or range.",
            "p": [
              {
                "name": "range",
                "detail": "The range whose column count will be returned."
              }
            ]
          },
          "OFFSET": {
            "d": "Returns a range reference shifted a specified number of rows and columns from a starting cell reference.",
            "a": "A range reference offset relative to a cell.",
            "p": [
              {
                "name": "cell_reference",
                "detail": "The starting point from which to count the offset rows and columns."
              },
              {
                "name": "offset_rows",
                "detail": "The number of rows to offset by."
              },
              {
                "name": "offset_columns",
                "detail": "The number of columns to offset by."
              },
              {
                "name": "height",
                "detail": "The height of the range to return starting at the offset target."
              },
              {
                "name": "width",
                "detail": "The width of the range to return starting at the offset target."
              }
            ]
          },
          "MATCH": {
            "d": "Returns the relative position of an item in a range that matches a specified value.",
            "a": "Position of item in range that matches value.",
            "p": [
              {
                "name": "search_key",
                "detail": 'The value to search for. For example, `42`, `"Cats"`, or `I24`.'
              },
              {
                "name": "range",
                "detail": "The one-dimensional array to be searched."
              },
              {
                "name": "search_type",
                "detail": "The search method. `1` (default) finds the largest value less than or equal to `search_key` when `range` is sorted in ascending order. `0` finds the exact value when `range` is unsorted. `-1` finds the smallest value greater than or equal to `search_key` when `range` is sorted in descending order."
              }
            ]
          },
          "INDEX": {
            "d": "Returns the content of a cell, specified by row and column offset.",
            "a": "Content of cell specified by row and column offset.",
            "p": [
              {
                "name": "reference",
                "detail": "The array of cells to be offset into."
              },
              {
                "name": "row",
                "detail": "The number of offset rows."
              },
              {
                "name": "column",
                "detail": "The number of offset columns."
              }
            ]
          },
          "GETPIVOTDATA": {
            "d": "Extracts an aggregated value from a pivot table that corresponds to the specified row and column headings.",
            "a": "Extracts an aggregated value from a pivot table that corresponds to the specified row and column headings.",
            "p": [
              {
                "name": "value_name",
                "detail": "The name of the value in the pivot table for which you want to get data."
              },
              {
                "name": "any_pivot_table_cell",
                "detail": "Any reference to a cell in the desired pivot table (top corner recommended)."
              },
              {
                "name": "original_column",
                "detail": "The name of the column in the original data set (not the pivot table)."
              },
              {
                "name": "pivot_item",
                "detail": "The name of the row or column shown in the pivot table corresponding to *original_column* that you want to retrieve."
              }
            ]
          },
          "CHOOSE": {
            "d": "Returns an element from a list of choices based on index.",
            "a": "An element from a list of choices based on index.",
            "p": [
              {
                "name": "index",
                "detail": "Which choice (of the up to 30 provided) to return."
              },
              {
                "name": "choice1",
                "detail": "A potential value to return. Required. May be a reference to a cell or an individual value."
              },
              {
                "name": "choice2",
                "detail": "Additional values among which to choose."
              }
            ]
          },
          "HYPERLINK": {
            "d": "Creates a hyperlink inside a cell.",
            "a": "Creates a hyperlink inside a cell.",
            "p": [
              {
                "name": "url",
                "detail": "The full URL of the link location enclosed in quotation marks, or a reference to a cell containing such a URL."
              },
              {
                "name": "link_label",
                "detail": "The text to display in the cell as the link, enclosed in quotation marks, or a reference to a cell containing such a label."
              }
            ]
          },
          "TIME": {
            "d": "Converts a provided hour, minute, and second into a time.",
            "a": "Converts hour/minute/second into a time.",
            "p": [
              {
                "name": "hour",
                "detail": "The hour component of the time."
              },
              {
                "name": "minute",
                "detail": "The minute component of the time."
              },
              {
                "name": "second",
                "detail": "The second component of the time."
              }
            ]
          },
          "TIMEVALUE": {
            "d": "Returns the fraction of a 24-hour day the time represents.",
            "a": "Converts a time string into its serial number representation.",
            "p": [
              {
                "name": "time_string",
                "detail": "The string that holds the time representation."
              }
            ]
          },
          "EOMONTH": {
            "d": "Returns a date on the last day of a month that falls a specified number of months before or after another date.",
            "a": "Last day of a month before or after a date.",
            "p": [
              {
                "name": "start_date",
                "detail": "The date from which to calculate the result."
              },
              {
                "name": "months",
                "detail": "The number of months before (negative) or after (positive) 'start_date' to consider."
              }
            ]
          },
          "EDATE": {
            "d": "Returns a date a specified number of months before or after another date.",
            "a": "Date a number of months before/after another date.",
            "p": [
              {
                "name": "start_date",
                "detail": "The date from which to calculate the result."
              },
              {
                "name": "months",
                "detail": "The number of months before (negative) or after (positive) 'start_date' to calculate."
              }
            ]
          },
          "SECOND": {
            "d": "Returns the second component of a specific time, in numeric format.",
            "a": "Second component of a specific time.",
            "p": [
              {
                "name": "time",
                "detail": "The time from which to calculate the second component"
              }
            ]
          },
          "MINUTE": {
            "d": "Returns the minute component of a specific time, in numeric format.",
            "a": "Minute component of a specific time.",
            "p": [
              {
                "name": "time",
                "detail": "The time from which to calculate the minute component."
              }
            ]
          },
          "HOUR": {
            "d": "Returns the hour component of a specific time, in numeric format.",
            "a": "Hour component of a specific time.",
            "p": [
              {
                "name": "time",
                "detail": "The time from which to calculate the hour component."
              }
            ]
          },
          "NOW": {
            "d": "Returns the current date and time as a date value.",
            "a": "Current date and time as a date value.",
            "p": []
          },
          "NETWORKDAYS": {
            "d": "Returns the number of net working days between two provided days.",
            "a": "Net working days between two provided days.",
            "p": [
              {
                "name": "start_date",
                "detail": "The start date of the period from which to calculate the number of net working days."
              },
              {
                "name": "end_date",
                "detail": "The end date of the period from which to calculate the number of net working days."
              },
              {
                "name": "holidays",
                "detail": "A range or array constant containing the date serial numbers to consider holidays."
              }
            ]
          },
          "NETWORKDAYS_INTL": {
            "d": "Returns the number of net working days between two provided days excluding specified weekend days and holidays.",
            "a": "Net working days between two dates (specifying weekends).",
            "p": [
              {
                "name": "start_date",
                "detail": "The start date of the period from which to calculate the number of net working days."
              },
              {
                "name": "end_date",
                "detail": "The end date of the period from which to calculate the number of net working days."
              },
              {
                "name": "weekend",
                "detail": "A number or string representing which days of the week are considered weekends."
              },
              {
                "name": "holidays",
                "detail": "A range or array constant containing the dates to consider as holidays."
              }
            ]
          },
          "ISOWEEKNUM": {
            "d": "Returns a number representing the ISO week of the year where the provided date falls.",
            "a": "ISO week number of the year.",
            "p": [
              {
                "name": "date",
                "detail": "The date for which to determine the ISO week number. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              }
            ]
          },
          "WEEKNUM": {
            "d": "Returns a number representing the week of the year where the provided date falls.",
            "a": "Week number of the year.",
            "p": [
              {
                "name": "date",
                "detail": "The date for which to determine the week number. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "type",
                "detail": "A number representing the day that a week starts on. Sunday = 1."
              }
            ]
          },
          "WEEKDAY": {
            "d": "Returns a number representing the day of the week of the date provided.",
            "a": "Day of the week of the date provided (as number).",
            "p": [
              {
                "name": "date",
                "detail": "The date for which to determine the day of the week. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "type",
                "detail": "A number indicating which numbering system to use to represent weekdays. By default, counts starting with Sunday = 1."
              }
            ]
          },
          "DAY": {
            "d": "Returns the day of the month that a specific date falls on, in numeric format.",
            "a": "Day of the month that a specific date falls on.",
            "p": [
              {
                "name": "date",
                "detail": "The date from which to extract the day."
              }
            ]
          },
          "DAYS": {
            "d": "Returns the number of days between two dates.",
            "a": "Number of days between two dates.",
            "p": [
              {
                "name": "end_date",
                "detail": "The end of the date range."
              },
              {
                "name": "start_date",
                "detail": "The start of the date range."
              }
            ]
          },
          "DAYS360": {
            "d": "Returns the difference between two days based on the 360 day year used in some financial interest calculations.",
            "a": "Days between two dates on a 360-day year.",
            "p": [
              {
                "name": "start_date",
                "detail": "The start date to consider in the calculation. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "end_date",
                "detail": "The end date to consider in the calculation. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "method",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "DATE": {
            "d": "Converts a provided year, month, and day into a date.",
            "a": "Converts year/month/day into a date.",
            "p": [
              {
                "name": "year",
                "detail": "The year component of the date."
              },
              {
                "name": "month",
                "detail": "The month component of the date."
              },
              {
                "name": "day",
                "detail": "The day component of the date."
              }
            ]
          },
          "DATEVALUE": {
            "d": "Converts a provided date string in a known format to a date value.",
            "a": "Converts a date string to a date value.",
            "p": [
              {
                "name": "date_string",
                "detail": "The string representing the date."
              }
            ]
          },
          "DATEDIF": {
            "d": "Calculates the number of days, months, or years between two dates.",
            "a": "Date Difference.",
            "p": [
              {
                "name": "start_date",
                "detail": "The start date to consider in the calculation. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "end_date",
                "detail": "The end date to consider in the calculation. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "unit",
                "detail": 'A string abbreviation for unit of time. For example, "M" for month. Accepted values are "Y","M","D","MD","YM","YD".'
              }
            ]
          },
          "WORKDAY": {
            "d": "Calculates the date after a number of working days from a specified start date.",
            "a": "Number of working days from start date.",
            "p": [
              {
                "name": "start_date",
                "detail": "The date from which to begin counting."
              },
              {
                "name": "num_days",
                "detail": "The number of working days to advance from `start_date`. If negative, counts backwards."
              },
              {
                "name": "holidays",
                "detail": "A range or array constant containing the dates to consider holidays."
              }
            ]
          },
          "WORKDAY_INTL": {
            "d": "Calculates the date after a specified number of workdays excluding specified weekend days and holidays.",
            "a": "Date after a number of workdays (specifying weekends).",
            "p": [
              {
                "name": "start_date",
                "detail": "The date from which to begin counting."
              },
              {
                "name": "num_days",
                "detail": "The number of working days to advance from `start_date`. If negative, counts backwards."
              },
              {
                "name": "weekend",
                "detail": "A number or string representing which days of the week are considered weekends."
              },
              {
                "name": "holidays",
                "detail": "A range or array constant containing the dates to consider holidays."
              }
            ]
          },
          "YEAR": {
            "d": "Returns the year specified by a given date.",
            "a": "Year specified by a given date.",
            "p": [
              {
                "name": "date",
                "detail": "The date from which to extract the year."
              }
            ]
          },
          "YEARFRAC": {
            "d": "Returns the number of years, including fractional years, between two dates using a specified day count convention.",
            "a": "Exact number of years between two dates.",
            "p": [
              {
                "name": "start_date",
                "detail": "The start date to consider in the calculation. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "end_date",
                "detail": "The end date to consider in the calculation. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "TODAY": {
            "d": "Returns the current date as a date value.",
            "a": "Current date as a date value.",
            "p": []
          },
          "MONTH": {
            "d": "Returns the month of the year a specific date falls in, in numeric format.",
            "a": "Month of the year a specific date falls in.",
            "p": [
              {
                "name": "date",
                "detail": "The date from which to extract the month."
              }
            ]
          },
          "EFFECT": {
            "d": "Calculates the annual effective interest rate given the nominal rate and number of compounding periods per year.",
            "a": "Annual effective interest rate.",
            "p": [
              {
                "name": "nominal_rate",
                "detail": "The nominal interest rate per year."
              },
              {
                "name": "periods_per_year",
                "detail": "The number of compounding periods per year."
              }
            ]
          },
          "DOLLAR": {
            "d": "Formats a number into the currency specific to your spreadsheet locale.",
            "a": "Formats a number as currency specific to your spreadsheet locale.",
            "p": [
              {
                "name": "number",
                "detail": "The value to be formatted."
              },
              {
                "name": "number_of_places",
                "detail": "The number of decimal places to display."
              }
            ]
          },
          "DOLLARDE": {
            "d": "Converts a price quotation given as a decimal fraction into a decimal value.",
            "a": "Converts a decimal fraction to decimal value.",
            "p": [
              {
                "name": "fractional_price",
                "detail": "The price quotation given using fractional decimal conventions."
              },
              {
                "name": "unit",
                "detail": "The units of the fraction, e.g. `8` for 1/8ths or `32` for 1/32nds."
              }
            ]
          },
          "DOLLARFR": {
            "d": "Converts a price quotation given as a decimal value into a decimal fraction.",
            "a": "Converts a decimal value to decimal fraction.",
            "p": [
              {
                "name": "decimal_price",
                "detail": "The price quotation given as a decimal value."
              },
              {
                "name": "unit",
                "detail": "The units of the desired fraction, e.g. `8` for 1/8ths or `32` for 1/32nds."
              }
            ]
          },
          "DB": {
            "d": "Calculates the depreciation of an asset for a specified period using the arithmetic declining balance method.",
            "a": "Depreciation via declining balance method.",
            "p": [
              {
                "name": "cost",
                "detail": "The initial cost of the asset."
              },
              {
                "name": "salvage",
                "detail": "The value of the asset at the end of depreciation."
              },
              {
                "name": "life",
                "detail": "The number of periods over which the asset is depreciated."
              },
              {
                "name": "period",
                "detail": "The single period within `life` for which to calculate depreciation."
              },
              {
                "name": "month",
                "detail": "The number of months in the first year of depreciation."
              }
            ]
          },
          "DDB": {
            "d": "Calculates the depreciation of an asset for a specified period using the double-declining balance method.",
            "a": "Depreciation via double-declining balance method.",
            "p": [
              {
                "name": "cost",
                "detail": "The initial cost of the asset."
              },
              {
                "name": "salvage",
                "detail": "The value of the asset at the end of depreciation."
              },
              {
                "name": "life",
                "detail": "The number of periods over which the asset is depreciated."
              },
              {
                "name": "period",
                "detail": "The single period within `life` for which to calculate depreciation."
              },
              {
                "name": "factor",
                "detail": "The factor by which depreciation decreases."
              }
            ]
          },
          "RATE": {
            "d": "Calculates the interest rate of an annuity investment based on constant-amount periodic payments and the assumption of a constant interest rate.",
            "a": "Interest rate of an annuity investment.",
            "p": [
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "payment_per_period",
                "detail": "The amount per period to be paid."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "future_value",
                "detail": "The future value remaining after the final payment has been made."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              },
              {
                "name": "rate_guess",
                "detail": "An estimate for what the interest rate will be."
              }
            ]
          },
          "CUMPRINC": {
            "d": "Calculates the cumulative principal paid over a range of payment periods for an investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Cumulative principal paid over a set of periods.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "first_period",
                "detail": "The number of the payment period to begin the cumulative calculation."
              },
              {
                "name": "last_period",
                "detail": "The number of the payment period to end the cumulative calculation."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "COUPNUM": {
            "d": "Calculates the number of coupons, or interest payments, between the settlement date and the maturity date of the investment.",
            "a": "Number of coupons between settlement and maturity.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "SYD": {
            "d": "Calculates the depreciation of an asset for a specified period using the sum of years digits method.",
            "a": "Depreciation via sum of years digits method.",
            "p": [
              {
                "name": "cost",
                "detail": "The initial cost of the asset."
              },
              {
                "name": "salvage",
                "detail": "The value of the asset at the end of depreciation."
              },
              {
                "name": "life",
                "detail": "The number of periods over which the asset is depreciated."
              },
              {
                "name": "period",
                "detail": "The single period within `life` for which to calculate depreciation."
              }
            ]
          },
          "TBILLEQ": {
            "d": "Calculates the equivalent annualized rate of return of a US Treasury Bill based on discount rate.",
            "a": "Equivalent rate of return for a Treasury bill.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "discount",
                "detail": "The discount rate of the bill at time of purchase."
              }
            ]
          },
          "TBILLYIELD": {
            "d": "Calculates the yield of a US Treasury Bill based on price.",
            "a": "The yield of a us treasury bill based on price.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "price",
                "detail": "The price at which the security is bought per 100 face value."
              }
            ]
          },
          "TBILLPRICE": {
            "d": "Calculates the price of a US Treasury Bill based on discount rate.",
            "a": "Price of US treasury bill.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "discount",
                "detail": "The discount rate of the bill at time of purchase."
              }
            ]
          },
          "PV": {
            "d": "Calculates the present value of an annuity investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Present value of an annuity investment.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "payment_amount",
                "detail": "The amount per period to be paid."
              },
              {
                "name": "future_value",
                "detail": "The future value remaining after the final payment has been made."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "ACCRINT": {
            "d": "Calculates the accrued interest of a security that has periodic payments.",
            "a": "Accrued interest of security with periodic payments.",
            "p": [
              {
                "name": "issue",
                "detail": "The date the security was initially issued."
              },
              {
                "name": "first_payment",
                "detail": "The first date interest will be paid."
              },
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "rate",
                "detail": "The annualized rate of interest."
              },
              {
                "name": "redemption",
                "detail": "The redemption amount per 100 face value, or par."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              },
              {
                "name": "calc_method",
                "detail": "[Optional-defaults to TRUE()] - A logical value that specifies the method used to calculate the total accrued interest when the settlement date is later than the first interest accrual date. \n\nIf the value is TRUE, the total accrued interest from the issue date to the settlement date is returned. \n\nIf the value is FALSE, return the accrued interest from the first interest accrual date to the settlement date."
              }
            ]
          },
          "ACCRINTM": {
            "d": "Calculates the accrued interest of a security that pays interest at maturity.",
            "a": "Accrued interest of security paying at maturity.",
            "p": [
              {
                "name": "issue",
                "detail": "The date the security was initially issued."
              },
              {
                "name": "maturity",
                "detail": "The maturity date of the security."
              },
              {
                "name": "rate",
                "detail": "The annualized rate of interest."
              },
              {
                "name": "redemption",
                "detail": "The redemption amount per 100 face value, or par."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "COUPDAYBS": {
            "d": "Calculates the number of days from the first coupon, or interest payment, until settlement.",
            "a": "Number of days from first coupon to settlement.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "COUPDAYS": {
            "d": "Calculates the number of days in the coupon, or interest payment, period that contains the specified settlement date.",
            "a": "Days in coupon period containing settlement date.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "COUPDAYSNC": {
            "d": "Calculates the number of days from the settlement date until the next coupon, or interest payment.",
            "a": "Days from settlement until next coupon.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "COUPNCD": {
            "d": "Calculates next coupon, or interest payment, date after the settlement date.",
            "a": "Next coupon date after the settlement date.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "COUPPCD": {
            "d": "Calculates last coupon, or interest payment, date before the settlement date.",
            "a": "Last coupon date before settlement date.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "FV": {
            "d": "Calculates the future value of an annuity investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Future value of an annuity investment.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "payment_amount",
                "detail": "The amount per period to be paid."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "FVSCHEDULE": {
            "d": "Calculates the future value of some principal based on a specified series of potentially varying interest rates.",
            "a": "Future value of principal from series of rates.",
            "p": [
              {
                "name": "principal",
                "detail": "The amount of initial capital or value to compound against."
              },
              {
                "name": "rate_schedule",
                "detail": "A series of interest rates to compound against the `principal`."
              }
            ]
          },
          "YIELD": {
            "d": "Calculates the annual yield of a security paying periodic interest, such as a US Treasury Bond, based on price.",
            "a": "Annual yield of a security paying periodic interest.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "rate",
                "detail": "The annualized rate of interest."
              },
              {
                "name": "price",
                "detail": "The price at which the security is bought per 100 face value."
              },
              {
                "name": "redemption",
                "detail": "The redemption amount per 100 face value, or par."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "YIELDDISC": {
            "d": "Calculates the annual yield of a discount (non-interest-bearing) security, based on price.",
            "a": "Annual yield of a discount security.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "price",
                "detail": "The price at which the security is bought per 100 face value."
              },
              {
                "name": "redemption",
                "detail": "The redemption amount per 100 face value, or par."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "NOMINAL": {
            "d": "Calculates the annual nominal interest rate given the effective rate and number of compounding periods per year.",
            "a": "Annual nominal interest rate.",
            "p": [
              {
                "name": "effective_rate",
                "detail": "The effective interest rate per year."
              },
              {
                "name": "periods_per_year",
                "detail": "The number of compounding periods per year."
              }
            ]
          },
          "XIRR": {
            "d": "Calculates the internal rate of return of an investment based on a specified series of potentially irregularly spaced cash flows.",
            "a": "Internal rate of return given non-periodic cashflows.",
            "p": [
              {
                "name": "cashflow_amounts",
                "detail": "An array or range containing the income or payments associated with the investment."
              },
              {
                "name": "cashflow_dates",
                "detail": "An array or range with dates corresponding to the cash flows in `cashflow_amounts`."
              },
              {
                "name": "rate_guess",
                "detail": "An estimate for what the internal rate of return will be."
              }
            ]
          },
          "MIRR": {
            "d": "Calculates the modified internal rate of return on an investment based on a series of periodic cash flows and the difference between the interest rate paid on financing versus the return received on reinvested income.",
            "a": "Modified internal rate of return.",
            "p": [
              {
                "name": "cashflow_amounts",
                "detail": "An array or range containing the income or payments associated with the investment."
              },
              {
                "name": "financing_rate",
                "detail": "The interest rate paid on funds invested."
              },
              {
                "name": "reinvestment_return_rate",
                "detail": "The return (as a percentage) earned on reinvestment of income received from the investment."
              }
            ]
          },
          "IRR": {
            "d": "Calculates the internal rate of return on an investment based on a series of periodic cash flows.",
            "a": "Internal rate of return given periodic cashflows.",
            "p": [
              {
                "name": "cashflow_amounts",
                "detail": "An array or range containing the income or payments associated with the investment."
              },
              {
                "name": "rate_guess",
                "detail": "An estimate for what the internal rate of return will be."
              }
            ]
          },
          "NPV": {
            "d": "Calculates the net present value of an investment based on a series of periodic cash flows and a discount rate.",
            "a": "The net present value of an investment based on a series of periodic cash flows and a discount rate.",
            "p": [
              {
                "name": "discount",
                "detail": "The discount rate of the investment over one period."
              },
              {
                "name": "cashflow1",
                "detail": "The first future cash flow."
              },
              {
                "name": "cashflow2",
                "detail": "Additional future cash flows."
              }
            ]
          },
          "XNPV": {
            "d": "Calculates the net present value of an investment based on a specified series of potentially irregularly spaced cash flows and a discount rate.",
            "a": "Net present value given non-periodic cashflows.",
            "p": [
              {
                "name": "discount",
                "detail": "The discount rate of the investment over one period."
              },
              {
                "name": "cashflow_amounts",
                "detail": "A range of cells containing the income or payments associated with the investment."
              },
              {
                "name": "cashflow_dates",
                "detail": "A range of cells with dates corresponding to the cash flows in `cashflow_amounts`."
              }
            ]
          },
          "CUMIPMT": {
            "d": "Calculates the cumulative interest over a range of payment periods for an investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Cumulative interest paid over a set of periods.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "first_period",
                "detail": "The number of the payment period to begin the cumulative calculation."
              },
              {
                "name": "last_period",
                "detail": "The number of the payment period to end the cumulative calculation."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "PMT": {
            "d": "Calculates the periodic payment for an annuity investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Periodic payment for an annuity investment.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "future_value",
                "detail": "The future value remaining after the final payment has been made."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "IPMT": {
            "d": "Calculates the payment on interest for an investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Payment on interest for an investment.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "period",
                "detail": "The amortization period, in terms of number of periods."
              },
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "future_value",
                "detail": "The future value remaining after the final payment has been made."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "PPMT": {
            "d": "Calculates the payment on the principal of an investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Payment on the principal of an investment.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "period",
                "detail": "The amortization period, in terms of number of periods."
              },
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "future_value",
                "detail": "The future value remaining after the final payment has been made."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "INTRATE": {
            "d": "Calculates the effective interest rate generated when an investment is purchased at one price and sold at another with no interest or dividends generated by the investment itself.",
            "a": "Calculates effective interest rate.",
            "p": [
              {
                "name": "buy_date",
                "detail": "The date of purchase of the investment."
              },
              {
                "name": "sell_date",
                "detail": "The date of sale of the investment."
              },
              {
                "name": "buy_price",
                "detail": "The price at which the investment was purchased."
              },
              {
                "name": "sell_price",
                "detail": "The price at which the investment was sold."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "PRICE": {
            "d": "Calculates the price of a security paying periodic interest, such as a US Treasury Bond, based on expected yield.",
            "a": "Price of a security paying periodic interest.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "rate",
                "detail": "The annualized rate of interest."
              },
              {
                "name": "yield",
                "detail": "The expected annual yield of the security."
              },
              {
                "name": "redemption",
                "detail": "The redemption amount per 100 face value, or par."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "PRICEDISC": {
            "d": "Calculates the price of a discount (non-interest-bearing) security, based on expected yield.",
            "a": "Price of a discount security.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "discount",
                "detail": "The discount rate of the security at time of purchase."
              },
              {
                "name": "redemption",
                "detail": "The redemption amount per 100 face value, or par."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "PRICEMAT": {
            "d": "Calculates the price of a security paying interest at maturity, based on expected yield.",
            "a": "Price of security paying interest at maturity.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "issue",
                "detail": "The date the security was initially issued."
              },
              {
                "name": "rate",
                "detail": "The annualized rate of interest."
              },
              {
                "name": "yield",
                "detail": "The expected annual yield of the security."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "RECEIVED": {
            "d": "Calculates the amount received at maturity for an investment in fixed-income securities purchased on a given date.",
            "a": "Amount received at maturity for a security.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "investment",
                "detail": "The amount invested (irrespective of face value of each security)."
              },
              {
                "name": "discount",
                "detail": "The discount rate of the security invested in."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "DISC": {
            "d": "Calculates the discount rate of a security based on price.",
            "a": "The discount rate of a security based on price.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "price",
                "detail": "The price at which the security is bought per 100 face value."
              },
              {
                "name": "redemption",
                "detail": "The redemption amount per 100 face value, or par."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "NPER": {
            "d": "Calculates the number of payment periods for an investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Number of payment periods for an investment.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "payment_amount",
                "detail": "The amount of each payment made."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "future_value",
                "detail": "The future value remaining after the final payment has been made."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "SLN": {
            "d": "Calculates the depreciation of an asset for one period using the straight-line method.",
            "a": "Depreciation of asset using the straight-line method.",
            "p": [
              {
                "name": "cost",
                "detail": "The initial cost of the asset."
              },
              {
                "name": "salvage",
                "detail": "The value of the asset at the end of depreciation."
              },
              {
                "name": "life",
                "detail": "The number of periods over which the asset is depreciated."
              }
            ]
          },
          "DURATION": {
            "d": "Calculates the number of compounding periods required for an investment of a specified present value appreciating at a given rate to reach a target value.",
            "a": "Number of periods for an investment to reach a value.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "rate",
                "detail": "The annualized rate of interest."
              },
              {
                "name": "yield",
                "detail": "The expected annual yield of the security."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "MDURATION": {
            "d": "Calculates the modified Macaulay duration of a security paying periodic interest, such as a US Treasury Bond, based on expected yield.",
            "a": "Modified Macaulay duration.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "rate",
                "detail": "The annualized rate of interest."
              },
              {
                "name": "yield",
                "detail": "The expected annual yield of the security."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "BIN2DEC": {
            "d": "Converts a signed binary number to decimal format.",
            "a": "Converts a signed binary number to decimal format.",
            "p": [
              {
                "name": "signed_binary_number",
                "detail": "The signed 10-bit binary value to be converted to decimal, provided as a string."
              }
            ]
          },
          "BIN2HEX": {
            "d": "Converts a signed binary number to signed hexadecimal format.",
            "a": "Converts a binary number to hexadecimal.",
            "p": [
              {
                "name": "signed_binary_number",
                "detail": "The signed 10-bit binary value to be converted to signed hexademical, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "BIN2OCT": {
            "d": "Converts a signed binary number to signed octal format.",
            "a": "Converts a binary number to octal.",
            "p": [
              {
                "name": "signed_binary_number",
                "detail": "The signed 10-bit binary value to be converted to signed octal, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "DEC2BIN": {
            "d": "Converts a decimal number to signed binary format.",
            "a": "Converts a decimal number to signed binary format.",
            "p": [
              {
                "name": "decimal_number",
                "detail": "The decimal value to be converted to signed binary, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "DEC2HEX": {
            "d": "Converts a decimal number to signed hexadecimal format.",
            "a": "Converts a decimal number to hexadecimal.",
            "p": [
              {
                "name": "decimal_number",
                "detail": "The decimal value to be converted to signed hexadecimal, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "DEC2OCT": {
            "d": "Converts a decimal number to signed octal format.",
            "a": "Converts a decimal number to signed octal format.",
            "p": [
              {
                "name": "decimal_number",
                "detail": "The decimal value to be converted to signed octal, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "HEX2BIN": {
            "d": "Converts a signed hexadecimal number to signed binary format.",
            "a": "Converts a hexadecimal number to binary.",
            "p": [
              {
                "name": "signed_hexadecimal_number",
                "detail": "The signed 40-bit hexadecimal value to be converted to signed binary, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "HEX2DEC": {
            "d": "Converts a signed hexadecimal number to decimal format.",
            "a": "Converts a hexadecimal number to decimal.",
            "p": [
              {
                "name": "signed_hexadecimal_number",
                "detail": "The signed 40-bit hexadecimal value to be converted to decimal, provided as a string."
              }
            ]
          },
          "HEX2OCT": {
            "d": "Converts a signed hexadecimal number to signed octal format.",
            "a": "Converts a hexadecimal number to octal.",
            "p": [
              {
                "name": "signed_hexadecimal_number",
                "detail": "The signed 40-bit hexadecimal value to be converted to signed octal, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "OCT2BIN": {
            "d": "Converts a signed octal number to signed binary format.",
            "a": "Converts an octal number to binary.",
            "p": [
              {
                "name": "signed_octal_number",
                "detail": "The signed 30-bit octal value to be converted to signed binary, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "OCT2DEC": {
            "d": "Converts a signed octal number to decimal format.",
            "a": "Converts a signed octal number to decimal format.",
            "p": [
              {
                "name": "signed_octal_number",
                "detail": "The signed 30-bit octal value to be converted to decimal, provided as a string."
              }
            ]
          },
          "OCT2HEX": {
            "d": "Converts a signed octal number to signed hexadecimal format.",
            "a": "Converts an octal number to hexadecimal.",
            "p": [
              {
                "name": "signed_octal_number",
                "detail": "The signed 30-bit octal value to be converted to signed hexadecimal, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "COMPLEX": {
            "d": "Creates a complex number given real and imaginary coefficients.",
            "a": "Creates a complex number.",
            "p": [
              {
                "name": "real_part",
                "detail": "The real coefficient."
              },
              {
                "name": "imaginary_part",
                "detail": "The imaginary coefficient."
              },
              {
                "name": "suffix",
                "detail": "The suffix for the imaginary coefficient, can only be 'i' or 'j'. If omitted, 'i' will be used."
              }
            ]
          },
          "IMREAL": {
            "d": "Returns the real coefficient of a complex number.",
            "a": "The real coefficient of a complex number.",
            "p": [
              {
                "name": "complex_number",
                "detail": "The complex number, in the a+bi or a+bj format."
              }
            ]
          },
          "IMAGINARY": {
            "d": "Returns the imaginary coefficient of a complex number.",
            "a": "The imaginary coefficient of a complex number.",
            "p": [
              {
                "name": "complex_number",
                "detail": "The complex number, in the a+bi or a+bj format."
              }
            ]
          },
          "IMCONJUGATE": {
            "d": "Returns the complex conjugate of a number.",
            "a": "The complex conjugate of a number.",
            "p": [
              {
                "name": "number",
                "detail": "The complex number to calculate the conjugate for."
              }
            ]
          },
          "IMABS": {
            "d": "Returns absolute value (or modulus) of a complex number.",
            "a": "The absolute value of a complex number.",
            "p": [
              {
                "name": "number",
                "detail": "The complex number to calculate the absolute value of."
              }
            ]
          },
          "DELTA": {
            "d": "Compare two numeric values, returning 1 if they're equal.",
            "a": "Compare two numeric values.",
            "p": [
              {
                "name": "number1",
                "detail": "The first number to compare."
              },
              {
                "name": "number2",
                "detail": "The second number to compare."
              }
            ]
          },
          "IMSUM": {
            "d": "Returns the sum of a series of complex numbers.",
            "a": "Sum of a series of complex numbers.",
            "p": [
              {
                "name": "value1",
                "detail": "The first complex number or range to add together."
              },
              {
                "name": "value2",
                "detail": "Additional complex numbers or ranges to add to `value1`."
              }
            ]
          },
          "IMSUB": {
            "d": "Returns the difference between two complex numbers.",
            "a": "The difference between two complex numbers.",
            "p": [
              {
                "name": "first_number",
                "detail": "The complex number to subtract second_number from."
              },
              {
                "name": "second_number",
                "detail": "The complex number to subtract from first_number."
              }
            ]
          },
          "IMPRODUCT": {
            "d": "Returns the result of multiplying a series of complex numbers together.",
            "a": "Result of multiplying a series of complex numbers together.",
            "p": [
              {
                "name": "factor1",
                "detail": "The first number or range to calculate for the product."
              },
              {
                "name": "factor2",
                "detail": "Additional complex numbers or ranges to calculate for the product."
              }
            ]
          },
          "IMDIV": {
            "d": "Returns one complex number divided by another.",
            "a": "One complex number divided by another.",
            "p": [
              {
                "name": "dividend",
                "detail": "The complex number to be divided."
              },
              {
                "name": "divisor",
                "detail": "The complex number to divide by."
              }
            ]
          },
          "NOT": {
            "d": "Returns the opposite of a logical value - `NOT(TRUE)` returns `FALSE`; `NOT(FALSE)` returns `TRUE`.",
            "a": "Returns opposite of provided logical value.",
            "p": [
              {
                "name": "logical_expression",
                "detail": "An expression or reference to a cell holding an expression that represents some logical value."
              }
            ]
          },
          "TRUE": {
            "d": "Returns the logical value `TRUE`.",
            "a": "Logical value `true`.",
            "p": []
          },
          "FALSE": {
            "d": "Returns the logical value `FALSE`.",
            "a": "Logical value `false`.",
            "p": []
          },
          "AND": {
            "d": "Returns true if all of the provided arguments are logically true, and false if any of the provided arguments are logically false.",
            "a": "Logical `and` operator.",
            "p": [
              {
                "name": "logical_expression1",
                "detail": "An expression or reference to a cell containing an expression that represents some logical value, i.e. `TRUE` or `FALSE`, or an expression that can be coerced to a logical value."
              },
              {
                "name": "logical_expression2",
                "detail": "More expressions that represent logical values."
              }
            ]
          },
          "IFERROR": {
            "d": "Returns the first argument if it is not an error value, otherwise returns the second argument if present, or a blank if the second argument is absent.",
            "a": "Value if it is not an error, otherwise 2nd argument.",
            "p": [
              {
                "name": "value",
                "detail": "The value to return if `value` itself is not an error."
              },
              {
                "name": "value_if_error",
                "detail": "The value the function returns if `value` is an error."
              }
            ]
          },
          "IF": {
            "d": "Returns one value if a logical expression is `TRUE` and another if it is `FALSE`.",
            "a": "Returns value depending on logical expression.",
            "p": [
              {
                "name": "logical_expression",
                "detail": "An expression or reference to a cell containing an expression that represents some logical value, i.e. `TRUE` or `FALSE`."
              },
              {
                "name": "value_if_true",
                "detail": "The value the function returns if `logical_expression` is `TRUE`."
              },
              {
                "name": "value_if_false",
                "detail": "The value the function returns if `logical_expression` is `FALSE`."
              }
            ]
          },
          "OR": {
            "d": "Returns true if any of the provided arguments are logically true, and false if all of the provided arguments are logically false.",
            "a": "Logical `or` operator.",
            "p": [
              {
                "name": "logical_expression1",
                "detail": "An expression or reference to a cell containing an expression that represents some logical value, i.e. `TRUE` or `FALSE`, or an expression that can be coerced to a logical value."
              },
              {
                "name": "logical_expression2",
                "detail": "More expressions that evaluate to logical values."
              }
            ]
          },
          "NE": {
            "d": "Returns `TRUE` if two specified values are not equal and `FALSE` otherwise. Equivalent to the `!=` operator.",
            "a": "Not equal.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value."
              },
              {
                "name": "value2",
                "detail": "The value to test against `value1` for inequality."
              }
            ]
          },
          "EQ": {
            "d": "Returns `TRUE` if two specified values are equal and `FALSE` otherwise. Equivalent to the `==` operator.",
            "a": "Equal.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value."
              },
              {
                "name": "value2",
                "detail": "The value to test against `value1` for equality."
              }
            ]
          },
          "GT": {
            "d": "Returns `TRUE` if the first argument is strictly greater than the second, and `FALSE` otherwise. Equivalent to the `>` operator.",
            "a": "Strictly greater than.",
            "p": [
              {
                "name": "value1",
                "detail": "The value to test as being greater than `value2`."
              },
              {
                "name": "value2",
                "detail": "The second value."
              }
            ]
          },
          "GTE": {
            "d": "Returns `TRUE` if the first argument is greater than or equal to the second, and `FALSE` otherwise. Equivalent to the `>=` operator.",
            "a": "Greater than or equal to.",
            "p": [
              {
                "name": "value1",
                "detail": "The value to test as being greater than or equal to `value2`."
              },
              {
                "name": "value2",
                "detail": "The second value."
              }
            ]
          },
          "LT": {
            "d": "Returns `TRUE` if the first argument is strictly less than the second, and `FALSE` otherwise. Equivalent to the `<` operator.",
            "a": "Less than.",
            "p": [
              {
                "name": "value1",
                "detail": "The value to test as being less than `value2`."
              },
              {
                "name": "value2",
                "detail": "The second value."
              }
            ]
          },
          "LTE": {
            "d": "Returns `TRUE` if the first argument is less than or equal to the second, and `FALSE` otherwise. Equivalent to the `<=` operator.",
            "a": "Less than or equal to.",
            "p": [
              {
                "name": "value1",
                "detail": "The value to test as being less than or equal to `value2`."
              },
              {
                "name": "value2",
                "detail": "The second value."
              }
            ]
          },
          "ADD": {
            "d": "Returns the sum of two numbers. Equivalent to the `+` operator.",
            "a": "Sum of two numbers",
            "p": [
              {
                "name": "value1",
                "detail": "The first addend."
              },
              {
                "name": "value2",
                "detail": "The second addend."
              }
            ]
          },
          "MINUS": {
            "d": "Returns the difference of two numbers. Equivalent to the `-` operator.",
            "a": "Difference of two numbers",
            "p": [
              {
                "name": "value1",
                "detail": "The minuend, or number to be subtracted from."
              },
              {
                "name": "value2",
                "detail": "The subtrahend, or number to subtract from `value1`."
              }
            ]
          },
          "MULTIPLY": {
            "d": "Returns the product of two numbers. Equivalent to the `*` operator.",
            "a": "Product of two numbers",
            "p": [
              {
                "name": "factor1",
                "detail": "The first multiplicand."
              },
              {
                "name": "factor2",
                "detail": "The second multiplicand."
              }
            ]
          },
          "DIVIDE": {
            "d": "Returns one number divided by another. Equivalent to the `/` operator.",
            "a": "One number divided by another",
            "p": [
              {
                "name": "dividend",
                "detail": "The number to be divided."
              },
              {
                "name": "divisor",
                "detail": "The number to divide by."
              }
            ]
          },
          "CONCAT": {
            "d": "Returns the concatenation of two values. Equivalent to the `&` operator.",
            "a": "Concatenation of two values",
            "p": [
              {
                "name": "value1",
                "detail": "The value to which `value2` will be appended."
              },
              {
                "name": "value2",
                "detail": "The value to append to `value1`."
              }
            ]
          },
          "UNARY_PERCENT": {
            "d": "Returns a value interpreted as a percentage; that is, `UNARY_PERCENT(100)` equals `1`.",
            "a": "Value interpreted as a percentage.",
            "p": [
              {
                "name": "percentage",
                "detail": "The value to interpret as a percentage."
              }
            ]
          },
          "CONCATENATE": {
            "d": "Appends strings to one another.",
            "a": "Appends strings to one another.",
            "p": [
              {
                "name": "string1",
                "detail": "The initial string."
              },
              {
                "name": "string2",
                "detail": "More strings to append in sequence."
              }
            ]
          },
          "CODE": {
            "d": "Returns the numeric Unicode map value of the first character in the string provided.",
            "a": "Numeric unicode map value of character.",
            "p": [
              {
                "name": "string",
                "detail": "The string whose first character's Unicode map value will be returned."
              }
            ]
          },
          "CHAR": {
            "d": "Convert a number into a character according to the current Unicode table.",
            "a": "Gets character associated with number.",
            "p": [
              {
                "name": "table_number",
                "detail": "The number of the character to look up from the current Unicode table in decimal format."
              }
            ]
          },
          "ARABIC": {
            "d": "Computes the value of a Roman numeral.",
            "a": "Computes the value of a roman numeral.",
            "p": [
              {
                "name": "roman_numeral",
                "detail": "The Roman numeral to format, whose value must be between 1 and 3999, inclusive."
              }
            ]
          },
          "ROMAN": {
            "d": "Formats a number in Roman numerals.",
            "a": "Formats a number in Roman numerals.",
            "p": [
              {
                "name": "number",
                "detail": "The number to format, between 1 and 3999, inclusive."
              }
            ]
          },
          "REGEXEXTRACT": {
            "d": "Extracts matching substrings according to a regular expression.",
            "a": "Extracts matching substrings with regular expression.",
            "p": [
              {
                "name": "text",
                "detail": "The input text."
              },
              {
                "name": "regular_expression",
                "detail": "The first part of `text` that matches this expression will be returned."
              }
            ]
          },
          "REGEXMATCH": {
            "d": "Whether a piece of text matches a regular expression.",
            "a": "Whether a piece of text matches regular expression.",
            "p": [
              {
                "name": "text",
                "detail": "The text to be tested against the regular expression."
              },
              {
                "name": "regular_expression",
                "detail": "The regular expression to test the text against."
              }
            ]
          },
          "REGEXREPLACE": {
            "d": "Replaces part of a text string with a different text string using regular expressions.",
            "a": "Replaces text with regular expressions.",
            "p": [
              {
                "name": "text",
                "detail": "The text, a part of which will be replaced."
              },
              {
                "name": "regular_expression",
                "detail": "The regular expression.  All matching instances in `text` will be replaced."
              },
              {
                "name": "replacement",
                "detail": "The text which will be inserted into the original text."
              }
            ]
          },
          "T": {
            "d": "Returns string arguments as text, or the empty string if the value is not text.",
            "a": "String arguments as text.",
            "p": [
              {
                "name": "value",
                "detail": "The argument to be converted to text."
              }
            ]
          },
          "FIXED": {
            "d": "Formats a number with a fixed number of decimal places.",
            "a": "Formats number with fixed number of decimal places.",
            "p": [
              {
                "name": "number",
                "detail": "The number to format."
              },
              {
                "name": "number_of_places",
                "detail": "The number of decimal places to display in the result."
              },
              {
                "name": "suppress_separator",
                "detail": "Whether or not to suppress the thousands separator used in some locales (e.g. `1,000` becomes `1000`). Separators will be present if this value is 0 or omitted, and absent otherwise."
              }
            ]
          },
          "FIND": {
            "d": "Returns the position at which a string is first found within text where the capitalization of letters matters. Returns `#VALUE!` if the string is not found.",
            "a": "First position of string found in text, case-sensitive.",
            "p": [
              {
                "name": "search_for",
                "detail": "The string to look for within `text_to_search`."
              },
              {
                "name": "text_to_search",
                "detail": "The text to search for the first occurrence of `search_for`."
              },
              {
                "name": "starting_at",
                "detail": "The character within `text_to_search` at which to start the search."
              }
            ]
          },
          "FINDB": {
            "d": "Returns the position at which a string is first found within text counting each double-character as 2.",
            "a": "Position at which a string is first found within text (binary).",
            "p": [
              {
                "name": "search_for",
                "detail": "The string to look for within `text_to_search`."
              },
              {
                "name": "text_to_search",
                "detail": "The text to search for the first occurrence of `search_for`."
              },
              {
                "name": "starting_at",
                "detail": "The character within `text_to_search` at which to start the search."
              }
            ]
          },
          "JOIN": {
            "d": "Concatenates the elements of one or more one-dimensional arrays using a specified delimiter.",
            "a": "Concatenates elements of arrays with delimiter.",
            "p": [
              {
                "name": "delimiter",
                "detail": "The character or string to place between each concatenated value."
              },
              {
                "name": "value_or_array1",
                "detail": "The value or values to be appended using `delimiter`."
              },
              {
                "name": "value_or_array2",
                "detail": "More values to be appended using `delimiter`."
              }
            ]
          },
          "LEFT": {
            "d": "Returns a substring from the beginning of a specified string.",
            "a": "Substring from beginning of specified string.",
            "p": [
              {
                "name": "string",
                "detail": "The string from which the left portion will be returned."
              },
              {
                "name": "number_of_characters",
                "detail": "The number of characters to return from the left side of `string`."
              }
            ]
          },
          "RIGHT": {
            "d": "Returns a substring from the end of a specified string.",
            "a": "A substring from the end of a specified string.",
            "p": [
              {
                "name": "string",
                "detail": "The string from which the right portion will be returned."
              },
              {
                "name": "number_of_characters",
                "detail": "The number of characters to return from the right side of `string`."
              }
            ]
          },
          "MID": {
            "d": "Returns a segment of a string.",
            "a": "A segment of a string.",
            "p": [
              {
                "name": "string",
                "detail": "The string to extract a segment from."
              },
              {
                "name": "starting_at",
                "detail": "The index from the left of `string` from which to begin extracting. The first character in `string` has the index 1."
              },
              {
                "name": "extract_length",
                "detail": "The length of the segment to extract."
              }
            ]
          },
          "LEN": {
            "d": "Returns the length of a string.",
            "a": "Length of a string.",
            "p": [
              {
                "name": "text",
                "detail": "The string whose length will be returned."
              }
            ]
          },
          "LENB": {
            "d": "Returns the length of a string in bytes.",
            "a": "Length of a string in bytes.",
            "p": [
              {
                "name": "text",
                "detail": "The string whose length will be returned."
              }
            ]
          },
          "LOWER": {
            "d": "Converts a specified string to lowercase.",
            "a": "Converts a specified string to lowercase.",
            "p": [
              {
                "name": "text",
                "detail": "The string to convert to lowercase."
              }
            ]
          },
          "UPPER": {
            "d": "Converts a specified string to uppercase.",
            "a": "Converts a specified string to uppercase.",
            "p": [
              {
                "name": "text",
                "detail": "The string to convert to uppercase."
              }
            ]
          },
          "EXACT": {
            "d": "Tests whether two strings are identical.",
            "a": "Tests whether two strings are identical.",
            "p": [
              {
                "name": "string1",
                "detail": "The first string to compare"
              },
              {
                "name": "string2",
                "detail": "The second string to compare"
              }
            ]
          },
          "REPLACE": {
            "d": "Replaces part of a text string with a different text string.",
            "a": "Replaces part of a text string with different text.",
            "p": [
              {
                "name": "text",
                "detail": "The text, a part of which will be replaced."
              },
              {
                "name": "position",
                "detail": "The position where the replacement will begin (starting from 1)."
              },
              {
                "name": "length",
                "detail": "The number of characters in the text to be replaced."
              },
              {
                "name": "new_text",
                "detail": "The text which will be inserted into the original text."
              }
            ]
          },
          "REPT": {
            "d": "Returns specified text repeated a number of times.",
            "a": "Specified text repeated a number of times.",
            "p": [
              {
                "name": "text_to_repeat",
                "detail": "The character or string to repeat."
              },
              {
                "name": "number_of_repetitions",
                "detail": "The number of times `text_to_repeat` should appear in the value returned."
              }
            ]
          },
          "SEARCH": {
            "d": "Returns the position at which a string is first found within text and ignores capitalization of letters. Returns `#VALUE!` if the string is not found.",
            "a": "First position of string found in text, ignoring case.",
            "p": [
              {
                "name": "search_for",
                "detail": "The string to look for within `text_to_search`."
              },
              {
                "name": "text_to_search",
                "detail": "The text to search for the first occurrence of `search_for`."
              },
              {
                "name": "starting_at",
                "detail": "The character within `text_to_search` at which to start the search."
              }
            ]
          },
          "SUBSTITUTE": {
            "d": "Replaces existing text with new text in a string.",
            "a": "Replaces existing text with new text in a string.",
            "p": [
              {
                "name": "text_to_search",
                "detail": "The text within which to search and replace."
              },
              {
                "name": "search_for",
                "detail": "The string to search for within `text_to_search`."
              },
              {
                "name": "replace_with",
                "detail": "The string that will replace `search_for`."
              },
              {
                "name": "occurrence_number",
                "detail": "The instance of `search_for` within `text_to_search` to replace with `replace_with`. By default, all occurrences of `search_for` are replaced; however, if `occurrence_number` is specified, only the indicated instance of `search_for` is replaced."
              }
            ]
          },
          "CLEAN": {
            "d": "Returns the text with the non-printable ASCII characters removed.",
            "a": "Removes non-printable characters from a piece of text.",
            "p": [
              {
                "name": "text",
                "detail": "The text whose non-printable characters are to be removed."
              }
            ]
          },
          "TEXT": {
            "d": "Converts a number into text according to a specified format.",
            "a": "Formats a number into text.",
            "p": [
              {
                "name": "number",
                "detail": "The number, date, or time to format."
              },
              {
                "name": "format",
                "detail": "The pattern by which to format the number, enclosed in quotation marks."
              }
            ]
          },
          "TRIM": {
            "d": "Removes leading, trailing, and repeated spaces in text.",
            "a": "Removes space characters.",
            "p": [
              {
                "name": "text",
                "detail": "The text or reference to a cell containing text to be trimmed."
              }
            ]
          },
          "VALUE": {
            "d": "Converts a string in any of the date, time or number formats that Google Sheets understands into a number.",
            "a": "Converts a date/time/number string into a number.",
            "p": [
              {
                "name": "text",
                "detail": "The string containing the value to be converted."
              }
            ]
          },
          "PROPER": {
            "d": "Capitalizes each word in a specified string.",
            "a": "Capitalizes each word in a specified string.",
            "p": [
              {
                "name": "text_to_capitalize",
                "detail": "The text which will be returned with the first letter of each word in uppercase and all other letters in lowercase."
              }
            ]
          },
          "CONVERT": {
            "d": "Converts a numeric value to a different unit of measure.",
            "a": "Unit conversion for numbers.",
            "p": [
              {
                "name": "value",
                "detail": "The numeric value in `start_unit` to convert to `end_unit`."
              },
              {
                "name": "start_unit",
                "detail": "The starting unit, the unit currently assigned to `value`."
              },
              {
                "name": "end_unit",
                "detail": "The unit of measure into which to convert the argument, `value`."
              }
            ]
          },
          "SUMX2MY2": {
            "d": "Calculates the sum of the differences of the squares of values in two arrays.",
            "a": "Sum of the differences of squares.",
            "p": [
              {
                "name": "array_x",
                "detail": "The array or range of values whose squares will be reduced by the squares of corresponding entries in `array_y` and added together."
              },
              {
                "name": "array_y",
                "detail": "The array or range of values whose squares will be subtracted from the squares of corresponding entries in `array_x` and added together."
              }
            ]
          },
          "SUMX2PY2": {
            "d": "Calculates the sum of the sums of the squares of values in two arrays.",
            "a": "Sum of the sums of squares.",
            "p": [
              {
                "name": "array_x",
                "detail": "The array or range of values whose squares will be added to the squares of corresponding entries in `array_y` and added together."
              },
              {
                "name": "array_y",
                "detail": "The array or range of values whose squares will be added to the squares of corresponding entries in `array_x` and added together."
              }
            ]
          },
          "SUMXMY2": {
            "d": "Calculates the sum of the squares of differences of values in two arrays.",
            "a": "Sum of the squares of differences.",
            "p": [
              {
                "name": "array_x",
                "detail": "The array or range of values that will be reduced by corresponding entries in `array_y`, squared, and added together."
              },
              {
                "name": "array_y",
                "detail": "The array or range of values that will be subtracted from corresponding entries in `array_x`, the result squared, and all such results added together."
              }
            ]
          },
          "TRANSPOSE": {
            "d": "Transposes the rows and columns of an array or range of cells.",
            "a": "Transposes the rows and columns of an array.",
            "p": [
              {
                "name": "array_or_range",
                "detail": "The array or range whose rows and columns will be swapped."
              }
            ]
          },
          "TREND": {
            "d": "Given partial data about a linear trend, fits an ideal linear trend using the least squares method and/or predicts further values.",
            "a": "Fits points to linear trend derived via least-squares.",
            "p": [
              {
                "name": "known_data_y",
                "detail": "The array or range containing dependent (y) values that are already known, used to curve fit an ideal linear trend."
              },
              {
                "name": "known_data_x",
                "detail": "The values of the independent variable(s) corresponding with `known_data_y`."
              },
              {
                "name": "new_data_x",
                "detail": "The data points to return the `y` values for on the ideal curve fit."
              },
              {
                "name": "b",
                "detail": "Given a general linear form of `y = m*x+b` for a curve fit, calculates `b` if `TRUE` or forces `b` to be `0` and only calculates the `m` values if `FALSE`, i.e. forces the curve fit to pass through the origin."
              }
            ]
          },
          "FREQUENCY": {
            "d": "Calculates the frequency distribution of a one-column array into specified classes.",
            "a": "The frequency distribution of array.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the values to be counted."
              },
              {
                "name": "classes",
                "detail": "The array or range containing the set of classes."
              }
            ]
          },
          "GROWTH": {
            "d": "Given partial data about an exponential growth trend, fits an ideal exponential growth trend and/or predicts further values.",
            "a": "Fits points to exponential growth trend.",
            "p": [
              {
                "name": "known_data_y",
                "detail": "The array or range containing dependent (y) values that are already known, used to curve fit an ideal exponential growth curve."
              },
              {
                "name": "known_data_x",
                "detail": "The values of the independent variable(s) corresponding with `known_data_y`."
              },
              {
                "name": "new_data_x",
                "detail": "The data points to return the `y` values for on the ideal curve fit."
              },
              {
                "name": "b",
                "detail": "Given a general exponential form of `y = b*m^x` for a curve fit, calculates `b` if `TRUE` or forces `b` to be `1` and only calculates the `m` values if `FALSE`."
              }
            ]
          },
          "LINEST": {
            "d": "Given partial data about a linear trend, calculates various parameters about the ideal linear trend using the least-squares method.",
            "a": "Best-fit linear trend via least-squares.",
            "p": [
              {
                "name": "known_data_y",
                "detail": "The array or range containing dependent (y) values that are already known, used to curve fit an ideal linear trend."
              },
              {
                "name": "known_data_x",
                "detail": "The values of the independent variable(s) corresponding with `known_data_y`."
              },
              {
                "name": "calculate_b",
                "detail": "Given a linear form of `y = m*x+b`, calculates the y-intercept (`b`) if `TRUE`. Otherwise, forces `b` to be `0` and only calculates the `m` values if `FALSE`, i.e. forces the curve fit to pass through the origin."
              },
              {
                "name": "verbose",
                "detail": "A flag specifying whether to return additional regression statistics or only the linear coefficients and the y-intercept (default)."
              }
            ]
          },
          "LOGEST": {
            "d": "Given partial data about an exponential growth curve, calculates various parameters about the best fit ideal exponential growth curve.",
            "a": "Best-fit exponential growth curve.",
            "p": [
              {
                "name": "known_data_y",
                "detail": "The array or range containing dependent (y) values that are already known, used to curve fit an ideal exponential growth curve."
              },
              {
                "name": "known_data_x",
                "detail": "The values of the independent variable(s) corresponding with `known_data_y`."
              },
              {
                "name": "b",
                "detail": "Given a general exponential form of `y = b*m^x` for a curve fit, calculates `b` if `TRUE` or forces `b` to be `1` and only calculates the `m` values if `FALSE`."
              },
              {
                "name": "verbose",
                "detail": "A flag specifying whether to return additional regression statistics or only the calculated coefficient and exponents."
              }
            ]
          },
          "MDETERM": {
            "d": "Returns the matrix determinant of a square matrix specified as an array or range.",
            "a": "Matrix determinant of a square matrix.",
            "p": [
              {
                "name": "square_matrix",
                "detail": "An array or range with an equal number of rows and columns representing a matrix whose determinant will be calculated."
              }
            ]
          },
          "MINVERSE": {
            "d": "Returns the multiplicative inverse of a square matrix specified as an array or range.",
            "a": "Multiplicative inverse of square matrix.",
            "p": [
              {
                "name": "square_matrix",
                "detail": "An array or range with an equal number of rows and columns representing a matrix whose multiplicative inverse will be calculated."
              }
            ]
          },
          "MMULT": {
            "d": "Calculates the matrix product of two matrices specified as arrays or ranges.",
            "a": "The matrix product of two matrices.",
            "p": [
              {
                "name": "matrix1",
                "detail": "The first matrix in the matrix multiplication operation, represented as an array or range."
              },
              {
                "name": "matrix2",
                "detail": "The second matrix in the matrix multiplication operation, represented as an array or range."
              }
            ]
          },
          "SUMPRODUCT": {
            "d": "Calculates the sum of the products of corresponding entries in two equal-sized arrays or ranges.",
            "a": "Sum of products of elements in two arrays.",
            "p": [
              {
                "name": "array1",
                "detail": "The first array or range whose entries will be multiplied with corresponding entries in the second such array or range."
              },
              {
                "name": "array2",
                "detail": "The second array or range whose entries will be multiplied with corresponding entries in the first such array or range."
              }
            ]
          },
          "ISFORMULA": {
            "d": "Checks whether a value is a formula.",
            "a": "Whether a value is a formula.",
            "p": [
              {
                "name": "cell",
                "detail": "The cell to be verified as containing a formula."
              }
            ]
          },
          "CELL": {
            "d": "Returns the requested information about the specified cell.",
            "a": "Gets information about a cell.",
            "p": [
              {
                "name": "info_type",
                "detail": "The type of information requested (see article for available types)"
              },
              {
                "name": "reference",
                "detail": "The reference to the cell."
              }
            ]
          },
          "NA": {
            "d": 'Returns the "value not available" error, `#N/A`.',
            "a": "The `#N/A` error.",
            "p": []
          },
          "ERROR_TYPE": {
            "d": "Returns a number corresponding to the error value in a different cell.",
            "a": "Error value of cell (as number).",
            "p": [
              {
                "name": "reference",
                "detail": "The cell to find the error number for although you can also provide the error value directly."
              }
            ]
          },
          "ISBLANK": {
            "d": "Checks whether the referenced cell is empty.",
            "a": "Whether the referenced cell is empty.",
            "p": [
              {
                "name": "value",
                "detail": "Reference to the cell that will be checked for emptiness."
              }
            ]
          },
          "ISERR": {
            "d": "Checks whether a value is an error other than `#N/A`.",
            "a": "Whether a value is an error other than `#n/a`.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as an error type other than `#N/A`."
              }
            ]
          },
          "ISERROR": {
            "d": "Checks whether a value is an error.",
            "a": "Whether a value is an error.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as an error type."
              }
            ]
          },
          "ISLOGICAL": {
            "d": "Checks whether a value is `TRUE` or `FALSE`.",
            "a": "Whether a value is `true` or `false`.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as a logical `TRUE` or `FALSE`."
              }
            ]
          },
          "ISNA": {
            "d": "Checks whether a value is the error `#N/A`.",
            "a": "Whether a value is the error `#n/a`.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be compared with the error value `#N/A`."
              }
            ]
          },
          "ISNONTEXT": {
            "d": "Checks whether a value is non-textual.",
            "a": "Whether a value is non-textual.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be checked."
              }
            ]
          },
          "ISNUMBER": {
            "d": "Checks whether a value is a number.",
            "a": "Whether a value is a number.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as a number."
              }
            ]
          },
          "ISREF": {
            "d": "Checks whether a value is a valid cell reference.",
            "a": "Whether a value is a valid cell reference.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as a cell reference."
              }
            ]
          },
          "ISTEXT": {
            "d": "Checks whether a value is text.",
            "a": "Whether a value is text.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as text."
              }
            ]
          },
          "TYPE": {
            "d": "Returns a number associated with the type of data passed into the function.",
            "a": "Get the type of a value.",
            "p": [
              {
                "name": "value",
                "detail": "The value whose type is to be determined."
              }
            ]
          },
          "N": {
            "d": "Returns the argument provided as a number. Text is converted to 0 and errors are returned as-is.",
            "a": "Argument provided as a number.",
            "p": [
              {
                "name": "value",
                "detail": "The argument to be converted to a number."
              }
            ]
          },
          "TO_DATE": {
            "d": "Converts a provided number to a date.",
            "a": "Converts a provided number to a date.",
            "p": [
              {
                "name": "value",
                "detail": "The argument or reference to a cell to be converted to a date."
              }
            ]
          },
          "TO_PURE_NUMBER": {
            "d": "Converts a provided date/time, percentage, currency or other formatted numeric value to a pure number without formatting.",
            "a": "Converts any numeric value to a pure number.",
            "p": [
              {
                "name": "value",
                "detail": "The argument or reference to a cell to be converted to a pure number."
              }
            ]
          },
          "TO_TEXT": {
            "d": "Converts a provided numeric value to a text value.",
            "a": "Converts a provided numeric value to a text value.",
            "p": [
              {
                "name": "value",
                "detail": "The argument or reference to a cell to be converted to text."
              }
            ]
          },
          "TO_DOLLARS": {
            "d": "Converts a provided number to a dollar value.",
            "a": "Converts a provided number to a dollar value.",
            "p": [
              {
                "name": "value",
                "detail": "The argument or reference to a cell to be converted to a dollar value."
              }
            ]
          },
          "TO_PERCENT": {
            "d": "Converts a provided number to a percentage.",
            "a": "Converts a provided number to a percentage.",
            "p": [
              {
                "name": "value",
                "detail": "The argument or reference to a cell to be converted to a percentage."
              }
            ]
          },
          "DGET": {
            "d": "Returns a single value from a database table-like array or range using a SQL-like query.",
            "a": "Single value from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DMAX": {
            "d": "Returns the maximum value selected from a database table-like array or range using a SQL-like query.",
            "a": "Maximum of values from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DMIN": {
            "d": "Returns the minimum value selected from a database table-like array or range using a SQL-like query.",
            "a": "Minimum of values from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DAVERAGE": {
            "d": "Returns the average of a set of values selected from a database table-like array or range using a SQL-like query.",
            "a": "Average of a set of values from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DCOUNT": {
            "d": "Counts numeric values selected from a database table-like array or range using a SQL-like query.",
            "a": "Counts values from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DCOUNTA": {
            "d": "Counts values, including text, selected from a database table-like array or range using a SQL-like query.",
            "a": "Counts values and text from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DPRODUCT": {
            "d": "Returns the product of values selected from a database table-like array or range using a SQL-like query.",
            "a": "Product of values from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DSTDEV": {
            "d": "Returns the standard deviation of a population sample selected from a database table-like array or range using a SQL-like query.",
            "a": "Standard deviation of population sample from table.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DSTDEVP": {
            "d": "Returns the standard deviation of an entire population selected from a database table-like array or range using a SQL-like query.",
            "a": "Standard deviation of entire population from table.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DSUM": {
            "d": "Returns the sum of values selected from a database table-like array or range using a SQL-like query.",
            "a": "Sum of values from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DVAR": {
            "d": "Returns the variance of a population sample selected from a database table-like array or range using a SQL-like query.",
            "a": "Variance of population sample from table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DVARP": {
            "d": "Returns the variance of an entire population selected from a database table-like array or range using a SQL-like query.",
            "a": "Variance of a population from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "AGE_BY_IDCARD": {
            "d": "Calculate the age based on the Chinese ID number. Support 15 or 18",
            "a": "Get age based on ID number.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              },
              {
                "name": "Deadline",
                "detail": "The deadline or range of age calculation. The default is the current day."
              }
            ]
          },
          "SEX_BY_IDCARD": {
            "d": "Calculate gender based on Chinese ID number. Support 15 or 18",
            "a": "Get gender based on ID number.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              }
            ]
          },
          "BIRTHDAY_BY_IDCARD": {
            "d": "Calculate the birthday based on the Chinese ID number. Support 15 or 18",
            "a": "Get the birthday based on the ID number.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              },
              {
                "name": "Birthday format",
                "detail": "Date type, default:0:[1900/01/01], 1:[1900-01-01], 2:[1900\u5E741\u67081\u65E5]"
              }
            ]
          },
          "PROVINCE_BY_IDCARD": {
            "d": "Calculate the province of birthplace based on the Chinese ID number. Support 15 or 18",
            "a": "Get the province of birthplace based on the ID number.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              }
            ]
          },
          "CITY_BY_IDCARD": {
            "d": "Calculate the city of birthplace based on the Chinese ID number. Support 15 or 18",
            "a": "Get the city of birthplace based on the ID number.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              }
            ]
          },
          "STAR_BY_IDCARD": {
            "d": "Calculate the constellation based on the Chinese ID number. Support 15 or 18",
            "a": "Get the constellation based on the ID number.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              }
            ]
          },
          "ANIMAL_BY_IDCARD": {
            "d": "Calculate the zodiac (rat, ox, tiger, rabbit...) based on the Chinese ID number. Support 15 or 18",
            "a": "Get the zodiac according to the ID number.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              }
            ]
          },
          "ISIDCARD": {
            "d": "Verify that the format of the ID card is correct. Support 15 or 18",
            "a": "Verify the correctness of the ID card format.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              }
            ]
          },
          "DM_TEXT_CUTWORD": {
            "d": "Text segmentation. Split a series of words into a series of individual words",
            "a": "Chinese text segmentation.",
            "p": [
              {
                "name": "Text",
                "detail": "Any text that needs word segmentation."
              },
              {
                "name": "Word segmentation mode",
                "detail": "The default is 0[precision mode], 1[full mode], 2[search engine mode]."
              }
            ]
          },
          "DM_TEXT_TFIDF": {
            "d": "Use tf-idf algorithm for keyword extraction. Identify keywords from a series of text",
            "a": "tf-idf keyword recognition.",
            "p": [
              {
                "name": "Text",
                "detail": "Any text that needs word segmentation."
              },
              {
                "name": "Number of keywords",
                "detail": "The number of keywords returned by the algorithm, the default is 20"
              },
              {
                "name": "Corpus",
                "detail": "Select a corpus in a specific field, the default is 0[General], 1[Finance], 2[Medical]"
              }
            ]
          },
          "DM_TEXT_TEXTRANK": {
            "d": "Use TextRank algorithm to extract keywords. Identify keywords from a series of text",
            "a": "TextRank keyword recognition.",
            "p": [
              {
                "name": "Text",
                "detail": "Any text that needs word segmentation."
              },
              {
                "name": "Number of keywords",
                "detail": "The number of keywords returned by the algorithm, the default is 20"
              },
              {
                "name": "Corpus",
                "detail": "Select a corpus in a specific field, the default is 0[General], 1[Finance], 2[Medical]"
              }
            ]
          },
          "DATA_CN_STOCK_CLOSE": {
            "d": "According to the stock code and date, return the corresponding stock closing price of A shares.",
            "a": "Returns the closing price of stock.",
            "p": [
              {
                "name": "Stock code",
                "detail": "6-digit stock code, required."
              },
              {
                "name": "Date",
                "detail": "The trading day of the stock, the default is the latest trading day"
              },
              {
                "name": "Reversion and exclusion",
                "detail": "Select the ex right restoration type of the stock, default to 0 [former reversion], 1 [original price], 2 [post reversion]"
              }
            ]
          },
          "DATA_CN_STOCK_OPEN": {
            "d": "According to the stock code and date, return the opening price of stock.",
            "a": "Return the opening price of a shares.",
            "p": [
              {
                "name": "Stock code",
                "detail": "6-digit stock code, required."
              },
              {
                "name": "Date",
                "detail": "The trading day of the stock, the default is the latest trading day"
              },
              {
                "name": "Reversion and exclusion",
                "detail": "Select the ex right restoration type of the stock, default to 0 [former reversion], 1 [original price], 2 [post reversion]"
              }
            ]
          },
          "DATA_CN_STOCK_MAX": {
            "d": "According to the stock code and date, return the highest price of stock.",
            "a": "Return the highest price of stock.",
            "p": [
              {
                "name": "Stock code",
                "detail": "6-digit stock code, required."
              },
              {
                "name": "Date",
                "detail": "The trading day of the stock, the default is the latest trading day"
              },
              {
                "name": "Reversion and exclusion",
                "detail": "Select the ex right restoration type of the stock, default to 0 [former reversion], 1 [original price], 2 [post reversion]"
              }
            ]
          },
          "DATA_CN_STOCK_MIN": {
            "d": "According to the stock code and date, return the lowest price of stock.",
            "a": "Returns the lowest price of stock.",
            "p": [
              {
                "name": "Stock code",
                "detail": "6-digit stock code, required."
              },
              {
                "name": "Date",
                "detail": "The trading day of the stock, the default is the latest trading day"
              },
              {
                "name": "Reversion and exclusion",
                "detail": "Select the ex right restoration type of the stock, default to 0 [former reversion], 1 [original price], 2 [post reversion]"
              }
            ]
          },
          "DATA_CN_STOCK_VOLUMN": {
            "d": "According to the stock code and date, return the corresponding stock trading volume of A shares.",
            "a": "Returns the corresponding stock trading volume of A shares.",
            "p": [
              {
                "name": "Stock code",
                "detail": "6-digit stock code, required."
              },
              {
                "name": "Date",
                "detail": "The trading day of the stock, the default is the latest trading day"
              },
              {
                "name": "Reversion and exclusion",
                "detail": "Select the ex right restoration type of the stock, default to 0 [former reversion], 1 [original price], 2 [post reversion]"
              }
            ]
          },
          "DATA_CN_STOCK_AMOUNT": {
            "d": "According to the stock code and date, return the corresponding stock turnover of A shares.",
            "a": "Returns the corresponding stock turnover of A shares.",
            "p": [
              {
                "name": "Stock code",
                "detail": "6-digit stock code, required."
              },
              {
                "name": "Date",
                "detail": "The trading day of the stock, the default is the latest trading day"
              },
              {
                "name": "Reversion and exclusion",
                "detail": "Select the ex right restoration type of the stock, default to 0 [former reversion], 1 [original price], 2 [post reversion]"
              }
            ]
          },
          "ISDATE": {
            "d": "Returns whether a value is a date.",
            "a": "Whether a value is a date.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as a date."
              }
            ]
          },
          "LINESPLINES": {
            "d": "Generate sparklines embedded in the cell to describe the continuous trend of data",
            "a": "Generate sparklines line chart",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Line color",
                "detail": "The line color of the line graph can be range A1, color table index value or specific color value. Set it to 0 or false to not display it. It supports regx, rgb, rgba, etc. Default #2ec7c9"
              },
              {
                "name": "Line thickness",
                "detail": "Line thickness of the line graph, the default is 1px"
              },
              {
                "name": "Auxiliary line",
                "detail": "A horizontal line, which can be min, max, avg, median, range or custom value, default 0 none"
              },
              {
                "name": "Auxiliary line color",
                "detail": "Color setting of auxiliary line, same as line color configuration, default #000"
              },
              {
                "name": "Maximum mark",
                "detail": "Identifies the maximum value of the line graph, the same line color configuration, default 0 does not display"
              },
              {
                "name": "Minimum mark",
                "detail": "Identify the minimum value of the line graph, the same line color configuration, default 0 does not display"
              },
              {
                "name": "Mark size",
                "detail": "The maximum and minimum mark size settings, the default is 1.5"
              }
            ]
          },
          "AREASPLINES": {
            "d": "Generate sparklines embedded in the cell area chart, generally used to describe the continuous cumulative value trend of the data",
            "a": "Generate sparklines area chart",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Line color",
                "detail": "The line color of the line graph can be range A1, color table index value or specific color value. Set it to 0 or false to not display it. It supports regx, rgb, rgba, etc. Default #2ec7c9"
              },
              {
                "name": "Fill color",
                "detail": "Form an area chart, the same line color configuration, default 0 does not display"
              },
              {
                "name": "Line thickness",
                "detail": "Line thickness of the line graph, the default is 1px"
              },
              {
                "name": "Auxiliary line",
                "detail": "A horizontal line, which can be min, max, avg, median, range or custom value, default 0 none"
              },
              {
                "name": "Auxiliary line color",
                "detail": "Color setting of auxiliary line, same as line color configuration, default #000"
              }
            ]
          },
          "COLUMNSPLINES": {
            "d": "Generate sparklines embedded in the vertical histogram of cells, generally used to describe the size of discrete data",
            "a": "Generate sparklines vertical histogram",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Bar interval",
                "detail": "The distance between bars, the default is 1"
              },
              {
                "name": "Bar color",
                "detail": "The line color of the line graph can be range A1, color table index value or specific color value. Set it to 0 or false to not display it. It supports regx, rgb, rgba, etc. Default #fc5c5c"
              },
              {
                "name": "Negative bar color",
                "detail": "Negative bar color setting, representing the color of negative value, same as the bar color configuration, default #97b552"
              },
              {
                "name": "Max",
                "detail": "The maximum value of the bar chart, used to standardize the length of the bar chart, the default is to automatically calculate false, auto, null"
              },
              {
                "name": "Color palette",
                "detail": "The color palette can set the color of each bar individually, multiple settings can be set, and two formats are supported: 1 color such as #000, which means that the color of the first bar is black; 2 value range: color, such as -2:# 000 indicates that the bar with a value of -2 is black, 0:5:#000 indicates that the bar with a value of 0-5 is black, and the default is empty"
              }
            ]
          },
          "STACKCOLUMNSPLINES": {
            "d": "Generate sparklines, a cumulative vertical histogram embedded in a cell, generally used to describe the numerical size of multiple dimensions of discrete data",
            "a": "Generate sparklines cumulative vertical histogram",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Stack by column",
                "detail": "If you need to stack by row, set this item to false or 0, the default is 1"
              },
              {
                "name": "Bar interval",
                "detail": "The distance between bars, the default is 1"
              },
              {
                "name": "Max",
                "detail": "The maximum value of the cumulative bar, used to regulate the length of the bar, the default is to automatically calculate false, auto, null"
              },
              {
                "name": "Color palette",
                "detail": "The color palette can individually set the bar color of each dimension, which can be set to the range of A1:A10, etc. The default is #2ec7c9, #fc5c5c, #5ab1ef, #ffb980..."
              }
            ]
          },
          "BARSPLINES": {
            "d": "Generate sparklines embedded in the cell, generally used to describe the size of discrete data",
            "a": "Generate sparklines horizontal bar graph",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Bar interval",
                "detail": "The distance between bars, the default is 1"
              },
              {
                "name": "Bar color",
                "detail": "The line color of the line graph can be range A1, color table index value or specific color value. Set it to 0 or false to not display it. It supports regx, rgb, rgba, etc. Default #fc5c5c"
              },
              {
                "name": "Negative bar color",
                "detail": "Negative bar color setting, representing the color of negative value, same as the bar color configuration, default #97b552"
              },
              {
                "name": "Max",
                "detail": "The maximum value of the bar chart, used to standardize the length of the bar chart, the default is to automatically calculate false, auto, null"
              },
              {
                "name": "Color palette",
                "detail": "The color palette can set the color of each bar individually, multiple settings can be set, and two formats are supported: 1 color such as #000, which means that the color of the first bar is black; 2 value range: color, such as -2:# 000 indicates that the bar with a value of -2 is black, 0:5:#000 indicates that the bar with a value of 0-5 is black, and the default is empty"
              }
            ]
          },
          "STACKBARSPLINES": {
            "d": "Generate sparklines, a cumulative horizontal bar graph embedded in a cell, which is generally used to describe the numerical size of multiple dimensions of discrete data",
            "a": "Generate sparklines cumulative horizontal bar graph",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Stack by column",
                "detail": "If you need to stack by row, set this item to false or 0, the default is 1"
              },
              {
                "name": "Bar interval",
                "detail": "The distance between bars, the default is 1"
              },
              {
                "name": "Max",
                "detail": "The maximum value of the cumulative bar, used to regulate the length of the bar, the default is to automatically calculate false, auto, null"
              },
              {
                "name": "Color palette",
                "detail": "The color palette can individually set the bar color of each dimension, which can be set to the range of A1:A10, etc. The default is #2ec7c9, #fc5c5c, #5ab1ef, #ffb980..."
              }
            ]
          },
          "DISCRETESPLINES": {
            "d": "Generate sparklines embedded in the cell, generally used to describe the trend of discrete data",
            "a": "Generate sparklines discrete graph",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Segmentation threshold",
                "detail": "Discrete graph column color distinction, for example: if the value is 0, blue is greater than 0, red is less than 0, and the default is 0"
              },
              {
                "name": "Above threshold color",
                "detail": "The line color of the line graph can be range A1, color table index value or specific color value. Set it to 0 or false to not display it. It supports regx, rgb, rgba, etc. Default #2ec7c9"
              },
              {
                "name": "Below threshold color",
                "detail": "The color setting of the bar below the threshold, the same as the color above the threshold, default #fc5c5c"
              }
            ]
          },
          "TRISTATESPLINES": {
            "d": "Generate sparklines, a three-state graph embedded in the cell, which is generally used to describe the trend of three situations, such as winning, losing, or drawing.",
            "a": "Generate sparklines three-state graph",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Bar interval",
                "detail": "The distance between bars, the default is 1"
              },
              {
                "name": "Bar color",
                "detail": "The line color of the line graph can be range A1, color table index value or specific color value. Set it to 0 or false to not display it. It supports regx, rgb, rgba, etc. Default #fc5c5c"
              },
              {
                "name": "Negative bar color",
                "detail": "Negative bar color setting, representing the color of negative value, same as the bar color configuration, default #97b552"
              },
              {
                "name": "Zero value bar color",
                "detail": "Zero value bar color setting, representing 0 value color, the same color configuration of the bar, default #999"
              },
              {
                "name": "Color palette",
                "detail": "The color palette can set the color of each bar individually, multiple settings can be set, and two formats are supported: 1 color such as #000, which means that the color of the first bar is black; 2 value range: color, such as -2:# 000 indicates that the bar with a value of -2 is black, 0:5:#000 indicates that the bar with a value of 0-5 is black, and the default is empty"
              }
            ]
          },
          "PIESPLINES": {
            "d": "Generate sparklines pie chart embedded in the cell, generally used to describe the proportion of data",
            "a": "Generate sparklines pie chart",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Rotation angle",
                "detail": "The rotation angle of the pie chart, the default is 0"
              },
              {
                "name": "border",
                "detail": "Pie chart border size, default is none 0"
              },
              {
                "name": "Border color",
                "detail": "The border color of the pie chart, the default is #000"
              },
              {
                "name": "Color palette",
                "detail": "The color of the slice can be set in the palette, which can be set to the range of A1:A10, etc. The default is #2ec7c9, #fc5c5c, #5ab1ef, #ffb980..."
              }
            ]
          },
          "BOXSPLINES": {
            "d": "Generate sparklines embedded in the cell box plot, generally used to describe the statistical distribution of the data set",
            "a": "Generate sparklines box plot",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Outlier ratio",
                "detail": "The threshold range of outliers, if it is 0 or false, it will not be displayed, the default is 1.5 times"
              },
              {
                "name": "Target value",
                "detail": "The target value setting on the box plot, the default is false and does not display"
              },
              {
                "name": "Point size",
                "detail": "The radius of the target point and outlier is set, the default is 1.5"
              }
            ]
          },
          "BULLETSPLINES": {
            "d": "Generate sparklines embedded in the cell, generally used to describe the task achievement rate",
            "a": "Generating sparklines bullets",
            "p": [
              {
                "name": "Target",
                "detail": "The numerical value can be calculated effectively for the achieved target value, such as A1, 100, etc."
              },
              {
                "name": "achieved",
                "detail": "Only when the value is completed can the value be calculated effectively, such as A1, 100, etc."
              },
              {
                "name": "Contrast",
                "detail": "Comparative values, such as excess, minimum, and bottom line for awards, can be effectively calculated, such as A1, 100, etc. You can set up to 9 comparison values"
              }
            ]
          },
          "COMPOSESPLINES": {
            "d": "Support multiple types of pictures in the same cell, each parameter represents a sparklines diagram",
            "a": "Combine sparklines graphs into one cell",
            "p": [
              {
                "name": "config",
                "detail": "Sparklines chart settings, such as A1:A20, a completed pie chart, line chart settings, etc."
              }
            ]
          },
          "SORT": {
            "d": "Sorts the rows of a given array or range by the values in one or more columns.",
            "a": "Sorts rows of range by specified column.",
            "p": [
              {
                "name": "range",
                "detail": "The data to be sorted."
              },
              {
                "name": "sort_column",
                "detail": "The index of the column in `range` or a range outside of `range` containing the values by which to sort."
              },
              {
                "name": "is_ascending",
                "detail": "`TRUE` or `FALSE` indicating whether to sort `sort_column` in ascending order. `FALSE` sorts in descending order."
              },
              {
                "name": "sort_column2",
                "detail": "Additional columns."
              }
            ]
          },
          "FILTER": {
            "d": "Returns a filtered version of the source range, returning only rows or columns which meet the specified conditions.",
            "a": "Filters a range based off provided conditions.",
            "p": [
              {
                "name": "range",
                "detail": "The data to be filtered."
              },
              {
                "name": "condition1",
                "detail": "A column or row containing true or false values corresponding to the first column or row of `range`, or an array formula evaluating to true or false."
              },
              {
                "name": "condition2",
                "detail": "Additional rows or columns containing boolean values `TRUE` or `FALSE` indicating whether the corresponding row or column in `range` should pass through `FILTER`. Can also contain array formula expressions which evaluate to such rows or columns. All conditions must be of the same type (row or column). Mixing row conditions and column conditions is not permitted."
              }
            ]
          },
          "UNIQUE": {
            "d": "Returns unique rows in the provided source range, discarding duplicates. Rows are returned in the order in which they first appear in the source range.",
            "a": "Unique rows in the provided source range.",
            "p": [
              {
                "name": "range",
                "detail": "The data to filter by unique entries."
              },
              {
                "name": "by_col",
                "detail": "[Option] - Logical value, indicating how to compare; by row = FALSE() or omitted; by column = TRUE()."
              },
              {
                "name": "occurs_once",
                "detail": "[Option] - Logical value, only one occurrence in the unique value is returned = TRUE(); including all unique values = FALSE() or omitted."
              }
            ]
          },
          "RANDARRAY": {
            "d": "Returns a grid of random numbers between 0 inclusive and 1 exclusive. The grid size will match the provided rows and columns arguments. If neither rows nor columns are provided, then the grid will be size 1 x 1.",
            "a": "Returns a grid of random numbers.",
            "p": [
              {
                "name": "rows",
                "detail": "The number of rows to populate with a random number."
              },
              {
                "name": "columns",
                "detail": "The number of columns to populate with a random number."
              }
            ]
          },
          "SEQUENCE": {
            "d": "Returns a grid of sequential numbers starting at a specified start value and  increasing by a specified step size. By default, the sequence starts at and  increases by 1.",
            "a": "Returns a grid of sequential numbers.",
            "p": [
              {
                "name": "rows",
                "detail": "The number of rows in the function's resulting grid."
              },
              {
                "name": "columns",
                "detail": "The number of columns in the function's resulting grid. If omitted, the result grid will have 1 column."
              },
              {
                "name": "start",
                "detail": "The number, at which to start the sequence. If omitted, the sequence will start at 1."
              },
              {
                "name": "step",
                "detail": "The amount each value in the sequence will differ by. If omitted, each value will differ by 1."
              }
            ]
          },
          "EVALUATE": {
            "d": "Evaluate a formula or expression expressed in words and return the result",
            "a": "Evaluate according to literal formula or expression.",
            "p": [
              {
                "name": "expression",
                "detail": "Formula or expression"
              }
            ]
          },
          "REMOTE": {
            "d": "Calls a function on a remote server",
            "a": "Calls a function on a remote back end server/API.",
            "p": [
              {
                "name": "remote_expression",
                "detail": "Formula"
              }
            ]
          }
        },
        toolbar: {
          undo: "Undo",
          redo: "Redo",
          paintFormat: "Paint format",
          currencyFormat: "Format as currency",
          percentageFormat: "Format as percent",
          numberDecrease: "Decrease decimal places",
          numberIncrease: "Increase decimal places",
          moreFormats: "More formats",
          font: "Font",
          fontSize: "Font size",
          bold: "Bold (Ctrl+B)",
          italic: "Italic (Ctrl+I)",
          strikethrough: "Strikethrough (Alt+Shift+5)",
          underline: "Underline",
          textColor: "Text color",
          chooseColor: "choose color",
          resetColor: "Reset",
          customColor: "CUSTOM",
          alternatingColors: "Alternating colors",
          confirmColor: "OK",
          cancelColor: "Cancel",
          collapse: "Collapse",
          fillColor: "Fill color",
          border: "Border",
          borderStyle: "Border style",
          mergeCell: "Merge cells",
          chooseMergeType: "Choose merge type",
          horizontalAlign: "Horizontal align",
          verticalAlign: "Vertical align",
          alignment: "Alignment",
          textWrap: "Text wrap",
          textWrapMode: "Text wrap mode",
          textRotate: "Text rotate",
          textRotateMode: "Text rotate mode",
          freezeTopRow: "Freeze first row",
          sortAndFilter: "Sort and filter",
          findAndReplace: "Find and replace",
          sum: "SUM",
          autoSum: "Auto SUM",
          moreFunction: "More functions",
          conditionalFormat: "Conditional format",
          postil: "Comment",
          pivotTable: "Pivot Table",
          chart: "Chart",
          screenshot: "Screenshot",
          splitColumn: "Split text",
          insertImage: "Insert image",
          insertLink: "Insert link",
          dataVerification: "Data verification",
          protection: "Protect the sheet",
          clearText: "Clear color",
          noColorSelectedText: "No color is selected",
          toolMore: "More",
          toolLess: "Less",
          toolClose: "Close",
          toolMoreTip: "More features",
          moreOptions: "More options",
          cellFormat: "Cell format config",
          print: "Print"
        },
        alternatingColors: {
          applyRange: "Apply to range",
          selectRange: "Select a data range",
          header: "Header",
          footer: "Footer",
          errorInfo: "Cannot perform this operation on multiple selection areas, please select a single area and try again",
          textTitle: "Format style",
          custom: "CUSTOM",
          close: "close",
          selectionTextColor: "Click to select text color",
          selectionCellColor: "Click to select cell color",
          removeColor: "Remove alternating colors",
          colorShow: "color",
          currentColor: "Current",
          tipSelectRange: "Please select the range of alternating colors",
          errorNoRange: "No range is selected",
          errorExistColors: "Alternating colors already exist and cannot be edited"
        },
        button: {
          confirm: "OK",
          cancel: "Cancel",
          close: "Close",
          update: "Update",
          delete: "Delete",
          insert: "Insert",
          prevPage: "Previous",
          nextPage: "Next",
          total: "total:"
        },
        paint: {
          start: "Paint format start",
          end: "ESC",
          tipSelectRange: "Please select the range to be copied",
          tipNotMulti: "Cannot perform this operation on multiple selection ranges"
        },
        format: {
          moreCurrency: "More currency formats",
          moreDateTime: "More date and time formats",
          moreNumber: "More number formats",
          titleCurrency: "Currency formats",
          decimalPlaces: "Decimal places",
          titleDateTime: "Date and time formats",
          titleNumber: "Number formats"
        },
        info: {
          detailUpdate: "New opened",
          detailSave: "Local cache restored",
          row: "",
          column: "",
          loading: "Loading...",
          copy: "Copy",
          return: "Exit",
          rename: "Rename",
          tips: "WorkBook rename",
          noName: "Untitled spreadsheet",
          wait: "waiting for update",
          add: "Add",
          addLast: "more rows at bottom",
          backTop: "Back to the top",
          pageInfo: "Total ${total}\uFF0C${totalPage} page\uFF0Ccurrent ${currentPage}",
          nextPage: "Next",
          tipInputNumber: "Please enter the number",
          tipInputNumberLimit: "The increase range is limited to 1-100",
          tipRowHeightLimit: "Row height must be between 0 ~ 545",
          tipColumnWidthLimit: "The column width must be between 0 ~ 2038",
          pageInfoFull: "Total ${total}\uFF0C${totalPage} page\uFF0CAll data displayed"
        },
        currencyDetail: {
          RMB: "RMB",
          USdollar: "US dollar",
          EUR: "EUR",
          GBP: "GBP",
          HK: "HK",
          JPY: "JPY",
          AlbanianLek: "Albanian Lek",
          AlgerianDinar: "Algerian Dinar",
          Afghani: "Afghani",
          ArgentinePeso: "Argentine Peso",
          UnitedArabEmiratesDirham: "United Arab Emirates Dirham",
          ArubanFlorin: "Aruban Florin",
          OmaniRial: "Omani Rial",
          Azerbaijanimanat: "Azerbaijani manat",
          EgyptianPound: "Egyptian Pound",
          EthiopianBirr: "Ethiopian Birr",
          AngolaKwanza: "Angola Kwanza",
          AustralianDollar: "Australian Dollar",
          Patacas: "Patacas",
          BarbadosDollar: "Barbados Dollar",
          PapuaNewGuineaKina: "Papua New Guinea Kina",
          BahamianDollar: "Bahamian Dollar",
          PakistanRupee: "Pakistan Rupee",
          ParaguayanGuarani: "Paraguayan Guarani",
          BahrainiDinar: "Bahraini Dinar",
          PanamanianBalboa: "Panamanian Balboa",
          Brazilianreal: "Brazilian real",
          Belarusianruble: "Belarusian ruble",
          BermudianDollar: "Bermudian Dollar",
          BulgarianLev: "Bulgarian Lev",
          IcelandKrona: "Iceland Krona",
          BosniaHerzegovinaConvertibleMark: "Bosnia-Herzegovina Convertible Mark",
          PolishZloty: "Polish Zloty",
          Boliviano: "Boliviano",
          BelizeDollar: "Belize Dollar",
          BotswanaPula: "Botswana Pula",
          NotDannuzhamu: "Not Dannuzhamu",
          BurundiFranc: "Burundi Franc",
          NorthKoreanWon: "North Korean Won",
          DanishKrone: "Danish Krone",
          EastCaribbeanDollar: "East Caribbean Dollar",
          DominicaPeso: "Dominica Peso",
          RussianRuble: "Russian Ruble",
          EritreanNakfa: "Eritrean Nakfa",
          CFAfranc: "CFA franc",
          PhilippinePeso: "Philippine Peso",
          FijiDollar: "Fiji Dollar",
          CapeVerdeEscudo: "Cape Verde Escudo",
          FalklandIslandsPound: "Falkland Islands Pound",
          GambianDalasi: "Gambian Dalasi",
          Congolesefranc: "Congolese franc",
          ColombianPeso: "Colombian Peso",
          CostaRicanColon: "Costa Rican Colon",
          CubanPeso: "Cuban Peso",
          Cubanconvertiblepeso: "Cuban convertible peso",
          GuyanaDollar: "Guyana Dollar",
          KazakhstanTenge: "Kazakhstan Tenge",
          Haitiangourde: "Haitian gourde",
          won: "won",
          NetherlandsAntillesGuilder: "Netherlands Antilles Guilder",
          Honduraslempiras: "Honduras lempiras",
          DjiboutiFranc: "Djibouti Franc",
          KyrgyzstanSom: "Kyrgyzstan Som",
          GuineaFranc: "Guinea Franc",
          CanadianDollar: "Canadian Dollar",
          GhanaianCedi: "Ghanaian Cedi",
          Cambodianriel: "Cambodian riel",
          CzechKoruna: "Czech Koruna",
          ZimbabweDollar: "Zimbabwe Dollar",
          QatariRiyal: "Qatari Riyal",
          CaymanIslandsDollar: "Cayman Islands Dollar",
          Comorianfranc: "Comorian franc",
          KuwaitiDinar: "Kuwaiti Dinar",
          CroatianKuna: "Croatian Kuna",
          KenyanShilling: "Kenyan Shilling",
          LesothoLoti: "Lesotho Loti",
          LaoKip: "Lao Kip",
          LebanesePound: "Lebanese Pound",
          Lithuanianlitas: "Lithuanian litas",
          LibyanDinar: "Libyan Dinar",
          LiberianDollar: "Liberian Dollar",
          RwandaFranc: "Rwanda Franc",
          RomanianLeu: "Romanian Leu",
          MalagasyAriary: "Malagasy Ariary",
          MaldivianRufiyaa: "Maldivian Rufiyaa",
          MalawiKwacha: "Malawi Kwacha",
          MalaysianRinggit: "Malaysian Ringgit",
          MacedoniawearingDinar: "Macedonia wearing Dinar",
          MauritiusRupee: "Mauritius Rupee",
          MauritanianOuguiya: "Mauritanian Ouguiya",
          MongolianTugrik: "Mongolian Tugrik",
          BangladeshiTaka: "Bangladeshi Taka",
          PeruvianNuevoSol: "Peruvian Nuevo Sol",
          MyanmarKyat: "Myanmar Kyat",
          MoldovanLeu: "Moldovan Leu",
          MoroccanDirham: "Moroccan Dirham",
          MozambiqueMetical: "Mozambique Metical",
          MexicanPeso: "Mexican Peso",
          NamibianDollar: "Namibian Dollar",
          SouthAfricanRand: "South African Rand",
          SouthSudanesePound: "South Sudanese Pound",
          NicaraguaCordoba: "Nicaragua Cordoba",
          NepaleseRupee: "Nepalese Rupee",
          NigerianNaira: "Nigerian Naira",
          NorwegianKrone: "Norwegian Krone",
          GeorgianLari: "Georgian Lari",
          RMBOffshore: "RMB (Offshore)",
          SwedishKrona: "Swedish Krona",
          SwissFranc: "Swiss Franc",
          SerbianDinar: "Serbian Dinar",
          SierraLeone: "Sierra Leone",
          SeychellesRupee: "Seychelles Rupee",
          SaudiRiyal: "Saudi Riyal",
          SaoTomeDobra: "Sao Tome Dobra",
          SaintHelenapound: "Saint Helena pound",
          SriLankaRupee: "Sri Lanka Rupee",
          SwazilandLilangeni: "Swaziland Lilangeni",
          SudanesePound: "Sudanese Pound",
          Surinamesedollar: "Surinamese dollar",
          SolomonIslandsDollar: "Solomon Islands Dollar",
          SomaliShilling: "Somali Shilling",
          TajikistanSomoni: "Tajikistan Somoni",
          PacificFranc: "Pacific Franc",
          ThaiBaht: "Thai Baht",
          TanzanianShilling: "Tanzanian Shilling",
          TonganPaanga: "Tongan Pa'anga",
          TrinidadandTobagoDollar: "Trinidad and Tobago Dollar",
          TunisianDinar: "Tunisian Dinar",
          TurkishLira: "Turkish Lira",
          VanuatuVatu: "Vanuatu Vatu",
          GuatemalanQuetzal: "Guatemalan Quetzal",
          CommissionBolivar: "Commission Bolivar",
          BruneiDollar: "Brunei Dollar",
          UgandanShilling: "Ugandan Shilling",
          UkrainianHryvnia: "Ukrainian Hryvnia",
          UruguayanPeso: "Uruguayan Peso",
          Uzbekistansom: "Uzbekistan som",
          WesternSamoaTala: "Western Samoa Tala",
          SingaporeDollar: "Singapore Dollar",
          NT: "NT",
          NewZealandDollar: "New Zealand Dollar",
          HungarianForint: "Hungarian Forint",
          SyrianPound: "Syrian Pound",
          JamaicanDollar: "Jamaican Dollar",
          ArmenianDram: "Armenian Dram",
          YemeniRial: "Yemeni Rial",
          IraqiDinar: "Iraqi Dinar",
          IranianRial: "Iranian Rial",
          NewIsraeliShekel: "New Israeli Shekel",
          IndianRupee: "Indian Rupee",
          IndonesianRupiah: "Indonesian Rupiah",
          JordanianDinar: "Jordanian Dinar",
          VND: "VND",
          ZambianKwacha: "Zambian Kwacha",
          GibraltarPound: "Gibraltar Pound",
          ChileanPeso: "Chilean Peso",
          CFAFrancBEAC: "CFA Franc BEAC"
        },
        defaultFmt: [
          {"text": "Automatic", "value": "General", "example": ""},
          {"text": "Plain text", "value": "@", "example": ""},
          {"text": "", "value": "split", "example": ""},
          {"text": "Number", "value": "##0.00", "example": "1000.12"},
          {"text": "Percent", "value": "#0.00%", "example": "12.21%"},
          {"text": "Scientific", "value": "0.00E+00", "example": "1.01E+5"},
          {"text": "", "value": "split", "example": ""},
          {"text": "Accounting", "value": "\xA5(0.00)", "example": "\xA5(1200.09)"},
          {"text": "Currency", "value": "\xA50.00", "example": "\xA51200.09"},
          {"text": "", "value": "split", "example": ""},
          {"text": "Date", "value": "yyyy-MM-dd", "example": "2017-11-29"},
          {"text": "Time", "value": "hh:mm AM/PM", "example": "3:00 PM"},
          {"text": "Time 24H", "value": "hh:mm", "example": "15:00"},
          {"text": "Date time", "value": "yyyy-MM-dd hh:mm AM/PM", "example": "2017-11-29 3:00 PM"},
          {"text": "Date time 24 H", "value": "yyyy-MM-dd hh:mm", "example": "2017-11-29 15:00"},
          {"text": "", "value": "split", "example": ""},
          {"text": "Custom formats", "value": "fmtOtherSelf", "example": "more"}
        ],
        dateFmtList: [
          {
            "name": "1930-08-05",
            "value": "yyyy-MM-dd"
          },
          {
            "name": "1930/8/5",
            "value": "yyyy/MM/dd"
          },
          {
            "name": "08-05",
            "value": "MM-dd"
          },
          {
            "name": "8-5",
            "value": "M-d"
          },
          {
            "name": "13:30:30",
            "value": "h:mm:ss"
          },
          {
            "name": "13:30",
            "value": "h:mm"
          },
          {
            "name": "PM 01:30",
            "value": "AM/PM hh:mm"
          },
          {
            "name": "PM 1:30",
            "value": "AM/PM h:mm"
          },
          {
            "name": "PM 1:30:30",
            "value": "AM/PM h:mm:ss"
          },
          {
            "name": "08-05 PM 01:30",
            "value": "MM-dd AM/PM hh:mm"
          }
        ],
        fontFamily: {
          MicrosoftYaHei: "YaHei"
        },
        fontarray: ["Times New Roman", "Arial", "Tahoma", "Verdana"],
        fontjson: {"times new roman": 0, "arial": 1, "tahoma": 2, "verdana": 3},
        border: {
          borderTop: "borderTop",
          borderBottom: "borderBottom",
          borderLeft: "borderLeft",
          borderRight: "borderRight",
          borderNone: "borderNone",
          borderAll: "borderAll",
          borderOutside: "borderOutside",
          borderInside: "borderInside",
          borderHorizontal: "borderHorizontal",
          borderVertical: "borderVertical",
          borderColor: "borderColor",
          borderSize: "borderSize"
        },
        merge: {
          mergeAll: "Merge all",
          mergeV: "Vertically",
          mergeH: "Horizontally",
          mergeCancel: "Unmerge",
          overlappingError: "Cannot merge overlapping areas",
          partiallyError: "Cannot perform this operation on partially merged cells"
        },
        align: {
          left: "left",
          center: "center",
          right: "right",
          top: "Top",
          middle: "Middle",
          bottom: "Bottom"
        },
        textWrap: {
          "overflow": "Overflow",
          "wrap": "Wrap",
          "clip": "Clip"
        },
        rotation: {
          "none": "None",
          "angleup": "Tilt Up",
          "angledown": "Tilt Down",
          "vertical": "Stack Vertically",
          "rotationUp": "Rotate Up",
          "rotationDown": "Rotate Down"
        },
        freezen: {
          default: "Freeze",
          freezenRow: "First Row",
          freezenColumn: "First Column",
          freezenRC: "Both",
          freezenRowRange: "Freezen row range",
          freezenColumnRange: "Freezen column range",
          freezenRCRange: "Freezen both range",
          freezenCancel: "Cancel",
          noSeletionError: "No Range to be selected",
          rangeRCOverErrorTitle: "Freeze reminder",
          rangeRCOverError: "The frozen pane is beyond the visible range, which will lead to abnormal operation. Please reset the frozen area."
        },
        sort: {
          "asc": "Ascending ",
          "desc": "Descending ",
          "custom": "Custom sort",
          "hasTitle": "Data has a header row",
          "sortBy": "Sort by",
          "addOthers": "Add another sort column",
          "close": "close",
          "confirm": "sort",
          "columnOperation": "Column",
          "secondaryTitle": "then by",
          "sortTitle": "Sort range",
          "sortRangeTitle": "Sort range from",
          "sortRangeTitleTo": "to",
          "noRangeError": "Cannot perform this operation on multiple selection areas, please select a single range and try again",
          "mergeError": "There are merged cells in the selection, this operation cannot be performed!",
          "columnSortMergeError": "Column sorting will extend to the entire table selection. There are merged cells, this operation cannot be performed. Please use the sort feature in the toolbar."
        },
        filter: {
          filter: "create filter",
          sortByAsc: "Sort A-Z",
          sortByDesc: "Sort Z-A",
          filterByColor: "Filter by color",
          filterByCondition: "Filter by condition",
          filterByValues: "Filter by values",
          filiterInputNone: "None",
          filiterInputTip: "Enter filter value",
          filiterRangeStart: "",
          filiterRangeStartTip: "Value for formula",
          filiterRangeEnd: "and",
          filiterRangeEndTip: "Value for formula",
          filterValueByAllBtn: "Check all",
          filterValueByClearBtn: "Clear",
          filterValueByInverseBtn: "Inverse",
          filterValueByTip: "filter By Values",
          filterConform: "Confirm",
          filterCancel: "Cancel",
          clearFilter: "Clear filter",
          conditionNone: "None",
          conditionCellIsNull: "Is empty",
          conditionCellNotNull: "Is not empty",
          conditionCellTextContain: "Text contains",
          conditionCellTextNotContain: "Text does not contain",
          conditionCellTextStart: "Text starts with",
          conditionCellTextEnd: "Text ends with",
          conditionCellTextEqual: "Text is exactly",
          conditionCellDateEqual: "Date is",
          conditionCellDateBefore: "Date is before",
          conditionCellDateAfter: "Date is after",
          conditionCellGreater: "Greater than",
          conditionCellGreaterEqual: "Greater than or equal to",
          conditionCellLess: "Less than",
          conditionCellLessEqual: "Less than or equal to",
          conditionCellEqual: "Is equal to",
          conditionCellNotEqual: "Is not equal to",
          conditionCellBetween: "Is between",
          conditionCellNotBetween: "Is not between",
          filiterMoreDataTip: "Big amount of data! please wait",
          filiterMonthText: "Month",
          filiterYearText: "Year",
          filiterByColorTip: "Filter by cell color",
          filiterByTextColorTip: "Filter by font color",
          filterContainerOneColorTip: "This column contains only one color",
          filterDateFormatTip: "Date format",
          valueBlank: "(Null)",
          mergeError: "There are merged cells in the filter selection, this operation cannot be performed!"
        },
        rightclick: {
          copy: "Copy",
          copyAs: "Copy as",
          paste: "Paste",
          insert: "Insert",
          delete: "Delete",
          deleteCell: "Delete cell",
          deleteSelected: "Delete selected ",
          hide: "Hide",
          hideSelected: "Hide selected ",
          showHide: "Show hidden ",
          to: "Towards",
          left: "Left",
          right: "Right",
          top: "Top",
          bottom: "Bottom",
          moveLeft: "Move left",
          moveUp: "Move up",
          add: "Add",
          row: "Row",
          column: "Column",
          width: "Width",
          height: "Height",
          number: "Number",
          confirm: "Confirm",
          orderAZ: "A-Z order",
          orderZA: "Z-A order",
          clearContent: "Clear content",
          matrix: "Matrix operation",
          sortSelection: "Sort",
          filterSelection: "Filter",
          chartGeneration: "Create chart",
          firstLineTitle: "first line title",
          untitled: "untitled",
          array1: "One-dimensional array",
          array2: "Two-dimensional array",
          array3: "Multidimensional Arrays",
          diagonal: "Diagonal",
          antiDiagonal: "Anti-diagonal",
          diagonalOffset: "Diagonal offset",
          offset: "Offset",
          boolean: "Boolean",
          flip: "Flip",
          upAndDown: "Up and down",
          leftAndRight: "Left and right",
          clockwise: "Clockwise",
          counterclockwise: "Counterclockwise",
          transpose: "Transpose",
          matrixCalculation: "Matrix calculation",
          plus: "Plus",
          minus: "Minus",
          multiply: "Multiply",
          divided: "Divided",
          power: "Power",
          root: "Root",
          log: "Log",
          delete0: "Delete 0 values at both ends",
          removeDuplicate: "Remove duplicate values",
          byRow: "By row",
          byCol: "By column",
          generateNewMatrix: "Generate new matrix"
        },
        comment: {
          "insert": "Insert",
          "edit": "Edit",
          "delete": "Delete",
          "showOne": "Show/Hide",
          "showAll": "Show/Hide All"
        },
        screenshot: {
          screenshotTipNoSelection: "Please select the scope of the screenshot",
          screenshotTipTitle: "Warning\uFF01",
          screenshotTipHasMerge: "This operation cannot be performed on merged cells",
          screenshotTipHasMulti: "This operation cannot be performed on multiple selection regions",
          screenshotTipSuccess: "Successful",
          screenshotImageName: "Screenshot",
          downLoadClose: "Close",
          downLoadCopy: "Copy to clipboard",
          downLoadBtn: "Download",
          browserNotTip: "not supported by IE browser!",
          rightclickTip: 'Please right-click "copy" on the picture',
          successTip: 'Successfully (if pasting fails, please right-click on the image to "copy image")'
        },
        splitText: {
          splitDelimiters: "Delimiters",
          splitOther: "Other",
          splitContinueSymbol: "Consecutive separators are treated as a single",
          splitDataPreview: "Preview",
          splitTextTitle: "Split text",
          splitConfirmToExe: "There is already data here, do you want to replace it?",
          tipNoMulti: "Cannot perform this operation on multiple selection areas, please select a single area and try again",
          tipNoMultiColumn: "Only one column of data can be converted at a time. The selected area can have multiple rows but not multiple columns. Please try again after selecting a single column range"
        },
        imageText: {
          imageSetting: "Image setting",
          close: "Close",
          conventional: "Conventional",
          moveCell1: "Move and resize cells",
          moveCell2: "Move and do not resize the cell",
          moveCell3: "Do not move and resize the cell",
          fixedPos: "Fixed position",
          border: "Border",
          width: "Width",
          radius: "Radius",
          style: "Style",
          solid: "Solid",
          dashed: "Dashed",
          dotted: "Dotted",
          double: "Double",
          color: "Color"
        },
        punctuation: {
          "tab": "Tab",
          "semicolon": "semicolon",
          "comma": "comma",
          "space": "space"
        },
        findAndReplace: {
          find: "Find",
          replace: "Replace",
          goto: "Go to",
          location: "Location",
          formula: "Formula",
          date: "Date",
          number: "Number",
          string: "String",
          error: "Error",
          condition: "Condition",
          rowSpan: "Row span",
          columnSpan: "Column span",
          locationExample: "Location",
          lessTwoRowTip: "Please select at least two rows",
          lessTwoColumnTip: "Please select at least two columns",
          findTextbox: "Find Content",
          replaceTextbox: "Replace Content",
          regexTextbox: "Regular Expression",
          wholeTextbox: "Whole word",
          distinguishTextbox: "Case sensitive",
          allReplaceBtn: "Replace All",
          replaceBtn: "Replace",
          allFindBtn: "Find All",
          findBtn: "Find next",
          noFindTip: "The content was not found",
          modeTip: "This operation is not available in this mode",
          searchTargetSheet: "Sheet",
          searchTargetCell: "Cell",
          searchTargetValue: "Value",
          searchInputTip: "Please enter the search content",
          noReplceTip: "There is nothing to replace",
          noMatchTip: "No match found",
          successTip: "${xlength} items found",
          locationConstant: "Constant",
          locationFormula: "Formula",
          locationDate: "Date",
          locationDigital: "Number",
          locationString: "String",
          locationBool: "Logical",
          locationError: "Error",
          locationNull: "Null",
          locationCondition: "Conditional format",
          locationRowSpan: "Row span",
          locationColumnSpan: "Column span",
          locationTiplessTwoRow: "Please select at least two rows",
          locationTiplessTwoColumn: "Please select at least two columns",
          locationTipNotFindCell: "Cell not found"
        },
        sheetconfig: {
          delete: "Delete",
          copy: "Copy",
          rename: "Rename",
          changeColor: "Change color",
          hide: "Hide",
          unhide: "Unhide",
          moveLeft: "Move left",
          moveRight: "Move right",
          resetColor: "Reset color",
          cancelText: "Cancel",
          chooseText: "Confirm color",
          tipNameRepeat: "The name of the tab page cannot be repeated! Please revise",
          noMoreSheet: "The workbook contains at least one visual worksheet. To delete the selected worksheet, please insert a new worksheet or show a hidden worksheet.",
          confirmDelete: "Are you sure to delete",
          redoDelete: "Can be undo by Ctrl+Z",
          noHide: "Can't hide, at least keep one sheet tag",
          chartEditNoOpt: "This operation is not allowed in chart editing mode!",
          sheetNameSpecCharError: `The name cannot contain:[ ] :  ? * / ' "`,
          sheetNamecannotIsEmptyError: "Sheet name cannot be empty"
        },
        conditionformat: {
          conditionformat_greaterThan: "Conditionformat-GreaterThan",
          conditionformat_greaterThan_title: "Format cells greater than",
          conditionformat_lessThan: "Conditionformat-LessThan",
          conditionformat_lessThan_title: "Format cells smaller than",
          conditionformat_betweenness: "Conditionformat-Betweenness",
          conditionformat_betweenness_title: "Format cells with values between",
          conditionformat_equal: "Conditionformat-Equal",
          conditionformat_equal_title: "Format cells equal to",
          conditionformat_textContains: "Conditionformat-TextContains",
          conditionformat_textContains_title: "Format cells containing the following text",
          conditionformat_occurrenceDate: "Conditionformat-OccurrenceDate",
          conditionformat_occurrenceDate_title: "Format cells containing the following dates",
          conditionformat_duplicateValue: "Conditionformat-DuplicateValue",
          conditionformat_duplicateValue_title: "Format cells containing the following types of values",
          conditionformat_top10: "Conditionformat-Top10",
          conditionformat_top10_percent: "Conditionformat-Top10%",
          conditionformat_top10_title: "Format the cells with the highest value",
          conditionformat_last10: "Conditionformat-Last10",
          conditionformat_last10_percent: "Conditionformat-Last10%",
          conditionformat_last10_title: "Format the cells with the smallest value",
          conditionformat_AboveAverage: "Conditionformat-AboveAverage",
          conditionformat_AboveAverage_title: "Format cells above average",
          conditionformat_SubAverage: "Conditionformat-SubAverage",
          conditionformat_SubAverage_title: "Format cells below average",
          rule: "Rule",
          newRule: "New rule",
          editRule: "Edit rule",
          deleteRule: "Delete rule",
          deleteCellRule: "Delete cell rule",
          deleteSheetRule: "Delete sheet rule",
          manageRules: "Management rules",
          showRules: "Show its formatting rules",
          highlightCellRules: "Highlight cell rules",
          itemSelectionRules: "Item selection rules",
          conditionformatManageRules: "Conditional Formatting Rule Manager",
          format: "Format",
          setFormat: "Set format",
          setAs: "Set as",
          setAsByArea: "For the selected area, set to",
          applyRange: "Apply range",
          selectRange: "Select application range",
          selectRange_percent: "Percentage of selected range",
          selectRange_average: "Average value of selected range",
          selectRange_value: "Value in the selected range",
          pleaseSelectRange: "Please select application range",
          selectDataRange: "Select data range",
          selectCell: "select cell",
          pleaseSelectCell: "Please select cell",
          pleaseSelectADate: "Please select a date",
          pleaseEnterInteger: "Please enter an integer between 1 and 1000",
          onlySingleCell: "Only a single cell can be referenced",
          conditionValueCanOnly: "The condition value can only be a number or a single cell",
          ruleTypeItem1: "Format all cells based on their respective values",
          ruleTypeItem2: "Only format cells that contain",
          ruleTypeItem2_title: "Only for cells that meet the following conditions",
          ruleTypeItem3: "Format only the top or bottom numbers",
          ruleTypeItem3_title: "Is the value in the following ranking",
          ruleTypeItem4: "Format only values above or below the average",
          ruleTypeItem4_title: "Is a value that satisfies the following conditions",
          ruleTypeItem5: "Format only unique or repeated values",
          ruleTypeItem6: "Use formulas to determine which cells to format",
          formula: "Formula",
          textColor: "Text color",
          cellColor: "Cell color",
          confirm: "Confirm",
          confirmColor: "Confirm color",
          cancel: "Cancel",
          close: "Close",
          clearColorSelect: "Clear color select",
          sheet: "Sheet",
          currentSheet: "Current Sheet",
          dataBar: "data bar",
          dataBarColor: "data bar color",
          gradientDataBar_1: "Blue-white gradient data bar",
          gradientDataBar_2: "Green-white gradient data bar",
          gradientDataBar_3: "Red-white gradient data bar",
          gradientDataBar_4: "Orange-white gradient stripes",
          gradientDataBar_5: "Light blue-white gradient stripes",
          gradientDataBar_6: "Purple-white gradient data bar",
          solidColorDataBar_1: "Blue data bar",
          solidColorDataBar_2: "Green data bar",
          solidColorDataBar_3: "Red data bar",
          solidColorDataBar_4: "Orange data bar",
          solidColorDataBar_5: "Light blue data bar",
          solidColorDataBar_6: "Purple data bar",
          colorGradation: "color gradation",
          colorGradation_1: "Green-yellow-red color gradation",
          colorGradation_2: "Red-yellow-green color gradation",
          colorGradation_3: "Green-white-red color gradation",
          colorGradation_4: "Red-white-green color gradation",
          colorGradation_5: "Blue-white-red color gradation",
          colorGradation_6: "Red-white-blue color gradation",
          colorGradation_7: "White-red color gradation",
          colorGradation_8: "Red-white color gradation",
          colorGradation_9: "Green-white color gradation",
          colorGradation_10: "White-green color gradation",
          colorGradation_11: "Green-yellow color gradation",
          colorGradation_12: "Yellow-green color gradation",
          icons: "icons",
          pleaseSelectIcon: "Please click to select a group of icons:",
          cellValue: "Cell value",
          specificText: "Specific text",
          occurrence: "Date",
          greaterThan: "Greater than",
          lessThan: "Less than",
          between: "Between",
          equal: "Equal",
          in: "In",
          between2: "",
          contain: "Contain",
          textContains: "Text contains",
          duplicateValue: "Duplicate value",
          uniqueValue: "Unique value",
          top: "Top",
          top10: "Top 10",
          top10_percent: "Top 10%",
          last: "Last",
          last10: "Last 10",
          last10_percent: "Last 10%",
          oneself: "",
          above: "Above",
          aboveAverage: "Above average",
          below: "Below",
          belowAverage: "Below average",
          all: "All",
          yesterday: "YTD",
          today: "Today",
          tomorrow: "Tomorrow",
          lastWeek: "Last week",
          thisWeek: "This week",
          lastMonth: "Last month",
          thisMonth: "This month",
          lastYear: "Last year",
          thisYear: "This year",
          last7days: "Last 7 days",
          last30days: "Last 30 days",
          next7days: "Next 7 days",
          next30days: "Next 30 days",
          next60days: "Next 60 days",
          chooseRuleType: "Choose rule type",
          editRuleDescription: "Edit rule description",
          newFormatRule: "New format rule",
          editFormatRule: "Edit format rule",
          formatStyle: "Style",
          fillType: "Fill",
          color: "Color",
          twocolor: "Two-color",
          tricolor: "Tricolor",
          multicolor: "Multi color",
          grayColor: "Gray color",
          gradient: "Gradient",
          solid: "Solid",
          maxValue: "Max value",
          medianValue: "Median value",
          minValue: "Min value",
          direction: "Direction",
          threeWayArrow: "Three-way arrow",
          fourWayArrow: "Four-way arrow",
          fiveWayArrow: "Five-way arrow",
          threeTriangles: "Three triangles",
          shape: "Shape",
          threeColorTrafficLight: "Three-color traffic light",
          fourColorTrafficLight: "Four-color traffic light",
          threeSigns: "Three signs",
          greenRedBlackGradient: "Green-red-black gradient",
          rimless: "Rimless",
          bordered: "Bordered",
          mark: "Mark",
          threeSymbols: "Three symbols",
          tricolorFlag: "Tricolor flag",
          circled: "Circled",
          noCircle: "No circle",
          grade: "Grade",
          grade4: "4 Grade",
          grade5: "5 Grade",
          threeStars: "3 Stars",
          fiveQuadrantDiagram: "Five-quadrant diagram",
          fiveBoxes: "5 Boxes"
        },
        insertLink: {
          linkText: "Text",
          linkType: "Link type",
          external: "External link",
          internal: "Internal link",
          linkAddress: "Link address",
          linkSheet: "Worksheet",
          linkCell: "Cell reference",
          linkTooltip: "Tooltip",
          placeholder1: "Please enter the web link address",
          placeholder2: "Please enter the cell to be quoted, example A1",
          placeholder3: "Please enter the prompt content",
          tooltipInfo1: "Please enter a valid link",
          tooltipInfo2: "Please enter the correct cell reference"
        },
        dataVerification: {
          cellRange: "Cell range",
          selectCellRange: "Click to select a cell range",
          selectCellRange2: "Please select a range of cells",
          verificationCondition: "Verification condition",
          allowMultiSelect: "Allow multiple selection",
          dropdown: "drop-down list",
          checkbox: "Checkbox",
          number: "Number",
          number_integer: "Number-integer",
          number_decimal: "Number-decimal",
          text_content: "Text-content",
          text_length: "Text-length",
          date: "Date",
          validity: "Effectiveness",
          placeholder1: "Please enter the options, separated by commas, such as 1,2,3,4,5",
          placeholder2: "Please enter content",
          placeholder3: "Numeric value, such as 10",
          placeholder4: "Please enter the specified text",
          placeholder5: "Please enter the prompt displayed when the cell is selected",
          selected: "Selected",
          notSelected: "Not selected",
          between: "Between",
          notBetween: "Not between",
          equal: "Equal",
          notEqualTo: "Not equal to",
          moreThanThe: "More than the",
          lessThan: "Less than",
          greaterOrEqualTo: "Greater or equal to",
          lessThanOrEqualTo: "Less than or equal to",
          include: "Include",
          exclude: "Exclude",
          earlierThan: "Earlier than",
          noEarlierThan: "No earlier than",
          laterThan: "Later than",
          noLaterThan: "No later than",
          identificationNumber: "Identification number",
          phoneNumber: "Phone number",
          remote: "Automatic remote acquisition option",
          prohibitInput: "Prohibit input when input data is invalid",
          hintShow: "Show prompt when the cell is selected",
          deleteVerification: "Delete verification",
          tooltipInfo1: "The drop-down list option cannot be empty",
          tooltipInfo2: "Checkbox content cannot be empty",
          tooltipInfo3: "The value entered is not a numeric type",
          tooltipInfo4: "The value 2 cannot be less than the value 1",
          tooltipInfo5: "The text content cannot be empty",
          tooltipInfo6: "The value entered is not a date type",
          tooltipInfo7: "Date 2 cannot be less than date 1",
          textlengthInteger: "Text length must be an integer greater than or equal to 0"
        },
        formula: {
          sum: "Sum",
          average: "Average",
          count: "Count",
          max: "Max",
          min: "Min",
          ifGenerate: "If formula generator",
          find: "Learn more",
          tipNotBelongToIf: "This cell function does not belong to the if formula!",
          tipSelectCell: "Please select the cell to insert the function",
          ifGenCompareValueTitle: "Comparison value",
          ifGenSelectCellTitle: "Click to select cell",
          ifGenRangeTitle: "Range",
          ifGenRangeTo: "to",
          ifGenRangeEvaluate: "Range evaluate",
          ifGenSelectRangeTitle: "Click to select range",
          ifGenCutWay: "Partition way",
          ifGenCutSame: "Same Partition value",
          ifGenCutNpiece: "Partition by N",
          ifGenCutCustom: "Custom",
          ifGenCutConfirm: "Confirm",
          ifGenTipSelectCell: "Select cells",
          ifGenTipSelectCellPlace: "Please select cells",
          ifGenTipSelectRange: "Select range",
          ifGenTipSelectRangePlace: "Please select range",
          ifGenTipNotNullValue: "The comparison value cannot be empty!",
          ifGenTipLableTitile: "Label",
          ifGenTipRangeNotforNull: "The range cannot be empty!",
          ifGenTipCutValueNotforNull: "The partition value cannot be empty!",
          ifGenTipNotGenCondition: "No conditions are available for generation!"
        },
        formulaMore: {
          valueTitle: "Value",
          tipSelectDataRange: "Select data range",
          tipDataRangeTile: "Data range",
          findFunctionTitle: "Search function",
          tipInputFunctionName: "Function name or brief description of function",
          "Array": "Array",
          "Database": "Database",
          "Date": "Date",
          "Engineering": "Engineering",
          "Filter": "Filter",
          "Financial": "Financial",
          "luckysheet": "Luckysheet",
          "other": "Other",
          "Logical": "Logical",
          "Lookup": "Lookup",
          "Math": "Math",
          "Operator": "Operator",
          "Parser": "Parser",
          "Statistical": "Statistical",
          "Text": "Text",
          "dataMining": "Data Mining",
          "selectFunctionTitle": "Select a function",
          "calculationResult": "Result",
          tipSuccessText: "Success",
          tipParamErrorText: "Parameter type error",
          "helpClose": "Close",
          "helpCollapse": "Collapse",
          "helpExample": "Example",
          "helpAbstract": "Abstract",
          "execfunctionError": "Error in the formula",
          "execfunctionSelfError": "The formula cannot refer to its own cell",
          "execfunctionSelfErrorResult": "The formula cannot refer to its own cell, which will lead to inaccurate calculation results",
          "allowRepeatText": "Repeat",
          "allowOptionText": "Option",
          "selectCategory": "Or select a category"
        },
        drag: {
          noMerge: "Cannot perform this operation on merged cells",
          affectPivot: "This change cannot be made to the selected cell because it will affect the pivot table!",
          noMulti: "Cannot perform this operation on multiple selection areas, please select a single area",
          noPaste: "Unable to paste this content here, please select a cell in the paste area and try to paste again",
          noPartMerge: "Cannot perform this operation on partially merged cells",
          inputCorrect: "Please enter the correct value",
          notLessOne: "The number of rows and columns cannot be less than 1",
          offsetColumnLessZero: "The offset column cannot be negative!",
          pasteMustKeybordAlert: "Copy and paste in the Sheet: Ctrl + C to copy, Ctrl + V to paste, Ctrl + X to cut",
          pasteMustKeybordAlertHTMLTitle: "Copy and paste in the Sheet",
          pasteMustKeybordAlertHTML: "<span style='line-height: 1.0;font-size:36px;font-weight: bold;color:#666;'>Ctrl + C</span>&nbsp;&nbsp;to copy<br/><span style='line-height: 1.0;font-size:36px;font-weight: bold;color:#666;'>Ctrl + V</span>&nbsp;&nbsp;to paste<br/><span style='line-height: 1.0;font-size:36px;font-weight: bold;color:#666;'>Ctrl + X</span>&nbsp;&nbsp;to cut"
        },
        paste: {
          warning: "Warning",
          errorNotAllowMulti: "Cannot perform this operation on multiple selection areas, please select a single range and try again",
          errorNotAllowMerged: "Cannot make partial changes to merged cells"
        },
        pivotTable: {
          title: "Pivot Table",
          closePannel: "Close",
          editRange: "Range",
          tipPivotFieldSelected: "Select the fields",
          tipClearSelectedField: "Clear all fields",
          btnClearSelectedField: "Clear",
          btnFilter: "Filter",
          titleRow: "Row",
          titleColumn: "Column",
          titleValue: "Value",
          tipShowColumn: "Statistics fields are displayed as columns",
          tipShowRow: "Statistics fields are displayed as rows",
          titleSelectionDataRange: "Select range",
          titleDataRange: "Data range",
          valueSum: "SUM",
          valueStatisticsSUM: "Sum",
          valueStatisticsCOUNT: "Count",
          valueStatisticsCOUNTA: "Count A",
          valueStatisticsCOUNTUNIQUE: "Count Unique",
          valueStatisticsAVERAGE: "Average",
          valueStatisticsMAX: "Max",
          valueStatisticsMIN: "Min",
          valueStatisticsMEDIAN: "Median",
          valueStatisticsPRODUCT: "Product",
          valueStatisticsSTDEV: "Stdev",
          valueStatisticsSTDEVP: "Stdevp",
          valueStatisticslet: "Var",
          valueStatisticsVARP: "VarP",
          errorNotAllowEdit: "This operation is prohibited in non-editing mode!",
          errorNotAllowMulti: "Cannot perform this operation on multiple selection areas, please select a single range and try again",
          errorSelectRange: "Please select the range of the new pivot table",
          errorIsDamage: "The source data of this pivot table is corrupted!",
          errorNotAllowPivotData: "Cannot select pivot table as source data!",
          errorSelectionRange: "Selection failed, wrong input range!",
          errorIncreaseRange: "Please expand the selected range!",
          titleAddColumn: "Add column to pivot table",
          titleMoveColumn: "Move the column to the white box below",
          titleClearColumnFilter: "Clear the filter for this column",
          titleFilterColumn: "Filter",
          titleSort: "Sort",
          titleNoSort: "No sort",
          titleSortAsc: "ASC",
          titleSortDesc: "DESC",
          titleSortBy: "Sort by",
          titleShowSum: "Show total",
          titleStasticTrue: "Yes",
          titleStasticFalse: "No"
        },
        dropCell: {
          copyCell: "Copy",
          sequence: "Sequence",
          onlyFormat: "Only format",
          noFormat: "Not format",
          day: "Day",
          workDay: "Work Day",
          month: "Month",
          year: "Year",
          chineseNumber: "Chinese numbers"
        },
        imageCtrl: {
          borderTile: "Image border color",
          borderCur: "Color"
        },
        protection: {
          protectiontTitle: "Protection",
          enterPassword: "Enter a password (optional)",
          enterHintTitle: "Prompt when editing is prohibited (optional)",
          enterHint: "The cell or chart you are trying to change is in a protected worksheet. If you want to change it, please unprotect the worksheet. You may need to enter a password",
          swichProtectionTip: "Protect the sheet and contents of locked cells",
          authorityTitle: "Allow users of this sheet to:",
          selectLockedCells: "Select locked cells",
          selectunLockedCells: "Select unlocked cells",
          formatCells: "Format cells",
          formatColumns: "Format columns",
          formatRows: "Format rows",
          insertColumns: "Insert columns",
          insertRows: "Insert rows",
          insertHyperlinks: "Insert hyperlinks",
          deleteColumns: "Delete columns",
          deleteRows: "Delete rows",
          sort: "Sort",
          filter: "Filter",
          usePivotTablereports: "Use Pivot Table reports",
          editObjects: "Edit objects",
          editScenarios: "Edit scenarios",
          allowRangeTitle: "Allow users of range to:",
          allowRangeAdd: "New...",
          allowRangeAddTitle: "Title",
          allowRangeAddSqrf: "Reference",
          selectCellRange: "Click to select a cell range",
          selectCellRangeHolder: "Cell range",
          allowRangeAddTitlePassword: "Password",
          allowRangeAddTitleHint: "Prompt",
          allowRangeAddTitleHintTitle: "Prompt when a password is set (optional)",
          allowRangeAddtitleDefault: "Input range name",
          rangeItemDblclick: "Double click to edit",
          rangeItemHasPassword: "Has password",
          rangeItemErrorTitleNull: "Title is null",
          rangeItemErrorRangeNull: "Reference is null",
          rangeItemErrorRange: "Reference is error",
          validationTitle: "Password validation",
          validationTips: "Need to enter a password to unlock the protection of the worksheet",
          validationInputHint: "Enter a password",
          checkPasswordNullalert: "Password is required!",
          checkPasswordWrongalert: "Incorrect password, please try again!",
          checkPasswordSucceedalert: "Unlock Succeed!",
          defaultRangeHintText: "The cell is being password protected.",
          defaultSheetHintText: "The cell or chart is in a protected worksheet. To make changes, please unprotect the worksheet. You may need to enter a password"
        },
        cellFormat: {
          cellFormatTitle: "Format cells",
          protection: "Protection",
          locked: "Locked",
          hidden: "Hidden",
          protectionTips: "To lock cells or hide formulas, protect the worksheet. On the toolbar, Click Protect Sheet Button",
          tipsPart: "Partial checked",
          tipsAll: "All checked",
          selectionIsNullAlert: "Selection is required!",
          sheetDataIsNullAlert: "error, Data is none!"
        },
        print: {
          normalBtn: "Normal",
          layoutBtn: "Page Layout",
          pageBtn: "Page\u2002break\u2002preview",
          menuItemPrint: "Print (Ctrl+P)",
          menuItemAreas: "Print areas",
          menuItemRows: "Print title rows",
          menuItemColumns: "Print title columns"
        },
        edit: {
          typing: "typing"
        },
        websocket: {
          success: "WebSocket connection success",
          refresh: "An error occurred in the WebSocket connection, please refresh the page!",
          wait: "An error occurred in the WebSocket connection, please be patient!",
          close: "WebSocket connection closed",
          contact: "Server communication error occurred, please refresh the page and try again, if not, please contact the administrator!",
          support: "The current browser does not support WebSocket"
        }
      };
    }
  });

  // src/locale/zh.js
  var zh_default;
  var init_zh = __esm({
    "src/locale/zh.js"() {
      zh_default = {
        functionlist: {
          "SUMIF": {
            "d": "\u5BF9\u8303\u56F4\u4E2D\u7B26\u5408\u6307\u5B9A\u6761\u4EF6\u7684\u503C\u6C42\u548C\u3002",
            "a": "\u5BF9\u8303\u56F4\u4E2D\u7B26\u5408\u6307\u5B9A\u6761\u4EF6\u7684\u503C\u6C42\u548C\u3002",
            "p": [
              {
                "name": "\u8303\u56F4",
                "detail": "\u8981\u6839\u636E\u6761\u4EF6\u8FDB\u884C\u68C0\u6D4B\u7684\u8303\u56F4\u3002"
              },
              {
                "name": "\u6761\u4EF6",
                "detail": "\u8981\u5E94\u7528\u4E8E\u8303\u56F4\u7684\u6A21\u5F0F\u6216\u6D4B\u8BD5\u6761\u4EF6\u3002\n\n\u5982\u679C\u8303\u56F4\u5305\u542B\u7684\u662F\u8981\u68C0\u6D4B\u7684\u6587\u672C\uFF0C\u5219\u6761\u4EF6\u5FC5\u987B\u4E3A\u5B57\u7B26\u4E32\u3002\u6761\u4EF6\u53EF\u4EE5\u5305\u542B\u901A\u914D\u7B26\uFF0C\u5305\u62EC\u7528\u4E8E\u5339\u914D\u5355\u4E2A\u5B57\u7B26\u7684?\u6216\u7528\u4E8E\u5339\u914D\u96F6\u4E2A\u6216\u8FDE\u7EED\u591A\u4E2A\u5B57\u7B26\u7684*\u3002\u8981\u5339\u914D\u95EE\u53F7\u661F\u53F7\u672C\u8EAB\uFF0C\u8BF7\u5728\u8BE5\u5B57\u7B26\u524D\u9762\u52A0\u4E0A\u6CE2\u6D6A\u53F7(~)\u524D\u7F00\uFF08\u5373~?\u548C~*\uFF09\u3002\u5B57\u7B26\u4E32\u6761\u4EF6\u5FC5\u987B\u7528\u5F15\u53F7\u62EC\u8D77\u6765\u3002\u51FD\u6570\u4F1A\u68C0\u67E5\u8303\u56F4\u4E2D\u7684\u6BCF\u4E2A\u5355\u5143\u683C\u4E0E\u6761\u4EF6\u662F\u5426\u76F8\u7B49\u6216\u5339\u914D\uFF08\u5982\u679C\u4F7F\u7528\u4E86\u901A\u914D\u7B26\uFF09\u3002\n\n\u5982\u679C\u8303\u56F4\u5305\u542B\u7684\u662F\u8981\u68C0\u6D4B\u7684\u6570\u5B57\uFF0C\u5219\u6761\u4EF6\u53EF\u4EE5\u662F\u5B57\u7B26\u4E32\u4E5F\u53EF\u4EE5\u662F\u6570\u5B57\u3002\u5982\u679C\u7ED9\u5B9A\u7684\u6761\u4EF6\u662F\u4E00\u4E2A\u6570\u5B57\uFF0C\u5219\u68C0\u67E5\u8303\u56F4\u4E2D\u7684\u6BCF\u4E2A\u5355\u5143\u683C\u662F\u5426\u7B49\u4E8E\u6761\u4EF6\u3002\u53E6\u5916\uFF0C\u6761\u4EF6\u4E5F\u53EF\u80FD\u662F\u5305\u542B\u6570\u5B57\u7684\u5B57\u7B26\u4E32\uFF08\u4E5F\u5C06\u5BF9\u5176\u8FDB\u884C\u76F8\u7B49\u68C0\u6D4B\uFF09\uFF0C\u6216\u8005\u5E26\u6709\u4EE5\u4E0B\u524D\u7F00\u7684\u6570\u5B57\uFF1A=\uFF08\u68C0\u67E5\u662F\u5426\u76F8\u7B49\uFF09\u3001>\uFF08\u68C0\u67E5\u8303\u56F4\u5355\u5143\u683C\u7684\u503C\u662F\u5426\u5927\u4E8E\u6761\u4EF6\u503C\uFF09\u6216<\uFF08\u68C0\u67E5\u8303\u56F4\u5355\u5143\u683C\u7684\u503C\u662F\u5426\u5C0F\u4E8E\u6761\u4EF6\u503C\uFF09"
              },
              {
                "name": "\u6C42\u548C\u8303\u56F4",
                "detail": "\u8981\u6C42\u548C\u7684\u8303\u56F4\uFF08\u5982\u679C\u4E0E\u8303\u56F4\u4E0D\u540C\uFF09\u3002"
              }
            ]
          },
          "TAN": {
            "d": "\u8FD4\u56DE\u5DF2\u77E5\u89D2\u5EA6\u7684\u6B63\u5207\u503C\u3002",
            "a": "\u8FD4\u56DE\u5DF2\u77E5\u89D2\u5EA6\u7684\u6B63\u5207\u503C\u3002",
            "p": [
              {
                "name": "\u89D2\u5EA6",
                "detail": "\u8981\u6C42\u5176\u6B63\u5207\u503C\u7684\u89D2\u5EA6\uFF0C\u4EE5\u5F27\u5EA6\u8868\u793A\u3002"
              }
            ]
          },
          "TANH": {
            "d": "\u8FD4\u56DE\u7ED9\u5B9A\u5B9E\u6570\u7684\u53CC\u66F2\u6B63\u5207\u503C\u3002",
            "a": "\u8FD4\u56DE\u7ED9\u5B9A\u5B9E\u6570\u7684\u53CC\u66F2\u6B63\u5207\u503C\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8BA1\u7B97\u5176\u53CC\u66F2\u6B63\u5207\u503C\u7684\u5B9E\u6570\u3002"
              }
            ]
          },
          "CEILING": {
            "d": "\u5C06\u6570\u503C\u5411\u4E0A\u53D6\u6574\u4E3A\u6700\u63A5\u8FD1\u7684\u6307\u5B9A\u56E0\u6570\u7684\u500D\u6570\u3002",
            "a": "\u5C06\u6570\u503C\u5411\u4E0A\u53D6\u6574\u4E3A\u6700\u63A5\u8FD1\u7684\u6307\u5B9A\u56E0\u6570\u7684\u500D\u6570\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u5411\u4E0A\u820D\u5165\u7684\u6570\u503C\u3002"
              },
              {
                "name": "\u56E0\u6570",
                "detail": "\u8981\u5C06\u503C\u820D\u5165\u5230\u6B64\u6570\u7684\u6574\u6570\u500D\u3002"
              }
            ]
          },
          "ATAN": {
            "d": "\u8FD4\u56DE\u6570\u503C\u7684\u53CD\u6B63\u5207\u503C\uFF0C\u4EE5\u5F27\u5EA6\u8868\u793A\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u7684\u53CD\u6B63\u5207\u503C",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8BA1\u7B97\u5176\u53CD\u6B63\u5207\u503C\u7684\u6570\u503C\u3002"
              }
            ]
          },
          "ASINH": {
            "d": "\u8FD4\u56DE\u6570\u503C\u7684\u53CD\u53CC\u66F2\u6B63\u5F26\u503C\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u7684\u53CD\u53CC\u66F2\u6B63\u5F26\u503C\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8BA1\u7B97\u5176\u53CD\u53CC\u66F2\u6B63\u5F26\u503C\u7684\u6570\u503C\u3002"
              }
            ]
          },
          "ABS": {
            "d": "\u8FD4\u56DE\u6570\u503C\u7684\u7EDD\u5BF9\u503C\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u7684\u7EDD\u5BF9\u503C\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8FD4\u56DE\u5176\u7EDD\u5BF9\u503C\u7684\u6570\u3002"
              }
            ]
          },
          "ACOS": {
            "d": "\u8FD4\u56DE\u6570\u503C\u7684\u53CD\u4F59\u5F26\u503C\uFF0C\u4EE5\u5F27\u5EA6\u8868\u793A\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u7684\u53CD\u4F59\u5F26\u503C",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8BA1\u7B97\u5176\u53CD\u4F59\u5F26\u503C\u7684\u6570\u503C\u3002\u5FC5\u987B\u4ECB\u4E8E-1\u548C1\u4E4B\u95F4\uFF0C\u5305\u62EC\u4E24\u7AEF\u503C\u3002"
              }
            ]
          },
          "ACOSH": {
            "d": "\u8FD4\u56DE\u6570\u503C\u7684\u53CD\u53CC\u66F2\u4F59\u5F26\u503C\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u7684\u53CD\u53CC\u66F2\u4F59\u5F26\u503C\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8BA1\u7B97\u5176\u53CD\u53CC\u66F2\u4F59\u5F26\u503C\u7684\u6570\u503C\u3002\u5FC5\u987B\u5927\u4E8E\u7B49\u4E8E1\u3002"
              }
            ]
          },
          "MULTINOMIAL": {
            "d": "\u8FD4\u56DE\u53C2\u6570\u548C\u7684\u9636\u4E58\u9664\u4EE5\u5404\u53C2\u6570\u9636\u4E58\u7684\u4E58\u79EF\u540E\u5F97\u5230\u7684\u503C\u3002",
            "a": "\u8FD4\u56DE\u53C2\u6570\u548C\u7684\u9636\u4E58\u9664\u4EE5\u5404\u53C2\u6570\u9636\u4E58\u7684\u4E58\u79EF\u540E\u5F97\u5230\u7684\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u7684\u7B2C\u4E00\u9879\u6570\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "ATANH": {
            "d": "\u8FD4\u56DE\u6570\u503C\u7684\u53CD\u53CC\u66F2\u6B63\u5207\u503C\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u7684\u53CD\u53CC\u66F2\u6B63\u5207\u503C\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8BA1\u7B97\u5176\u53CD\u53CC\u66F2\u6B63\u5207\u503C\u7684\u6570\u503C\u3002\u5FC5\u987B\u4ECB\u4E8E-1\u548C1\u4E4B\u95F4\uFF08\u4E0D\u5305\u62EC-1\u548C1\uFF09\u3002"
              }
            ]
          },
          "ATAN2": {
            "d": "\u4EE5\u5F27\u5EA6\u4E3A\u5355\u4F4D\u8FD4\u56DE x \u8F74\u4E0E\u4ECE\u539F\u70B9 (0,0) \u5230\u6307\u5B9A\u5750\u6807\u70B9 (`x`,`y`) \u4E4B\u95F4\u8FDE\u7EBF\u7684\u5939\u89D2\u3002",
            "a": "\u4EE5\u5F27\u5EA6\u4E3A\u5355\u4F4D\u8FD4\u56DE x \u8F74\u4E0E\u4ECE\u539F\u70B9 (0,0) \u5230\u6307\u5B9A\u5750\u6807\u70B9 (`x`,`y`) \u4E4B\u95F4\u8FDE\u7EBF\u7684\u5939\u89D2\u3002",
            "p": [
              {
                "name": "x",
                "detail": "\u8981\u8BA1\u7B97\u5176\u4E0Ex\u8F74\u5939\u89D2\u5927\u5C0F\u7684\u7EBF\u6BB5\u7684\u7EC8\u70B9x\u5750\u6807\u3002"
              },
              {
                "name": "y",
                "detail": "\u8981\u8BA1\u7B97\u5176\u4E0Ex\u8F74\u5939\u89D2\u5927\u5C0F\u7684\u7EBF\u6BB5\u7684\u7EC8\u70B9y\u5750\u6807\u3002"
              }
            ]
          },
          "COUNTBLANK": {
            "d": "\u8FD4\u56DE\u7ED9\u5B9A\u8303\u56F4\u5185\u7684\u7A7A\u5355\u5143\u683C\u6570\u3002",
            "a": "\u8FD4\u56DE\u7ED9\u5B9A\u8303\u56F4\u5185\u7684\u7A7A\u5355\u5143\u683C\u6570\u3002",
            "p": [
              {
                "name": "\u8303\u56F4",
                "detail": "\u8981\u7EDF\u8BA1\u7A7A\u767D\u5355\u5143\u683C\u6570\u91CF\u7684\u8303\u56F4\u3002"
              }
            ]
          },
          "COSH": {
            "d": "\u8FD4\u56DE\u7ED9\u5B9A\u5B9E\u6570\u7684\u53CC\u66F2\u4F59\u5F26\u503C\u3002",
            "a": "\u8FD4\u56DE\u7ED9\u5B9A\u5B9E\u6570\u7684\u53CC\u66F2\u4F59\u5F26\u503C\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8BA1\u7B97\u5176\u53CC\u66F2\u4F59\u5F26\u503C\u7684\u5B9E\u6570\u503C\u3002"
              }
            ]
          },
          "INT": {
            "d": "\u5C06\u6570\u503C\u5411\u4E0B\u53D6\u6574\u4E3A\u5C0F\u4E8E\u6216\u7B49\u4E8E\u8BE5\u6570\u7684\u6700\u63A5\u8FD1\u7684\u6574\u6570\u3002",
            "a": "\u5C06\u6570\u503C\u5411\u4E0B\u53D6\u6574\u4E3A\u5C0F\u4E8E\u6216\u7B49\u4E8E\u8BE5\u6570\u7684\u6700\u63A5\u8FD1\u7684\u6574\u6570\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u5411\u4E0B\u53D6\u6574\u4E3A\u6700\u63A5\u8FD1\u7684\u6574\u6570\u7684\u6570\u503C\u3002"
              }
            ]
          },
          "ISEVEN": {
            "d": "\u68C0\u67E5\u6240\u63D0\u4F9B\u7684\u6570\u503C\u662F\u5426\u4E3A\u5076\u6570\u3002",
            "a": "\u68C0\u67E5\u6240\u63D0\u4F9B\u7684\u6570\u503C\u662F\u5426\u4E3A\u5076\u6570\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u9A8C\u8BC1\u5176\u662F\u5426\u4E3A\u5076\u6570\u7684\u6570\u503C\u3002\n\n\u5982\u679C\u503C\u4E3A\u5076\u6570\u6216\u6307\u5411\u5305\u542B\u5076\u6570\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0CISEVEN\u5C06\u8FD4\u56DETRUE\uFF0C\u5426\u5219\u8FD4\u56DEFALSE\u3002"
              }
            ]
          },
          "ISODD": {
            "d": "\u68C0\u67E5\u6240\u63D0\u4F9B\u7684\u6570\u503C\u662F\u5426\u4E3A\u5947\u6570\u3002",
            "a": "\u68C0\u67E5\u6240\u63D0\u4F9B\u7684\u6570\u503C\u662F\u5426\u4E3A\u5947\u6570\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u9A8C\u8BC1\u5176\u662F\u5426\u4E3A\u5947\u6570\u7684\u6570\u503C\u3002\n\n\u5982\u679C\u503C\u4E3A\u5947\u6570\u6216\u6307\u5411\u5305\u542B\u5947\u6570\u7684\u5355\u5143\u683C\uFF0CISODD\u5C06\u8FD4\u56DETRUE\uFF0C\u5426\u5219\u8FD4\u56DEFALSE\u3002"
              }
            ]
          },
          "LCM": {
            "d": "\u8FD4\u56DE\u4E00\u4E2A\u6216\u591A\u4E2A\u6574\u6570\u7684\u6700\u5C0F\u516C\u500D\u6570\u3002",
            "a": "\u8FD4\u56DE\u4E00\u4E2A\u6216\u591A\u4E2A\u6574\u6570\u7684\u6700\u5C0F\u516C\u500D\u6570\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8981\u5728\u6C42\u6700\u5C0F\u516C\u500D\u6570\u6570\u7684\u8BA1\u7B97\u4E2D\u68C0\u67E5\u5176\u56E0\u6570\u7684\u7B2C\u4E00\u9879\u6570\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9009] - \u5728\u6C42\u6700\u5C0F\u516C\u500D\u6570\u65F6\u8981\u8003\u8651\u5176\u56E0\u6570\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "LN": {
            "d": "\u8FD4\u56DE\u6570\u503C\u4EE5 e\uFF08\u6B27\u62C9\u6570\uFF09\u4E3A\u5E95\u7684\u5BF9\u6570\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u4EE5 e\uFF08\u6B27\u62C9\u6570\uFF09\u4E3A\u5E95\u7684\u5BF9\u6570\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u4EE5 e \u4E3A\u5E95\u6570\u8BA1\u7B97\u5176\u5BF9\u6570\u7684\u503C\u3002\n\n\u503C\u5FC5\u987B\u4E3A\u6B63\u6570\u3002"
              }
            ]
          },
          "LOG": {
            "d": "\u6839\u636E\u6307\u5B9A\u5E95\u6570\u8FD4\u56DE\u6570\u5B57\u7684\u5BF9\u6570\u3002",
            "a": "\u6839\u636E\u6307\u5B9A\u5E95\u6570\u8FD4\u56DE\u6570\u5B57\u7684\u5BF9\u6570\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u60F3\u8981\u8BA1\u7B97\u5176\u5BF9\u6570\u7684\u6B63\u5B9E\u6570\u3002"
              },
              {
                "name": "\u5E95\u6570",
                "detail": "[\u53EF\u9009] - \u5BF9\u6570\u7684\u5E95\u6570\u3002"
              }
            ]
          },
          "LOG10": {
            "d": "\u8FD4\u56DE\u6570\u503C\u4EE510\u4E3A\u5E95\u7684\u5BF9\u6570\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u4EE510\u4E3A\u5E95\u7684\u5BF9\u6570\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8BA1\u7B97\u5176\u4EE510\u4E3A\u5E95\u7684\u5BF9\u6570\u7684\u6570\u503C\u3002\n\n\u503C\u5FC5\u987B\u4E3A\u6B63\u503C\u3002"
              }
            ]
          },
          "MOD": {
            "d": "\u8FD4\u56DE\u4E24\u6570\u76F8\u9664\u7684\u4F59\u6570, \u7ED3\u679C\u7684\u7B26\u53F7\u4E0E\u9664\u6570\u76F8\u540C\u3002",
            "a": "\u8FD4\u56DE\u4E24\u6570\u76F8\u9664\u7684\u4F59\u6570\u3002",
            "p": [
              {
                "name": "\u88AB\u9664\u6570",
                "detail": "\u8981\u5C06\u5176\u76F8\u9664\u4EE5\u5F97\u5230\u4F59\u6570\u7684\u6570\u503C\u3002"
              },
              {
                "name": "\u9664\u6570",
                "detail": "\u7528\u4E8E\u9664\u5176\u4ED6\u6570\u7684\u6570\u503C\u3002"
              }
            ]
          },
          "MROUND": {
            "d": "\u5C06\u6570\u503C\u53D6\u6574\u4E3A\u53E6\u4E00\u6574\u6570\u6700\u63A5\u8FD1\u7684\u6574\u6570\u500D\u3002",
            "a": "\u5C06\u6570\u503C\u53D6\u6574\u4E3A\u53E6\u4E00\u6574\u6570\u6700\u63A5\u8FD1\u7684\u6574\u6570\u500D\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u53D6\u6574\u4E3A\u53E6\u4E00\u6574\u6570\u6700\u63A5\u8FD1\u7684\u6574\u6570\u500D\u7684\u6570\u503C\u3002"
              },
              {
                "name": "\u56E0\u6570",
                "detail": "\u503C\u5C06\u53D6\u6B64\u56E0\u6570\u7684\u6574\u6570\u500D\u3002"
              }
            ]
          },
          "ODD": {
            "d": "\u5C06\u6570\u503C\u5411\u4E0A\u53D6\u6574\u4E3A\u6700\u63A5\u8FD1\u7684\u5947\u6574\u6570\u3002",
            "a": "\u5C06\u6570\u503C\u5411\u4E0A\u53D6\u6574\u4E3A\u6700\u63A5\u8FD1\u7684\u5947\u6574\u6570\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u5411\u4E0A\u53D6\u6574\u7684\u6570\u503C\uFF0C\u53D6\u6574\u503C\u4E3A\u5927\u4E8E\u6B64\u503C\u7684\u6700\u63A5\u8FD1\u7684\u5947\u6570\u3002\n\n\u5982\u679C\u503C\u4E3A\u8D1F\u6570\uFF0C\u5219\u5C06\u5176\u53D6\u6574\u4E3A\u7EDD\u5BF9\u503C\u5927\u4E8E\u8BE5\u503C\u7684\u76F8\u90BB\u8D1F\u5947\u6570\u3002"
              }
            ]
          },
          "SUMSQ": {
            "d": "\u8FD4\u56DE\u4E00\u7EC4\u6570\u503C\u548C/\u6216\u5355\u5143\u683C\u7684\u5E73\u65B9\u603B\u548C\u3002",
            "a": "\u8FD4\u56DE\u4E00\u7EC4\u6570\u503C\u548C/\u6216\u5355\u5143\u683C\u7684\u5E73\u65B9\u603B\u548C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8981\u5C06\u5176\u5E73\u65B9\u76F8\u52A0\u7684\u7B2C\u4E00\u4E2A\u6570\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u8981\u5C06\u5176\u5E73\u65B9\u4E0E\u503C1\u7684\u5E73\u65B9\u76F8\u52A0\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "COMBIN": {
            "d": "\u7ED9\u5B9A\u96C6\u5408\u4E2D\u7684\u5BF9\u8C61\u603B\u6570\u548C\u8981\u9009\u62E9\u7684\u5BF9\u8C61\u6570\u91CF\uFF0C\u8FD4\u56DE\u5171\u6709\u591A\u5C11\u79CD\u4E0D\u540C\u9009\u62E9\u65B9\u5F0F\u3002",
            "a": "\u7ED9\u5B9A\u96C6\u5408\u4E2D\u7684\u5BF9\u8C61\u603B\u6570\u548C\u8981\u9009\u62E9\u7684\u5BF9\u8C61\u6570\u91CF",
            "p": [
              {
                "name": "n",
                "detail": "\u8981\u4ECE\u4E2D\u8FDB\u884C\u9009\u62E9\u7684\u5BF9\u8C61\u96C6\u5408\u7684\u5927\u5C0F\u3002"
              },
              {
                "name": "k",
                "detail": "\u8981\u9009\u62E9\u7684\u5BF9\u8C61\u6570\u91CF\u3002"
              }
            ]
          },
          "SUM": {
            "d": "\u8FD4\u56DE\u4E00\u7EC4\u6570\u503C\u548C/\u6216\u5355\u5143\u683C\u7684\u603B\u548C\u3002",
            "a": "\u8FD4\u56DE\u4E00\u7EC4\u6570\u503C\u548C/\u6216\u5355\u5143\u683C\u7684\u603B\u548C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8981\u76F8\u52A0\u7684\u7B2C\u4E00\u4E2A\u6570\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9009] - \u8981\u76F8\u52A0\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "SUBTOTAL": {
            "d": "\u4F7F\u7528\u6307\u5B9A\u7684\u6C47\u603B\u51FD\u6570\uFF0C\u8FD4\u56DE\u4E00\u7CFB\u5217\u7EB5\u5411\u5355\u5143\u683C\u7684\u5206\u7C7B\u6C47\u603B\u3002",
            "a": "\u4F7F\u7528\u6307\u5B9A\u7684\u6C47\u603B\u51FD\u6570",
            "p": [
              {
                "name": "\u51FD\u6570\u4EE3\u7801",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u5206\u7C7B\u6C47\u603B\u7684\u51FD\u6570\u3002\n\n1\u4EE3\u8868AVERAGE\n\n2\u4EE3\u8868COUNT\n\n3\u4EE3\u8868COUNTA\n\n4\u4EE3\u8868MAX\n\n5\u4EE3\u8868MIN\n\n6\u4EE3\u8868PRODUCT\n\n7\u4EE3\u8868STDEV\n\n8\u4EE3\u8868STDEVP\n\n9\u4EE3\u8868SUM\n\n10\u4EE3\u8868VAR\n\n11\u4EE3\u8868VARP\n\n\u901A\u8FC7\u5728\u8FD9\u4E9B2\u4F4D\u4EE3\u7801\u524D\u9644\u52A010\uFF08\u5BF9\u4E8E1\u4F4D\u4EE3\u7801\uFF09\u62161\uFF08\u5BF9\u4E8E2\u4F4D\u4EE3\u7801\uFF09\uFF0C\u53EF\u4EE5\u5C06\u9690\u85CF\u503C\u5FFD\u7565\u3002\u4F8B\u5982\uFF0C102\u4EE3\u8868\u5FFD\u7565\u9690\u85CF\u5355\u5143\u683C\u7684COUNT\uFF0C\u800C110\u5219\u4EE3\u8868\u5FFD\u7565\u9690\u85CF\u503C\u7684VAR\u3002"
              },
              {
                "name": "\u8303\u56F41",
                "detail": "\u8981\u8BA1\u7B97\u5206\u7C7B\u6C47\u603B\u7684\u7B2C\u4E00\u4E2A\u8303\u56F4\u3002"
              },
              {
                "name": "\u8303\u56F42",
                "detail": "[\u53EF\u9009] - \u8981\u8BA1\u7B97\u5206\u7C7B\u6C47\u603B\u7684\u5176\u4ED6\u8303\u56F4\u3002"
              }
            ]
          },
          "ASIN": {
            "d": "\u8FD4\u56DE\u6570\u503C\u7684\u53CD\u6B63\u5F26\u503C\uFF0C\u4EE5\u5F27\u5EA6\u8868\u793A\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u7684\u53CD\u6B63\u5F26\u503C",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8BA1\u7B97\u5176\u53CD\u6B63\u5F26\u503C\u7684\u6570\u503C\u3002\u5FC5\u987B\u4ECB\u4E8E-1\u548C1\u4E4B\u95F4\uFF0C\u5305\u62EC\u4E24\u7AEF\u503C\u3002"
              }
            ]
          },
          "COUNTIF": {
            "d": "\u8FD4\u56DE\u8303\u56F4\u5185\u6EE1\u8DB3\u67D0\u4E2A\u6761\u4EF6\u7684\u5355\u5143\u683C\u7684\u6570\u91CF\u3002",
            "a": "\u8FD4\u56DE\u8303\u56F4\u5185\u6EE1\u8DB3\u67D0\u4E2A\u6761\u4EF6\u7684\u5355\u5143\u683C\u7684\u6570\u91CF\u3002",
            "p": [
              {
                "name": "\u8303\u56F4",
                "detail": "\u8981\u6839\u636E\u6761\u4EF6\u8FDB\u884C\u68C0\u6D4B\u7684\u8303\u56F4\u3002"
              },
              {
                "name": "\u6761\u4EF6",
                "detail": "\u8981\u5E94\u7528\u4E8E\u8303\u56F4\u7684\u6A21\u5F0F\u6216\u6D4B\u8BD5\u6761\u4EF6\u3002\n\n\u5982\u679C\u8303\u56F4\u5305\u542B\u7684\u662F\u8981\u68C0\u6D4B\u7684\u6587\u672C\uFF0C\u5219\u6761\u4EF6\u5FC5\u987B\u4E3A\u5B57\u7B26\u4E32\u3002\u6761\u4EF6\u53EF\u4EE5\u5305\u542B\u901A\u914D\u7B26\uFF0C\u5305\u62EC\u7528\u4E8E\u5339\u914D\u5355\u4E2A\u5B57\u7B26\u7684?\u6216\u7528\u4E8E\u5339\u914D\u96F6\u4E2A\u6216\u8FDE\u7EED\u591A\u4E2A\u5B57\u7B26\u7684*\u3002\u8981\u5339\u914D\u95EE\u53F7\u661F\u53F7\u672C\u8EAB\uFF0C\u8BF7\u5728\u8BE5\u5B57\u7B26\u524D\u9762\u52A0\u4E0A\u6CE2\u6D6A\u53F7(~)\u524D\u7F00\uFF08\u5373~?\u548C~*\uFF09\u3002\u5B57\u7B26\u4E32\u6761\u4EF6\u5FC5\u987B\u7528\u5F15\u53F7\u62EC\u8D77\u6765\u3002\u51FD\u6570\u4F1A\u68C0\u67E5\u8303\u56F4\u4E2D\u7684\u6BCF\u4E2A\u5355\u5143\u683C\u4E0E\u6761\u4EF6\u662F\u5426\u76F8\u7B49\u6216\u5339\u914D\uFF08\u5982\u679C\u4F7F\u7528\u4E86\u901A\u914D\u7B26\uFF09\u3002\n\n\u5982\u679C\u8303\u56F4\u5305\u542B\u7684\u662F\u8981\u68C0\u6D4B\u7684\u6570\u5B57\uFF0C\u5219\u6761\u4EF6\u53EF\u4EE5\u662F\u5B57\u7B26\u4E32\u4E5F\u53EF\u4EE5\u662F\u6570\u5B57\u3002\u5982\u679C\u7ED9\u5B9A\u7684\u6761\u4EF6\u662F\u4E00\u4E2A\u6570\u5B57\uFF0C\u5219\u68C0\u67E5\u8303\u56F4\u4E2D\u7684\u6BCF\u4E2A\u5355\u5143\u683C\u662F\u5426\u7B49\u4E8E\u6761\u4EF6\u3002\u53E6\u5916\uFF0C\u6761\u4EF6\u4E5F\u53EF\u80FD\u662F\u5305\u542B\u6570\u5B57\u7684\u5B57\u7B26\u4E32\uFF08\u4E5F\u5C06\u5BF9\u5176\u8FDB\u884C\u76F8\u7B49\u68C0\u6D4B\uFF09\uFF0C\u6216\u8005\u5E26\u6709\u4EE5\u4E0B\u524D\u7F00\u7684\u6570\u5B57\uFF1A=\u3001>\u3001>=\u3001<\u6216<=\uFF0C\u8FD9\u4E9B\u6761\u4EF6\u5C06\u5206\u522B\u7528\u4E8E\u68C0\u67E5\u8303\u56F4\u4E2D\u7684\u5355\u5143\u683C\u662F\u5426\u7B49\u4E8E\u3001\u5927\u4E8E\u3001\u5927\u4E8E\u7B49\u4E8E\u3001\u5C0F\u4E8E\u3001\u5C0F\u4E8E\u7B49\u4E8E\u6761\u4EF6\u503C\u3002"
              }
            ]
          },
          "RADIANS": {
            "d": "\u5C06\u4EE5\u5EA6\u8868\u793A\u7684\u89D2\u5EA6\u503C\u8F6C\u6362\u4E3A\u5F27\u5EA6\u3002",
            "a": "\u5C06\u4EE5\u5EA6\u8868\u793A\u7684\u89D2\u5EA6\u503C\u8F6C\u6362\u4E3A\u5F27\u5EA6\u3002",
            "p": [
              {
                "name": "\u89D2\u5EA6",
                "detail": "\u8981\u4ECE\u5EA6\u8F6C\u6362\u4E3A\u5F27\u5EA6\u7684\u89D2\u5EA6\u3002"
              }
            ]
          },
          "RAND": {
            "d": "\u8FD4\u56DE\u4E00\u4E2A\u4ECB\u4E8E0\u548C1\u4E4B\u95F4\uFF08\u5305\u62EC0\u4F46\u4E0D\u5305\u62EC1\uFF09\u7684\u968F\u673A\u6570\u3002",
            "a": "\u8FD4\u56DE\u4E00\u4E2A\u4ECB\u4E8E0\u548C1\u4E4B\u95F4\uFF08\u5305\u62EC0\u4F46\u4E0D\u5305\u62EC1\uFF09\u7684\u968F\u673A\u6570\u3002",
            "p": []
          },
          "COUNTUNIQUE": {
            "d": "\u8BA1\u7B97\u4E00\u5217\u6307\u5B9A\u503C\u548C\u8303\u56F4\u4E2D\u4E0D\u91CD\u590D\u6570\u503C\u7684\u4E2A\u6570\u3002",
            "a": "\u8BA1\u7B97\u4E00\u5217\u6307\u5B9A\u503C\u548C\u8303\u56F4\u4E2D\u4E0D\u91CD\u590D\u6570\u503C\u7684\u4E2A\u6570\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8981\u68C0\u67E5\u5176\u662F\u5426\u552F\u4E00\u7684\u7B2C\u4E00\u4E2A\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9009] - \u8981\u68C0\u67E5\u662F\u5426\u552F\u4E00\u7684\u5176\u4ED6\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "DEGREES": {
            "d": "\u5C06\u4EE5\u5F27\u5EA6\u8868\u793A\u7684\u89D2\u5EA6\u503C\u8F6C\u6362\u4E3A\u5EA6\u3002",
            "a": "\u5C06\u4EE5\u5F27\u5EA6\u8868\u793A\u7684\u89D2\u5EA6\u503C\u8F6C\u6362\u4E3A\u5EA6\u3002",
            "p": [
              {
                "name": "\u89D2\u5EA6",
                "detail": "\u8981\u4ECE\u5F27\u5EA6\u8F6C\u6362\u4E3A\u5EA6\u7684\u89D2\u5EA6\u3002"
              }
            ]
          },
          "ERFC": {
            "d": "\u8FD4\u56DE\u6570\u503C\u7684\u4E92\u8865\u9AD8\u65AF\u8BEF\u5DEE\u51FD\u6570\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u7684\u4E92\u8865\u9AD8\u65AF\u8BEF\u5DEE\u51FD\u6570\u3002",
            "p": [
              {
                "name": "z",
                "detail": "\u8981\u4E3A\u5176\u8BA1\u7B97\u4E92\u8865\u9AD8\u65AF\u8BEF\u5DEE\u51FD\u6570\u7684\u6570\u503C\u3002"
              }
            ]
          },
          "EVEN": {
            "d": "\u5C06\u6570\u503C\u5411\u4E0A\u53D6\u6574\u4E3A\u6700\u63A5\u8FD1\u7684\u5076\u6574\u6570\u3002",
            "a": "\u5C06\u6570\u503C\u5411\u4E0A\u53D6\u6574\u4E3A\u6700\u63A5\u8FD1\u7684\u5076\u6574\u6570\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u5411\u4E0A\u53D6\u6574\u7684\u6570\u503C\uFF0C\u53D6\u6574\u503C\u4E3A\u5927\u4E8E\u6B64\u503C\u7684\u6700\u63A5\u8FD1\u7684\u5076\u6570\u3002\n\n\u5982\u679C\u503C\u4E3A\u8D1F\u6570\uFF0C\u5219\u5C06\u5176\u53D6\u6574\u4E3A\u7EDD\u5BF9\u503C\u5927\u4E8E\u8BE5\u503C\u7684\u76F8\u90BB\u8D1F\u5076\u6570\u3002"
              }
            ]
          },
          "EXP": {
            "d": "\u8FD4\u56DE\u6B27\u62C9\u6570 e (~2.718) \u7684\u6307\u5B9A\u6B21\u5E42\u3002",
            "a": "\u8FD4\u56DE\u6B27\u62C9\u6570 e (~2.718) \u7684\u6307\u5B9A\u6B21\u5E42\u3002",
            "p": [
              {
                "name": "\u6307\u6570",
                "detail": "\u6307\u5B9Ae\u7684\u81EA\u4E58\u5E42\u6B21\u503C\u3002"
              }
            ]
          },
          "FACT": {
            "d": "\u8FD4\u56DE\u6570\u503C\u7684\u9636\u4E58\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u7684\u9636\u4E58\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8BA1\u7B97\u5E76\u8FD4\u56DE\u5176\u9636\u4E58\u7684\u6570\u5B57\u6216\u5BF9\u6570\u5B57\uFF08\u6240\u5728\u5355\u5143\u683C\uFF09\u7684\u5F15\u7528\u3002"
              }
            ]
          },
          "FACTDOUBLE": {
            "d": "\u8FD4\u56DE\u6570\u503C\u7684\u201C\u53CC\u9636\u4E58\u201D\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u7684\u201C\u53CC\u9636\u4E58\u201D\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8BA1\u7B97\u5E76\u8FD4\u56DE\u5176\u53CC\u9636\u4E58\u7684\u6570\u5B57\u6216\u5BF9\u6570\u5B57\uFF08\u6240\u5728\u5355\u5143\u683C\uFF09\u7684\u5F15\u7528\u3002"
              }
            ]
          },
          "PI": {
            "d": "\u8FD4\u56DE\u5E26\u670914\u4F4D\u5C0F\u6570\u7684 PI \u503C\u3002",
            "a": "\u8FD4\u56DE\u5E26\u670914\u4F4D\u5C0F\u6570\u7684 PI \u503C\u3002",
            "p": []
          },
          "FLOOR": {
            "d": "\u5C06\u6570\u503C\u5411\u4E0B\u53D6\u6574\u4E3A\u6307\u5B9A\u56E0\u6570\u7684\u6700\u63A5\u8FD1\u7684\u6574\u6570\u500D\u3002",
            "a": "\u5C06\u6570\u503C\u5411\u4E0B\u53D6\u6574\u4E3A\u6307\u5B9A\u56E0\u6570\u7684\u6700\u63A5\u8FD1\u7684\u6574\u6570\u500D\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u5411\u4E0B\u820D\u5165\u4E3A\u56E0\u6570\u7684\u6700\u63A5\u8FD1\u6574\u6570\u500D\u7684\u6570\u503C\u3002"
              },
              {
                "name": "\u56E0\u6570",
                "detail": "\u8981\u5C06\u503C\u820D\u5165\u5230\u6B64\u6570\u7684\u6574\u6570\u500D\u3002\n\n\u56E0\u6570\u4E0D\u5F97\u4E3A0\u3002"
              }
            ]
          },
          "GCD": {
            "d": "\u8FD4\u56DE\u4E00\u4E2A\u6216\u591A\u4E2A\u6574\u6570\u7684\u6700\u5927\u516C\u7EA6\u6570\u3002",
            "a": "\u8FD4\u56DE\u4E00\u4E2A\u6216\u591A\u4E2A\u6574\u6570\u7684\u6700\u5927\u516C\u7EA6\u6570\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8981\u5728\u67E5\u627E\u6700\u5927\u516C\u7EA6\u6570\u7684\u8BA1\u7B97\u4E2D\u68C0\u67E5\u5176\u56E0\u6570\u7684\u7B2C\u4E00\u9879\u6570\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9009] - \u5728\u6C42\u6700\u5927\u516C\u7EA6\u6570\u65F6\u8981\u8003\u8651\u5176\u56E0\u6570\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "RANDBETWEEN": {
            "d": "\u8FD4\u56DE\u4ECB\u4E8E\u4E24\u4E2A\u6574\u6570\u4E4B\u95F4\uFF08\u5305\u62EC\u8FD9\u4E24\u4E2A\u6574\u6570\uFF09\u7684\u968F\u673A\u6570\u3002",
            "a": "\u8FD4\u56DE\u4ECB\u4E8E\u4E24\u4E2A\u6574\u6570\u4E4B\u95F4\uFF08\u5305\u62EC\u8FD9\u4E24\u4E2A\u6574\u6570\uFF09\u7684\u968F\u673A\u6570\u3002",
            "p": [
              {
                "name": "\u4E0B\u754C",
                "detail": "\u968F\u673A\u503C\u8303\u56F4\u7684\u4E0B\u754C\u3002"
              },
              {
                "name": "\u4E0A\u754C",
                "detail": "\u968F\u673A\u503C\u8303\u56F4\u7684\u4E0A\u754C\u3002"
              }
            ]
          },
          "ROUND": {
            "d": "\u5C06\u6570\u5B57\u56DB\u820D\u4E94\u5165\u5230\u6307\u5B9A\u7684\u4F4D\u6570\u3002",
            "a": "\u5C06\u6570\u5B57\u56DB\u820D\u4E94\u5165\u5230\u6307\u5B9A\u7684\u4F4D\u6570\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u56DB\u820D\u4E94\u5165\u7684\u6570\u5B57\u3002"
              },
              {
                "name": "\u4F4D\u6570",
                "detail": "\u8981\u8FDB\u884C\u56DB\u820D\u4E94\u5165\u8FD0\u7B97\u7684\u4F4D\u6570\u3002\n\n\u4F4D\u6570\u53EF\u4EE5\u53D6\u8D1F\u503C\uFF0C\u5728\u8FD9\u79CD\u60C5\u51B5\u4E0B\u4F1A\u5C06\u503C\u7684\u5C0F\u6570\u70B9\u5DE6\u4FA7\u90E8\u5206\u820D\u5165\u5230\u6307\u5B9A\u7684\u4F4D\u6570\u3002"
              }
            ]
          },
          "ROUNDDOWN": {
            "d": "\u671D\u7740\u96F6\u7684\u65B9\u5411\u5C06\u6570\u5B57\u8FDB\u884C\u5411\u4E0B\u820D\u5165\u3002",
            "a": "\u671D\u7740\u96F6\u7684\u65B9\u5411\u5C06\u6570\u5B57\u8FDB\u884C\u5411\u4E0B\u820D\u5165\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u9700\u8981\u5411\u4E0B\u820D\u5165\u7684\u4EFB\u610F\u5B9E\u6570\u3002"
              },
              {
                "name": "\u4F4D\u6570",
                "detail": "\u8981\u901A\u8FC7\u820D\u5165\u8FBE\u5230\u7684\u5C0F\u6570\u4F4D\u6570\u3002\n\n\u4F4D\u6570\u53EF\u4EE5\u53D6\u8D1F\u503C\uFF0C\u5728\u8FD9\u79CD\u60C5\u51B5\u4E0B\u4F1A\u5C06\u503C\u7684\u5C0F\u6570\u70B9\u5DE6\u4FA7\u90E8\u5206\u820D\u5165\u5230\u6307\u5B9A\u7684\u4F4D\u6570\u3002"
              }
            ]
          },
          "ROUNDUP": {
            "d": "\u671D\u7740\u8FDC\u79BB 0\uFF08\u96F6\uFF09\u7684\u65B9\u5411\u5C06\u6570\u5B57\u8FDB\u884C\u5411\u4E0A\u820D\u5165\u3002",
            "a": "\u671D\u7740\u8FDC\u79BB 0\uFF08\u96F6\uFF09\u7684\u65B9\u5411\u5C06\u6570\u5B57\u8FDB\u884C\u5411\u4E0A\u820D\u5165\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u5C06\u5176\u820D\u5165\u4E3A\u4F4D\u6570\u4F4D\u6570\u5B57\u7684\u503C\uFF0C\u59CB\u7EC8\u5411\u4E0A\u820D\u5165\u3002"
              },
              {
                "name": "\u4F4D\u6570",
                "detail": "\u8981\u901A\u8FC7\u820D\u5165\u8FBE\u5230\u7684\u5C0F\u6570\u4F4D\u6570\u3002\n\n\u4F4D\u6570\u53EF\u4EE5\u53D6\u8D1F\u503C\uFF0C\u5728\u8FD9\u79CD\u60C5\u51B5\u4E0B\u4F1A\u5C06\u503C\u7684\u5C0F\u6570\u70B9\u5DE6\u4FA7\u90E8\u5206\u820D\u5165\u5230\u6307\u5B9A\u7684\u4F4D\u6570\u3002"
              }
            ]
          },
          "SERIESSUM": {
            "d": "\u7ED9\u5B9A\u53C2\u6570 x\u3001n\u3001m \u548C a\uFF0C\u8FD4\u56DE\u5E42\u7EA7\u6570\u7684\u548C a1xn + a2x(n+m) + ... + aix(n+(i-1)m)\uFF0C\u5176\u4E2D i \u4E3A\u8303\u56F4 a \u4E2D\u7684\u9879\u6570\u3002",
            "a": "\u7ED9\u5B9A\u53C2\u6570 x\u3001n\u3001m \u548C a",
            "p": [
              {
                "name": "x",
                "detail": "\u5E42\u7EA7\u6570\u7684\u8F93\u5165\u503C\u3002\u968F\u76F8\u5E94\u7684\u8FD1\u4F3C\u7C7B\u578B\u800C\u53D8\uFF0C\u6709\u53EF\u80FD\u4E3A\u89D2\u5EA6\u3001\u6307\u6570\u6216\u5176\u4ED6\u4E00\u4E9B\u503C\u3002"
              },
              {
                "name": "n",
                "detail": "\u5728\u5E42\u7EA7\u6570\u4E2Dx\u7684\u521D\u59CB\u81EA\u4E58\u5E42\u6B21\u3002"
              },
              {
                "name": "m",
                "detail": "x\u7684\u5E42\u6B21\u4E2D\u7684\u9644\u52A0\u589E\u91CF\u3002"
              },
              {
                "name": "a",
                "detail": "\u5305\u542B\u5E42\u7EA7\u6570\u7CFB\u6570\u7684\u6570\u7EC4\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "SIGN": {
            "d": "\u7ED9\u5B9A\u8F93\u5165\u6570\u503C\uFF0C\u5982\u679C\u4E3A\u8D1F\u8FD4\u56DE-1\uFF1B\u5982\u679C\u4E3A\u6B63\u8FD4\u56DE1\uFF1B\u5982\u679C\u4E3A\u96F6\u5219\u8FD4\u56DE0\u3002",
            "a": "\u7ED9\u5B9A\u8F93\u5165\u6570\u503C",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8FD4\u56DE\u5176\u7B26\u53F7\u7684\u6570\u503C\u3002"
              }
            ]
          },
          "SIN": {
            "d": "\u7ED9\u5B9A\u89D2\u5EA6\uFF08\u4EE5\u5F27\u5EA6\u8868\u793A\uFF09\uFF0C\u8FD4\u56DE\u5176\u6B63\u5F26\u503C\u3002",
            "a": "\u7ED9\u5B9A\u89D2\u5EA6\uFF08\u4EE5\u5F27\u5EA6\u8868\u793A\uFF09",
            "p": [
              {
                "name": "\u89D2\u5EA6",
                "detail": "\u8981\u8FD4\u56DE\u5176\u6B63\u5F26\u503C\u7684\u89D2\u5EA6\uFF0C\u4EE5\u5F27\u5EA6\u8868\u793A\u3002"
              }
            ]
          },
          "SINH": {
            "d": "\u8FD4\u56DE\u7ED9\u5B9A\u5B9E\u6570\u7684\u53CC\u66F2\u6B63\u5F26\u503C\u3002",
            "a": "\u8FD4\u56DE\u7ED9\u5B9A\u5B9E\u6570\u7684\u53CC\u66F2\u6B63\u5F26\u503C\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8BA1\u7B97\u5176\u53CC\u66F2\u6B63\u5F26\u503C\u7684\u5B9E\u6570\u503C\u3002"
              }
            ]
          },
          "SQRT": {
            "d": "\u8FD4\u56DE\u4E00\u4E2A\u6B63\u6570\u7684\u6B63\u5E73\u65B9\u6839\u3002",
            "a": "\u8FD4\u56DE\u4E00\u4E2A\u6B63\u6570\u7684\u6B63\u5E73\u65B9\u6839\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8BA1\u7B97\u5176\u6B63\u5E73\u65B9\u6839\u7684\u6570\u503C\u3002\n\n\u503C\u5FC5\u987B\u4E3A\u6B63\u6570\uFF1B\u5982\u679C\u4E3A\u8D1F\uFF0CSQRT \u5C06\u8FD4\u56DE #NUM! \u9519\u8BEF\u3002"
              }
            ]
          },
          "SQRTPI": {
            "d": "\u8FD4\u56DE PI \u4E0E\u7ED9\u5B9A\u6B63\u6570\u4E58\u79EF\u7684\u6B63\u5E73\u65B9\u6839\u3002",
            "a": "\u8FD4\u56DE PI \u4E0E\u7ED9\u5B9A\u6B63\u6570\u4E58\u79EF\u7684\u6B63\u5E73\u65B9\u6839\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u5C06\u5176\u4E0E PI \u76F8\u4E58\u5E76\u8FD4\u56DE\u8BE5\u4E58\u79EF\u7684\u5E73\u65B9\u6839\u7684\u6570\u503C\n\n\u503C\u5FC5\u987B\u4E3A\u6B63\u6570\uFF1B\u5982\u679C\u4E3A\u8D1F\u6570\uFF0CSQRTPI \u5C06\u8FD4\u56DE #NUM! \u9519\u8BEF\u3002"
              }
            ]
          },
          "GAMMALN": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u4F3D\u739B\u51FD\u6570\u7684\u4EE5 e\uFF08\u6B27\u62C9\u6570\uFF09\u4E3A\u5E95\u7684\u5BF9\u6570\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u4F3D\u739B\u51FD\u6570\u7684\u4EE5 e\uFF08\u6B27\u62C9\u6570\uFF09\u4E3A\u5E95\u7684\u5BF9\u6570\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u4F3D\u739B\u51FD\u6570\u7684\u8F93\u5165\u503C\u3002\u8FD4\u56DE\u7684\u5C06\u662F\u4F3D\u739B (\u503C) \u7684\u81EA\u7136\u5BF9\u6570\u3002\n\n\u503C\u5FC5\u987B\u4E3A\u6B63\u6570\u3002"
              }
            ]
          },
          "COS": {
            "d": "\u8FD4\u56DE\u7ED9\u5B9A\u89D2\u5EA6\u7684\u4F59\u5F26\u503C\uFF08\u89D2\u5EA6\u4EE5\u5F27\u5EA6\u8868\u793A\uFF09\u3002",
            "a": "\u8FD4\u56DE\u7ED9\u5B9A\u89D2\u5EA6\u7684\u4F59\u5F26\u503C\uFF08\u89D2\u5EA6\u4EE5\u5F27\u5EA6\u8868\u793A\uFF09\u3002",
            "p": [
              {
                "name": "\u89D2\u5EA6",
                "detail": "\u8981\u53D6\u5176\u4F59\u5F26\u503C\u7684\u89D2\u5EA6\uFF0C\u4EE5\u5F27\u5EA6\u8868\u793A\u3002"
              }
            ]
          },
          "TRUNC": {
            "d": "\u622A\u9664\u6307\u5B9A\u6709\u6548\u4F4D\u4E4B\u5916\u7684\u90E8\u5206\uFF0C\u53D6\u6570\u636E\u7684\u6307\u5B9A\u6709\u6548\u4F4D\u3002",
            "a": "\u622A\u9664\u6307\u5B9A\u6709\u6548\u4F4D\u4E4B\u5916\u7684\u90E8\u5206",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u622A\u53D6\u7684\u6570\u636E\u3002"
              },
              {
                "name": "\u4F4D\u6570",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A0] - \u5C0F\u6570\u70B9\u53F3\u4FA7\u8981\u4FDD\u7559\u7684\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u4F4D\u6570\u5927\u4E8E\u503C\u4E2D\u7684\u6709\u6548\u4F4D\u6570\uFF0C\u5219\u5C06\u201C\u503C\u201D\u539F\u6837\u8FD4\u56DE\u3002\n\n\u4F4D\u6570\u53EF\u4EE5\u53D6\u8D1F\u503C\uFF0C\u5728\u8FD9\u79CD\u60C5\u51B5\u4E0B\u4F1A\u5C06\u5C0F\u6570\u70B9\u5DE6\u4FA7\u6307\u5B9A\u4F4D\u6570\u7684\u503C\u66F4\u6539\u4E3A\u96F6\u3002\u5C0F\u6570\u70B9\u53F3\u4FA7\u7684\u6240\u6709\u4F4D\u6570\u90FD\u4F1A\u88AB\u820D\u5F03\u3002\u5982\u679C\u503C\u7684\u6240\u6709\u4F4D\u90FD\u88AB\u66F4\u6539\u4E3A\u96F6\uFF0C\u5219TRUNC\u4F1A\u8FD4\u56DE0\u3002"
              }
            ]
          },
          "QUOTIENT": {
            "d": "\u8FD4\u56DE\u4EE5\u4E00\u4E2A\u6570\u9664\u4EE5\u53E6\u4E00\u4E2A\u6570\u6240\u5F97\u7684\u7ED3\u679C\uFF0C\u4E0D\u5305\u542B\u4F59\u6570\u3002",
            "a": "\u8FD4\u56DE\u4EE5\u4E00\u4E2A\u6570\u9664\u4EE5\u53E6\u4E00\u4E2A\u6570\u6240\u5F97\u7684\u7ED3\u679C",
            "p": [
              {
                "name": "\u88AB\u9664\u6570",
                "detail": "\u8981\u88AB\u9664\u7684\u6570\u503C\u3002"
              },
              {
                "name": "\u9664\u6570",
                "detail": "\u7528\u4E8E\u9664\u5176\u4ED6\u6570\u7684\u6570\u503C\u3002\n\n\u9664\u6570\u4E0D\u5F97\u4E3A0\u3002"
              }
            ]
          },
          "POWER": {
            "d": "\u8FD4\u56DE\u6570\u503C\u7684\u6307\u5B9A\u6B21\u5E42\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u7684\u6307\u5B9A\u6B21\u5E42\u3002",
            "p": [
              {
                "name": "\u5E95\u6570",
                "detail": "\u8981\u8BA1\u7B97\u5176\u6307\u6570\u6B21\u5E42\u7684\u6570\u503C\u3002\n\n\u5982\u679C\u5E95\u6570\u4E3A\u8D1F\uFF0C\u5219\u6307\u6570\u5FC5\u987B\u4E3A\u6574\u6570\u3002"
              },
              {
                "name": "\u6307\u6570",
                "detail": "\u6307\u5B9A\u5E95\u6570\u7684\u81EA\u4E58\u5E42\u6B21\u503C\u3002"
              }
            ]
          },
          "SUMIFS": {
            "d": "\u6839\u636E\u591A\u9879\u6761\u4EF6\u8FD4\u56DE\u8303\u56F4\u4E4B\u548C\u3002",
            "a": "\u6839\u636E\u591A\u9879\u6761\u4EF6\u8FD4\u56DE\u8303\u56F4\u4E4B\u548C\u3002",
            "p": [
              {
                "name": "\u6C42\u548C\u8303\u56F4",
                "detail": "\u8981\u5BF9\u5176\u6C42\u548C\u7684\u8303\u56F4\u3002"
              },
              {
                "name": "\u6761\u4EF6\u8303\u56F41",
                "detail": "\u8981\u5728\u54EA\u4E2A\u8303\u56F4\u5185\u68C0\u67E5\u6761\u4EF61\u3002"
              },
              {
                "name": "\u6761\u4EF61",
                "detail": "\u8981\u5E94\u7528\u4E8E\u6761\u4EF6\u8303\u56F41\u7684\u6A21\u5F0F\u6216\u6D4B\u8BD5\u6761\u4EF6\u3002"
              },
              {
                "name": "\u6761\u4EF6\u8303\u56F42, \u6761\u4EF62...",
                "detail": "[ \u53EF\u9009 ] - \u8981\u68C0\u67E5\u7684\u5176\u4ED6\u8303\u56F4\u548C\u6761\u4EF6\u3002"
              }
            ]
          },
          "COUNTIFS": {
            "d": "\u6839\u636E\u591A\u9879\u6761\u4EF6\u8FD4\u56DE\u8303\u56F4\u4E2D\u7684\u5355\u5143\u683C\u6570\u91CF\u3002",
            "a": "\u6839\u636E\u591A\u9879\u6761\u4EF6\u8FD4\u56DE\u8303\u56F4\u4E2D\u7684\u5355\u5143\u683C\u6570\u91CF\u3002",
            "p": [
              {
                "name": "\u6761\u4EF6\u8303\u56F41",
                "detail": "\u8981\u5728\u54EA\u4E2A\u8303\u56F4\u5185\u68C0\u67E5\u6761\u4EF61\u3002"
              },
              {
                "name": "\u6761\u4EF61",
                "detail": "\u8981\u5E94\u7528\u4E8E\u6761\u4EF6\u8303\u56F41\u7684\u6A21\u5F0F\u6216\u6D4B\u8BD5\u6761\u4EF6\u3002"
              },
              {
                "name": "\u6761\u4EF6\u8303\u56F42, \u6761\u4EF62...",
                "detail": "[ \u53EF\u9009 ] - \u8981\u68C0\u67E5\u7684\u5176\u4ED6\u8303\u56F4\u548C\u6761\u4EF6\uFF0C\u53EF\u91CD\u590D\u3002"
              }
            ]
          },
          "PRODUCT": {
            "d": "\u8FD4\u56DE\u5C06\u4E00\u7EC4\u6570\u76F8\u4E58\u6240\u5F97\u7684\u7ED3\u679C\u3002",
            "a": "\u8FD4\u56DE\u5C06\u4E00\u7EC4\u6570\u76F8\u4E58\u6240\u5F97\u7684\u7ED3\u679C\u3002",
            "p": [
              {
                "name": "\u4E58\u65701",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u4E58\u79EF\u7684\u7B2C\u4E00\u4E2A\u6570\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u4E58\u65702 ... \u4E58\u657030",
                "detail": "[\u53EF\u9009] - \u8981\u76F8\u4E58\u7684\u5176\u4ED6\u6570\u503C\u3002"
              }
            ]
          },
          "HARMEAN": {
            "d": "\u8BA1\u7B97\u6570\u636E\u96C6\u7684\u8C03\u548C\u5E73\u5747\u503C\u3002",
            "a": "\u8BA1\u7B97\u6570\u636E\u96C6\u7684\u8C03\u548C\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6837\u672C\u4E2D\u7684\u7B2C\u4E00\u9879\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u6570\u636E\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "HYPGEOMDIST": {
            "d": "\u8FD4\u56DE\u8D85\u51E0\u4F55\u5206\u5E03\u3002 \u5982\u679C\u5DF2\u77E5\u6837\u672C\u91CF\u3001\u603B\u4F53\u6210\u529F\u6B21\u6570\u548C\u603B\u4F53\u5927\u5C0F\uFF0C\u5219 HYPGEOM.DIST \u8FD4\u56DE\u6837\u672C\u53D6\u5F97\u5DF2\u77E5\u6210\u529F\u6B21\u6570\u7684\u6982\u7387\u3002",
            "a": "\u8FD4\u56DE\u8D85\u51E0\u4F55\u5206\u5E03\u3002",
            "p": [
              {
                "name": "Sample_s",
                "detail": "\u6837\u672C\u4E2D\u6210\u529F\u7684\u6B21\u6570\u3002"
              },
              {
                "name": "Number_sample",
                "detail": "\u6837\u672C\u91CF\u3002"
              },
              {
                "name": "Population_s",
                "detail": "\u603B\u4F53\u4E2D\u6210\u529F\u7684\u6B21\u6570\u3002"
              },
              {
                "name": "Number_pop",
                "detail": "\u603B\u4F53\u5927\u5C0F\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u51B3\u5B9A\u51FD\u6570\u5F62\u5F0F\u7684\u903B\u8F91\u503C\u3002\n\n\u5982\u679C cumulative \u4E3A TRUE()\uFF0C\u5219 HYPGEOM.DIST \u8FD4\u56DE\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\uFF1B\n\n\u5982\u679C\u4E3A FALSE()\uFF0C\u5219\u8FD4\u56DE\u6982\u7387\u5BC6\u5EA6\u51FD\u6570\u3002"
              }
            ]
          },
          "INTERCEPT": {
            "d": "\u8BA1\u7B97\u6570\u636E\u96C6\u7684\u7EBF\u6027\u56DE\u5F52\u65B9\u7A0B\u76F4\u7EBF\u4E0E Y \u8F74\u7684\u76F8\u4EA4\u70B9 (x=0) \u7684 y \u503C\u3002",
            "a": "\u8BA1\u7B97\u6570\u636E\u96C6\u7684\u7EBF\u6027\u56DE\u5F52\u65B9\u7A0B\u76F4\u7EBF\u4E0E Y \u8F74\u7684\u76F8\u4EA4\u70B9 (x=0) \u7684 y \u503C\u3002",
            "p": [
              {
                "name": "\u6570\u636E_y",
                "detail": "\u4EE3\u8868\u56E0\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              },
              {
                "name": "\u6570\u636E_x",
                "detail": "\u4EE3\u8868\u81EA\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              }
            ]
          },
          "KURT": {
            "d": "\u8BA1\u7B97\u6570\u636E\u96C6\u7684\u5CED\u5EA6\uFF0C\u8BE5\u6307\u6807\u6307\u793A\u6570\u636E\u96C6\uFF08\u5206\u5E03\uFF09\u7684\u5F62\u6001\uFF0C\u5C24\u5176\u662F\u8BE5\u5F62\u6001\u7684\u9661\u5CED\u7A0B\u5EA6\u3002",
            "a": "\u8BA1\u7B97\u6570\u636E\u96C6\u7684\u5CED\u5EA6",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6570\u636E\u96C6\u4E2D\u7684\u7B2C\u4E00\u4E2A\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u6570\u636E\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "LARGE": {
            "d": "\u8FD4\u56DE\u6570\u636E\u96C6\u4E2D\u7B2C n \u4E2A\u6700\u5927\u5143\u7D20\uFF0Cn \u7531\u7528\u6237\u6307\u5B9A\u3002",
            "a": "\u8FD4\u56DE\u6570\u636E\u96C6\u4E2D\u7B2C n \u4E2A\u6700\u5927\u5143\u7D20",
            "p": [
              {
                "name": "\u6570\u636E",
                "detail": "\u5305\u542B\u76F8\u5173\u6570\u636E\u96C6\u7684\u6570\u7EC4\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "n",
                "detail": "\u8981\u8FD4\u56DE\u7684\u5143\u7D20\u7684\u6392\u884C\u4F4D\u7F6E\uFF08\u4ECE\u5927\u5230\u5C0F\u987A\u5E8F\uFF09\u3002\n\n\u4F8B\u5982\uFF0C\u5C06n\u8BBE\u4E3A4\u5C06\u4F7FLARGE\u8FD4\u56DE\u6570\u636E\u4E2D\u6392\u540D\u7B2C4\u7684\u6700\u5927\u5143\u7D20\u3002"
              }
            ]
          },
          "STDEVA": {
            "d": "\u57FA\u4E8E\u6837\u672C\u8BA1\u7B97\u6807\u51C6\u504F\u5DEE\uFF0C\u5C06\u6587\u672C\u53D6\u503C\u4E3A0\u3002",
            "a": "\u57FA\u4E8E\u6837\u672C\u8BA1\u7B97\u6807\u51C6\u504F\u5DEE",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6837\u672C\u4E2D\u7684\u7B2C\u4E00\u9879\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2,\u2026",
                "detail": "[\u53EF\u9009] - \u6837\u672C\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "STDEVP": {
            "d": "\u57FA\u4E8E\u6837\u672C\u603B\u4F53\u8BA1\u7B97\u6807\u51C6\u504F\u5DEE\u3002",
            "a": "\u57FA\u4E8E\u6837\u672C\u603B\u4F53\u8BA1\u7B97\u6807\u51C6\u504F\u5DEE\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6570\u636E\u96C6\u4E2D\u7684\u7B2C\u4E00\u4E2A\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u6570\u636E\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "GEOMEAN": {
            "d": "\u8BA1\u7B97\u6570\u636E\u96C6\u7684\u51E0\u4F55\u5E73\u5747\u503C\u3002",
            "a": "\u8BA1\u7B97\u6570\u636E\u96C6\u7684\u51E0\u4F55\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6837\u672C\u4E2D\u7684\u7B2C\u4E00\u9879\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u6570\u636E\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "RANK_EQ": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u6570\u636E\u96C6\u4E2D\u7684\u6392\u540D\u3002\u5982\u679C\u76F8\u540C\u7684\u503C\u5728\u6570\u636E\u96C6\u4E2D\u5B58\u5728\u591A\u9879\uFF0C\u5219\u8FD4\u56DE\u5176\u4E2D\u7684\u6700\u9AD8\u6392\u540D\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u6570\u636E\u96C6\u4E2D\u7684\u6392\u540D\u3002\u5982\u679C\u76F8\u540C\u7684\u503C\u5728\u6570\u636E\u96C6\u4E2D\u5B58\u5728\u591A\u9879\uFF0C\u5219\u8FD4\u56DE\u5176\u4E2D\u7684\u6700\u9AD8\u6392\u540D\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u8981\u786E\u5B9A\u5176\u6392\u540D\u7684\u503C\u3002"
              },
              {
                "name": "ref",
                "detail": "\u5305\u542B\u76F8\u5173\u6570\u636E\u96C6\u7684\u6570\u7EC4\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "order",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A\u6309\u964D\u5E8F (FALSE()) ] - \u8981\u6309\u5347\u5E8F\u8FD8\u662F\u6309\u964D\u5E8F\u8003\u8651\u201Cdata\u201D\u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "RANK_AVG": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u6570\u636E\u96C6\u4E2D\u7684\u6392\u540D\u3002\u5982\u679C\u76F8\u540C\u7684\u503C\u5728\u6570\u636E\u96C6\u4E2D\u5B58\u5728\u591A\u9879\uFF0C\u5219\u8FD4\u56DE\u8FD9\u4E9B\u9879\u6392\u540D\u7684\u5E73\u5747\u503C\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u6570\u636E\u96C6\u4E2D\u7684\u6392\u540D\u3002\u5982\u679C\u76F8\u540C\u7684\u503C\u5728\u6570\u636E\u96C6\u4E2D\u5B58\u5728\u591A\u9879\uFF0C\u5219\u8FD4\u56DE\u8FD9\u4E9B\u9879\u6392\u540D\u7684\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u8981\u786E\u5B9A\u5176\u6392\u540D\u7684\u503C\u3002"
              },
              {
                "name": "ref",
                "detail": "\u5305\u542B\u76F8\u5173\u6570\u636E\u96C6\u7684\u6570\u7EC4\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "order",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A\u6309\u964D\u5E8F (FALSE()) ] - \u8981\u6309\u5347\u5E8F\u8FD8\u662F\u6309\u964D\u5E8F\u8003\u8651\u201Cdata\u201D\u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "PERCENTRANK_EXC": {
            "d": "\u4EE5\u767E\u5206\u6570\u5F62\u5F0F\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u7ED9\u5B9A\u6570\u636E\u96C6\u4E2D\u7684\u767E\u5206\u6BD4\u6392\u540D\uFF08\u4ECB\u4E8E0\u548C1\u4E4B\u95F4\uFF0C\u4E0D\u5305\u62EC\u4E24\u7AEF\u503C\uFF09\u3002",
            "a": "\u4EE5\u767E\u5206\u6570\u5F62\u5F0F\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u7ED9\u5B9A\u6570\u636E\u96C6\u4E2D\u7684\u767E\u5206\u6BD4\u6392\u540D\uFF08\u4ECB\u4E8E0\u548C1\u4E4B\u95F4\uFF0C\u4E0D\u5305\u62EC\u4E24\u7AEF\u503C\uFF09\u3002",
            "p": [
              {
                "name": "data",
                "detail": "\u5305\u542B\u76F8\u5173\u6570\u636E\u96C6\u7684\u6570\u7EC4\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "x",
                "detail": "\u8981\u786E\u5B9A\u5176\u767E\u5206\u6BD4\u6392\u4F4D\u7684\u503C\u3002"
              },
              {
                "name": "significance",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A 3] - \u8981\u5728\u8BA1\u7B97\u4E2D\u4F7F\u7528\u7684\u6709\u6548\u4F4D\u6570\u3002"
              }
            ]
          },
          "PERCENTRANK_INC": {
            "d": "\u4EE5\u767E\u5206\u6BD4\u5F62\u5F0F\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u7ED9\u5B9A\u6570\u636E\u96C6\u4E2D\u7684\u767E\u5206\u6BD4\u6392\u540D\uFF08\u4ECB\u4E8E0\u548C1\u4E4B\u95F4\uFF0C\u5305\u62EC\u4E24\u7AEF\u503C\uFF09\u3002",
            "a": "\u4EE5\u767E\u5206\u6BD4\u5F62\u5F0F\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u7ED9\u5B9A\u6570\u636E\u96C6\u4E2D\u7684\u767E\u5206\u6BD4\u6392\u540D\uFF08\u4ECB\u4E8E0\u548C1\u4E4B\u95F4\uFF0C\u5305\u62EC\u4E24\u7AEF\u503C\uFF09\u3002",
            "p": [
              {
                "name": "data",
                "detail": "\u5305\u542B\u76F8\u5173\u6570\u636E\u96C6\u7684\u6570\u7EC4\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "x",
                "detail": "\u8981\u786E\u5B9A\u5176\u767E\u5206\u6BD4\u6392\u4F4D\u7684\u503C\u3002"
              },
              {
                "name": "significance",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A 3] - \u8981\u5728\u8BA1\u7B97\u4E2D\u4F7F\u7528\u7684\u6709\u6548\u4F4D\u6570\u3002"
              }
            ]
          },
          "FORECAST": {
            "d": "\u57FA\u4E8E\u6570\u636E\u96C6\u7684\u7EBF\u6027\u56DE\u5F52\uFF0C\u8BA1\u7B97\u6307\u5B9A x \u7684\u9884\u671F y \u503C\u3002",
            "a": "\u57FA\u4E8E\u6570\u636E\u96C6\u7684\u7EBF\u6027\u56DE\u5F52",
            "p": [
              {
                "name": "x",
                "detail": "x\u8F74\u4E0A\u7528\u4E8E\u9884\u6D4B\u7684\u503C\u3002"
              },
              {
                "name": "\u6570\u636E_y",
                "detail": "\u4EE3\u8868\u56E0\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              },
              {
                "name": "\u6570\u636E_x",
                "detail": "\u4EE3\u8868\u81EA\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              }
            ]
          },
          "FISHERINV": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u6570\u503C\u7684 Fisher \u9006\u53D8\u6362\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u6570\u503C\u7684 Fisher \u9006\u53D8\u6362\u3002",
            "p": [
              {
                "name": "y",
                "detail": "\u8981\u8BA1\u7B97\u5176Fisher\u9006\u53D8\u6362\u7684\u6570\u503C\u3002"
              }
            ]
          },
          "FISHER": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u6570\u503C\u7684 Fisher \u53D8\u6362\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u6570\u503C\u7684 Fisher \u53D8\u6362\u3002",
            "p": [
              {
                "name": "x",
                "detail": "\u8981\u8BA1\u7B97\u5176Fisher\u53D8\u6362\u7684\u6570\u503C\u3002"
              }
            ]
          },
          "MODE_SNGL": {
            "d": "\u8FD4\u56DE\u6570\u636E\u96C6\u4E2D\u51FA\u73B0\u6B21\u6570\u6700\u591A\u7684\u503C\u3002",
            "a": "\u8FD4\u56DE\u6570\u636E\u96C6\u4E2D\u51FA\u73B0\u6B21\u6570\u6700\u591A\u7684\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8BA1\u7B97\u6A21\u5F0F\u65F6\u8981\u68C0\u67E5\u7684\u7B2C\u4E00\u4E2A\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u5728\u8BA1\u7B97\u6A21\u5F0F\u65F6\u8981\u8003\u8651\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "WEIBULL_DIST": {
            "d": "\u7ED9\u5B9A\u5F62\u72B6\u548C\u5C3A\u5EA6\uFF0C\u8FD4\u56DE\u97E6\u4F2F\u5206\u5E03\u51FD\u6570\uFF08\u6216\u97E6\u4F2F\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\uFF09\u7684\u503C\u3002",
            "a": "\u7ED9\u5B9A\u5F62\u72B6\u548C\u5C3A\u5EA6",
            "p": [
              {
                "name": "x",
                "detail": "WEIBULL \u5206\u5E03\u51FD\u6570\u7684\u8F93\u5165\u503C\u3002"
              },
              {
                "name": "alpha",
                "detail": "Weibull \u5206\u5E03\u51FD\u6570\u7684\u5F62\u72B6\u53C2\u6570\u3002\n\nalpha \u503C\u5FC5\u987B\u5927\u4E8E 0\u3002"
              },
              {
                "name": "beta",
                "detail": "Weibull \u5206\u5E03\u51FD\u6570\u7684\u5C3A\u5EA6\u53C2\u6570\u3002\n\nbeta \u503C\u5FC5\u987B\u5927\u4E8E 0\u3002"
              },
              {
                "name": "cumulative",
                "detail": "TRUE() \u8868\u793A\u4F7F\u7528\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\uFF0CFALSE() \u5219\u8868\u793A\u4F7F\u7528\u6982\u7387\u5BC6\u5EA6\u51FD\u6570\u3002"
              }
            ]
          },
          "COUNT": {
            "d": "\u8FD4\u56DE\u6570\u636E\u96C6\u4E2D\u6570\u503C\u7684\u4E2A\u6570\u3002",
            "a": "\u8FD4\u56DE\u6570\u636E\u96C6\u4E2D\u6570\u503C\u7684\u4E2A\u6570\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8BA1\u6570\u65F6\u8981\u68C0\u67E5\u7684\u7B2C\u4E00\u4E2A\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u5728\u8BA1\u6570\u65F6\u8981\u68C0\u67E5\u7684\u5176\u4ED6\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "COUNTA": {
            "d": "\u8FD4\u56DE\u6570\u636E\u96C6\u4E2D\u503C\u7684\u6570\u91CF\u3002",
            "a": "\u8FD4\u56DE\u6570\u636E\u96C6\u4E2D\u503C\u7684\u6570\u91CF\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8BA1\u6570\u65F6\u8981\u68C0\u67E5\u7684\u7B2C\u4E00\u4E2A\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u5728\u8BA1\u6570\u65F6\u8981\u68C0\u67E5\u7684\u5176\u4ED6\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "AVEDEV": {
            "d": "\u8BA1\u7B97\u6570\u636E\u4E0E\u6570\u636E\u96C6\u5747\u503C\u4E4B\u95F4\u7684\u504F\u5DEE\u5927\u5C0F\u7684\u5E73\u5747\u503C\u3002",
            "a": "\u8BA1\u7B97\u6570\u636E\u4E0E\u6570\u636E\u96C6\u5747\u503C\u4E4B\u95F4\u7684\u504F\u5DEE\u5927\u5C0F\u7684\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6837\u672C\u4E2D\u7684\u7B2C\u4E00\u9879\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u6837\u672C\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "AVERAGE": {
            "d": "\u8FD4\u56DE\u6570\u636E\u96C6\u7684\u7B97\u672F\u5E73\u5747\u503C\uFF0C\u5BF9\u6587\u672C\u5FFD\u7565\u4E0D\u8BA1\u3002",
            "a": "\u8FD4\u56DE\u6570\u636E\u96C6\u7684\u7B97\u672F\u5E73\u5747\u503C",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8BA1\u7B97\u5E73\u5747\u503C\u65F6\u7528\u5230\u7684\u7B2C\u4E00\u4E2A\u6570\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u5728\u8BA1\u7B97\u5E73\u5747\u503C\u65F6\u8981\u8003\u8651\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "AVERAGEA": {
            "d": "\u8FD4\u56DE\u6570\u636E\u96C6\u7684\u7B97\u672F\u5E73\u5747\u503C\u3002",
            "a": "\u8FD4\u56DE\u6570\u636E\u96C6\u7684\u7B97\u672F\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8BA1\u7B97\u5E73\u5747\u503C\u65F6\u7528\u5230\u7684\u7B2C\u4E00\u4E2A\u6570\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u5728\u8BA1\u7B97\u5E73\u5747\u503C\u65F6\u8981\u8003\u8651\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "BINOM_DIST": {
            "d": "\u8FD4\u56DE\u4E00\u5143\u4E8C\u9879\u5F0F\u5206\u5E03\u7684\u6982\u7387\u3002",
            "a": "\u8FD4\u56DE\u4E00\u5143\u4E8C\u9879\u5F0F\u5206\u5E03\u7684\u6982\u7387\u3002",
            "p": [
              {
                "name": "number_s",
                "detail": "\u8BD5\u9A8C\u7684\u6210\u529F\u6B21\u6570\u3002"
              },
              {
                "name": "trials",
                "detail": "\u72EC\u7ACB\u68C0\u9A8C\u7684\u6B21\u6570\u3002"
              },
              {
                "name": "probability_s",
                "detail": "\u4EFB\u4E00\u7ED9\u5B9A\u68C0\u9A8C\u7684\u6210\u529F\u6982\u7387\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u662F\u5426\u4F7F\u7528\u4E8C\u9879\u5F0F\u7D2F\u79EF\u5206\u5E03\u3002"
              }
            ]
          },
          "BINOM_INV": {
            "d": "\u8BA1\u7B97\u7D2F\u79EF\u4E8C\u9879\u5F0F\u5206\u5E03\u5927\u4E8E\u6216\u7B49\u4E8E\u6307\u5B9A\u6761\u4EF6\u7684\u6700\u5C0F\u503C\u3002",
            "a": "\u8BA1\u7B97\u7D2F\u79EF\u4E8C\u9879\u5F0F\u5206\u5E03\u5927\u4E8E\u6216\u7B49\u4E8E\u6307\u5B9A\u6761\u4EF6\u7684\u6700\u5C0F\u503C\u3002",
            "p": [
              {
                "name": "trials",
                "detail": "\u8D1D\u52AA\u5229\u8BD5\u9A8C\u6B21\u6570\u3002"
              },
              {
                "name": "probability_s",
                "detail": "\u4EFB\u4E00\u6B21\u7ED9\u5B9A\u68C0\u9A8C\u7684\u6210\u529F\u6982\u7387\u3002"
              },
              {
                "name": "alpha",
                "detail": "\u671F\u671B\u7684\u4E34\u754C\u6982\u7387\u3002"
              }
            ]
          },
          "CONFIDENCE_NORM": {
            "d": "\u8BA1\u7B97\u6B63\u6001\u5206\u5E03\u7684\u7F6E\u4FE1\u533A\u95F4\u7684\u4E00\u534A\u5BBD\u5EA6\u3002",
            "a": "\u8BA1\u7B97\u6B63\u6001\u5206\u5E03\u7684\u7F6E\u4FE1\u533A\u95F4\u7684\u4E00\u534A\u5BBD\u5EA6\u3002",
            "p": [
              {
                "name": "alpha",
                "detail": "\u7528\u6765\u8BA1\u7B97\u7F6E\u4FE1\u6C34\u5E73\u7684\u663E\u8457\u6027\u6C34\u5E73\u3002\n\n\u7F6E\u4FE1\u6C34\u5E73\u7B49\u4E8E 100*(1 - alpha)%\uFF0C\u4EA6\u5373\uFF0C\u5982\u679C alpha \u4E3A 0.05\uFF0C\u5219\u7F6E\u4FE1\u6C34\u5E73\u4E3A 95%\u3002"
              },
              {
                "name": "standard_dev",
                "detail": "\u6570\u636E\u533A\u57DF\u7684\u603B\u4F53\u6807\u51C6\u504F\u5DEE\u3002"
              },
              {
                "name": "size",
                "detail": "\u6837\u672C\u603B\u91CF\u7684\u5927\u5C0F\u3002"
              }
            ]
          },
          "CORREL": {
            "d": "\u8BA1\u7B97\u7ED9\u5B9A\u6570\u636E\u96C6\u7684\u76AE\u5C14\u900A\u79EF\u77E9\u76F8\u5173\u7CFB\u6570 r\u3002",
            "a": "\u8BA1\u7B97\u7ED9\u5B9A\u6570\u636E\u96C6\u7684\u76AE\u5C14\u900A\u79EF\u77E9\u76F8\u5173\u7CFB\u6570 r\u3002",
            "p": [
              {
                "name": "\u6570\u636E_y",
                "detail": "\u4EE3\u8868\u56E0\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              },
              {
                "name": "\u6570\u636E_x",
                "detail": "\u4EE3\u8868\u81EA\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              }
            ]
          },
          "COVARIANCE_P": {
            "d": "\u8BA1\u7B97\u6570\u636E\u96C6\u7684\u603B\u4F53\u534F\u65B9\u5DEE\u3002",
            "a": "\u8BA1\u7B97\u6570\u636E\u96C6\u7684\u603B\u4F53\u534F\u65B9\u5DEE\u3002",
            "p": [
              {
                "name": "\u6570\u636E_x",
                "detail": "\u4EE3\u8868\u81EA\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              },
              {
                "name": "\u6570\u636E_y",
                "detail": "\u4EE3\u8868\u56E0\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              }
            ]
          },
          "COVARIANCE_S": {
            "d": "\u8BA1\u7B97\u6570\u636E\u96C6\u7684\u6837\u672C\u534F\u65B9\u5DEE\u3002",
            "a": "\u8BA1\u7B97\u6570\u636E\u96C6\u7684\u6837\u672C\u534F\u65B9\u5DEE\u3002",
            "p": [
              {
                "name": "\u6570\u636E_x",
                "detail": "\u4EE3\u8868\u81EA\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              },
              {
                "name": "\u6570\u636E_y",
                "detail": "\u4EE3\u8868\u56E0\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              }
            ]
          },
          "DEVSQ": {
            "d": "\u57FA\u4E8E\u6837\u672C\u8BA1\u7B97\u5176\u504F\u5DEE\u7684\u5E73\u65B9\u548C\u3002",
            "a": "\u57FA\u4E8E\u6837\u672C\u8BA1\u7B97\u5176\u504F\u5DEE\u7684\u5E73\u65B9\u548C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6837\u672C\u4E2D\u7684\u7B2C\u4E00\u9879\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u6837\u672C\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "EXPON_DIST": {
            "d": "\u8FD4\u56DE\u5E26\u6709\u6307\u5B9A Lambda \u548C\u6307\u5B9A\u503C\u7684\u6307\u6570\u5206\u5E03\u51FD\u6570\u7684\u503C\u3002",
            "a": "\u8FD4\u56DE\u5E26\u6709\u6307\u5B9A Lambda \u548C\u6307\u5B9A\u503C\u7684\u6307\u6570\u5206\u5E03\u51FD\u6570\u7684\u503C\u3002",
            "p": [
              {
                "name": "x",
                "detail": "\u6307\u6570\u5206\u5E03\u51FD\u6570\u7684\u8F93\u5165\u503C\u3002"
              },
              {
                "name": "lambda",
                "detail": "\u7528\u4E8E\u6307\u5B9A\u6307\u6570\u5206\u5E03\u51FD\u6570\u7684 lambda \u503C\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u662F\u5426\u4F7F\u7528\u6307\u6570\u7D2F\u79EF\u5206\u5E03\u3002"
              }
            ]
          },
          "AVERAGEIF": {
            "d": "\u6839\u636E\u6761\u4EF6\u8FD4\u56DE\u8303\u56F4\u7684\u5E73\u5747\u503C\u3002",
            "a": "\u6839\u636E\u6761\u4EF6\u8FD4\u56DE\u8303\u56F4\u7684\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "criteria_range",
                "detail": "\u8981\u5BF9\u5176\u68C0\u67E5 criterion \u7684\u8303\u56F4\u3002"
              },
              {
                "name": "criterion",
                "detail": '\u8981\u5E94\u7528\u4E8E criteria_range \u7684\u6A21\u5F0F\u6216\u6D4B\u8BD5\u6761\u4EF6\u3002\n\n\u7B49\u4E8E\uFF1A"\u6587\u672C" \u6216 1 \u6216 "=\u6587\u672C" \u6216 "=1"\n\n\u5927\u4E8E\uFF1A">1"\n\n\u5927\u4E8E\u7B49\u4E8E\uFF1A">=1"\n\n\u5C0F\u4E8E\uFF1A"<1"\n\n\u5C0F\u4E8E\u7B49\u4E8E\uFF1A"<=1"\n\n\u4E0D\u7B49\u4E8E\uFF1A"<>1"\u6216"<>\u6587\u672C"'
              },
              {
                "name": "average_range",
                "detail": "[\u53EF\u9009] - \u8981\u8BA1\u7B97\u5E73\u5747\u503C\u7684\u8303\u56F4\u3002\u5982\u679C\u672A\u63D0\u4F9B\u6B64\u53C2\u6570\uFF0C\u5219\u6539\u7528 criteria_range \u6765\u8BA1\u7B97\u5E73\u5747\u503C\u3002"
              }
            ]
          },
          "AVERAGEIFS": {
            "d": "\u6839\u636E\u591A\u9879\u6761\u4EF6\u8FD4\u56DE\u8303\u56F4\u7684\u5E73\u5747\u503C\u3002",
            "a": "\u6839\u636E\u591A\u9879\u6761\u4EF6\u8FD4\u56DE\u8303\u56F4\u7684\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "average_range",
                "detail": "\u8981\u8BA1\u7B97\u5E73\u5747\u503C\u7684\u8303\u56F4\u3002"
              },
              {
                "name": "criteria_range1",
                "detail": "\u8981\u5BF9\u5176\u68C0\u67E5 criterion1 \u7684\u8303\u56F4\u3002"
              },
              {
                "name": "criterion1",
                "detail": "\u8981\u5E94\u7528\u4E8E criteria_range1 \u7684\u6A21\u5F0F\u6216\u6D4B\u8BD5\u6761\u4EF6\u3002"
              },
              {
                "name": "criteria_range2, criterion2, ...",
                "detail": "[\u53EF\u9009] - \u8981\u68C0\u67E5\u7684\u5176\u4ED6\u8303\u56F4\u548C\u6761\u4EF6\u3002"
              }
            ]
          },
          "PERMUT": {
            "d": "\u8FD4\u56DE\u53EF\u4ECE\u6570\u5B57\u5BF9\u8C61\u4E2D\u9009\u62E9\u7684\u7ED9\u5B9A\u6570\u76EE\u5BF9\u8C61\u7684\u6392\u5217\u6570\u3002",
            "a": "\u8FD4\u56DE\u53EF\u4ECE\u6570\u5B57\u5BF9\u8C61\u4E2D\u9009\u62E9\u7684\u7ED9\u5B9A\u6570\u76EE\u5BF9\u8C61\u7684\u6392\u5217\u6570\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u8868\u793A\u5BF9\u8C61\u4E2A\u6570\u7684\u6574\u6570\u3002"
              },
              {
                "name": "number_chosen",
                "detail": "\u8868\u793A\u6BCF\u4E2A\u6392\u5217\u4E2D\u5BF9\u8C61\u4E2A\u6570\u7684\u6574\u6570\u3002"
              }
            ]
          },
          "TRIMMEAN": {
            "d": "\u5728\u6392\u9664\u6570\u636E\u96C6\u9AD8\u4F4E\u4E24\u7AEF\u7684\u90E8\u5206\u6570\u636E\u4E4B\u540E\u8BA1\u7B97\u6240\u5F97\u7684\u5747\u503C\u3002",
            "a": "\u5728\u6392\u9664\u6570\u636E\u96C6\u9AD8\u4F4E\u4E24\u7AEF\u7684\u90E8\u5206\u6570\u636E\u4E4B\u540E\u8BA1\u7B97\u6240\u5F97\u7684\u5747\u503C\u3002",
            "p": [
              {
                "name": "\u6570\u636E",
                "detail": "\u5305\u542B\u76F8\u5173\u6570\u636E\u96C6\u7684\u6570\u7EC4\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u6392\u9664\u6BD4\u4F8B",
                "detail": "\u8981\u4ECE\u6570\u636E\u96C6\u7684\u6781\u503C\u90E8\u5206\u6392\u9664\u7684\u6570\u636E\u5360\u6570\u636E\u96C6\u7684\u6BD4\u4F8B\u3002\n\n\u6392\u9664\u6BD4\u4F8B\u5FC5\u987B\u5927\u4E8E\u7B49\u4E8E0\u4E14\u5C0F\u4E8E1\u3002"
              }
            ]
          },
          "PERCENTILE_EXC": {
            "d": "\u8FD4\u56DE\u6570\u7EC4\u7684 K \u767E\u5206\u70B9\u503C\uFF0CK \u4ECB\u4E8E 0 \u5230 1 \u4E4B\u95F4\uFF0C\u4E0D\u542B 0 \u4E0E 1\u3002",
            "a": "\u8FD4\u56DE\u6570\u7EC4\u7684 K \u767E\u5206\u70B9\u503C\uFF0CK \u4ECB\u4E8E 0 \u5230 1 \u4E4B\u95F4\uFF0C\u4E0D\u542B 0 \u4E0E 1\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u5B9A\u4E49\u76F8\u5BF9\u4F4D\u7F6E\u7684\u6570\u7EC4\u6216\u6570\u636E\u533A\u57DF\u3002"
              },
              {
                "name": "k",
                "detail": "0 \u5230 1 \u4E4B\u95F4\u7684\u767E\u5206\u70B9\u503C\uFF0C\u4E0D\u5305\u542B 0 \u548C 1\u3002"
              }
            ]
          },
          "PERCENTILE_INC": {
            "d": "\u8FD4\u56DE\u6570\u7EC4\u7684 K \u767E\u5206\u70B9\u503C\uFF0CK \u4ECB\u4E8E 0 \u5230 1 \u4E4B\u95F4\uFF0C\u5305\u542B 0 \u4E0E 1\u3002",
            "a": "\u8FD4\u56DE\u6570\u7EC4\u7684 K \u767E\u5206\u70B9\u503C\uFF0CK \u4ECB\u4E8E 0 \u5230 1 \u4E4B\u95F4\uFF0C\u5305\u542B 0 \u4E0E 1\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u5B9A\u4E49\u76F8\u5BF9\u4F4D\u7F6E\u7684\u6570\u7EC4\u6216\u6570\u636E\u533A\u57DF\u3002"
              },
              {
                "name": "k",
                "detail": "0 \u5230 1 \u4E4B\u95F4\u7684\u767E\u5206\u70B9\u503C\uFF0C\u5305\u542B 0 \u548C 1\u3002"
              }
            ]
          },
          "PEARSON": {
            "d": "\u8FD4\u56DE\u76AE\u5C14\u751F(Pearson)\u4E58\u79EF\u77E9\u76F8\u5173\u7CFB\u6570 r\u3002",
            "a": "\u8FD4\u56DE\u76AE\u5C14\u751F(Pearson)\u4E58\u79EF\u77E9\u76F8\u5173\u7CFB\u6570 r\u3002",
            "p": [
              {
                "name": "\u6570\u636E_x",
                "detail": "\u4EE3\u8868\u81EA\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              },
              {
                "name": "\u6570\u636E_y",
                "detail": "\u4EE3\u8868\u56E0\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              }
            ]
          },
          "NORM_S_INV": {
            "d": "\u8FD4\u56DE\u6807\u51C6\u6B63\u6001\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\u7684\u53CD\u51FD\u6570\u503C\u3002 \u8BE5\u5206\u5E03\u7684\u5E73\u5747\u503C\u4E3A 0\uFF0C\u6807\u51C6\u504F\u5DEE\u4E3A 1\u3002",
            "a": "\u8FD4\u56DE\u6807\u51C6\u6B63\u6001\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\u7684\u53CD\u51FD\u6570\u503C\u3002 \u8BE5\u5206\u5E03\u7684\u5E73\u5747\u503C\u4E3A 0\uFF0C\u6807\u51C6\u504F\u5DEE\u4E3A 1\u3002",
            "p": [
              {
                "name": "probability",
                "detail": "\u5BF9\u5E94\u4E8E\u6B63\u6001\u5206\u5E03\u7684\u6982\u7387\u3002"
              }
            ]
          },
          "NORM_S_DIST": {
            "d": "\u8FD4\u56DE\u6807\u51C6\u6B63\u6001\u5206\u5E03\u51FD\u6570\uFF08\u8BE5\u5206\u5E03\u7684\u5E73\u5747\u503C\u4E3A 0\uFF0C\u6807\u51C6\u504F\u5DEE\u4E3A 1\uFF09\u3002",
            "a": "\u8FD4\u56DE\u6807\u51C6\u6B63\u6001\u5206\u5E03\u51FD\u6570\uFF08\u8BE5\u5206\u5E03\u7684\u5E73\u5747\u503C\u4E3A 0\uFF0C\u6807\u51C6\u504F\u5DEE\u4E3A 1\uFF09\u3002",
            "p": [
              {
                "name": "z",
                "detail": "\u9700\u8981\u8BA1\u7B97\u5176\u5206\u5E03\u7684\u6570\u503C\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u51B3\u5B9A\u51FD\u6570\u5F62\u5F0F\u7684\u903B\u8F91\u503C\u3002\n\n\u5982\u679C\u4E3A TRUE()\uFF0C\u5219\u8FD4\u56DE\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\uFF1B\n\n\u5982\u679C\u4E3A FALSE()\uFF0C\u5219\u8FD4\u56DE\u6982\u7387\u5BC6\u5EA6\u51FD\u6570\u3002"
              }
            ]
          },
          "NORM_INV": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u5E73\u5747\u503C\u548C\u6807\u51C6\u504F\u5DEE\u7684\u6B63\u6001\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\u7684\u53CD\u51FD\u6570\u503C\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u5E73\u5747\u503C\u548C\u6807\u51C6\u504F\u5DEE\u7684\u6B63\u6001\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\u7684\u53CD\u51FD\u6570\u503C\u3002",
            "p": [
              {
                "name": "probability",
                "detail": "\u5BF9\u5E94\u4E8E\u6B63\u6001\u5206\u5E03\u7684\u6982\u7387\u3002"
              },
              {
                "name": "mean",
                "detail": "\u5206\u5E03\u7684\u7B97\u672F\u5E73\u5747\u503C\u3002"
              },
              {
                "name": "standard_dev",
                "detail": "\u5206\u5E03\u7684\u6807\u51C6\u504F\u5DEE\u3002"
              }
            ]
          },
          "NORM_DIST": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u5E73\u5747\u503C\u548C\u6807\u51C6\u504F\u5DEE\u7684\u6B63\u6001\u5206\u5E03\u51FD\u6570\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u5E73\u5747\u503C\u548C\u6807\u51C6\u504F\u5DEE\u7684\u6B63\u6001\u5206\u5E03\u51FD\u6570\u3002",
            "p": [
              {
                "name": "x",
                "detail": "\u9700\u8981\u8BA1\u7B97\u5176\u5206\u5E03\u7684\u6570\u503C\u3002"
              },
              {
                "name": "mean",
                "detail": "\u5206\u5E03\u7684\u7B97\u672F\u5E73\u5747\u503C\u3002"
              },
              {
                "name": "standard_dev",
                "detail": "\u5206\u5E03\u7684\u6807\u51C6\u504F\u5DEE\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u51B3\u5B9A\u51FD\u6570\u5F62\u5F0F\u7684\u903B\u8F91\u503C\u3002\n\n\u5982\u679C\u4E3A TRUE()\uFF0C\u5219\u8FD4\u56DE\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\uFF1B\n\n\u5982\u679C\u4E3A FALSE()\uFF0C\u5219\u8FD4\u56DE\u6982\u7387\u5BC6\u5EA6\u51FD\u6570\u3002"
              }
            ]
          },
          "NEGBINOM_DIST": {
            "d": "\u8FD4\u56DE\u8D1F\u4E8C\u9879\u5F0F\u5206\u5E03\u3002",
            "a": "\u8FD4\u56DE\u8D1F\u4E8C\u9879\u5F0F\u5206\u5E03\u3002",
            "p": [
              {
                "name": "number_f",
                "detail": "\u8981\u6A21\u62DF\u7684\u5931\u8D25\u6B21\u6570\u3002"
              },
              {
                "name": "number_s",
                "detail": "\u8981\u6A21\u62DF\u7684\u6210\u529F\u6B21\u6570\u3002"
              },
              {
                "name": "probability_s",
                "detail": "\u4EFB\u4E00\u6B21\u7ED9\u5B9A\u68C0\u9A8C\u7684\u6210\u529F\u6982\u7387\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u51B3\u5B9A\u51FD\u6570\u5F62\u5F0F\u7684\u903B\u8F91\u503C\u3002\n\n\u5982\u679C\u4E3A TRUE()\uFF0C\u5219\u8FD4\u56DE\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\uFF1B\n\n\u5982\u679C\u4E3A FALSE()\uFF0C\u5219\u8FD4\u56DE\u6982\u7387\u5BC6\u5EA6\u51FD\u6570\u3002"
              }
            ]
          },
          "MINA": {
            "d": "\u8FD4\u56DE\u6570\u636E\u96C6\u4E2D\u7684\u6700\u5C0F\u6570\u503C\u3002",
            "a": "\u8FD4\u56DE\u6570\u636E\u96C6\u4E2D\u7684\u6700\u5C0F\u6570\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8BA1\u7B97\u6700\u5C0F\u503C\u65F6\u6240\u7528\u7684\u7B2C\u4E00\u4E2A\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9009] - \u5728\u8BA1\u7B97\u6700\u5C0F\u503C\u65F6\u8981\u8003\u8651\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "MIN": {
            "d": "\u8FD4\u56DE\u6570\u503C\u6570\u636E\u96C6\u4E2D\u7684\u6700\u5C0F\u503C\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u6570\u636E\u96C6\u4E2D\u7684\u6700\u5C0F\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8BA1\u7B97\u6700\u5C0F\u503C\u65F6\u6240\u7528\u7684\u7B2C\u4E00\u4E2A\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9009] - \u5728\u8BA1\u7B97\u6700\u5C0F\u503C\u65F6\u8981\u8003\u8651\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "MEDIAN": {
            "d": "\u8FD4\u56DE\u6570\u503C\u6570\u636E\u96C6\u4E2D\u7684\u4E2D\u503C\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u6570\u636E\u96C6\u4E2D\u7684\u4E2D\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8BA1\u7B97\u4E2D\u503C\u65F6\u6240\u7528\u7684\u7B2C\u4E00\u4E2A\u6570\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9009] - \u5728\u8BA1\u7B97\u4E2D\u503C\u65F6\u8981\u8003\u8651\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "MAXA": {
            "d": "\u8FD4\u56DE\u6570\u636E\u96C6\u4E2D\u7684\u6700\u5927\u6570\u503C\u3002",
            "a": "\u8FD4\u56DE\u6570\u636E\u96C6\u4E2D\u7684\u6700\u5927\u6570\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8BA1\u7B97\u6700\u5927\u503C\u65F6\u6240\u7528\u7684\u7B2C\u4E00\u4E2A\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u5728\u8BA1\u7B97\u6700\u5927\u503C\u65F6\u8981\u8003\u8651\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "MAX": {
            "d": "\u8FD4\u56DE\u6570\u503C\u6570\u636E\u96C6\u4E2D\u7684\u6700\u5927\u503C\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u6570\u636E\u96C6\u4E2D\u7684\u6700\u5927\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8BA1\u7B97\u6700\u5927\u503C\u65F6\u6240\u7528\u7684\u7B2C\u4E00\u4E2A\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9009] - \u5728\u8BA1\u7B97\u6700\u5927\u503C\u65F6\u8981\u8003\u8651\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "LOGNORM_INV": {
            "d": "\u8FD4\u56DE x \u7684\u5BF9\u6570\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\u7684\u53CD\u51FD\u6570\u503C\u3002",
            "a": "\u8FD4\u56DE x \u7684\u5BF9\u6570\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\u7684\u53CD\u51FD\u6570\u503C\u3002",
            "p": [
              {
                "name": "probability",
                "detail": "\u4E0E\u5BF9\u6570\u5206\u5E03\u76F8\u5173\u7684\u6982\u7387\uFF0C\u4ECB\u4E8E 0 \u4E0E 1 \u4E4B\u95F4\uFF08\u4E0D\u542B 0 \u4E0E 1\uFF09\u3002"
              },
              {
                "name": "mean",
                "detail": "ln(x) \u7684\u5E73\u5747\u503C\u3002"
              },
              {
                "name": "standard_dev",
                "detail": "ln(x) \u7684\u6807\u51C6\u504F\u5DEE\uFF0C\u6B63\u6570\u3002"
              }
            ]
          },
          "LOGNORM_DIST": {
            "d": "\u8FD4\u56DE x \u7684\u5BF9\u6570\u5206\u5E03\u51FD\u6570\u3002",
            "a": "\u8FD4\u56DE x \u7684\u5BF9\u6570\u5206\u5E03\u51FD\u6570\u3002",
            "p": [
              {
                "name": "x",
                "detail": "\u7528\u6765\u8BA1\u7B97\u51FD\u6570\u7684\u503C\u3002"
              },
              {
                "name": "mean",
                "detail": "ln(x) \u7684\u5E73\u5747\u503C\u3002"
              },
              {
                "name": "standard_dev",
                "detail": "ln(x) \u7684\u6807\u51C6\u504F\u5DEE\uFF0C\u6B63\u6570\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u51B3\u5B9A\u51FD\u6570\u5F62\u5F0F\u7684\u903B\u8F91\u503C\u3002\n\n\u5982\u679C\u4E3A TRUE()\uFF0C\u5219\u8FD4\u56DE\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\uFF1B\n\n\u5982\u679C\u4E3A FALSE()\uFF0C\u5219\u8FD4\u56DE\u6982\u7387\u5BC6\u5EA6\u51FD\u6570\u3002"
              }
            ]
          },
          "Z_TEST": {
            "d": "\u8FD4\u56DE z \u68C0\u9A8C\u7684\u5355\u5C3E P \u503C\u3002",
            "a": "\u8FD4\u56DE z \u68C0\u9A8C\u7684\u5355\u5C3E P \u503C\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u7528\u6765\u68C0\u9A8C x \u7684\u6570\u7EC4\u6216\u6570\u636E\u533A\u57DF\u3002"
              },
              {
                "name": "x",
                "detail": "\u8981\u6D4B\u8BD5\u7684\u503C\u3002"
              },
              {
                "name": "sigma",
                "detail": "[\u53EF\u9009] - \u603B\u4F53\uFF08\u5DF2\u77E5\uFF09\u6807\u51C6\u504F\u5DEE\u3002 \u5982\u679C\u7701\u7565\uFF0C\u5219\u4F7F\u7528\u6837\u672C\u6807\u51C6\u504F\u5DEE\u3002"
              }
            ]
          },
          "PROB": {
            "d": "\u8FD4\u56DE\u533A\u57DF\u4E2D\u7684\u6570\u503C\u843D\u5728\u6307\u5B9A\u533A\u95F4\u5185\u7684\u6982\u7387\u3002",
            "a": "\u8FD4\u56DE\u533A\u57DF\u4E2D\u7684\u6570\u503C\u843D\u5728\u6307\u5B9A\u533A\u95F4\u5185\u7684\u6982\u7387\u3002",
            "p": [
              {
                "name": "x_range",
                "detail": "\u5177\u6709\u5404\u81EA\u76F8\u5E94\u6982\u7387\u503C\u7684 x \u6570\u503C\u533A\u57DF\u3002"
              },
              {
                "name": "prob_range",
                "detail": "\u4E0E x_range \u4E2D\u7684\u503C\u76F8\u5173\u8054\u7684\u4E00\u7EC4\u6982\u7387\u503C\u3002"
              },
              {
                "name": "lower_limit",
                "detail": "\u8981\u8BA1\u7B97\u5176\u6982\u7387\u7684\u6570\u503C\u4E0B\u754C\u3002"
              },
              {
                "name": "upper_limit",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A\u4E0B\u754C] - \u8981\u8BA1\u7B97\u5176\u6982\u7387\u7684\u53EF\u9009\u6570\u503C\u4E0A\u754C\u3002\n\n\u5982\u679C\u7701\u7565\u4E0A\u754C\uFF0CPROB\u5219\u8BA1\u7B97\u968F\u673A\u9009\u53D6\u76F8\u5E94\u503C\u7684\u6B21\u6570\u6070\u597D\u7B49\u4E8E\u4E0B\u754C\u7684\u6982\u7387\u3002"
              }
            ]
          },
          "QUARTILE_EXC": {
            "d": "\u57FA\u4E8E 0 \u5230 1 \u4E4B\u95F4\uFF08\u4E0D\u5305\u62EC 0 \u548C 1\uFF09\u7684\u767E\u5206\u70B9\u503C\u8FD4\u56DE\u6570\u636E\u96C6\u7684\u56DB\u5206\u4F4D\u6570\u3002",
            "a": "\u57FA\u4E8E 0 \u5230 1 \u4E4B\u95F4\uFF08\u4E0D\u5305\u62EC 0 \u548C 1\uFF09\u7684\u767E\u5206\u70B9\u503C\u8FD4\u56DE\u6570\u636E\u96C6\u7684\u56DB\u5206\u4F4D\u6570\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u8981\u6C42\u5F97\u56DB\u5206\u4F4D\u6570\u503C\u7684\u6570\u7EC4\u6216\u6570\u5B57\u578B\u5355\u5143\u683C\u533A\u57DF\u3002"
              },
              {
                "name": "quart",
                "detail": "\u8981\u8FD4\u56DE\u7B2C\u51E0\u4E2A\u56DB\u5206\u4F4D\u503C\u3002\n\n1\u8FD4\u56DE\u6570\u636E\u4E2D\u6700\u9760\u8FD1\u7B2C\u4E00\u4E2A\u56DB\u5206\u4F4D\u503C\u7684\u503C\uFF0825%\u6807\u8BB0\uFF09\u3002\n\n2\u8FD4\u56DE\u6570\u636E\u4E2D\u6700\u63A5\u8FD1\u4E2D\u503C\u7684\u503C\uFF0850%\u6807\u8BB0\uFF09\u3002\n\n3\u8FD4\u56DE\u6570\u636E\u4E2D\u6700\u63A5\u8FD1\u7B2C\u4E09\u4E2A\u56DB\u5206\u4F4D\u503C\u7684\u503C\uFF0875%\u6807\u8BB0\uFF09\u3002"
              }
            ]
          },
          "QUARTILE_INC": {
            "d": "\u6839\u636E 0 \u5230 1 \u4E4B\u95F4\u7684\u767E\u5206\u70B9\u503C\uFF08\u5305\u542B 0 \u548C 1\uFF09\u8FD4\u56DE\u6570\u636E\u96C6\u7684\u56DB\u5206\u4F4D\u6570\u3002",
            "a": "\u6839\u636E 0 \u5230 1 \u4E4B\u95F4\u7684\u767E\u5206\u70B9\u503C\uFF08\u5305\u542B 0 \u548C 1\uFF09\u8FD4\u56DE\u6570\u636E\u96C6\u7684\u56DB\u5206\u4F4D\u6570\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u8981\u6C42\u5F97\u56DB\u5206\u4F4D\u6570\u503C\u7684\u6570\u7EC4\u6216\u6570\u5B57\u578B\u5355\u5143\u683C\u533A\u57DF\u3002"
              },
              {
                "name": "quart",
                "detail": "\u8981\u8FD4\u56DE\u7B2C\u51E0\u4E2A\u56DB\u5206\u4F4D\u503C\u3002\n\n0\u8FD4\u56DE\u6570\u636E\u4E2D\u7684\u6700\u5C0F\u503C\uFF080%\u6807\u8BB0\uFF09\u3002\n\n1\u8FD4\u56DE\u6570\u636E\u4E2D\u6700\u9760\u8FD1\u7B2C\u4E00\u4E2A\u56DB\u5206\u4F4D\u503C\u7684\u503C\uFF0825%\u6807\u8BB0\uFF09\u3002\n\n2\u8FD4\u56DE\u6570\u636E\u4E2D\u6700\u63A5\u8FD1\u4E2D\u503C\u7684\u503C\uFF0850%\u6807\u8BB0\uFF09\u3002\n\n3\u8FD4\u56DE\u6570\u636E\u4E2D\u6700\u63A5\u8FD1\u7B2C\u4E09\u4E2A\u56DB\u5206\u4F4D\u503C\u7684\u503C\uFF0875%\u6807\u8BB0\uFF09\u3002\n\n4\u8FD4\u56DE\u6570\u636E\u4E2D\u7684\u6700\u5927\u503C\uFF08100%\u6807\u8BB0\uFF09\u3002"
              }
            ]
          },
          "POISSON_DIST": {
            "d": "\u8FD4\u56DE\u6CCA\u677E\u5206\u5E03\u3002",
            "a": "\u8FD4\u56DE\u6CCA\u677E\u5206\u5E03\u3002",
            "p": [
              {
                "name": "x",
                "detail": "\u4E8B\u4EF6\u6570\u3002"
              },
              {
                "name": "mean",
                "detail": "\u671F\u671B\u503C\u3002\u975E\u8D1F\u6570"
              },
              {
                "name": "cumulative",
                "detail": "\u4E00\u903B\u8F91\u503C\uFF0C\u786E\u5B9A\u6240\u8FD4\u56DE\u7684\u6982\u7387\u5206\u5E03\u7684\u5F62\u5F0F\u3002\n\n\u5982\u679C\u4E3A TRUE()\uFF0C\u5219\u8FD4\u56DE\u53D1\u751F\u7684\u968F\u673A\u4E8B\u4EF6\u6570\u5728\u96F6\uFF08\u542B\u96F6\uFF09\u548C x\uFF08\u542B x\uFF09\u4E4B\u95F4\u7684\u7D2F\u79EF\u6CCA\u677E\u6982\u7387\uFF1B\n\n\u5982\u679C\u4E3A FALSE()\uFF0C\u5219\u8FD4\u56DE\u53D1\u751F\u7684\u4E8B\u4EF6\u6570\u6B63\u597D\u662F x \u7684\u6CCA\u677E\u6982\u7387\u5BC6\u5EA6\u51FD\u6570\u3002"
              }
            ]
          },
          "RSQ": {
            "d": "\u8FD4\u56DE\u76AE\u5C14\u751F(Pearson)\u4E58\u79EF\u77E9\u76F8\u5173\u7CFB\u6570 r \u7684\u5E73\u65B9\u3002",
            "a": "\u8FD4\u56DE\u76AE\u5C14\u751F(Pearson)\u4E58\u79EF\u77E9\u76F8\u5173\u7CFB\u6570 r \u7684\u5E73\u65B9\u3002",
            "p": [
              {
                "name": "\u6570\u636E_y",
                "detail": "\u4EE3\u8868\u56E0\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              },
              {
                "name": "\u6570\u636E_x",
                "detail": "\u4EE3\u8868\u81EA\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              }
            ]
          },
          "T_DIST": {
            "d": "\u8FD4\u56DE\u5B66\u751F\u7684\u5DE6\u5C3E t \u5206\u5E03\u3002",
            "a": "\u8FD4\u56DE\u5B66\u751F\u7684\u5DE6\u5C3E t \u5206\u5E03\u3002",
            "p": [
              {
                "name": "x",
                "detail": "T-\u5206\u5E03\u51FD\u6570\u7684\u8F93\u5165\u3002"
              },
              {
                "name": "degrees_freedom",
                "detail": "\u81EA\u7531\u5EA6\u6570\u503C\u3002"
              },
              {
                "name": "tails",
                "detail": "\u51B3\u5B9A\u51FD\u6570\u5F62\u5F0F\u7684\u903B\u8F91\u503C\u3002\n\n\u5982\u679C cumulative \u4E3A TRUE()\uFF0C\u5219 HYPGEOM.DIST \u8FD4\u56DE\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\uFF1B\n\n\u5982\u679C\u4E3A FALSE()\uFF0C\u5219\u8FD4\u56DE\u6982\u7387\u5BC6\u5EA6\u51FD\u6570\u3002"
              }
            ]
          },
          "T_DIST_2T": {
            "d": "\u8FD4\u56DE\u5B66\u751F\u7684\u53CC\u5C3E t \u5206\u5E03\u3002",
            "a": "\u8FD4\u56DE\u5B66\u751F\u7684\u53CC\u5C3E t \u5206\u5E03\u3002",
            "p": [
              {
                "name": "x",
                "detail": "T-\u5206\u5E03\u51FD\u6570\u7684\u8F93\u5165\u3002"
              },
              {
                "name": "degrees_freedom",
                "detail": "\u81EA\u7531\u5EA6\u6570\u503C\u3002"
              }
            ]
          },
          "T_DIST_RT": {
            "d": "\u8FD4\u56DE\u5B66\u751F\u7684\u53F3\u5C3E t \u5206\u5E03\u3002",
            "a": "\u8FD4\u56DE\u5B66\u751F\u7684\u53F3\u5C3E t \u5206\u5E03\u3002",
            "p": [
              {
                "name": "x",
                "detail": "T-\u5206\u5E03\u51FD\u6570\u7684\u8F93\u5165\u3002"
              },
              {
                "name": "degrees_freedom",
                "detail": "\u81EA\u7531\u5EA6\u6570\u503C\u3002"
              }
            ]
          },
          "T_INV": {
            "d": "\u8FD4\u56DE\u5B66\u751F\u7684 t \u5206\u5E03\u7684\u5DE6\u5C3E\u53CD\u51FD\u6570\u3002",
            "a": "\u8FD4\u56DE\u5B66\u751F\u7684 t \u5206\u5E03\u7684\u5DE6\u5C3E\u53CD\u51FD\u6570\u3002",
            "p": [
              {
                "name": "probability",
                "detail": "\u4E0E\u5B66\u751F\u7684 t \u5206\u5E03\u76F8\u5173\u7684\u6982\u7387\u3002\n\n\u5FC5\u987B\u5927\u4E8E 0 \u4E14\u5C0F\u4E8E 1\u3002"
              },
              {
                "name": "deg_freedom",
                "detail": "\u81EA\u7531\u5EA6\u6570\u503C\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u53C2\u6570\u4E0D\u662F\u6574\u6570\uFF0C\u5C06\u622A\u53D6\u5176\u6574\u6570\u90E8\u5206\u3002\n\n\u5FC5\u987B\u5927\u4E8E\u7B49\u4E8E 1\u3002"
              }
            ]
          },
          "T_INV_2T": {
            "d": "\u8FD4\u56DE\u5B66\u751F t \u5206\u5E03\u7684\u53CC\u5C3E\u53CD\u51FD\u6570\u3002",
            "a": "\u8FD4\u56DE\u5B66\u751F t \u5206\u5E03\u7684\u53CC\u5C3E\u53CD\u51FD\u6570\u3002",
            "p": [
              {
                "name": "probability",
                "detail": "\u4E0E\u5B66\u751F\u7684 t \u5206\u5E03\u76F8\u5173\u7684\u6982\u7387\u3002\n\n\u5FC5\u987B\u5927\u4E8E 0 \u4E14\u5C0F\u4E8E1\u3002"
              },
              {
                "name": "deg_freedom",
                "detail": "\u81EA\u7531\u5EA6\u6570\u503C\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u53C2\u6570\u4E0D\u662F\u6574\u6570\uFF0C\u5C06\u622A\u53D6\u5176\u6574\u6570\u90E8\u5206\u3002\n\n\u5FC5\u987B\u5927\u4E8E\u7B49\u4E8E 1\u3002"
              }
            ]
          },
          "T_TEST": {
            "d": "\u8FD4\u56DE\u4E0Et-\u68C0\u9A8C\u76F8\u5173\u7684\u6982\u7387\u3002\u7528\u4E8E\u5224\u65AD\u4E24\u4E2A\u6837\u672C\u662F\u5426\u53EF\u80FD\u662F\u51FA\u81EA\u5E73\u5747\u503C\u76F8\u540C\u7684\u4E24\u4E2A\u6837\u672C\u603B\u4F53\u3002",
            "a": "\u8FD4\u56DE\u4E0Et-\u68C0\u9A8C\u76F8\u5173\u7684\u6982\u7387\u3002\u7528\u4E8E\u5224\u65AD\u4E24\u4E2A\u6837\u672C\u662F\u5426\u53EF\u80FD\u662F\u51FA\u81EA\u5E73\u5747\u503C\u76F8\u540C\u7684\u4E24\u4E2A\u6837\u672C\u603B\u4F53\u3002",
            "p": [
              {
                "name": "array1",
                "detail": "\u5C06\u7528\u4E8E t \u68C0\u9A8C\u7684\u7B2C\u4E00\u4E2A\u6570\u636E\u6837\u672C\u6216\u7B2C\u4E00\u7EC4\u5355\u5143\u683C\u3002"
              },
              {
                "name": "array2",
                "detail": "\u5C06\u7528\u4E8E t \u68C0\u9A8C\u7684\u7B2C\u4E8C\u4E2A\u6570\u636E\u6837\u672C\u6216\u7B2C\u4E8C\u7EC4\u5355\u5143\u683C\u3002"
              },
              {
                "name": "tails",
                "detail": "\u6307\u5B9A\u5206\u5E03\u7684\u5C3E\u6570\u3002\n\n\u5982\u679C\u4E3A 1\uFF1A\u4F7F\u7528\u5355\u5C3E\u5206\u5E03\u3002\n\n\u5982\u679C\u4E3A 2\uFF1A\u4F7F\u7528\u53CC\u5C3E\u5206\u5E03\u3002"
              },
              {
                "name": "type",
                "detail": "\u6307\u5B9A t \u68C0\u9A8C\u7684\u7C7B\u578B\u3002\n\n\u5982\u679C\u4E3A 1\uFF1A\u6267\u884C\u914D\u5BF9\u68C0\u9A8C\u3002\n\n\u5982\u679C\u4E3A 2\uFF1A\u6267\u884C\u53CC\u6837\u672C\u7B49\u65B9\u5DEE\uFF08\u540C\u65B9\u5DEE\uFF09\u68C0\u9A8C\u3002\n\n\u5982\u679C\u4E3A3\uFF1A\u6267\u884C\u53CC\u6837\u672C\u4E0D\u7B49\u65B9\u5DEE\uFF08\u5F02\u65B9\u5DEE\uFF09\u68C0\u9A8C\u3002"
              }
            ]
          },
          "F_DIST": {
            "d": "\u7ED9\u5B9A\u8F93\u5165\u503C x\uFF0C\u8BA1\u7B97\u4E24\u4E2A\u6570\u636E\u96C6\u7684\u5DE6\u5C3E F \u6982\u7387\u5206\u5E03\uFF08\u5DEE\u5F02\u7A0B\u5EA6\uFF09\u3002\u6B64\u5206\u5E03\u4E5F\u79F0\u4E3A Fisher-Snedecor \u5206\u5E03\u6216 Snedecor F \u5206\u5E03\u3002",
            "a": "\u7ED9\u5B9A\u8F93\u5165\u503C x",
            "p": [
              {
                "name": "x",
                "detail": "\u7528\u6765\u8BA1\u7B97\u51FD\u6570\u7684\u503C\u3002"
              },
              {
                "name": "degrees_freedom1",
                "detail": "\u5206\u5B50\u81EA\u7531\u5EA6\u3002"
              },
              {
                "name": "degrees_freedom2",
                "detail": "\u5206\u6BCD\u81EA\u7531\u5EA6\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u7528\u4E8E\u786E\u5B9A\u51FD\u6570\u5F62\u5F0F\u7684\u903B\u8F91\u503C\u3002\u9ED8\u8BA4\u503C\u4E3A FALSE\u3002\n\n\u5982\u679C\u4E3A TRUE()\uFF1AF.DIST \u5C06\u8FD4\u56DE\u7D2F\u79EF\u5206\u5E03\u51FD\u6570\u503C\u3002\n\n\u5982\u679C\u4E3A FALSE()\uFF1AF.DIST \u5C06\u8FD4\u56DE\u6982\u7387\u5BC6\u5EA6\u51FD\u6570\u503C\u3002"
              }
            ]
          },
          "F_DIST_RT": {
            "d": "\u7ED9\u5B9A\u8F93\u5165x\uFF0C\u8BA1\u7B97\u4E24\u4E2A\u6570\u636E\u96C6\u7684\u53F3\u5C3EF\u6982\u7387\u5206\u5E03\uFF08\u5DEE\u5F02\u7A0B\u5EA6\uFF09\u3002 \u6B64\u5206\u5E03\u4E5F\u79F0\u4E3AFisher-Snedecor\u5206\u5E03\u6216Snedecor F\u5206\u5E03\u3002",
            "a": "\u7ED9\u5B9A\u8F93\u5165x",
            "p": [
              {
                "name": "x",
                "detail": "\u7528\u6765\u8BA1\u7B97\u51FD\u6570\u7684\u503C\u3002"
              },
              {
                "name": "degrees_freedom1",
                "detail": "\u5206\u5B50\u81EA\u7531\u5EA6\u3002"
              },
              {
                "name": "degrees_freedom2",
                "detail": "\u5206\u6BCD\u81EA\u7531\u5EA6\u3002"
              }
            ]
          },
          "VAR_P": {
            "d": "\u57FA\u4E8E\u6837\u672C\u603B\u4F53\u8BA1\u7B97\u65B9\u5DEE\u3002",
            "a": "\u57FA\u4E8E\u6837\u672C\u603B\u4F53\u8BA1\u7B97\u65B9\u5DEE\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6570\u636E\u96C6\u4E2D\u7684\u7B2C\u4E00\u4E2A\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, \u2026",
                "detail": "[\u53EF\u9009] - \u6570\u636E\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "VAR_S": {
            "d": "\u57FA\u4E8E\u6837\u672C\u8BA1\u7B97\u65B9\u5DEE\u3002",
            "a": "\u57FA\u4E8E\u6837\u672C\u8BA1\u7B97\u65B9\u5DEE\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6837\u672C\u4E2D\u7684\u7B2C\u4E00\u9879\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, \u2026",
                "detail": "[\u53EF\u9009] - \u6837\u672C\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "VARA": {
            "d": "\u57FA\u4E8E\u6837\u672C\u8BA1\u7B97\u65B9\u5DEE\uFF0C\u5C06\u6587\u672C\u53D6\u503C\u4E3A0\u3002",
            "a": "\u57FA\u4E8E\u6837\u672C\u8BA1\u7B97\u65B9\u5DEE",
            "p": [
              {
                "name": "value1",
                "detail": "\u6837\u672C\u4E2D\u7684\u7B2C\u4E00\u9879\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "value2, ...",
                "detail": "[\u53EF\u9009] - \u6837\u672C\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "VARPA": {
            "d": "\u57FA\u4E8E\u6837\u672C\u603B\u4F53\u8BA1\u7B97\u65B9\u5DEE\uFF0C\u5C06\u6587\u672C\u53D6\u503C\u4E3A0\u3002",
            "a": "\u57FA\u4E8E\u6837\u672C\u603B\u4F53\u8BA1\u7B97\u65B9\u5DEE",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6837\u672C\u4E2D\u7684\u7B2C\u4E00\u9879\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u6570\u636E\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u6570\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "STEYX": {
            "d": "\u8FD4\u56DE\u901A\u8FC7\u7EBF\u6027\u56DE\u5F52\u6CD5\u9884\u6D4B\u6BCF\u4E2A x \u7684 y \u503C\u65F6\u6240\u4EA7\u751F\u7684\u6807\u51C6\u8BEF\u5DEE\u3002",
            "a": "\u8FD4\u56DE\u901A\u8FC7\u7EBF\u6027\u56DE\u5F52\u6CD5\u9884\u6D4B\u6BCF\u4E2A x \u7684 y \u503C\u65F6\u6240\u4EA7\u751F\u7684\u6807\u51C6\u8BEF\u5DEE\u3002",
            "p": [
              {
                "name": "\u6570\u636E_y",
                "detail": "\u4EE3\u8868\u56E0\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              },
              {
                "name": "\u6570\u636E_x",
                "detail": "\u4EE3\u8868\u81EA\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              }
            ]
          },
          "STANDARDIZE": {
            "d": "\u7ED9\u5B9A\u5206\u5E03\u7684\u5747\u503C\u548C\u6807\u51C6\u504F\u5DEE\uFF0C\u8BA1\u7B97\u4E00\u4E2A\u968F\u673A\u53D8\u91CF\u6B63\u6001\u5316\u7684\u76F8\u5E94\u503C\u3002",
            "a": "\u7ED9\u5B9A\u5206\u5E03\u7684\u5747\u503C\u548C\u6807\u51C6\u504F\u5DEE\uFF0C\u8BA1\u7B97\u4E00\u4E2A\u968F\u673A\u53D8\u91CF\u6B63\u6001\u5316\u7684\u76F8\u5E94\u503C\u3002",
            "p": [
              {
                "name": "x",
                "detail": "\u8981\u6B63\u6001\u5316\u7684\u968F\u673A\u53D8\u91CF\u503C\u3002"
              },
              {
                "name": "mean",
                "detail": "\u5206\u5E03\u7684\u5747\u503C\u3002"
              },
              {
                "name": "standard_dev",
                "detail": "\u5206\u5E03\u7684\u6807\u51C6\u504F\u5DEE\u3002"
              }
            ]
          },
          "SMALL": {
            "d": "\u8FD4\u56DE\u6570\u636E\u96C6\u4E2D\u7684\u7B2C k \u4E2A\u6700\u5C0F\u503C\u3002",
            "a": "\u8FD4\u56DE\u6570\u636E\u96C6\u4E2D\u7684\u7B2C k \u4E2A\u6700\u5C0F\u503C\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u9700\u8981\u627E\u5230\u7B2C k \u4E2A\u6700\u5C0F\u503C\u7684\u6570\u7EC4\u6216\u6570\u503C\u6570\u636E\u533A\u57DF\u3002"
              },
              {
                "name": "k",
                "detail": "\u8981\u8FD4\u56DE\u7684\u6570\u636E\u5728\u6570\u7EC4\u6216\u6570\u636E\u533A\u57DF\u91CC\u7684\u4F4D\u7F6E\uFF08\u4ECE\u5C0F\u5230\u5927\uFF09\u3002"
              }
            ]
          },
          "SLOPE": {
            "d": "\u8BA1\u7B97\u901A\u8FC7\u6570\u636E\u96C6\u7684\u7EBF\u6027\u56DE\u5F52\u5F97\u5230\u7684\u76F4\u7EBF\u7684\u659C\u7387\u3002",
            "a": "\u8BA1\u7B97\u901A\u8FC7\u6570\u636E\u96C6\u7684\u7EBF\u6027\u56DE\u5F52\u5F97\u5230\u7684\u76F4\u7EBF\u7684\u659C\u7387\u3002",
            "p": [
              {
                "name": "\u6570\u636E_y",
                "detail": "\u4EE3\u8868\u56E0\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              },
              {
                "name": "\u6570\u636E_x",
                "detail": "\u4EE3\u8868\u81EA\u53D8\u91CF\u6570\u636E\u6570\u7EC4\u6216\u77E9\u9635\u7684\u8303\u56F4\u3002"
              }
            ]
          },
          "SKEW": {
            "d": "\u8FD4\u56DE\u5206\u5E03\u7684\u504F\u659C\u5EA6\u3002 \u504F\u659C\u5EA6\u8868\u660E\u5206\u5E03\u76F8\u5BF9\u4E8E\u5E73\u5747\u503C\u7684\u4E0D\u5BF9\u79F0\u7A0B\u5EA6\u3002 \u6B63\u504F\u659C\u5EA6\u8868\u660E\u5206\u5E03\u7684\u4E0D\u5BF9\u79F0\u5C3E\u90E8\u8D8B\u5411\u4E8E\u66F4\u591A\u6B63\u503C\u3002 \u8D1F\u504F\u659C\u5EA6\u8868\u660E\u5206\u5E03\u7684\u4E0D\u5BF9\u79F0\u5C3E\u90E8\u8D8B\u5411\u4E8E\u66F4\u591A\u8D1F\u503C\u3002",
            "a": "\u8FD4\u56DE\u5206\u5E03\u7684\u504F\u659C\u5EA6\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6570\u636E\u96C6\u4E2D\u7684\u7B2C\u4E00\u4E2A\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u6570\u636E\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "SKEW_P": {
            "d": "\u8FD4\u56DE\u57FA\u4E8E\u6837\u672C\u603B\u4F53\u7684\u5206\u5E03\u4E0D\u5BF9\u79F0\u5EA6\uFF1A\u8868\u660E\u5206\u5E03\u76F8\u5BF9\u4E8E\u5E73\u5747\u503C\u7684\u4E0D\u5BF9\u79F0\u7A0B\u5EA6\u3002",
            "a": "\u8FD4\u56DE\u57FA\u4E8E\u6837\u672C\u603B\u4F53\u7684\u5206\u5E03\u4E0D\u5BF9\u79F0\u5EA6\uFF1A\u8868\u660E\u5206\u5E03\u76F8\u5BF9\u4E8E\u5E73\u5747\u503C\u7684\u4E0D\u5BF9\u79F0\u7A0B\u5EA6\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6570\u636E\u96C6\u4E2D\u7684\u7B2C\u4E00\u4E2A\u503C\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9009] - \u6570\u636E\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "VLOOKUP": {
            "d": "\u7EB5\u5411\u67E5\u627E\u3002\u5728\u8303\u56F4\u7684\u7B2C\u4E00\u5217\u4E2D\u81EA\u4E0A\u800C\u4E0B\u641C\u7D22\u67D0\u4E2A\u952E\u503C\uFF0C\u5E76\u8FD4\u56DE\u6240\u627E\u5230\u7684\u884C\u4E2D\u6307\u5B9A\u5355\u5143\u683C\u7684\u503C\u3002",
            "a": "\u7EB5\u5411\u67E5\u627E\u3002\u5728\u8303\u56F4\u7684\u7B2C\u4E00\u5217\u4E2D\u81EA\u4E0A\u800C\u4E0B\u641C\u7D22\u67D0\u4E2A\u952E\u503C",
            "p": [
              {
                "name": "\u641C\u7D22\u952E\u503C",
                "detail": '\u8981\u641C\u7D22\u7684\u503C\uFF0C\u5982 42\u3001"Cats" \u6216 I24\u3002'
              },
              {
                "name": "\u8303\u56F4",
                "detail": "\u8981\u8FDB\u884C\u641C\u7D22\u7684\u8303\u56F4\u3002VLOOKUP \u5C06\u5728\u8BE5\u8303\u56F4\u7684\u7B2C\u4E00\u5217\u4E2D\u641C\u7D22\u641C\u7D22\u952E\u503C\u4E2D\u6307\u5B9A\u7684\u952E\u503C\u3002"
              },
              {
                "name": "\u7D22\u5F15",
                "detail": "\u8981\u8FD4\u56DE\u7684\u503C\u7684\u5217\u7D22\u5F15\uFF0C\u8303\u56F4\u4E2D\u7684\u7B2C\u4E00\u5217\u7F16\u53F7\u4E3A 1\u3002\n\n\u5982\u679C\u7D22\u5F15\u4E0D\u662F\u4ECB\u4E8E 1 \u548C\u8303\u56F4\u4E2D\u7684\u5217\u6570\u4E4B\u95F4\uFF0C\u5C06\u8FD4\u56DE #VALUE! \u3002"
              },
              {
                "name": "\u5DF2\u6392\u5E8F",
                "detail": "[\u9ED8\u8BA4\u503C\u4E3A TRUE() ] - \u6307\u793A\u8981\u641C\u7D22\u7684\u5217\uFF08\u6307\u5B9A\u8303\u56F4\u7684\u7B2C\u4E00\u5217\uFF09\u662F\u5426\u5DF2\u6392\u5E8F\u3002\u5927\u591A\u6570\u60C5\u51B5\u4E0B\uFF0C\u5EFA\u8BAE\u8BBE\u4E3A FALSE()\u3002\n\n\u5EFA\u8BAE\u5C06\u5DF2\u6392\u5E8F\u8BBE\u4E3A FALSE\u3002\u5982\u679C\u8BBE\u4E3A FALSE\uFF0C\u5C06\u8FD4\u56DE\u5B8C\u5168\u5339\u914D\u9879\u3002\u5982\u679C\u5B58\u5728\u591A\u4E2A\u5339\u914D\u503C\uFF0C\u5C06\u8FD4\u56DE\u627E\u5230\u7684\u7B2C\u4E00\u4E2A\u503C\u5BF9\u5E94\u7684\u5355\u5143\u683C\u7684\u5185\u5BB9\uFF0C\u5982\u679C\u627E\u4E0D\u5230\u5339\u914D\u503C\uFF0C\u5219\u8FD4\u56DE #N/A\u3002\n\n\u5982\u679C\u5C06\u5DF2\u6392\u5E8F\u8BBE\u4E3A TRUE \u6216\u7701\u7565\uFF0C\u5C06\u8FD4\u56DE\uFF08\u5C0F\u4E8E\u6216\u7B49\u4E8E\u641C\u7D22\u952E\u503C\u7684\uFF09\u6700\u63A5\u8FD1\u7684\u5339\u914D\u9879\u3002\u5982\u679C\u641C\u7D22\u7684\u5217\u4E2D\u6240\u6709\u7684\u503C\u5747\u5927\u4E8E\u641C\u7D22\u952E\u503C\uFF0C\u5219\u8FD4\u56DE #N/A\u3002"
              }
            ]
          },
          "HLOOKUP": {
            "d": "\u6A2A\u5411\u67E5\u627E\u3002\u5728\u8303\u56F4\u7684\u7B2C\u4E00\u884C\u4E2D\u641C\u7D22\u67D0\u4E2A\u952E\u503C\uFF0C\u5E76\u8FD4\u56DE\u6240\u627E\u5230\u7684\u5217\u4E2D\u6307\u5B9A\u5355\u5143\u683C\u7684\u503C\u3002",
            "a": "\u6A2A\u5411\u67E5\u627E\u3002\u5728\u8303\u56F4\u7684\u7B2C\u4E00\u884C\u4E2D\u641C\u7D22\u67D0\u4E2A\u952E\u503C",
            "p": [
              {
                "name": "\u641C\u7D22\u952E\u503C",
                "detail": '\u8981\u641C\u7D22\u7684\u503C\u3002\u4F8B\u5982\uFF0C42\u3001"Cats"\u6216I24\u3002'
              },
              {
                "name": "\u8303\u56F4",
                "detail": "\u8981\u8FDB\u884C\u641C\u7D22\u7684\u8303\u56F4\u3002\u5C06\u5728\u8BE5\u8303\u56F4\u7684\u7B2C\u4E00\u884C\u4E2D\u641C\u7D22\u5728\u641C\u7D22\u952E\u503C\u4E2D\u6307\u5B9A\u7684\u952E\u503C\u3002"
              },
              {
                "name": "\u7D22\u5F15",
                "detail": "\u8981\u8FD4\u56DE\u7684\u503C\u7684\u884C\u7D22\u5F15\uFF0C\u8303\u56F4\u4E2D\u7684\u7B2C\u4E00\u884C\u7F16\u53F7\u4E3A1\u3002\n\n\u5982\u679C\u7D22\u5F15\u4E0D\u662F\u4ECB\u4E8E1\u548C\u8303\u56F4\u4E2D\u7684\u884C\u6570\u4E4B\u95F4\uFF0C\u5C06\u8FD4\u56DE#VALUE!\u3002"
              },
              {
                "name": "\u5DF2\u6392\u5E8F",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3ATRUE()] - \u6307\u793A\u8981\u641C\u7D22\u7684\u884C\uFF08\u6307\u5B9A\u8303\u56F4\u7684\u7B2C\u4E00\u884C\uFF09\u662F\u5426\u5DF2\u6392\u5E8F\u3002\n\n\u5982\u679C\u5C06\u5DF2\u6392\u5E8F\u8BBE\u4E3ATRUE\u6216\u7701\u7565\uFF0C\u5C06\u8FD4\u56DE\u6700\u63A5\u8FD1\u7684\u5339\u914D\u503C\uFF08\u5C0F\u4E8E\u6216\u7B49\u4E8E\u641C\u7D22\u952E\u503C\uFF09\u3002\u5982\u679C\u5728\u641C\u7D22\u7684\u884C\u4E2D\u6240\u6709\u7684\u503C\u5747\u5927\u4E8E\u641C\u7D22\u952E\u503C\uFF0C\u5219\u8FD4\u56DE#N/A\u3002\n\n\u5982\u679C\u5C06\u5DF2\u6392\u5E8F\u8BBE\u4E3ATRUE\u6216\u5C06\u5176\u7701\u7565\uFF0C\u800C\u8303\u56F4\u7684\u9996\u884C\u5E76\u975E\u5904\u4E8E\u5DF2\u6392\u5E8F\u72B6\u6001\uFF0C\u5219\u8FD4\u56DE\u503C\u53EF\u80FD\u4F1A\u662F\u9519\u8BEF\u7684\u3002\n\n\u5982\u679C\u5C06\u5DF2\u6392\u5E8F\u8BBE\u4E3AFALSE\uFF0C\u5219\u4EC5\u8FD4\u56DE\u5B8C\u5168\u5339\u914D\u3002\u5982\u679C\u5B58\u5728\u591A\u4E2A\u5339\u914D\u503C\uFF0C\u5C06\u8FD4\u56DE\u4E0E\u627E\u5230\u7684\u7B2C\u4E00\u4E2A\u503C\u5BF9\u5E94\u7684\u5355\u5143\u683C\u7684\u5185\u5BB9\uFF0C\u5982\u679C\u627E\u4E0D\u5230\u5339\u914D\u503C\u5219\u8FD4\u56DE#N/A\u3002"
              }
            ]
          },
          "LOOKUP": {
            "d": "\u5728\u884C\u6216\u5217\u4E2D\u67E5\u627E\u76F8\u5E94\u952E\uFF0C\u5E76\u5C06\u76F8\u5E94\u5355\u5143\u683C\u7684\u503C\u8FD4\u56DE\u5230\u4E0E\u641C\u7D22\u884C\u6216\u5217\u6240\u5728\u4F4D\u7F6E\u76F8\u540C\u7684\u7ED3\u679C\u8303\u56F4\u4E2D\u3002",
            "a": "\u5728\u884C\u6216\u5217\u4E2D\u67E5\u627E\u76F8\u5E94\u952E",
            "p": [
              {
                "name": "\u641C\u7D22\u952E\u503C",
                "detail": '\u8981\u5728\u884C\u6216\u5217\u4E2D\u641C\u7D22\u7684\u503C\u3002\u4F8B\u5982\uFF0C42\u3001"Cats" \u6216 I24\u3002'
              },
              {
                "name": "\u641C\u7D22\u8303\u56F4 | \u641C\u7D22\u7ED3\u679C\u6570\u7EC4",
                "detail": "\u4F7F\u7528 LOOKUP \u7684\u4E00\u79CD\u65B9\u6CD5\u662F\u7ED9\u5B9A\u5355\u884C\u6216\u5355\u5217\u5F62\u5F0F\u7684\u641C\u7D22\u8303\u56F4\u8FDB\u884C\u641C\u7D22\u67E5\u627E\uFF0C\u8FD9\u79CD\u65B9\u5F0F\u8981\u7528\u5230\u53E6\u4E00\u4E2A\u53C2\u6570\u7ED3\u679C\u8303\u56F4\u3002\u53E6\u4E00\u79CD\u65B9\u5F0F\u662F\u5C06\u8FD9\u4E24\u4E2A\u53C2\u6570\u5408\u5E76\u4E3A\u4E00\u4E2A\u641C\u7D22\u7ED3\u679C\u6570\u7EC4\uFF0C\u5176\u4E2D\u7B2C\u4E00\u884C\u6216\u7B2C\u4E00\u5217\u7528\u4E8E\u641C\u7D22\uFF0C\u5E76\u5C06\u8FD4\u56DE\u503C\u653E\u5728\u8BE5\u6570\u7EC4\u7684\u6700\u540E\u4E00\u884C\u6216\u6700\u540E\u4E00\u5217\u4E2D\u3002"
              },
              {
                "name": "\u7ED3\u679C\u8303\u56F4",
                "detail": "[ \u53EF\u9009 ] - \u7528\u4E8E\u5B58\u653E\u8FD4\u56DE\u7ED3\u679C\u7684\u8303\u56F4\u3002\u8FD4\u56DE\u503C\u5BF9\u5E94\u4E8E\u5728\u641C\u7D22\u8303\u56F4\u4E2D\u627E\u5230\u641C\u7D22\u952E\u503C\u7684\u4F4D\u7F6E\u3002\u6B64\u8303\u56F4\u5FC5\u987B\u4EC5\u4E3A\u5355\u884C\u6216\u5355\u5217\uFF0C\u800C\u5982\u679C\u60A8\u4F7F\u7528\u7684\u662F\u641C\u7D22\u7ED3\u679C\u6570\u7EC4\u65B9\u5F0F\uFF0C\u5219\u4E0D\u5E94\u63D0\u4F9B\u6B64\u53C2\u6570\u3002"
              }
            ]
          },
          "ADDRESS": {
            "d": "\u8FD4\u56DE\u5B57\u7B26\u4E32\u5F62\u5F0F\u7684\u5355\u5143\u683C\u5F15\u7528\u3002",
            "a": "\u8FD4\u56DE\u5B57\u7B26\u4E32\u5F62\u5F0F\u7684\u5355\u5143\u683C\u5F15\u7528\u3002",
            "p": [
              {
                "name": "row_num",
                "detail": "\u4E00\u4E2A\u6570\u503C\uFF0C\u6307\u5B9A\u8981\u5728\u5355\u5143\u683C\u5F15\u7528\u4E2D\u4F7F\u7528\u7684\u884C\u53F7\u3002"
              },
              {
                "name": "column_num",
                "detail": "\u4E00\u4E2A\u6570\u503C\uFF0C\u6307\u5B9A\u8981\u5728\u5355\u5143\u683C\u5F15\u7528\u4E2D\u4F7F\u7528\u7684\u5217\u53F7\uFF08\u800C\u975E\u540D\u79F0\uFF09\u3002A\u5217\u7684\u7F16\u53F7\u4E3A1\u3002"
              },
              {
                "name": "abs_num",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A1] - \u4E00\u4E2A\u6570\u503C\uFF0C\u6307\u5B9A\u8981\u8FD4\u56DE\u7684\u5F15\u7528\u7C7B\u578B\u3002\n\n1 \u8868\u793A\u884C\u5217\u5747\u91C7\u7528\u7EDD\u5BF9\u503C\uFF08\u4F8B\u5982$A$1\uFF09\uFF1B\n\n2 \u8868\u793A\u91C7\u7528\u7EDD\u5BF9\u884C\u53F7\uFF0C\u76F8\u5BF9\u5217\u6807\uFF08\u4F8B\u5982A$1\uFF09\uFF1B\n\n3 \u8868\u793A\u91C7\u7528\u76F8\u5BF9\u884C\u53F7\uFF0C\u7EDD\u5BF9\u5217\u6807\uFF08\u4F8B\u5982$A1\uFF09\uFF1B\n\n4 \u8868\u793A\u884C\u5217\u5747\u91C7\u7528\u76F8\u5BF9\u503C\uFF08\u4F8B\u5982A1\uFF09\u3002"
              },
              {
                "name": "A1",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3ATRUE()] - \u4E00\u4E2A\u5E03\u5C14\u503C\uFF0C\u6307\u793A\u91C7\u7528A1\u6807\u8BB0\u5F62\u5F0F(TRUE)\u8FD8\u662FR1C1\u6807\u8BB0\u5F62\u5F0F(FALSE)\u3002"
              },
              {
                "name": "sheet_text",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u7F3A\u7701] - \u7528\u4E8E\u6307\u5B9A\u5730\u5740\u6240\u6307\u5411\u7684\u5DE5\u4F5C\u8868\u540D\u79F0\u3002"
              }
            ]
          },
          "INDIRECT": {
            "d": "\u8FD4\u56DE\u4EE5\u5B57\u7B26\u4E32\u6307\u5B9A\u7684\u5355\u5143\u683C\u5F15\u7528\u3002",
            "a": "\u8FD4\u56DE\u4EE5\u5B57\u7B26\u4E32\u6307\u5B9A\u7684\u5355\u5143\u683C\u5F15\u7528\u3002",
            "p": [
              {
                "name": "ref_text",
                "detail": "\u4EE5\u5E26\u5F15\u53F7\u7684\u5B57\u7B26\u4E32\u5F62\u5F0F\u63D0\u4F9B\u7684\u5355\u5143\u683C\u5F15\u7528\u3002"
              },
              {
                "name": "A1",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3ATRUE()] - \u4E00\u4E2A\u5E03\u5C14\u503C\uFF0C\u6307\u793A\u91C7\u7528A1\u6807\u8BB0\u5F62\u5F0F(TRUE)\u8FD8\u662FR1C1\u6807\u8BB0\u5F62\u5F0F(FALSE)\u3002"
              }
            ]
          },
          "ROW": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u5355\u5143\u683C\u7684\u884C\u53F7",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u5355\u5143\u683C\u7684\u884C\u53F7",
            "p": [
              {
                "name": "reference",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A\u6B64\u516C\u5F0F\u6240\u5728\u7684\u5355\u5143\u683C] - \u8981\u8FD4\u56DE\u5176\u884C\u53F7\u7684\u5355\u5143\u683C\u3002\n\n\u5982\u679C\u5355\u5143\u683C\u5F15\u7528\u6307\u5411\u7684\u8303\u56F4\u5176\u5BBD\u5EA6\u5927\u4E8E\u4E00\u4E2A\u5355\u5143\u683C\uFF0C\u800C\u6B64\u516C\u5F0F\u4E0D\u662F\u7528\u4F5C\u6570\u7EC4\u516C\u5F0F\u7684\uFF0C\u8FD9\u65F6\u4F1A\u4EC5\u8FD4\u56DE\u5355\u5143\u683C\u5F15\u7528\u4E2D\u9996\u884C\u7684\u7F16\u53F7\u503C\u3002"
              }
            ]
          },
          "ROWS": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u6570\u7EC4\u6216\u8303\u56F4\u4E2D\u7684\u884C\u6570\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u6570\u7EC4\u6216\u8303\u56F4\u4E2D\u7684\u884C\u6570\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u8981\u8FD4\u56DE\u5176\u884C\u6570\u7684\u8303\u56F4\u3002"
              }
            ]
          },
          "COLUMN": {
            "d": "\u6309\u7167 `A=1` \u7684\u89C4\u5219\u8FD4\u56DE\u6307\u5B9A\u5355\u5143\u683C\u7684\u5217\u53F7\u3002",
            "a": "\u6309\u7167 `A=1` \u7684\u89C4\u5219\u8FD4\u56DE\u6307\u5B9A\u5355\u5143\u683C\u7684\u5217\u53F7\u3002",
            "p": [
              {
                "name": "reference",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A\u5305\u542B\u6B64\u516C\u5F0F\u7684\u5355\u5143\u683C] - \u8981\u8FD4\u56DE\u5176\u5217\u53F7\u7684\u5355\u5143\u683C\u3002A\u5217\u5BF9\u5E94\u7684\u7F16\u53F7\u4E3A1\u3002\n\n\u5982\u679C\u5355\u5143\u683C\u5F15\u7528\u662F\u5BBD\u5EA6\u8D85\u8FC7\u4E00\u4E2A\u5355\u5143\u683C\u7684\u8303\u56F4\uFF0C\u800C\u6B64\u516C\u5F0F\u4E0D\u662F\u4F5C\u4E3A\u6570\u7EC4\u516C\u5F0F\u6765\u4F7F\u7528\u7684\uFF0C\u56E0\u6B64\u5C06\u8FD4\u56DE\u5355\u5143\u683C\u5F15\u7528\u4E2D\u7684\u7B2C\u4E00\u5217\u7684\u4F4D\u7F6E\u3002"
              }
            ]
          },
          "COLUMNS": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u6570\u7EC4\u6216\u8303\u56F4\u4E2D\u7684\u5217\u6570\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u6570\u7EC4\u6216\u8303\u56F4\u4E2D\u7684\u5217\u6570\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u8981\u8FD4\u56DE\u5176\u5217\u6570\u7684\u8303\u56F4\u3002"
              }
            ]
          },
          "OFFSET": {
            "d": "\u7ED9\u5B9A\u67D0\u8303\u56F4\u7684\u8D77\u59CB\u5355\u5143\u683C\u5F15\u7528\u4EE5\u53CA\u8BE5\u8303\u56F4\u6DB5\u76D6\u7684\u884C\u5217\u6570\u91CF\uFF0C\u8FD4\u56DE\u8BE5\u8303\u56F4\u7684\u5F15\u7528\u3002",
            "a": "\u7ED9\u5B9A\u67D0\u8303\u56F4\u7684\u8D77\u59CB\u5355\u5143\u683C\u5F15\u7528\u4EE5\u53CA\u8BE5\u8303\u56F4\u6DB5\u76D6\u7684\u884C\u5217\u6570\u91CF\uFF0C\u8FD4\u56DE\u8BE5\u8303\u56F4\u7684\u5F15\u7528\u3002",
            "p": [
              {
                "name": "reference",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u884C\u5217\u504F\u79FB\u91CF\u7684\u8D77\u70B9\u3002"
              },
              {
                "name": "rows",
                "detail": "\u8981\u504F\u79FB\u7684\u884C\u6570\u3002\n\n\u884C\u504F\u79FB\u91CF\u5FC5\u987B\u662F\u6574\u6570\uFF0C\u4F46\u4E5F\u53EF\u4EE5\u662F\u8D1F\u6570\u3002\u5982\u679C\u63D0\u4F9B\u7684\u53C2\u6570\u5E26\u6709\u5C0F\u6570\uFF0C\u5C0F\u6570\u90E8\u5206\u5C06\u88AB\u622A\u53BB\u3002"
              },
              {
                "name": "cols",
                "detail": "\u8981\u504F\u79FB\u7684\u5217\u6570\u3002\n\n\u5217\u504F\u79FB\u91CF\u5FC5\u987B\u662F\u6574\u6570\uFF0C\u4F46\u4E5F\u53EF\u4EE5\u662F\u8D1F\u6570\u3002\u5982\u679C\u63D0\u4F9B\u7684\u53C2\u6570\u5E26\u6709\u5C0F\u6570\uFF0C\u5C0F\u6570\u90E8\u5206\u5C06\u88AB\u622A\u53BB\u3002"
              },
              {
                "name": "height",
                "detail": "[\u53EF\u9009] - \u8981\u4ECE\u504F\u79FB\u76EE\u6807\u5F00\u59CB\u8FD4\u56DE\u7684\u8303\u56F4\u7684\u9AD8\u5EA6\u3002"
              },
              {
                "name": "width",
                "detail": "[\u53EF\u9009] - \u8981\u4ECE\u504F\u79FB\u76EE\u6807\u5F00\u59CB\u8FD4\u56DE\u7684\u8303\u56F4\u7684\u5BBD\u5EA6\u3002"
              }
            ]
          },
          "MATCH": {
            "d": "\u5728\u5355\u5143\u683C\u4E2D\u641C\u7D22\u6307\u5B9A\u9879\uFF0C\u7136\u540E\u8FD4\u56DE\u8BE5\u9879\u5728\u5355\u5143\u683C\u533A\u57DF\u4E2D\u7684\u76F8\u5BF9\u4F4D\u7F6E\u3002",
            "a": "\u5728\u5355\u5143\u683C\u4E2D\u641C\u7D22\u6307\u5B9A\u9879\uFF0C\u7136\u540E\u8FD4\u56DE\u8BE5\u9879\u5728\u5355\u5143\u683C\u533A\u57DF\u4E2D\u7684\u76F8\u5BF9\u4F4D\u7F6E\u3002",
            "p": [
              {
                "name": "lookup_value",
                "detail": "\u8981\u5728 lookup_array \u4E2D\u5339\u914D\u7684\u503C\u3002"
              },
              {
                "name": "lookup_array",
                "detail": "\u8981\u641C\u7D22\u7684\u5355\u5143\u683C\u533A\u57DF\u3002\n\n\u5982\u679C\u6240\u7528\u7684\u8303\u56F4\u7684\u9AD8\u5EA6\u548C\u5BBD\u5EA6\u5747\u5927\u4E8E1\uFF0CMATCH\u5C06\u8FD4\u56DE#N/A!\u3002"
              },
              {
                "name": "match_type",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A1] - \u8981\u91C7\u7528\u7684\u641C\u7D22\u65B9\u5F0F\u3002\n\n1\u4E3A\u9ED8\u8BA4\u7C7B\u578B\uFF0C\u6B64\u65F6MATCH\u4F1A\u5047\u8BBE\u8303\u56F4\u5DF2\u6309\u5347\u5E8F\u6392\u5E8F\uFF0C\u5E76\u8FD4\u56DE\u5C0F\u4E8E\u7B49\u4E8E\u641C\u7D22\u952E\u503C\u7684\u6700\u5927\u503C\u3002\n\n0\u8868\u793A\u5B8C\u5168\u5339\u914D\uFF0C\u5728\u8303\u56F4\u672A\u6392\u5E8F\u7684\u60C5\u51B5\u4E0B\u9700\u8981\u4F7F\u7528\u6B64\u65B9\u5F0F\u3002\n\n-1\u8BA9MATCH\u5047\u8BBE\u8303\u56F4\u662F\u6309\u964D\u5E8F\u6392\u5E8F\u7684\uFF0C\u5E76\u8FD4\u56DE\u5927\u4E8E\u7B49\u4E8E\u641C\u7D22\u952E\u503C\u7684\u6700\u5C0F\u503C\u3002"
              }
            ]
          },
          "INDEX": {
            "d": "\u8FD4\u56DE\u8868\u683C\u6216\u4E2D\u7684\u5143\u7D20\u503C\uFF0C\u6B64\u5143\u7D20\u7531\u884C\u53F7\u548C\u5217\u53F7\u7684\u7D22\u5F15\u503C\u7ED9\u5B9A\u3002",
            "a": "\u8FD4\u56DE\u8868\u683C\u6216\u4E2D\u7684\u5143\u7D20\u503C\uFF0C\u6B64\u5143\u7D20\u7531\u884C\u53F7\u548C\u5217\u53F7\u7684\u7D22\u5F15\u503C\u7ED9\u5B9A\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u5355\u5143\u683C\u533A\u57DF\u6216\u6570\u7EC4\u5E38\u91CF\u3002"
              },
              {
                "name": "row_num",
                "detail": "\u9009\u62E9\u6570\u7EC4\u4E2D\u7684\u67D0\u884C\uFF0C\u51FD\u6570\u4ECE\u8BE5\u884C\u8FD4\u56DE\u6570\u503C\u3002"
              },
              {
                "name": "column_num",
                "detail": "\u9009\u62E9\u6570\u7EC4\u4E2D\u7684\u67D0\u5217\uFF0C\u51FD\u6570\u4ECE\u8BE5\u5217\u8FD4\u56DE\u6570\u503C\u3002"
              }
            ]
          },
          "GETPIVOTDATA": {
            "d": "\u4ECE\u4E0E\u6307\u5B9A\u884C\u548C\u5217\u6807\u9898\u5BF9\u5E94\u7684\u6570\u636E\u900F\u89C6\u8868\u4E2D\u63D0\u53D6\u6C47\u603B\u503C\u3002",
            "a": "\u4ECE\u4E0E\u6307\u5B9A\u884C\u548C\u5217\u6807\u9898\u5BF9\u5E94\u7684\u6570\u636E\u900F\u89C6\u8868\u4E2D\u63D0\u53D6\u6C47\u603B\u503C\u3002",
            "p": [
              {
                "name": "data_field",
                "detail": "\u60A8\u60F3\u4ECE\u6570\u636E\u900F\u89C6\u8868\u4E2D\u83B7\u53D6\u5176\u6570\u636E\u7684\u503C\u540D\u79F0\u3002\n\u503C\u540D\u79F0\u5FC5\u987B\u62EC\u5728\u5F15\u53F7\u4E2D\u6216\u662F\u6307\u5411\u5305\u542B\u76F8\u5173\u6587\u672C\u7684\u4EFB\u4F55\u5355\u5143\u683C\u7684\u5F15\u7528\u3002\n\u5982\u679C\u6709\u591A\u4E2A\u503C\u5B57\u6BB5\uFF0C\u5219\u5FC5\u987B\u4F7F\u7528\u6570\u636E\u900F\u89C6\u8868\u4E2D\u663E\u793A\u7684\u786E\u5207\u540D\u79F0\uFF08\u5982\u201C\u9500\u552E\u603B\u989D\u201D\uFF09\u3002"
              },
              {
                "name": "pivot_table",
                "detail": "\u76EE\u6807\u6570\u636E\u900F\u89C6\u8868\u4E2D\u7684\u4EFB\u4F55\u5355\u5143\u683C\u7684\u5F15\u7528\uFF08\u63A8\u8350\u4F4D\u4E8E\u9876\u89D2\u7684\u5355\u5143\u683C\uFF09\u3002"
              },
              {
                "name": "field1",
                "detail": "[\u53EF\u9009] - \u6E90\u6570\u636E\u96C6\uFF08\u4E0D\u662F\u6570\u636E\u900F\u89C6\u8868\uFF09\u4E2D\u5217\u7684\u540D\u79F0\u3002"
              },
              {
                "name": "item1",
                "detail": "[\u53EF\u9009] - \u6570\u636E\u900F\u89C6\u8868\u4E2D\u663E\u793A\u7684\u4E0E\u60A8\u8981\u68C0\u7D22\u7684\u5B57\u6BB5\u540D\u79F0 1 \u76F8\u5BF9\u5E94\u7684\u884C\u6216\u5217\u7684\u540D\u79F0\u3002"
              }
            ]
          },
          "CHOOSE": {
            "d": "\u57FA\u4E8E\u7D22\u5F15\u8FD4\u56DE\u9009\u9879\u5217\u8868\u4E2D\u7684\u5143\u7D20\u3002",
            "a": "\u57FA\u4E8E\u7D22\u5F15\u8FD4\u56DE\u9009\u9879\u5217\u8868\u4E2D\u7684\u5143\u7D20\u3002",
            "p": [
              {
                "name": "index_num",
                "detail": "\u6307\u5B9A\u8981\u8FD4\u56DE\u54EA\u4E00\u9879\u3002\n\n\u5982\u679C\u7D22\u5F15\u4E3A\u96F6\u3001\u8D1F\u503C\u6216\u5927\u4E8E\u63D0\u4F9B\u7684\u9009\u62E9\u6570\u91CF\uFF0C\u5C06\u8FD4\u56DE#VALUE!\u9519\u8BEF\u3002"
              },
              {
                "name": "value1",
                "detail": "\u4E00\u9879\u53EF\u80FD\u7684\u8FD4\u56DE\u503C\u3002\u5FC5\u987B\u63D0\u4F9B\u3002\u53EF\u4EE5\u662F\u5355\u5143\u683C\u5F15\u7528\u6216\u5355\u72EC\u7684\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "[\u53EF\u9009] - \u5176\u4ED6\u53EF\u4EE5\u9009\u62E9\u7684\u503C\u3002\u9009\u62E9"
              }
            ]
          },
          "HYPERLINK": {
            "d": "\u5728\u5355\u5143\u683C\u5185\u521B\u5EFA\u4E00\u4E2A\u8D85\u94FE\u63A5\u3002",
            "a": "\u5728\u5355\u5143\u683C\u5185\u521B\u5EFA\u4E00\u4E2A\u8D85\u94FE\u63A5\u3002",
            "p": [
              {
                "name": "\u7F51\u5740",
                "detail": "\u4EE5\u5F15\u53F7\u62EC\u4F4F\u7684\u94FE\u63A5\u4F4D\u7F6E\u7684\u5B8C\u6574\u7F51\u5740\uFF0C\u6216\u5BF9\u5305\u542B\u8FD9\u79CD\u7F51\u5740\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3002\n\n\u4EC5\u5141\u8BB8\u67D0\u4E9B\u94FE\u63A5\u7C7B\u578B\u3002\u5176\u4E2D\u5305\u62EC\uFF1Ahttp://\u3001https://\u3001mailto:\u3001aim:\u3001ftp://\u3001gopher://\u3001telnet://\u548Cnews://\uFF0C\u660E\u786E\u7981\u7528\u4F7F\u7528\u5176\u4ED6\u534F\u8BAE\u3002\u5982\u679C\u6307\u5B9A\u7684\u662F\u5176\u4ED6\u534F\u8BAE\uFF0C\u5C06\u4F1A\u5728\u5355\u5143\u683C\u4E2D\u663E\u793A\u94FE\u63A5\u6807\u7B7E\uFF0C\u4F46\u8BE5\u6807\u7B7E\u4E0D\u4F1A\u4EE5\u94FE\u63A5\u5F62\u5F0F\u5448\u73B0\u3002\n\n\u5982\u679C\u672A\u6307\u5B9A\u534F\u8BAE\uFF0C\u5219\u5047\u8BBE\u4F7F\u7528http://\uFF0C\u5E76\u5C06\u5176\u4F5C\u4E3A\u7F51\u5740\u7684\u524D\u7F00\u3002"
              },
              {
                "name": "\u94FE\u63A5\u6807\u7B7E",
                "detail": '[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A\u7F51\u5740] - \u8981\u5728\u5355\u5143\u683C\u4E2D\u4F5C\u4E3A\u94FE\u63A5\u663E\u793A\u7684\u6587\u672C\uFF08\u7528\u5F15\u53F7\u62EC\u8D77\u6765\u7684\uFF09\uFF0C\u6216\u8005\u6307\u5411\u5305\u542B\u8FD9\u79CD\u6807\u7B7E\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3002\n\n\u5982\u679C\u94FE\u63A5\u6807\u7B7E\u662F\u6307\u5411\u67D0\u4E2A\u7A7A\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0C\u5982\u679C\u7F51\u5740\u6709\u6548\uFF0C\u5C31\u5C06\u5176\u4F5C\u4E3A\u94FE\u63A5\u663E\u793A\uFF0C\u5426\u5219\u4F5C\u4E3A\u7EAF\u6587\u672C\u663E\u793A\u3002\n\n\u5982\u679C\u94FE\u63A5\u6807\u7B7E\u4E3A\u7A7A\u5B57\u7B26\u4E32\u5E38\u91CF("")\uFF0C\u6240\u5728\u5355\u5143\u683C\u663E\u793A\u7684\u5185\u5BB9\u5C06\u4E3A\u7A7A\u767D\uFF0C\u4F46\u901A\u8FC7\u70B9\u51FB\u8BE5\u5355\u5143\u683C\u6216\u8F6C\u5165\u8BE5\u5355\u5143\u683C\u4ECD\u7136\u53EF\u4EE5\u8BBF\u95EE\u94FE\u63A5\u3002'
              }
            ]
          },
          "TIME": {
            "d": "\u5C06\u7ED9\u5B9A\u7684\u5C0F\u65F6\u3001\u5206\u949F\u548C\u79D2\u8F6C\u6362\u4E3A\u65F6\u95F4\u3002",
            "a": "\u5C06\u7ED9\u5B9A\u7684\u5C0F\u65F6\u3001\u5206\u949F\u548C\u79D2\u8F6C\u6362\u4E3A\u65F6\u95F4\u3002",
            "p": [
              {
                "name": "\u5C0F\u65F6",
                "detail": "0\uFF08\u96F6\uFF09\u5230 32767 \u4E4B\u95F4\u7684\u6570\u5B57\uFF0C\u4EE3\u8868\u5C0F\u65F6\u3002\n\n\u4EFB\u4F55\u5927\u4E8E 23 \u7684\u503C\u90FD\u4F1A\u9664\u4EE5 24\uFF0C\u4F59\u6570\u5C06\u4F5C\u4E3A\u5C0F\u65F6\u503C\u3002"
              },
              {
                "name": "\u5206\u949F",
                "detail": "0\uFF08\u96F6\uFF09\u5230 32767 \u4E4B\u95F4\u7684\u6570\u5B57\uFF0C\u4EE3\u8868\u5206\u949F\u3002\n\n\u4EFB\u4F55\u5927\u4E8E 59 \u7684\u503C\u5C06\u8F6C\u6362\u4E3A\u5C0F\u65F6\u548C\u5206\u949F\u3002"
              },
              {
                "name": "\u79D2",
                "detail": "0\uFF08\u96F6\uFF09\u5230 32767 \u4E4B\u95F4\u7684\u6570\u5B57\uFF0C\u4EE3\u8868\u79D2\u3002\n\n\u4EFB\u4F55\u5927\u4E8E 59 \u7684\u503C\u5C06\u8F6C\u6362\u4E3A\u5C0F\u65F6\u3001\u5206\u949F\u548C\u79D2\u3002"
              }
            ]
          },
          "TIMEVALUE": {
            "d": "\u6309\u4E00\u592924\u5C0F\u65F6\u8FD4\u56DE\u8BE5\u65F6\u95F4\u7684\u5206\u6570\u8868\u793A\u3002",
            "a": "\u6309\u4E00\u592924\u5C0F\u65F6\u8FD4\u56DE\u8BE5\u65F6\u95F4\u7684\u5206\u6570\u8868\u793A\u3002",
            "p": [
              {
                "name": "time_text",
                "detail": "\u7528\u4E8E\u8868\u793A\u65F6\u95F4\u7684\u5B57\u7B26\u4E32\u3002"
              }
            ]
          },
          "EOMONTH": {
            "d": "\u8FD4\u56DE\u67D0\u4E2A\u6708\u4EFD\u6700\u540E\u4E00\u5929\u7684\u5E8F\u5217\u53F7\uFF0C\u8BE5\u6708\u4EFD\u5728\u53E6\u4E00\u4E2A\u65E5\u671F\u4E4B\u524D\u6216\u4E4B\u540E\u7684\u6570\u4E2A\u6708\uFF08\u6708\u6570\u7531\u53C2\u6570\u6307\u5B9A\uFF09\u3002",
            "a": "\u8FD4\u56DE\u67D0\u4E2A\u6708\u4EFD\u6700\u540E\u4E00\u5929\u7684\u5E8F\u5217\u53F7",
            "p": [
              {
                "name": "start_date",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u7ED3\u679C\u7684\u53C2\u7167\u65E5\u671F\u3002"
              },
              {
                "name": "months",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u7684\u8D77\u59CB\u65E5\u671F\u4E4B\u524D\uFF08\u8D1F\uFF09\u6216\u4E4B\u540E\uFF08\u6B63\uFF09\u7684\u6708\u6570\u3002\u8FD4\u56DE\u7684\u662F\u8BA1\u7B97\u6240\u5F97\u6708\u4EFD\u7684\u6700\u540E\u90A3\u5929\u3002"
              }
            ]
          },
          "EDATE": {
            "d": "\u8FD4\u56DE\u8868\u793A\u67D0\u4E2A\u65E5\u671F\u7684\u5E8F\u5217\u53F7\uFF0C\u8BE5\u65E5\u671F\u5728\u53E6\u4E00\u4E2A\u65E5\u671F\u7684\u6570\u6708\u4E4B\u524D/\u4E4B\u540E\u3002",
            "a": "\u8FD4\u56DE\u8868\u793A\u67D0\u4E2A\u65E5\u671F\u7684\u5E8F\u5217\u53F7",
            "p": [
              {
                "name": "start_date",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u7ED3\u679C\u7684\u53C2\u7167\u65E5\u671F\u3002"
              },
              {
                "name": "months",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u7684\u8D77\u59CB\u65E5\u671F\u4E4B\u524D\uFF08\u8D1F\uFF09\u6216\u4E4B\u540E\uFF08\u6B63\uFF09\u7684\u6708\u6570\u3002"
              }
            ]
          },
          "SECOND": {
            "d": "\u8FD4\u56DE\u65F6\u95F4\u503C\u7684\u79D2\u6570\u3002 \u79D2\u6570\u662F 0\uFF08\u96F6\uFF09\u5230 59 \u8303\u56F4\u5185\u7684\u6574\u6570\u3002",
            "a": "\u8FD4\u56DE\u65F6\u95F4\u503C\u7684\u79D2\u6570\u3002 \u79D2\u6570\u662F 0\uFF08\u96F6\uFF09\u5230 59 \u8303\u56F4\u5185\u7684\u6574\u6570\u3002",
            "p": [
              {
                "name": "\u65F6\u95F4",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u79D2\u949F\u90E8\u5206\u7684\u65F6\u95F4\u3002\u5FC5\u987B\u4E3A\u4EE5\u4E0B\u503C\u4E4B\u4E00\uFF1A\u6307\u5411\u5305\u542B\u65E5\u671F/\u65F6\u95F4\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F/\u65F6\u95F4\u7684\u51FD\u6570\u6216\u8005\u6570\u5B57\u3002"
              }
            ]
          },
          "MINUTE": {
            "d": "\u4EE5\u6570\u5B57\u683C\u5F0F\u8FD4\u56DE\u7279\u5B9A\u65F6\u95F4\u7684\u5206\u949F\u90E8\u5206\u3002",
            "a": "\u4EE5\u6570\u5B57\u683C\u5F0F\u8FD4\u56DE\u7279\u5B9A\u65F6\u95F4\u7684\u5206\u949F\u90E8\u5206\u3002",
            "p": [
              {
                "name": "\u65F6\u95F4",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u5206\u949F\u90E8\u5206\u7684\u65F6\u95F4\u3002\u5FC5\u987B\u4E3A\u4EE5\u4E0B\u503C\u4E4B\u4E00\uFF1A\u6307\u5411\u5305\u542B\u65E5\u671F/\u65F6\u95F4\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F/\u65F6\u95F4\u7684\u51FD\u6570\u6216\u8005\u6570\u5B57\u3002"
              }
            ]
          },
          "HOUR": {
            "d": "\u4EE5\u6570\u5B57\u683C\u5F0F\u8FD4\u56DE\u7279\u5B9A\u65F6\u95F4\u7684\u5C0F\u65F6\u90E8\u5206\u3002",
            "a": "\u4EE5\u6570\u5B57\u683C\u5F0F\u8FD4\u56DE\u7279\u5B9A\u65F6\u95F4\u7684\u5C0F\u65F6\u90E8\u5206\u3002",
            "p": [
              {
                "name": "\u65F6\u95F4",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u5C0F\u65F6\u90E8\u5206\u7684\u65F6\u95F4\u3002\u5FC5\u987B\u4E3A\u4EE5\u4E0B\u503C\u4E4B\u4E00\uFF1A\u6307\u5411\u5305\u542B\u65E5\u671F/\u65F6\u95F4\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F/\u65F6\u95F4\u7684\u51FD\u6570\u6216\u8005\u6570\u5B57\u3002"
              }
            ]
          },
          "NOW": {
            "d": "\u4EE5\u65E5\u671F\u503C\u683C\u5F0F\u8FD4\u56DE\u5F53\u524D\u65E5\u671F\u548C\u65F6\u95F4\u3002",
            "a": "\u4EE5\u65E5\u671F\u503C\u683C\u5F0F\u8FD4\u56DE\u5F53\u524D\u65E5\u671F\u548C\u65F6\u95F4\u3002",
            "p": []
          },
          "NETWORKDAYS": {
            "d": "\u8FD4\u56DE\u6240\u63D0\u4F9B\u7684\u4E24\u4E2A\u65E5\u671F\u4E4B\u95F4\u7684\u51C0\u5DE5\u4F5C\u65E5\u5929\u6570\u3002",
            "a": "\u8FD4\u56DE\u6240\u63D0\u4F9B\u7684\u4E24\u4E2A\u65E5\u671F\u4E4B\u95F4\u7684\u51C0\u5DE5\u4F5C\u65E5\u5929\u6570\u3002",
            "p": [
              {
                "name": "start_date",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u51C0\u5DE5\u4F5C\u65E5\u5929\u6570\u7684\u65F6\u95F4\u6BB5\u5F00\u59CB\u65E5\u671F\u3002"
              },
              {
                "name": "end_date",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u51C0\u5DE5\u4F5C\u65E5\u5929\u6570\u7684\u65F6\u95F4\u6BB5\u7ED3\u675F\u65E5\u671F\u3002"
              },
              {
                "name": "holidays",
                "detail": "[\u53EF\u9009] - \u4E00\u4E2A\u8303\u56F4\u6216\u6570\u7EC4\u5E38\u91CF\uFF0C\u5176\u4E2D\u5305\u542B\u4F5C\u4E3A\u8282\u5047\u65E5\u7684\u65E5\u671F\u5E8F\u53F7\u3002\n\n\u5728\u8282\u5047\u65E5\u6570\u7EC4\u4E2D\u63D0\u4F9B\u7684\u503C\u5FC5\u987B\u662F\u65E5\u671F\u5E8F\u53F7\u503C\uFF08\u4F8B\u5982\u7531N\u6240\u8FD4\u56DE\u7684\u503C\uFF09\u6216\u65E5\u671F\u503C\uFF08\u4F8B\u5982\u7531DATE\u3001DATEVALUE\u6216TO_DATE\u8FD4\u56DE\u7684\u503C\uFF09\u3002\u7531\u8303\u56F4\u6307\u5B9A\u7684\u503C\u5E94\u8BE5\u662F\u6807\u51C6\u7684\u65E5\u671F\u503C\u6216\u65E5\u671F\u5E8F\u6570\u503C\u3002"
              }
            ]
          },
          "NETWORKDAYS_INTL": {
            "d": "\u8FD4\u56DE\u7ED9\u5B9A\u7684\u4E24\u4E2A\u65E5\u671F\u4E4B\u95F4\u7684\u51C0\u5DE5\u4F5C\u65E5\u5929\u6570\uFF08\u6392\u9664\u6307\u5B9A\u7684\u5468\u672B\u548C\u8282\u5047\u65E5\uFF09\u3002",
            "a": "\u8FD4\u56DE\u7ED9\u5B9A\u7684\u4E24\u4E2A\u65E5\u671F\u4E4B\u95F4\u7684\u51C0\u5DE5\u4F5C\u65E5\u5929\u6570\uFF08\u6392\u9664\u6307\u5B9A\u7684\u5468\u672B\u548C\u8282\u5047\u65E5\uFF09\u3002",
            "p": [
              {
                "name": "start_date",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u51C0\u5DE5\u4F5C\u65E5\u5929\u6570\u7684\u65F6\u95F4\u6BB5\u5F00\u59CB\u65E5\u671F\u3002"
              },
              {
                "name": "end_date",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u51C0\u5DE5\u4F5C\u65E5\u5929\u6570\u7684\u65F6\u95F4\u6BB5\u7ED3\u675F\u65E5\u671F\u3002"
              },
              {
                "name": "weekend",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A1] - \u7528\u4E8E\u8868\u793A\u54EA\u4E9B\u5929\u4E3A\u5468\u672B\u7684\u6570\u5B57\u6216\u5B57\u7B26\u4E32\u3002\n\u5B57\u7B26\u4E32\u65B9\u5F0F\uFF1A\u53EF\u4EE5\u4F7F\u7528\u75310\u548C1\u7EC4\u6210\u7684\u5B57\u7B26\u4E32\u6765\u6307\u5B9A\u5468\u672B\uFF0C\u4E32\u4E2D\u7684\u7B2C\u4E00\u4E2A\u6570\u5B57\u5B57\u7B26\u4EE3\u8868\u5468\u4E00\uFF0C\u6700\u540E\u4E00\u4E2A\u5219\u4EE3\u8868\u5468\u65E5\u3002\u96F6\u8868\u793A\u8FD9\u4E00\u5929\u662F\u5DE5\u4F5C\u65E5\uFF0C1\u8868\u793A\u8FD9\u4E00\u5929\u4E3A\u5468\u672B\u3002\u4F8B\u5982\uFF0C\u201C0000011\u201D\u8868\u793A\u5C06\u5468\u516D\u548C\u5468\u65E5\u4F5C\u4E3A\u5468\u672B\u3002\n\u6570\u5B57\u65B9\u5F0F\uFF1A\u8FD9\u79CD\u65B9\u5F0F\u4E0D\u4F7F\u7528\u4E0A\u8FF0\u5B57\u7B26\u4E32\u5F62\u5F0F\uFF0C\u800C\u662F\u4F7F\u7528\u4E00\u4E2A\u6570\u5B57\u30021 =\u5468\u516D/\u5468\u65E5\u4E3A\u5468\u672B\uFF0C2 =\u5468\u65E5/\u5468\u4E00\u4E3A\u5468\u672B\uFF0C\u4F9D\u6B64\u7C7B\u63A8\u52197 =\u5468\u4E94/\u5468\u516D\u300211 =\u5468\u65E5\u4E3A\u552F\u4E00\u5468\u672B\uFF0C12 =\u5468\u4E00\u4E3A\u552F\u4E00\u5468\u672B\uFF0C\u4F9D\u6B64\u7C7B\u63A8\u521917 =\u5468\u516D\u4E3A\u552F\u4E00\u5468\u672B\u3002"
              },
              {
                "name": "holidays",
                "detail": "[ \u53EF\u9009 ] - \u8FD9\u662F\u4E00\u4E2A\u8303\u56F4\u6216\u6570\u7EC4\u5E38\u91CF\uFF0C\u5176\u4E2D\u5305\u542B\u4F5C\u4E3A\u8282\u5047\u65E5\u7684\u65E5\u671F\u3002\n\u5728\u8282\u5047\u65E5\u6570\u7EC4\u5185\u63D0\u4F9B\u7684\u503C\u5FC5\u987B\u4E3A\u65E5\u671F\u5E8F\u6570\u503C\uFF08\u4F8B\u5982N\u7684\u8FD4\u56DE\u503C\uFF09\u6216\u65E5\u671F\u503C\uFF08\u4F8B\u5982DATE\u3001DATEVALUE\u6216TO_DATE\u7684\u8FD4\u56DE\u503C\uFF09\u3002\u7531\u8303\u56F4\u6307\u5B9A\u7684\u503C\u5E94\u8BE5\u662F\u6807\u51C6\u7684\u65E5\u671F\u503C\u6216\u65E5\u671F\u5E8F\u6570\u503C\u3002"
              }
            ]
          },
          "ISOWEEKNUM": {
            "d": "\u8FD4\u56DE\u7ED9\u5B9A\u65E5\u671F\u5728\u5168\u5E74\u4E2D\u7684 ISO \u5468\u6570\u3002",
            "a": "\u8FD4\u56DE\u7ED9\u5B9A\u65E5\u671F\u5728\u5168\u5E74\u4E2D\u7684 ISO \u5468\u6570\u3002",
            "p": [
              {
                "name": "date",
                "detail": "\u7528\u4E8E\u65E5\u671F\u548C\u65F6\u95F4\u8BA1\u7B97\u7684\u65E5\u671F-\u65F6\u95F4\u4EE3\u7801\u3002"
              }
            ]
          },
          "WEEKNUM": {
            "d": "\u8FD4\u56DE\u7279\u5B9A\u65E5\u671F\u7684\u5468\u6570\u3002",
            "a": "\u8FD4\u56DE\u7279\u5B9A\u65E5\u671F\u7684\u5468\u6570\u3002",
            "p": [
              {
                "name": "serial_number",
                "detail": "\u8981\u786E\u5B9A\u5176\u4F4D\u4E8E\u7B2C\u51E0\u5468\u7684\u65E5\u671F\uFF0C\u5FC5\u987B\u662F\u5BF9\u5305\u542B\u65E5\u671F\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u7C7B\u578B\u7684\u51FD\u6570\u6216\u8005\u6570\u5B57\u3002"
              },
              {
                "name": "return_type",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A 1 ] - \u4EE3\u8868\u4E00\u5468\u8D77\u59CB\u65E5\u7684\u6570\u5B57\uFF0C\u7CFB\u7EDF\u4E5F\u4F7F\u7528\u8BE5\u6570\u5B57\u6765\u786E\u5B9A\u4E00\u5E74\u7684\u7B2C\u4E00\u5468\uFF081=\u5468\u65E5\uFF0C2=\u5468\u4E00\uFF09\u3002"
              }
            ]
          },
          "WEEKDAY": {
            "d": "\u8FD4\u56DE\u4E00\u4E2A\u6570\u5B57\uFF0C\u5BF9\u5E94\u4E8E\u7ED9\u5B9A\u65E5\u671F\u6240\u5728\u7684\u661F\u671F\u51E0\u3002",
            "a": "\u8FD4\u56DE\u4E00\u4E2A\u6570\u5B57\uFF0C\u5BF9\u5E94\u4E8E\u7ED9\u5B9A\u65E5\u671F\u6240\u5728\u7684\u661F\u671F\u51E0\u3002",
            "p": [
              {
                "name": "serial_number",
                "detail": "\u8981\u4E3A\u5176\u786E\u5B9A\u661F\u671F\u51E0\u7684\u65E5\u671F\u3002\u5FC5\u987B\u662F\u5BF9\u5305\u542B\u65E5\u671F\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u7C7B\u578B\u7684\u51FD\u6570\u6216\u8005\u6570\u5B57\u3002"
              },
              {
                "name": "return_type",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A 1] - \u4EE5\u6570\u5B57\u6307\u793A\u4F7F\u7528\u54EA\u79CD\u7F16\u53F7\u987A\u5E8F\u6765\u8868\u793A\u661F\u671F\u51E0\u3002\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u6309\u661F\u671F\u65E5 (= 1) \u5F00\u59CB\u8BA1\u7B97\u3002\n\n\u5982\u679C\u7C7B\u578B\u4E3A 1\uFF0C\u5219\u661F\u671F\u503C\u5C06\u4ECE\u661F\u671F\u65E5\u5F00\u59CB\u7B97\u8D77\uFF0C\u5E76\u4E14\u661F\u671F\u65E5\u7684\u503C\u4E3A 1\uFF0C\u56E0\u6B64\u661F\u671F\u516D\u7684\u503C\u5C31\u662F 7\u3002\n\n\u5982\u679C\u7C7B\u578B\u4E3A 2\uFF0C\u5219\u661F\u671F\u503C\u5C06\u4ECE\u661F\u671F\u4E00\u5F00\u59CB\u7B97\u8D77\uFF0C\u5E76\u4E14\u661F\u671F\u4E00\u7684\u503C\u4E3A 1\uFF0C\u56E0\u6B64\u661F\u671F\u65E5\u7684\u503C\u5C31\u662F 7\u3002\n\n\u5982\u679C\u7C7B\u578B\u4E3A 3\uFF0C\u5219\u661F\u671F\u503C\u5C06\u4ECE\u661F\u671F\u4E00\u7B97\u8D77\uFF0C\u5E76\u4E14\u661F\u671F\u4E00\u7684\u503C\u4E3A 0\uFF0C\u56E0\u6B64\u661F\u671F\u65E5\u7684\u503C\u5C31\u662F 6\u3002"
              }
            ]
          },
          "DAY": {
            "d": "\u4EE5\u6570\u5B57\u683C\u5F0F\u8FD4\u56DE\u7279\u5B9A\u65E5\u671F\u6240\u5728\u7684\u5F53\u6708\u51E0\u53F7\u3002",
            "a": "\u4EE5\u6570\u5B57\u683C\u5F0F\u8FD4\u56DE\u7279\u5B9A\u65E5\u671F\u6240\u5728\u7684\u5F53\u6708\u51E0\u53F7\u3002",
            "p": [
              {
                "name": "serial_number",
                "detail": "\u8981\u4ECE\u4E2D\u63D0\u53D6\u5177\u4F53\u51E0\u53F7\u7684\u65E5\u671F\u3002\u5FC5\u987B\u662F\u4EE5\u4E0B\u4E00\u79CD\uFF1A\u5BF9\u5305\u542B\u65E5\u671F\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u7C7B\u578B\u7684\u51FD\u6570\u6216\u8005\u6570\u5B57\u3002"
              }
            ]
          },
          "DAYS": {
            "d": "\u8FD4\u56DE\u4E24\u4E2A\u65E5\u671F\u4E4B\u95F4\u7684\u5929\u6570\u3002",
            "a": "\u8FD4\u56DE\u4E24\u4E2A\u65E5\u671F\u4E4B\u95F4\u7684\u5929\u6570\u3002",
            "p": [
              {
                "name": "end_date",
                "detail": "\u8BA1\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u7ED3\u675F\u65E5\u671F\u3002\u5FC5\u987B\u662F\u4EE5\u4E0B\u4E00\u79CD\uFF1A\u5BF9\u5305\u542B\u65E5\u671F\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u7C7B\u578B\u7684\u51FD\u6570\u6216\u8005\u6570\u5B57\u3002"
              },
              {
                "name": "start_date",
                "detail": "\u8BA1\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u5F00\u59CB\u65E5\u671F\u3002\u5FC5\u987B\u662F\u4EE5\u4E0B\u4E00\u79CD\uFF1A\u5BF9\u5305\u542B\u65E5\u671F\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u7C7B\u578B\u7684\u51FD\u6570\u6216\u8005\u6570\u5B57\u3002"
              }
            ]
          },
          "DAYS360": {
            "d": "\u6309\u7167\u6BCF\u5E74360\u5929\uFF0C\u8FD4\u56DE\u4E24\u4E2A\u65E5\u671F\u4E4B\u95F4\u7684\u5DEE\uFF08\u7528\u4E8E\u8BA1\u7B97\u5229\u606F\uFF09\u3002",
            "a": "\u6309\u7167\u6BCF\u5E74360\u5929\uFF0C\u8FD4\u56DE\u4E24\u4E2A\u65E5\u671F\u4E4B\u95F4\u7684\u5DEE\uFF08\u7528\u4E8E\u8BA1\u7B97\u5229\u606F\uFF09\u3002",
            "p": [
              {
                "name": "start_date",
                "detail": "\u8BA1\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u5F00\u59CB\u65E5\u671F\u3002\u5FC5\u987B\u662F\u4EE5\u4E0B\u4E00\u79CD\uFF1A\u5BF9\u5305\u542B\u65E5\u671F\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u7C7B\u578B\u7684\u51FD\u6570\u6216\u8005\u6570\u5B57\u3002"
              },
              {
                "name": "end_date",
                "detail": "\u8BA1\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u7ED3\u675F\u65E5\u671F\u3002\u5FC5\u987B\u662F\u4EE5\u4E0B\u4E00\u79CD\uFF1A\u5BF9\u5305\u542B\u65E5\u671F\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u7C7B\u578B\u7684\u51FD\u6570\u6216\u8005\u6570\u5B57\u3002"
              },
              {
                "name": "method",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3AFALSE()] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\nFALSE - \u91C7\u7528\u7F8E\u56FD (NASD) \u65B9\u6CD5\u65F6\uFF0C\u5982\u679C\u8D77\u59CB\u65E5\u671F\u4E3A\u67D0\u6708\u7684\u6700\u540E\u4E00\u5929\uFF0C\u4E3A\u4FBF\u4E8E\u8BA1\u7B97\uFF0C\u4F1A\u5C06\u8D77\u59CB\u65E5\u671F\u7684\u5F53\u6708\u51E0\u53F7\u66F4\u6539\u4E3A30\u3002\u6B64\u5916\uFF0C\u5982\u679C\u7ED3\u675F\u65E5\u671F\u662F\u6240\u5728\u6708\u4EFD\u7684\u6700\u540E\u4E00\u5929\uFF0C\u800C\u4E14\u8D77\u59CB\u65E5\u671F\u5728\u5176\u6240\u5728\u6708\u768430\u53F7\u4E4B\u524D\uFF0C\u5219\u5C06\u7ED3\u675F\u65E5\u671F\u66F4\u6539\u4E3A\u7ED3\u675F\u65E5\u671F\u4E4B\u540E\u90A3\u4E2A\u6708\u7684\u7B2C\u4E00\u5929\uFF0C\u5426\u5219\u5C06\u7ED3\u675F\u65E5\u671F\u66F4\u6539\u4E3A\u8BE5\u6708\u768430\u53F7\u3002\n\nTRUE - \u91C7\u7528\u6B27\u6D32\u65B9\u6CD5\u65F6\uFF0C\u4F1A\u5C06\u6240\u6709\u65E5\u671F\u572831\u53F7\u7684\u8D77\u59CB\u65E5\u671F\u6216\u7ED3\u675F\u65E5\u671F\u66F4\u6539\u4E3A\u5F53\u6708\u768430\u53F7\u3002"
              }
            ]
          },
          "DATE": {
            "d": "\u5C06\u63D0\u4F9B\u7684\u5E74\u3001\u6708\u3001\u65E5\u8F6C\u6362\u4E3A\u65E5\u671F\u3002",
            "a": "\u5C06\u63D0\u4F9B\u7684\u5E74\u3001\u6708\u3001\u65E5\u8F6C\u6362\u4E3A\u65E5\u671F\u3002",
            "p": [
              {
                "name": "year",
                "detail": "\u65E5\u671F\u7684\u5E74\u4EFD\u90E8\u5206\uFF0C\u5305\u542B\u4E00\u5230\u56DB\u4F4D\u6570\u5B57\u3002\n\n\u4ECB\u4E8E 0\uFF08\u96F6\uFF09\u5230 1899 \u4E4B\u95F4\uFF0C\u4F1A\u5C06\u8BE5\u503C\u4E0E 1900 \u76F8\u52A0\u6765\u8BA1\u7B97\u5E74\u4EFD\uFF1B\n\n\u4ECB\u4E8E 1900 \u5230 9999 \u4E4B\u95F4\uFF0C\u5C06\u4F7F\u7528\u8BE5\u6570\u503C\u4F5C\u4E3A\u5E74\u4EFD\uFF1B\n\n\u5C0F\u4E8E 0 \u6216\u5927\u4E8E\u7B49\u4E8E 10000\uFF0C\u8FD4\u56DE \u9519\u8BEF\u503C #NUM!\u3002"
              },
              {
                "name": "month",
                "detail": "\u65E5\u671F\u7684\u6708\u4EFD\u90E8\u5206\uFF0C\u4E00\u4E2A\u6B63\u6574\u6570\u6216\u8D1F\u6574\u6570\u3002\n\n\u5982\u679C month \u5927\u4E8E 12\uFF0C\u5219 month \u4F1A\u5C06\u8BE5\u6708\u4EFD\u6570\u4E0E\u6307\u5B9A\u5E74\u4E2D\u7684\u7B2C\u4E00\u4E2A\u6708\u76F8\u52A0\u3002\n\n\u5982\u679C month \u5C0F\u4E8E 1\uFF0Cmonth \u5219\u4ECE\u6307\u5B9A\u5E74\u4EFD\u7684\u4E00\u6708\u4EFD\u5F00\u59CB\u9012\u51CF\u8BE5\u6708\u4EFD\u6570\uFF0C\u7136\u540E\u518D\u52A0\u4E0A 1 \u4E2A\u6708\u3002"
              },
              {
                "name": "day",
                "detail": "\u65E5\u671F\u7684\u65E5\u90E8\u5206\uFF0C\u4E00\u4E2A\u6B63\u6574\u6570\u6216\u8D1F\u6574\u6570\u3002\n\n\u5982\u679C day \u5927\u4E8E\u6708\u4E2D\u6307\u5B9A\u7684\u5929\u6570\uFF0C\u5219 day \u4F1A\u5C06\u5929\u6570\u4E0E\u8BE5\u6708\u4E2D\u7684\u7B2C\u4E00\u5929\u76F8\u52A0\u3002\n\n\u5982\u679C day \u5C0F\u4E8E 1\uFF0C\u5219 day \u4ECE\u6307\u5B9A\u6708\u4EFD\u7684\u7B2C\u4E00\u5929\u5F00\u59CB\u9012\u51CF\u8BE5\u5929\u6570\uFF0C\u7136\u540E\u518D\u52A0\u4E0A 1 \u5929\u3002"
              }
            ]
          },
          "DATEVALUE": {
            "d": "\u5C06\u63D0\u4F9B\u7684\u65E5\u671F\u5B57\u7B26\u4E32\u8F6C\u6362\u4E3A\u65E5\u671F\u7684\u5E8F\u5217\u53F7\u3002",
            "a": "\u5C06\u63D0\u4F9B\u7684\u65E5\u671F\u5B57\u7B26\u4E32\u8F6C\u6362\u4E3A\u65E5\u671F\u7684\u5E8F\u5217\u53F7\u3002",
            "p": [
              {
                "name": "date_text",
                "detail": "\u8868\u793A\u65E5\u671F\u7684\u5B57\u7B26\u4E32\u3002"
              }
            ]
          },
          "DATEDIF": {
            "d": "\u8BA1\u7B97\u4E24\u4E2A\u65E5\u671F\u4E4B\u95F4\u7684\u5929\u6570\u3001\u6708\u6570\u6216\u5E74\u6570\u3002",
            "a": "\u8BA1\u7B97\u4E24\u4E2A\u65E5\u671F\u4E4B\u95F4\u7684\u5929\u6570\u3001\u6708\u6570\u6216\u5E74\u6570\u3002",
            "p": [
              {
                "name": "\u8D77\u59CB\u65E5\u671F",
                "detail": "\u8BA1\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u5F00\u59CB\u65E5\u671F\u3002\u5FC5\u987B\u662F\u5BF9\u5305\u542BDATE\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DEDATE\u7C7B\u578B\u7684\u51FD\u6570\u6216\u6570\u5B57\u3002"
              },
              {
                "name": "\u7ED3\u675F\u65E5\u671F",
                "detail": "\u8BA1\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u7ED3\u675F\u65E5\u671F\u3002\u5FC5\u987B\u662F\u5BF9\u5305\u542BDATE\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DEDATE\u7C7B\u578B\u7684\u51FD\u6570\u6216\u6570\u5B57\u3002"
              },
              {
                "name": "\u5355\u4F4D",
                "detail": '\u65F6\u95F4\u5355\u4F4D\u7684\u7F29\u5199\u6587\u5B57\u3002\u4F8B\u5982 "M" \u4EE3\u8868\u6708\u3002\u6709\u6548\u503C\u5305\u62EC\uFF1A"Y"\u3001"M"\u3001"D"\u3001"MD"\u3001"YM" \u548C "YD"\u3002\n\n"Y"\uFF1A\u8FD4\u56DE\u8D77\u59CB\u65E5\u671F\u548C\u7ED3\u675F\u65E5\u671F\u4E4B\u95F4\u7684\u6574\u5E74\u6570\u3002\n\n"M"\uFF1A\u8FD4\u56DE\u8D77\u59CB\u65E5\u671F\u548C\u7ED3\u675F\u65E5\u671F\u4E4B\u95F4\u7684\u6574\u6708\u6570\u3002\n\n"D"\uFF1A\u8FD4\u56DE\u8D77\u59CB\u65E5\u671F\u548C\u7ED3\u675F\u65E5\u671F\u4E4B\u95F4\u7684\u5929\u6570\u3002\n\n"MD"\uFF1A\u8FD4\u56DE\u8D77\u59CB\u65E5\u671F\u548C\u7ED3\u675F\u65E5\u671F\u4E4B\u95F4\u7684\u5929\u6570\uFF08\u4E0D\u8BA1\u6574\u6708\u6570\uFF09\u3002\n\n"YM"\uFF1A\u8FD4\u56DE\u8D77\u59CB\u65E5\u671F\u548C\u7ED3\u675F\u65E5\u671F\u4E4B\u95F4\u7684\u6574\u6708\u6570\uFF08\u4E0D\u8BA1\u6574\u5E74\u6570\uFF09\u3002\n\n"YD"\uFF1A\u8FD4\u56DE\u8D77\u59CB\u65E5\u671F\u548C\u7ED3\u675F\u65E5\u671F\u4E4B\u95F4\u7684\u5929\u6570\uFF08\u5047\u8BBE\u8D77\u59CB\u65E5\u671F\u548C\u7ED3\u675F\u65E5\u671F\u7684\u95F4\u9694\u4E0D\u8D85\u8FC7\u4E00\u5E74\uFF09\u3002'
              }
            ]
          },
          "WORKDAY": {
            "d": "\u6307\u5B9A\u5DE5\u4F5C\u65E5\u5929\u6570\uFF0C\u8BA1\u7B97\u7ED3\u675F\u65E5\u671F\u3002",
            "a": "\u6307\u5B9A\u5DE5\u4F5C\u65E5\u5929\u6570\uFF0C\u8BA1\u7B97\u7ED3\u675F\u65E5\u671F\u3002",
            "p": [
              {
                "name": "start_date",
                "detail": "\u8BA1\u7B97\u7684\u5F00\u59CB\u65E5\u671F\u3002"
              },
              {
                "name": "days",
                "detail": "start_date \u4E4B\u524D\u6216\u4E4B\u540E\u4E0D\u542B\u5468\u672B\u53CA\u8282\u5047\u65E5\u7684\u5929\u6570\u3002\n\n\u4E3A\u6B63\u503C\u5C06\u751F\u6210\u672A\u6765\u65E5\u671F\uFF1B\n\n\u4E3A\u8D1F\u503C\u751F\u6210\u8FC7\u53BB\u65E5\u671F\u3002"
              },
              {
                "name": "holidays",
                "detail": "[\u53EF\u9009] - \u4E00\u4E2A\u8303\u56F4\u6216\u6570\u7EC4\u5E38\u91CF\uFF0C\u5176\u4E2D\u5305\u542B\u4F5C\u4E3A\u8282\u5047\u65E5\u7684\u65E5\u671F\u5E8F\u53F7\u3002\n\n\u5728\u8282\u5047\u65E5\u6570\u7EC4\u4E2D\u63D0\u4F9B\u7684\u503C\u5FC5\u987B\u662F\u65E5\u671F\u5E8F\u53F7\u503C\uFF08\u4F8B\u5982\u7531N\u6240\u8FD4\u56DE\u7684\u503C\uFF09\u6216\u65E5\u671F\u503C\uFF08\u4F8B\u5982\u7531DATE\u3001DATEVALUE\u6216TO_DATE\u8FD4\u56DE\u7684\u503C\uFF09\u3002\u7531\u8303\u56F4\u6307\u5B9A\u7684\u503C\u5E94\u8BE5\u662F\u6807\u51C6\u7684\u65E5\u671F\u503C\u6216\u65E5\u671F\u5E8F\u6570\u503C\u3002"
              }
            ]
          },
          "WORKDAY_INTL": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u7684\u82E5\u5E72\u4E2A\u5DE5\u4F5C\u65E5\u4E4B\u524D\u6216\u4E4B\u540E\u7684\u65E5\u671F\u7684\u5E8F\u5217\u53F7\uFF08\u4F7F\u7528\u81EA\u5B9A\u4E49\u5468\u672B\u53C2\u6570\uFF09\u3002 ",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u7684\u82E5\u5E72\u4E2A\u5DE5\u4F5C\u65E5\u4E4B\u524D\u6216\u4E4B\u540E\u7684\u65E5\u671F\u7684\u5E8F\u5217\u53F7\uFF08\u4F7F\u7528\u81EA\u5B9A\u4E49\u5468\u672B\u53C2\u6570\uFF09\u3002 ",
            "p": [
              {
                "name": "start_date",
                "detail": "\u5F00\u59CB\u65E5\u671F\uFF08\u5C06\u88AB\u622A\u5C3E\u53D6\u6574\uFF09\u3002"
              },
              {
                "name": "days",
                "detail": "start_date \u4E4B\u524D\u6216\u4E4B\u540E\u7684\u5DE5\u4F5C\u65E5\u7684\u5929\u6570\u3002\n\n\u6B63\u503C\u8868\u793A\u672A\u6765\u65E5\u671F\uFF1B\n\n\u8D1F\u503C\u8868\u793A\u8FC7\u53BB\u65E5\u671F\uFF1B\n\n\u96F6\u503C\u8868\u793A\u5F00\u59CB\u65E5\u671F\u3002"
              },
              {
                "name": "weekend",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A1] - \u7528\u4E8E\u8868\u793A\u54EA\u4E9B\u5929\u4E3A\u5468\u672B\u7684\u6570\u5B57\u6216\u5B57\u7B26\u4E32\u3002\n\u5B57\u7B26\u4E32\u65B9\u5F0F\uFF1A\u53EF\u4EE5\u4F7F\u7528\u75310\u548C1\u7EC4\u6210\u7684\u5B57\u7B26\u4E32\u6765\u6307\u5B9A\u5468\u672B\uFF0C\u4E32\u4E2D\u7684\u7B2C\u4E00\u4E2A\u6570\u5B57\u5B57\u7B26\u4EE3\u8868\u5468\u4E00\uFF0C\u6700\u540E\u4E00\u4E2A\u5219\u4EE3\u8868\u5468\u65E5\u3002\u96F6\u8868\u793A\u8FD9\u4E00\u5929\u662F\u5DE5\u4F5C\u65E5\uFF0C1\u8868\u793A\u8FD9\u4E00\u5929\u4E3A\u5468\u672B\u3002\u4F8B\u5982\uFF0C\u201C0000011\u201D\u8868\u793A\u5C06\u5468\u516D\u548C\u5468\u65E5\u4F5C\u4E3A\u5468\u672B\u3002\n\u6570\u5B57\u65B9\u5F0F\uFF1A\u8FD9\u79CD\u65B9\u5F0F\u4E0D\u4F7F\u7528\u4E0A\u8FF0\u5B57\u7B26\u4E32\u5F62\u5F0F\uFF0C\u800C\u662F\u4F7F\u7528\u4E00\u4E2A\u6570\u5B57\u30021 =\u5468\u516D/\u5468\u65E5\u4E3A\u5468\u672B\uFF0C2 =\u5468\u65E5/\u5468\u4E00\u4E3A\u5468\u672B\uFF0C\u4F9D\u6B64\u7C7B\u63A8\u52197 =\u5468\u4E94/\u5468\u516D\u300211 =\u5468\u65E5\u4E3A\u552F\u4E00\u5468\u672B\uFF0C12 =\u5468\u4E00\u4E3A\u552F\u4E00\u5468\u672B\uFF0C\u4F9D\u6B64\u7C7B\u63A8\u521917 =\u5468\u516D\u4E3A\u552F\u4E00\u5468\u672B\u3002"
              },
              {
                "name": "holidays",
                "detail": "[ \u53EF\u9009 ] - \u8FD9\u662F\u4E00\u4E2A\u8303\u56F4\u6216\u6570\u7EC4\u5E38\u91CF\uFF0C\u5176\u4E2D\u5305\u542B\u4F5C\u4E3A\u8282\u5047\u65E5\u7684\u65E5\u671F\u3002\n\u5728\u8282\u5047\u65E5\u6570\u7EC4\u5185\u63D0\u4F9B\u7684\u503C\u5FC5\u987B\u4E3A\u65E5\u671F\u5E8F\u6570\u503C\uFF08\u4F8B\u5982N\u7684\u8FD4\u56DE\u503C\uFF09\u6216\u65E5\u671F\u503C\uFF08\u4F8B\u5982DATE\u3001DATEVALUE\u6216TO_DATE\u7684\u8FD4\u56DE\u503C\uFF09\u3002\u7531\u8303\u56F4\u6307\u5B9A\u7684\u503C\u5E94\u8BE5\u662F\u6807\u51C6\u7684\u65E5\u671F\u503C\u6216\u65E5\u671F\u5E8F\u6570\u503C\u3002"
              }
            ]
          },
          "YEAR": {
            "d": "\u8FD4\u56DE\u5BF9\u5E94\u4E8E\u67D0\u4E2A\u65E5\u671F\u7684\u5E74\u4EFD\u3002 Year \u4F5C\u4E3A 1900 - 9999 \u4E4B\u95F4\u7684\u6574\u6570\u8FD4\u56DE\u3002",
            "a": "\u8FD4\u56DE\u5BF9\u5E94\u4E8E\u67D0\u4E2A\u65E5\u671F\u7684\u5E74\u4EFD\u3002 Year \u4F5C\u4E3A 1900 - 9999 \u4E4B\u95F4\u7684\u6574\u6570\u8FD4\u56DE\u3002",
            "p": [
              {
                "name": "serial_number",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u5E74\u4EFD\u7684\u65E5\u671F\u3002\u5FC5\u987B\u662F\u4EE5\u4E0B\u4E00\u79CD\uFF1A\u5BF9\u5305\u542B\u65E5\u671F\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u7C7B\u578B\u7684\u51FD\u6570\u6216\u8005\u6570\u5B57\u3002"
              }
            ]
          },
          "YEARFRAC": {
            "d": "\u8FD4\u56DE start_date \u548C end_date \u4E4B\u95F4\u7684\u5929\u6570\u5360\u5168\u5E74\u5929\u6570\u7684\u767E\u5206\u6BD4\u3002",
            "a": "\u8FD4\u56DE start_date \u548C end_date \u4E4B\u95F4\u7684\u5929\u6570\u5360\u5168\u5E74\u5929\u6570\u7684\u767E\u5206\u6BD4\u3002",
            "p": [
              {
                "name": "start_date",
                "detail": "\u8BA1\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u5F00\u59CB\u65E5\u671F\u3002\u5FC5\u987B\u662F\u4EE5\u4E0B\u4E00\u79CD\uFF1A\u5BF9\u5305\u542B\u65E5\u671F\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u7C7B\u578B\u7684\u51FD\u6570\u6216\u8005\u6570\u5B57\u3002"
              },
              {
                "name": "end_date",
                "detail": "\u8BA1\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u7ED3\u675F\u65E5\u671F\u3002\u5FC5\u987B\u662F\u4EE5\u4E0B\u4E00\u79CD\uFF1A\u5BF9\u5305\u542B\u65E5\u671F\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u7C7B\u578B\u7684\u51FD\u6570\u6216\u8005\u6570\u5B57\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u8981\u4F7F\u7528\u7684\u65E5\u8BA1\u6570\u57FA\u51C6\u7C7B\u578B\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "TODAY": {
            "d": "\u4EE5\u65E5\u671F\u503C\u683C\u5F0F\u8FD4\u56DE\u5F53\u524D\u65E5\u671F\u3002",
            "a": "\u4EE5\u65E5\u671F\u503C\u683C\u5F0F\u8FD4\u56DE\u5F53\u524D\u65E5\u671F\u3002",
            "p": []
          },
          "MONTH": {
            "d": "\u8FD4\u56DE\u65E5\u671F\uFF08\u4EE5\u5E8F\u5217\u6570\u8868\u793A\uFF09\u4E2D\u7684\u6708\u4EFD\u3002 \u6708\u4EFD\u662F\u4ECB\u4E8E 1\uFF08\u4E00\u6708\uFF09\u5230 12\uFF08\u5341\u4E8C\u6708\uFF09\u4E4B\u95F4\u7684\u6574\u6570\u3002",
            "a": "\u8FD4\u56DE\u65E5\u671F\uFF08\u4EE5\u5E8F\u5217\u6570\u8868\u793A\uFF09\u4E2D\u7684\u6708\u4EFD\u3002 \u6708\u4EFD\u662F\u4ECB\u4E8E 1\uFF08\u4E00\u6708\uFF09\u5230 12\uFF08\u5341\u4E8C\u6708\uFF09\u4E4B\u95F4\u7684\u6574\u6570\u3002",
            "p": [
              {
                "name": "serial_number",
                "detail": "\u8981\u4ECE\u4E2D\u63D0\u53D6\u6708\u4EFD\u7684\u65E5\u671F\u3002\u5FC5\u987B\u662F\u4EE5\u4E0B\u4E00\u79CD\uFF1A\u5BF9\u5305\u542B\u65E5\u671F\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u7C7B\u578B\u7684\u51FD\u6570\u6216\u8005\u6570\u5B57\u3002"
              }
            ]
          },
          "EFFECT": {
            "d": "\u6839\u636E\u540D\u4E49\u5229\u7387\u53CA\u6BCF\u5E74\u7684\u590D\u5229\u8BA1\u606F\u671F\u6570\u6765\u8BA1\u7B97\u5B9E\u9645\u5E74\u5229\u7387\u3002",
            "a": "\u6839\u636E\u540D\u4E49\u5229\u7387\u53CA\u6BCF\u5E74\u7684\u590D\u5229\u8BA1\u606F\u671F\u6570\u6765\u8BA1\u7B97\u5B9E\u9645\u5E74\u5229\u7387\u3002",
            "p": [
              {
                "name": "nominal_rate",
                "detail": "\u6BCF\u5E74\u7684\u540D\u4E49\u5229\u7387\u3002"
              },
              {
                "name": "npery",
                "detail": "\u6BCF\u5E74\u7684\u590D\u5229\u8BA1\u7B97\u671F\u6570\u3002"
              }
            ]
          },
          "DOLLAR": {
            "d": "\u5C06\u6570\u5B57\u683C\u5F0F\u8BBE\u7F6E\u4E3A\u4E0E\u8BED\u8A00\u533A\u57DF\u76F8\u5BF9\u5E94\u7684\u8D27\u5E01\u683C\u5F0F\u3002",
            "a": "\u5C06\u6570\u5B57\u683C\u5F0F\u8BBE\u7F6E\u4E3A\u4E0E\u8BED\u8A00\u533A\u57DF\u76F8\u5BF9\u5E94\u7684\u8D27\u5E01\u683C\u5F0F\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u8981\u8BBE\u7F6E\u683C\u5F0F\u7684\u503C\u3002"
              },
              {
                "name": "decimals",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A 2] - \u8981\u663E\u793A\u7684\u5C0F\u6570\u4F4D\u6570\u3002\n\n\u5982\u679C\u8FD9\u662F\u8D1F\u6570\uFF0C\u5219\u5C06\u6570\u5B57\u56DB\u820D\u4E94\u5165\u5230\u5C0F\u6570\u70B9\u5DE6\u4FA7\u3002"
              }
            ]
          },
          "DOLLARDE": {
            "d": "\u5C06\u4EE5\u6574\u6570\u90E8\u5206\u548C\u5206\u6570\u90E8\u5206\u8F6C\u6362\u4E3A\u4EE5\u5C0F\u6570\u90E8\u5206\u8868\u793A\u7684\u91D1\u989D\u6570\u5B57",
            "a": "\u5C06\u4EE5\u6574\u6570\u90E8\u5206\u548C\u5206\u6570\u90E8\u5206\u8F6C\u6362\u4E3A\u4EE5\u5C0F\u6570\u90E8\u5206\u8868\u793A\u7684\u91D1\u989D\u6570\u5B57",
            "p": [
              {
                "name": "fractional_dollar",
                "detail": "\u4EE5\u6574\u6570\u90E8\u4EFD\u548C\u5206\u6570\u90E8\u5206\u8868\u793A\u7684\u6570\u5B57\uFF0C\u7528\u5C0F\u6570\u70B9\u9694\u5F00\u3002"
              },
              {
                "name": "fraction",
                "detail": "\u7528\u4F5C\u5206\u6570\u4E2D\u7684\u5206\u6BCD\u7684\u6574\u6570\u3002"
              }
            ]
          },
          "DOLLARFR": {
            "d": "\u5C06\u5C0F\u6570\u8F6C\u6362\u4E3A\u5206\u6570\u8868\u793A\u7684\u91D1\u989D\u6570\u5B57\u3002",
            "a": "\u5C06\u5C0F\u6570\u8F6C\u6362\u4E3A\u5206\u6570\u8868\u793A\u7684\u91D1\u989D\u6570\u5B57\u3002",
            "p": [
              {
                "name": "decimal_dollar",
                "detail": "\u5C0F\u6570\u3002"
              },
              {
                "name": "fraction",
                "detail": "\u7528\u4F5C\u5206\u6570\u4E2D\u7684\u5206\u6BCD\u7684\u6574\u6570\u3002"
              }
            ]
          },
          "DB": {
            "d": "\u4F7F\u7528\u56FA\u5B9A\u4F59\u989D\u9012\u51CF\u6CD5\uFF0C\u8FD4\u56DE\u6307\u5B9A\u671F\u95F4\u5185\u67D0\u9879\u56FA\u5B9A\u8D44\u4EA7\u7684\u6298\u65E7\u503C\u3002",
            "a": "\u4F7F\u7528\u56FA\u5B9A\u4F59\u989D\u9012\u51CF\u6CD5\uFF0C\u8FD4\u56DE\u6307\u5B9A\u671F\u95F4\u5185\u67D0\u9879\u56FA\u5B9A\u8D44\u4EA7\u7684\u6298\u65E7\u503C\u3002",
            "p": [
              {
                "name": "cost",
                "detail": "\u8D44\u4EA7\u539F\u503C\u3002"
              },
              {
                "name": "salvage",
                "detail": "\u6298\u65E7\u672B\u5C3E\u65F6\u7684\u503C\uFF08\u6709\u65F6\u4E5F\u79F0\u4E3A\u8D44\u4EA7\u6B8B\u503C\uFF09\u3002"
              },
              {
                "name": "life",
                "detail": "\u8D44\u4EA7\u7684\u6298\u65E7\u671F\u6570\uFF08\u6709\u65F6\u4E5F\u79F0\u4F5C\u8D44\u4EA7\u7684\u4F7F\u7528\u5BFF\u547D\uFF09\u3002"
              },
              {
                "name": "period",
                "detail": "\u5728\u4F7F\u7528\u671F\u9650\u5185\u8981\u8BA1\u7B97\u6298\u65E7\u7684\u6298\u65E7\u671F\u3002"
              },
              {
                "name": "month",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A12] - \u6298\u65E7\u7B2C\u4E00\u5E74\u4E2D\u7684\u6708\u6570\u3002"
              }
            ]
          },
          "DDB": {
            "d": "\u7528\u53CC\u500D\u4F59\u989D\u9012\u51CF\u6CD5\uFF0C\u8FD4\u56DE\u6307\u5B9A\u671F\u95F4\u5185\u67D0\u9879\u56FA\u5B9A\u8D44\u4EA7\u7684\u6298\u65E7\u503C\u3002",
            "a": "\u7528\u53CC\u500D\u4F59\u989D\u9012\u51CF\u6CD5\uFF0C\u8FD4\u56DE\u6307\u5B9A\u671F\u95F4\u5185\u67D0\u9879\u56FA\u5B9A\u8D44\u4EA7\u7684\u6298\u65E7\u503C\u3002",
            "p": [
              {
                "name": "cost",
                "detail": "\u8D44\u4EA7\u539F\u503C\u3002"
              },
              {
                "name": "salvage",
                "detail": "\u6298\u65E7\u672B\u5C3E\u65F6\u7684\u503C\uFF08\u6709\u65F6\u4E5F\u79F0\u4E3A\u8D44\u4EA7\u6B8B\u503C\uFF09\u3002"
              },
              {
                "name": "life",
                "detail": "\u8D44\u4EA7\u7684\u6298\u65E7\u671F\u6570\uFF08\u6709\u65F6\u4E5F\u79F0\u4F5C\u8D44\u4EA7\u7684\u4F7F\u7528\u5BFF\u547D\uFF09\u3002"
              },
              {
                "name": "period",
                "detail": "\u5728\u4F7F\u7528\u671F\u9650\u5185\u8981\u8BA1\u7B97\u6298\u65E7\u7684\u6298\u65E7\u671F\u3002"
              },
              {
                "name": "factor",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A2] - \u6298\u65E7\u7684\u9012\u51CF\u7CFB\u6570\u3002"
              }
            ]
          },
          "RATE": {
            "d": "\u8FD4\u56DE\u5E74\u91D1\u6BCF\u671F\u7684\u5229\u7387\u3002",
            "a": "\u8FD4\u56DE\u5E74\u91D1\u6BCF\u671F\u7684\u5229\u7387\u3002",
            "p": [
              {
                "name": "nper",
                "detail": "\u5E74\u91D1\u7684\u4ED8\u6B3E\u603B\u671F\u6570\u3002"
              },
              {
                "name": "pmt",
                "detail": "\u6BCF\u671F\u7684\u4ED8\u6B3E\u91D1\u989D\uFF0C\u5728\u5E74\u91D1\u5468\u671F\u5185\u4E0D\u80FD\u66F4\u6539\u3002"
              },
              {
                "name": "pv",
                "detail": "\u73B0\u503C\u5373\u4E00\u7CFB\u5217\u672A\u6765\u4ED8\u6B3E\u5F53\u524D\u503C\u7684\u603B\u548C\u3002"
              },
              {
                "name": "fv",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A0] - \u672A\u6765\u503C\uFF0C\u6216\u5728\u6700\u540E\u4E00\u6B21\u4ED8\u6B3E\u540E\u5E0C\u671B\u5F97\u5230\u7684\u73B0\u91D1\u4F59\u989D\u3002"
              },
              {
                "name": "type",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A0] - \u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u65F6\u95F4\u662F\u5728\u671F\u521D\u8FD8\u662F\u671F\u672B\u3002\n\n0 \u8868\u793A\u671F\u672B\uFF1B\n\n1 \u8868\u793A\u671F\u521D\u3002"
              },
              {
                "name": "guess",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A0.1] - \u9884\u671F\u5229\u7387\u3002"
              }
            ]
          },
          "CUMPRINC": {
            "d": "\u57FA\u4E8E\u7B49\u989D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387\uFF0C\u8BA1\u7B97\u6295\u8D44\u5728\u591A\u4E2A\u4ED8\u6B3E\u671F\u5185\u7684\u7D2F\u8BA1\u672C\u91D1\u507F\u8FD8\u989D\u3002",
            "a": "\u57FA\u4E8E\u7B49\u989D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387\uFF0C\u8BA1\u7B97\u6295\u8D44\u5728\u591A\u4E2A\u4ED8\u6B3E\u671F\u5185\u7684\u7D2F\u8BA1\u672C\u91D1\u507F\u8FD8\u989D\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5229\u7387\u3002"
              },
              {
                "name": "nper",
                "detail": "\u603B\u4ED8\u6B3E\u671F\u6570\u3002"
              },
              {
                "name": "pv",
                "detail": "\u5E74\u91D1\u7684\u73B0\u503C\u3002"
              },
              {
                "name": "start_period",
                "detail": "\u5F00\u59CB\u7D2F\u8BA1\u8BA1\u7B97\u7684\u4ED8\u6B3E\u671F\u5E8F\u53F7\u3002\n\n\u9996\u671F\u5FC5\u987B\u5927\u4E8E\u7B49\u4E8E1\u3002"
              },
              {
                "name": "end_period",
                "detail": "\u7ED3\u675F\u7D2F\u8BA1\u8BA1\u7B97\u7684\u4ED8\u6B3E\u671F\u5E8F\u53F7\u3002\n\n\u672B\u671F\u5FC5\u987B\u5927\u4E8E\u9996\u671F\u3002"
              },
              {
                "name": "type",
                "detail": "\u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u65F6\u95F4\u662F\u5728\u671F\u521D\u8FD8\u662F\u671F\u672B\u3002\n\n0 \u8868\u793A\u671F\u672B\uFF1B\n\n1 \u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "COUPNUM": {
            "d": "\u8FD4\u56DE\u5728\u7ED3\u7B97\u65E5\u548C\u5230\u671F\u65E5\u4E4B\u95F4\u7684\u4ED8\u606F\u6B21\u6570\uFF0C\u5411\u4E0A\u820D\u5165\u5230\u6700\u8FD1\u7684\u6574\u6570\u3002",
            "a": "\u8FD4\u56DE\u5728\u7ED3\u7B97\u65E5\u548C\u5230\u671F\u65E5\u4E4B\u95F4\u7684\u4ED8\u606F\u6B21\u6570\uFF0C\u5411\u4E0A\u820D\u5165\u5230\u6700\u8FD1\u7684\u6574\u6570\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002\u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6570\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8\uFF0Cfrequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8\uFF0Cfrequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8\uFF0Cfrequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "SYD": {
            "d": "\u8FD4\u56DE\u5728\u6307\u5B9A\u671F\u95F4\u5185\u8D44\u4EA7\u6309\u5E74\u9650\u603B\u548C\u6298\u65E7\u6CD5\u8BA1\u7B97\u7684\u6298\u65E7\u3002",
            "a": "\u8FD4\u56DE\u5728\u6307\u5B9A\u671F\u95F4\u5185\u8D44\u4EA7\u6309\u5E74\u9650\u603B\u548C\u6298\u65E7\u6CD5\u8BA1\u7B97\u7684\u6298\u65E7\u3002",
            "p": [
              {
                "name": "cost",
                "detail": "\u8D44\u4EA7\u539F\u503C\u3002"
              },
              {
                "name": "salvage",
                "detail": "\u6298\u65E7\u672B\u5C3E\u65F6\u7684\u503C\uFF08\u6709\u65F6\u4E5F\u79F0\u4E3A\u8D44\u4EA7\u6B8B\u503C\uFF09\u3002"
              },
              {
                "name": "life",
                "detail": "\u8D44\u4EA7\u7684\u6298\u65E7\u671F\u6570\uFF08\u6709\u65F6\u4E5F\u79F0\u4F5C\u8D44\u4EA7\u7684\u4F7F\u7528\u5BFF\u547D\uFF09\u3002"
              },
              {
                "name": "period",
                "detail": "\u5728\u4F7F\u7528\u671F\u9650\u5185\u8981\u8BA1\u7B97\u6298\u65E7\u7684\u6298\u65E7\u671F\u3002"
              }
            ]
          },
          "TBILLEQ": {
            "d": "\u57FA\u4E8E\u8D34\u73B0\u7387\u8BA1\u7B97\u7F8E\u56FD\u653F\u5E9C\u77ED\u671F\u503A\u5238\u7684\u7B49\u6548\u5E74\u5316\u6536\u76CA\u7387\u3002",
            "a": "\u57FA\u4E8E\u8D34\u73B0\u7387\u8BA1\u7B97\u7F8E\u56FD\u653F\u5E9C\u77ED\u671F\u503A\u5238\u7684\u7B49\u6548\u5E74\u5316\u6536\u76CA\u7387\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u503A\u5238\u7684\u7ED3\u7B97\u65E5\u671F\uFF0C\u6B64\u65E5\u671F\u4E3A\u503A\u5238\u53D1\u884C\u540E\u4EA4\u4ED8\u7ED9\u4E70\u5BB6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u503A\u5238\u7684\u5230\u671F\u6216\u7ED3\u675F\u65E5\u671F\uFF0C\u5C4A\u65F6\u53EF\u5C06\u5176\u4EE5\u9762\u503C\u6216\u7968\u9762\u4EF7\u503C\u8D4E\u56DE\u3002"
              },
              {
                "name": "discount",
                "detail": "\u503A\u5238\u8D2D\u4E70\u65F6\u7684\u8D34\u73B0\u7387\u3002"
              }
            ]
          },
          "TBILLYIELD": {
            "d": "\u57FA\u4E8E\u4EF7\u683C\u8BA1\u7B97\u7F8E\u56FD\u653F\u5E9C\u77ED\u671F\u503A\u5238\u7684\u6536\u76CA\u7387\u3002",
            "a": "\u57FA\u4E8E\u4EF7\u683C\u8BA1\u7B97\u7F8E\u56FD\u653F\u5E9C\u77ED\u671F\u503A\u5238\u7684\u6536\u76CA\u7387\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u503A\u5238\u7684\u7ED3\u7B97\u65E5\u671F\uFF0C\u6B64\u65E5\u671F\u4E3A\u503A\u5238\u53D1\u884C\u540E\u4EA4\u4ED8\u7ED9\u4E70\u5BB6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u503A\u5238\u7684\u5230\u671F\u6216\u7ED3\u675F\u65E5\u671F\uFF0C\u5C4A\u65F6\u53EF\u5C06\u5176\u4EE5\u9762\u503C\u6216\u7968\u9762\u4EF7\u503C\u8D4E\u56DE\u3002"
              },
              {
                "name": "pr",
                "detail": "\u503A\u5238\u7684\u8D2D\u4E70\u4EF7\u683C\u3002"
              }
            ]
          },
          "TBILLPRICE": {
            "d": "\u57FA\u4E8E\u8D34\u73B0\u7387\u8BA1\u7B97\u7F8E\u56FD\u653F\u5E9C\u77ED\u671F\u503A\u5238\u7684\u4EF7\u683C\u3002",
            "a": "\u57FA\u4E8E\u8D34\u73B0\u7387\u8BA1\u7B97\u7F8E\u56FD\u653F\u5E9C\u77ED\u671F\u503A\u5238\u7684\u4EF7\u683C\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u503A\u5238\u7684\u7ED3\u7B97\u65E5\u671F\uFF0C\u6B64\u65E5\u671F\u4E3A\u503A\u5238\u53D1\u884C\u540E\u4EA4\u4ED8\u7ED9\u4E70\u5BB6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u503A\u5238\u7684\u5230\u671F\u6216\u7ED3\u675F\u65E5\u671F\uFF0C\u5C4A\u65F6\u53EF\u5C06\u5176\u4EE5\u9762\u503C\u6216\u7968\u9762\u4EF7\u503C\u8D4E\u56DE\u3002"
              },
              {
                "name": "discount",
                "detail": "\u503A\u5238\u8D2D\u4E70\u65F6\u7684\u8D34\u73B0\u7387\u3002"
              }
            ]
          },
          "PV": {
            "d": "\u57FA\u4E8E\u7B49\u989D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387\uFF0C\u8BA1\u7B97\u5E74\u91D1\u6295\u8D44\u7684\u73B0\u503C\u3002",
            "a": "\u57FA\u4E8E\u7B49\u989D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387\uFF0C\u8BA1\u7B97\u5E74\u91D1\u6295\u8D44\u7684\u73B0\u503C\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5404\u671F\u5229\u7387\u3002"
              },
              {
                "name": "nper",
                "detail": "\u5E74\u91D1\u7684\u4ED8\u6B3E\u603B\u671F\u6570\u3002"
              },
              {
                "name": "pmt",
                "detail": "\u6BCF\u671F\u7684\u4ED8\u6B3E\u91D1\u989D\uFF0C\u5728\u5E74\u91D1\u5468\u671F\u5185\u4E0D\u80FD\u66F4\u6539\u3002"
              },
              {
                "name": "fv",
                "detail": "[\u53EF\u9009] - \u672A\u6765\u503C\uFF0C\u6216\u5728\u6700\u540E\u4E00\u6B21\u4ED8\u6B3E\u540E\u5E0C\u671B\u5F97\u5230\u7684\u73B0\u91D1\u4F59\u989D\u3002"
              },
              {
                "name": "type",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A0] - \u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u65F6\u95F4\u662F\u5728\u671F\u521D\u8FD8\u662F\u671F\u672B\u3002\n\n0 \u8868\u793A\u671F\u672B\uFF1B\n\n1 \u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "ACCRINT": {
            "d": "\u8FD4\u56DE\u5B9A\u671F\u4ED8\u606F\u8BC1\u5238\u7684\u5E94\u8BA1\u5229\u606F\u3002",
            "a": "\u8FD4\u56DE\u5B9A\u671F\u4ED8\u606F\u8BC1\u5238\u7684\u5E94\u8BA1\u5229\u606F\u3002",
            "p": [
              {
                "name": "issue",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u53D1\u884C\u65E5\u3002"
              },
              {
                "name": "first_interest",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u9996\u6B21\u8BA1\u606F\u65E5\u3002"
              },
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "rate",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5E74\u606F\u7968\u5229\u7387\u3002"
              },
              {
                "name": "par",
                "detail": "\u8BC1\u5238\u7684\u7968\u9762\u503C\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6570\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8\uFF0Cfrequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8\uFF0Cfrequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8\uFF0Cfrequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5\u201D - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              },
              {
                "name": "calc_method",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3ATRUE()] - \u4E00\u4E2A\u903B\u8F91\u503C\uFF0C\u6307\u5B9A\u5F53\u7ED3\u7B97\u65E5\u671F\u665A\u4E8E\u9996\u6B21\u8BA1\u606F\u65E5\u671F\u65F6\u7528\u4E8E\u8BA1\u7B97\u603B\u5E94\u8BA1\u5229\u606F\u7684\u65B9\u6CD5\u3002\n\n\u5982\u679C\u503C\u4E3A TRUE\uFF0C\u5219\u8FD4\u56DE\u4ECE\u53D1\u884C\u65E5\u5230\u7ED3\u7B97\u65E5\u7684\u603B\u5E94\u8BA1\u5229\u606F\u3002\n\n\u5982\u679C\u503C\u4E3A FALSE\uFF0C\u5219\u8FD4\u56DE\u4ECE\u9996\u6B21\u8BA1\u606F\u65E5\u5230\u7ED3\u7B97\u65E5\u7684\u5E94\u8BA1\u5229\u606F\u3002"
              }
            ]
          },
          "ACCRINTM": {
            "d": "\u8FD4\u56DE\u5728\u5230\u671F\u65E5\u652F\u4ED8\u5229\u606F\u7684\u6709\u4EF7\u8BC1\u5238\u7684\u5E94\u8BA1\u5229\u606F\u3002",
            "a": "\u8FD4\u56DE\u5728\u5230\u671F\u65E5\u652F\u4ED8\u5229\u606F\u7684\u6709\u4EF7\u8BC1\u5238\u7684\u5E94\u8BA1\u5229\u606F\u3002",
            "p": [
              {
                "name": "issue",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u53D1\u884C\u65E5\u3002"
              },
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002"
              },
              {
                "name": "rate",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5E74\u606F\u7968\u5229\u7387\u3002"
              },
              {
                "name": "par",
                "detail": "\u8BC1\u5238\u7684\u7968\u9762\u503C\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "COUPDAYBS": {
            "d": "\u8FD4\u56DE\u4ECE\u4ED8\u606F\u671F\u5F00\u59CB\u5230\u7ED3\u7B97\u65E5\u7684\u5929\u6570\u3002",
            "a": "\u8FD4\u56DE\u4ECE\u4ED8\u606F\u671F\u5F00\u59CB\u5230\u7ED3\u7B97\u65E5\u7684\u5929\u6570\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6570\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8\uFF0Cfrequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8\uFF0Cfrequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8\uFF0Cfrequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "COUPDAYS": {
            "d": "\u8FD4\u56DE\u7ED3\u7B97\u65E5\u6240\u5728\u7684\u4ED8\u606F\u671F\u7684\u5929\u6570\u3002",
            "a": "\u8FD4\u56DE\u7ED3\u7B97\u65E5\u6240\u5728\u7684\u4ED8\u606F\u671F\u7684\u5929\u6570\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6570\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8\uFF0Cfrequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8\uFF0Cfrequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8\uFF0Cfrequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "COUPDAYSNC": {
            "d": "\u8FD4\u56DE\u4ECE\u7ED3\u7B97\u65E5\u5230\u4E0B\u4E00\u7968\u606F\u652F\u4ED8\u65E5\u4E4B\u95F4\u7684\u5929\u6570\u3002",
            "a": "\u8FD4\u56DE\u4ECE\u7ED3\u7B97\u65E5\u5230\u4E0B\u4E00\u7968\u606F\u652F\u4ED8\u65E5\u4E4B\u95F4\u7684\u5929\u6570\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6570\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8\uFF0Cfrequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8\uFF0Cfrequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8\uFF0Cfrequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "COUPNCD": {
            "d": "\u8BA1\u7B97\u7ED3\u7B97\u65E5\u4E4B\u540E\u7684\u4E0B\u4E00\u7968\u606F\u6216\u5229\u606F\u6D3E\u53D1\u65E5\u671F\u3002",
            "a": "\u8BA1\u7B97\u7ED3\u7B97\u65E5\u4E4B\u540E\u7684\u4E0B\u4E00\u7968\u606F\u6216\u5229\u606F\u6D3E\u53D1\u65E5\u671F\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6570\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8\uFF0Cfrequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8\uFF0Cfrequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8\uFF0Cfrequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "COUPPCD": {
            "d": "\u8BA1\u7B97\u7ED3\u7B97\u65E5\u4E4B\u524D\u7684\u6700\u540E\u4E00\u4E2A\u7968\u606F\u6216\u5229\u606F\u652F\u4ED8\u65E5\u3002",
            "a": "\u8BA1\u7B97\u7ED3\u7B97\u65E5\u4E4B\u524D\u7684\u6700\u540E\u4E00\u4E2A\u7968\u606F\u6216\u5229\u606F\u652F\u4ED8\u65E5\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6570\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8\uFF0Cfrequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8\uFF0Cfrequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8\uFF0Cfrequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "FV": {
            "d": "\u57FA\u4E8E\u7B49\u989D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387\uFF0C\u8BA1\u7B97\u5E74\u91D1\u6295\u8D44\u7684\u672A\u6765\u4EF7\u503C\u3002",
            "a": "\u57FA\u4E8E\u7B49\u989D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387\uFF0C\u8BA1\u7B97\u5E74\u91D1\u6295\u8D44\u7684\u672A\u6765\u4EF7\u503C\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5404\u671F\u5229\u7387\u3002"
              },
              {
                "name": "nper",
                "detail": "\u5E74\u91D1\u7684\u4ED8\u6B3E\u603B\u671F\u6570\u3002"
              },
              {
                "name": "pmt",
                "detail": "\u5404\u671F\u6240\u5E94\u652F\u4ED8\u7684\u91D1\u989D\uFF0C\u5728\u6574\u4E2A\u5E74\u91D1\u671F\u95F4\u4FDD\u6301\u4E0D\u53D8\u3002"
              },
              {
                "name": "pv",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A 0 ] - \u73B0\u503C\uFF0C\u6216\u4E00\u7CFB\u5217\u672A\u6765\u4ED8\u6B3E\u7684\u5F53\u524D\u503C\u7684\u7D2F\u79EF\u548C\u3002"
              },
              {
                "name": "type",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A 0 ] - \u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u65F6\u95F4\u662F\u5728\u671F\u521D\u8FD8\u662F\u671F\u672B\u3002\n\n0 \u8868\u793A\u671F\u672B\uFF1B\n\n1 \u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "FVSCHEDULE": {
            "d": "\u8FD4\u56DE\u5E94\u7528\u4E00\u7CFB\u5217\u590D\u5229\u7387\u8BA1\u7B97\u7684\u521D\u59CB\u672C\u91D1\u7684\u672A\u6765\u503C\u3002",
            "a": "\u8FD4\u56DE\u5E94\u7528\u4E00\u7CFB\u5217\u590D\u5229\u7387\u8BA1\u7B97\u7684\u521D\u59CB\u672C\u91D1\u7684\u672A\u6765\u503C\u3002",
            "p": [
              {
                "name": "principal",
                "detail": "\u73B0\u503C\u3002"
              },
              {
                "name": "schedule",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u672C\u91D1\u590D\u5229\u7684\u4E00\u7EC4\u5229\u7387\u3002\n\n\u5229\u7387\u8868\u5FC5\u987B\u662F\u8303\u56F4\u6216\u6570\u7EC4\uFF0C\u5176\u4E2D\u5305\u542B\u8981\u7528\u4E8E\u8BA1\u7B97\u590D\u5229\u7684\u4E00\u7EC4\u5229\u7387\u3002\u8FD9\u4E9B\u5229\u7387\u503C\u5E94\u8BE5\u4EE5\u5341\u8FDB\u5236\u5C0F\u6570\u5F62\u5F0F\u8868\u793A\uFF0C\u6216\u8005\u4F7F\u7528UNARY_PERCENT\u4EE5\u767E\u5206\u6BD4\u5F62\u5F0F\u8868\u793A\uFF0C\u5373\u8868\u793A\u4E3A0.09\u6216UNARY_PERCENT(9)\uFF0C\u800C\u4E0D\u8981\u8868\u793A\u4E3A9\u3002"
              }
            ]
          },
          "YIELD": {
            "d": "\u8FD4\u56DE\u5B9A\u671F\u652F\u4ED8\u5229\u606F\u7684\u503A\u5238\u7684\u6536\u76CA\u7387\u3002",
            "a": "\u8FD4\u56DE\u5B9A\u671F\u652F\u4ED8\u5229\u606F\u7684\u503A\u5238\u7684\u6536\u76CA\u7387\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "rate",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5E74\u606F\u7968\u5229\u7387\u3002"
              },
              {
                "name": "pr",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u4EF7\u683C\u3002"
              },
              {
                "name": "redemption",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u6E05\u507F\u4EF7\u503C\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6570\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8\uFF0Cfrequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8\uFF0Cfrequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8\uFF0Cfrequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "YIELDDISC": {
            "d": "\u57FA\u4E8E\u4EF7\u683C\u8BA1\u7B97\u6298\u4EF7\u53D1\u884C\u7684\uFF08\u4E0D\u5E26\u606F\uFF09\u503A\u5238\u7684\u5E74\u6536\u76CA\u7387\u3002",
            "a": "\u57FA\u4E8E\u4EF7\u683C\u8BA1\u7B97\u6298\u4EF7\u53D1\u884C\u7684\uFF08\u4E0D\u5E26\u606F\uFF09\u503A\u5238\u7684\u5E74\u6536\u76CA\u7387\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "pr",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u4EF7\u683C\u3002"
              },
              {
                "name": "redemption",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u6E05\u507F\u4EF7\u503C\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "NOMINAL": {
            "d": "\u57FA\u4E8E\u7ED9\u5B9A\u7684\u5B9E\u9645\u5229\u7387\u548C\u5E74\u590D\u5229\u671F\u6570\uFF0C\u8FD4\u56DE\u540D\u4E49\u5E74\u5229\u7387\u3002",
            "a": "\u57FA\u4E8E\u7ED9\u5B9A\u7684\u5B9E\u9645\u5229\u7387\u548C\u5E74\u590D\u5229\u671F\u6570\uFF0C\u8FD4\u56DE\u540D\u4E49\u5E74\u5229\u7387\u3002",
            "p": [
              {
                "name": "effect_rate",
                "detail": "\u6BCF\u5E74\u7684\u5B9E\u9645\u5229\u7387\u3002"
              },
              {
                "name": "npery",
                "detail": "\u6BCF\u5E74\u7684\u590D\u5229\u671F\u6570\u3002"
              }
            ]
          },
          "XIRR": {
            "d": "\u8FD4\u56DE\u4E00\u7EC4\u4E0D\u4E00\u5B9A\u5B9A\u671F\u53D1\u751F\u7684\u73B0\u91D1\u6D41\u7684\u5185\u90E8\u6536\u76CA\u7387\u3002",
            "a": "\u8FD4\u56DE\u4E00\u7EC4\u4E0D\u4E00\u5B9A\u5B9A\u671F\u53D1\u751F\u7684\u73B0\u91D1\u6D41\u7684\u5185\u90E8\u6536\u76CA\u7387\u3002",
            "p": [
              {
                "name": "values",
                "detail": "\u5176\u4E2D\u542B\u6709\u6295\u8D44\u76F8\u5173\u6536\u76CA\u6216\u652F\u51FA\u7684\u6570\u7EC4\u6216\u8303\u56F4\u3002\n\n\u73B0\u91D1\u6D41\u6570\u989D\u4E2D\u5FC5\u987B\u81F3\u5C11\u5305\u542B\u4E00\u9879\u8D1F\u7684\u548C\u4E00\u9879\u6B63\u7684\u73B0\u91D1\u6D41\u91D1\u989D\u624D\u80FD\u8BA1\u7B97\u56DE\u62A5\u7387\u3002"
              },
              {
                "name": "dates",
                "detail": "\u4E0E\u73B0\u91D1\u6D41\u6570\u989D\u53C2\u6570\u4E2D\u7684\u73B0\u91D1\u6D41\u5BF9\u5E94\u7684\u65E5\u671F\u6570\u7EC4\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "guess",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A0.1] - \u5BF9\u5185\u90E8\u56DE\u62A5\u7387\u7684\u4F30\u7B97\u503C\u3002"
              }
            ]
          },
          "MIRR": {
            "d": "\u8FD4\u56DE\u4E00\u7CFB\u5217\u5B9A\u671F\u73B0\u91D1\u6D41\u7684\u4FEE\u6539\u540E\u5185\u90E8\u6536\u76CA\u7387\u3002",
            "a": "\u8FD4\u56DE\u4E00\u7CFB\u5217\u5B9A\u671F\u73B0\u91D1\u6D41\u7684\u4FEE\u6539\u540E\u5185\u90E8\u6536\u76CA\u7387\u3002",
            "p": [
              {
                "name": "values",
                "detail": "\u5176\u4E2D\u542B\u6709\u6295\u8D44\u76F8\u5173\u6536\u76CA\u6216\u652F\u51FA\u7684\u6570\u7EC4\u6216\u8303\u56F4\u3002\n\n\u73B0\u91D1\u6D41\u6570\u989D\u4E2D\u5FC5\u987B\u81F3\u5C11\u5305\u542B\u4E00\u9879\u8D1F\u7684\u548C\u4E00\u9879\u6B63\u7684\u73B0\u91D1\u6D41\u91D1\u989D\u624D\u80FD\u8BA1\u7B97\u56DE\u62A5\u7387\u3002"
              },
              {
                "name": "finance_rate",
                "detail": "\u73B0\u91D1\u6D41\u4E2D\u4F7F\u7528\u7684\u8D44\u91D1\u652F\u4ED8\u7684\u5229\u7387\u3002"
              },
              {
                "name": "reinvest_rate",
                "detail": "\u5C06\u73B0\u91D1\u6D41\u518D\u6295\u8D44\u7684\u6536\u76CA\u7387\u3002"
              }
            ]
          },
          "IRR": {
            "d": "\u8FD4\u56DE\u7531\u503C\u4E2D\u7684\u6570\u5B57\u8868\u793A\u7684\u4E00\u7CFB\u5217\u73B0\u91D1\u6D41\u7684\u5185\u90E8\u6536\u76CA\u7387\u3002 ",
            "a": "\u8FD4\u56DE\u7531\u503C\u4E2D\u7684\u6570\u5B57\u8868\u793A\u7684\u4E00\u7CFB\u5217\u73B0\u91D1\u6D41\u7684\u5185\u90E8\u6536\u76CA\u7387\u3002 ",
            "p": [
              {
                "name": "values",
                "detail": "\u5176\u4E2D\u542B\u6709\u6295\u8D44\u76F8\u5173\u6536\u76CA\u6216\u652F\u51FA\u7684\u6570\u7EC4\u6216\u8303\u56F4\u3002\n\n\u73B0\u91D1\u6D41\u6570\u989D\u4E2D\u5FC5\u987B\u81F3\u5C11\u5305\u542B\u4E00\u9879\u8D1F\u7684\u548C\u4E00\u9879\u6B63\u7684\u73B0\u91D1\u6D41\u91D1\u989D\u624D\u80FD\u8BA1\u7B97\u56DE\u62A5\u7387\u3002"
              },
              {
                "name": "guess",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A 0.1] - \u5185\u90E8\u6536\u76CA\u7387\u7684\u4F30\u503C\u3002"
              }
            ]
          },
          "NPV": {
            "d": "\u4F7F\u7528\u8D34\u73B0\u7387\u548C\u4E00\u7CFB\u5217\u672A\u6765\u652F\u51FA\uFF08\u8D1F\u503C\uFF09\u548C\u6536\u76CA\uFF08\u6B63\u503C\uFF09\u6765\u8BA1\u7B97\u4E00\u9879\u6295\u8D44\u7684\u51C0\u73B0\u503C\u3002",
            "a": "\u4F7F\u7528\u8D34\u73B0\u7387\u548C\u4E00\u7CFB\u5217\u672A\u6765\u652F\u51FA\uFF08\u8D1F\u503C\uFF09\u548C\u6536\u76CA\uFF08\u6B63\u503C\uFF09\u6765\u8BA1\u7B97\u4E00\u9879\u6295\u8D44\u7684\u51C0\u73B0\u503C\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u67D0\u4E00\u671F\u95F4\u7684\u8D34\u73B0\u7387\u3002"
              },
              {
                "name": "value1",
                "detail": "\u7B2C\u4E00\u7B14\u652F\u51FA\uFF08\u8D1F\u503C\uFF09\u548C\u6536\u76CA\uFF08\u6B63\u503C\uFF09\u3002"
              },
              {
                "name": "value2, ...",
                "detail": "[\u53EF\u9009] - \u5176\u4ED6\u652F\u51FA\uFF08\u8D1F\u503C\uFF09\u548C\u6536\u76CA\uFF08\u6B63\u503C\uFF09\u3002"
              }
            ]
          },
          "XNPV": {
            "d": "\u8FD4\u56DE\u4E00\u7EC4\u73B0\u91D1\u6D41\u7684\u51C0\u73B0\u503C\uFF0C\u8FD9\u4E9B\u73B0\u91D1\u6D41\u4E0D\u4E00\u5B9A\u5B9A\u671F\u53D1\u751F\u3002",
            "a": "\u8FD4\u56DE\u4E00\u7EC4\u73B0\u91D1\u6D41\u7684\u51C0\u73B0\u503C\uFF0C\u8FD9\u4E9B\u73B0\u91D1\u6D41\u4E0D\u4E00\u5B9A\u5B9A\u671F\u53D1\u751F\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5E94\u7528\u4E8E\u73B0\u91D1\u6D41\u7684\u8D34\u73B0\u7387\u3002"
              },
              {
                "name": "values",
                "detail": "\u4E0E dates \u4E2D\u7684\u652F\u4ED8\u65F6\u95F4\u76F8\u5BF9\u5E94\u7684\u4E00\u7CFB\u5217\u73B0\u91D1\u6D41\u3002"
              },
              {
                "name": "dates",
                "detail": "\u4E0E\u73B0\u91D1\u6D41\u652F\u4ED8\u76F8\u5BF9\u5E94\u7684\u652F\u4ED8\u65E5\u671F\u8868\u3002"
              }
            ]
          },
          "CUMIPMT": {
            "d": "\u57FA\u4E8E\u7B49\u989D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387\uFF0C\u8BA1\u7B97\u6295\u8D44\u5728\u4E00\u7CFB\u5217\u4ED8\u6B3E\u671F\u5185\u7684\u7D2F\u8BA1\u5229\u606F\u3002",
            "a": "\u57FA\u4E8E\u7B49\u989D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387\uFF0C\u8BA1\u7B97\u6295\u8D44\u5728\u4E00\u7CFB\u5217\u4ED8\u6B3E\u671F\u5185\u7684\u7D2F\u8BA1\u5229\u606F\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5229\u606F\u7387\u3002"
              },
              {
                "name": "nper",
                "detail": "\u603B\u4ED8\u6B3E\u671F\u6570\u3002"
              },
              {
                "name": "pv",
                "detail": "\u73B0\u503C\u3002"
              },
              {
                "name": "start_period",
                "detail": "\u5F00\u59CB\u7D2F\u8BA1\u8BA1\u7B97\u7684\u4ED8\u6B3E\u671F\u5E8F\u53F7\u3002\n\n\u9996\u671F\u5FC5\u987B\u5927\u4E8E\u7B49\u4E8E1\u3002"
              },
              {
                "name": "end_period",
                "detail": "\u7ED3\u675F\u7D2F\u8BA1\u8BA1\u7B97\u7684\u4ED8\u6B3E\u671F\u5E8F\u53F7\u3002\n\n\u672B\u671F\u5FC5\u987B\u5927\u4E8E\u9996\u671F\u3002"
              },
              {
                "name": "type",
                "detail": "\u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u65F6\u95F4\u662F\u5728\u671F\u521D\u8FD8\u662F\u671F\u672B\u3002\n\n0 \u8868\u793A\u671F\u672B\uFF1B\n\n1 \u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "PMT": {
            "d": "\u7528\u4E8E\u6839\u636E\u56FA\u5B9A\u4ED8\u6B3E\u989D\u548C\u56FA\u5B9A\u5229\u7387\u8BA1\u7B97\u8D37\u6B3E\u7684\u4ED8\u6B3E\u989D\u3002",
            "a": "\u7528\u4E8E\u6839\u636E\u56FA\u5B9A\u4ED8\u6B3E\u989D\u548C\u56FA\u5B9A\u5229\u7387\u8BA1\u7B97\u8D37\u6B3E\u7684\u4ED8\u6B3E\u989D\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u8D37\u6B3E\u5229\u7387\u3002"
              },
              {
                "name": "nper",
                "detail": "\u8BE5\u9879\u8D37\u6B3E\u7684\u4ED8\u6B3E\u603B\u6570\u3002"
              },
              {
                "name": "pv",
                "detail": "\u73B0\u503C\uFF0C\u6216\u4E00\u7CFB\u5217\u672A\u6765\u4ED8\u6B3E\u989D\u73B0\u5728\u6240\u503C\u7684\u603B\u989D\uFF0C\u4E5F\u53EB\u672C\u91D1\u3002"
              },
              {
                "name": "fv",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A 0] - \u672A\u6765\u503C\uFF0C\u6216\u5728\u6700\u540E\u4E00\u6B21\u4ED8\u6B3E\u540E\u5E0C\u671B\u5F97\u5230\u7684\u73B0\u91D1\u4F59\u989D\u3002"
              },
              {
                "name": "type",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A 0] - \u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u65F6\u95F4\u662F\u5728\u671F\u521D\u8FD8\u662F\u671F\u672B\u3002\n\n0 \u8868\u793A\u671F\u672B\uFF1B\n\n1 \u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "IPMT": {
            "d": "\u57FA\u4E8E\u56FA\u5B9A\u5229\u7387\u53CA\u7B49\u989D\u5206\u671F\u4ED8\u6B3E\u65B9\u5F0F\uFF0C\u8FD4\u56DE\u7ED9\u5B9A\u671F\u6570\u5185\u5BF9\u6295\u8D44\u7684\u5229\u606F\u507F\u8FD8\u989D\u3002",
            "a": "\u57FA\u4E8E\u56FA\u5B9A\u5229\u7387\u53CA\u7B49\u989D\u5206\u671F\u4ED8\u6B3E\u65B9\u5F0F\uFF0C\u8FD4\u56DE\u7ED9\u5B9A\u671F\u6570\u5185\u5BF9\u6295\u8D44\u7684\u5229\u606F\u507F\u8FD8\u989D\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5404\u671F\u5229\u7387\u3002"
              },
              {
                "name": "per",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u5176\u5229\u606F\u6570\u989D\u7684\u671F\u6570\uFF0C\u5FC5\u987B\u5728 1 \u5230 nper \u4E4B\u95F4\u3002"
              },
              {
                "name": "nper",
                "detail": "\u5E74\u91D1\u7684\u4ED8\u6B3E\u603B\u671F\u6570\u3002"
              },
              {
                "name": "pv",
                "detail": "\u73B0\u503C\uFF0C\u6216\u4E00\u7CFB\u5217\u672A\u6765\u4ED8\u6B3E\u7684\u5F53\u524D\u503C\u7684\u7D2F\u79EF\u548C\u3002"
              },
              {
                "name": "fv",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A 0] - \u672A\u6765\u503C\uFF0C\u6216\u5728\u6700\u540E\u4E00\u6B21\u4ED8\u6B3E\u540E\u5E0C\u671B\u5F97\u5230\u7684\u73B0\u91D1\u4F59\u989D\u3002"
              },
              {
                "name": "type",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A 0] - \u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u65F6\u95F4\u662F\u5728\u671F\u521D\u8FD8\u662F\u671F\u672B\u3002\n\n0 \u8868\u793A\u671F\u672B\uFF1B\n\n1 \u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "PPMT": {
            "d": "\u8FD4\u56DE\u6839\u636E\u5B9A\u671F\u56FA\u5B9A\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387\u800C\u5B9A\u7684\u6295\u8D44\u5728\u5DF2\u77E5\u671F\u95F4\u5185\u7684\u672C\u91D1\u507F\u4ED8\u989D\u3002",
            "a": "\u8FD4\u56DE\u6839\u636E\u5B9A\u671F\u56FA\u5B9A\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387\u800C\u5B9A\u7684\u6295\u8D44\u5728\u5DF2\u77E5\u671F\u95F4\u5185\u7684\u672C\u91D1\u507F\u4ED8\u989D\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5404\u671F\u5229\u7387\u3002"
              },
              {
                "name": "per",
                "detail": "\u6307\u5B9A\u671F\u6570\uFF0C\u8BE5\u503C\u5FC5\u987B\u5728 1 \u5230 nper \u8303\u56F4\u5185\u3002"
              },
              {
                "name": "nper",
                "detail": "\u5E74\u91D1\u7684\u4ED8\u6B3E\u603B\u671F\u6570\u3002"
              },
              {
                "name": "pv",
                "detail": "\u73B0\u503C\u5373\u4E00\u7CFB\u5217\u672A\u6765\u4ED8\u6B3E\u5F53\u524D\u503C\u7684\u603B\u548C\u3002"
              },
              {
                "name": "fv",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A 0] - \u672A\u6765\u503C\uFF0C\u6216\u5728\u6700\u540E\u4E00\u6B21\u4ED8\u6B3E\u540E\u5E0C\u671B\u5F97\u5230\u7684\u73B0\u91D1\u4F59\u989D\u3002"
              },
              {
                "name": "type",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A 0] - \u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u65F6\u95F4\u662F\u5728\u671F\u521D\u8FD8\u662F\u671F\u672B\u3002\n\n0 \u8868\u793A\u671F\u672B\uFF1B\n\n1 \u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "INTRATE": {
            "d": "\u8FD4\u56DE\u5B8C\u5168\u6295\u8D44\u578B\u8BC1\u5238\u7684\u5229\u7387\u3002",
            "a": "\u8FD4\u56DE\u5B8C\u5168\u6295\u8D44\u578B\u8BC1\u5238\u7684\u5229\u7387\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "investment",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u6295\u8D44\u989D\u3002"
              },
              {
                "name": "redemption",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u5230\u671F\u65F6\u7684\u5151\u6362\u503C\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "PRICE": {
            "d": "\u8FD4\u56DE\u5B9A\u671F\u4ED8\u606F\u7684\u9762\u503C \uFFE5100 \u7684\u6709\u4EF7\u8BC1\u5238\u7684\u4EF7\u683C\u3002",
            "a": "\u8FD4\u56DE\u5B9A\u671F\u4ED8\u606F\u7684\u9762\u503C \uFFE5100 \u7684\u6709\u4EF7\u8BC1\u5238\u7684\u4EF7\u683C\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "rate",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5E74\u606F\u7968\u5229\u7387\u3002"
              },
              {
                "name": "yld",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5E74\u6536\u76CA\u7387\u3002"
              },
              {
                "name": "redemption",
                "detail": "\u9762\u503C \uFFE5100 \u7684\u6709\u4EF7\u8BC1\u5238\u7684\u6E05\u507F\u4EF7\u503C\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6570\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8\uFF0Cfrequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8\uFF0Cfrequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8\uFF0Cfrequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "PRICEDISC": {
            "d": "\u8FD4\u56DE\u6298\u4EF7\u53D1\u884C\u7684\u9762\u503C \uFFE5100 \u7684\u6709\u4EF7\u8BC1\u5238\u7684\u4EF7\u683C\u3002",
            "a": "\u8FD4\u56DE\u6298\u4EF7\u53D1\u884C\u7684\u9762\u503C \uFFE5100 \u7684\u6709\u4EF7\u8BC1\u5238\u7684\u4EF7\u683C\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "discount",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u8D34\u73B0\u7387\u3002"
              },
              {
                "name": "redemption",
                "detail": "\u9762\u503C \uFFE5100 \u7684\u6709\u4EF7\u8BC1\u5238\u7684\u6E05\u507F\u4EF7\u503C\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "PRICEMAT": {
            "d": "\u8FD4\u56DE\u5230\u671F\u4ED8\u606F\u7684\u9762\u503C \uFFE5100 \u7684\u6709\u4EF7\u8BC1\u5238\u7684\u4EF7\u683C\u3002",
            "a": "\u8FD4\u56DE\u5230\u671F\u4ED8\u606F\u7684\u9762\u503C \uFFE5100 \u7684\u6709\u4EF7\u8BC1\u5238\u7684\u4EF7\u683C\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "issue",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u53D1\u884C\u65E5\u3002"
              },
              {
                "name": "rate",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u5728\u53D1\u884C\u65E5\u7684\u5229\u7387\u3002"
              },
              {
                "name": "yld",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5E74\u6536\u76CA\u7387\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "RECEIVED": {
            "d": "\u8FD4\u56DE\u4E00\u6B21\u6027\u4ED8\u606F\u7684\u6709\u4EF7\u8BC1\u5238\u5230\u671F\u6536\u56DE\u7684\u91D1\u989D\u3002",
            "a": "\u8FD4\u56DE\u4E00\u6B21\u6027\u4ED8\u606F\u7684\u6709\u4EF7\u8BC1\u5238\u5230\u671F\u6536\u56DE\u7684\u91D1\u989D\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "investment",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u6295\u8D44\u989D\u3002"
              },
              {
                "name": "discount",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u8D34\u73B0\u7387\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "DISC": {
            "d": "\u8FD4\u56DE\u6709\u4EF7\u8BC1\u5238\u7684\u8D34\u73B0\u7387\u3002",
            "a": "\u8FD4\u56DE\u6709\u4EF7\u8BC1\u5238\u7684\u8D34\u73B0\u7387\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "pr",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u4EF7\u683C\uFF08\u6309\u9762\u503C\u4E3A \uFFE5100 \u8BA1\u7B97\uFF09\u3002"
              },
              {
                "name": "redemption",
                "detail": "\u9762\u503C \uFFE5100 \u7684\u6709\u4EF7\u8BC1\u5238\u7684\u6E05\u507F\u4EF7\u503C\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "NPER": {
            "d": "\u57FA\u4E8E\u56FA\u5B9A\u5229\u7387\u53CA\u7B49\u989D\u5206\u671F\u4ED8\u6B3E\u65B9\u5F0F\uFF0C\u8FD4\u56DE\u67D0\u9879\u6295\u8D44\u7684\u603B\u671F\u6570\u3002",
            "a": "\u57FA\u4E8E\u56FA\u5B9A\u5229\u7387\u53CA\u7B49\u989D\u5206\u671F\u4ED8\u6B3E\u65B9\u5F0F\uFF0C\u8FD4\u56DE\u67D0\u9879\u6295\u8D44\u7684\u603B\u671F\u6570\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5404\u671F\u5229\u7387\u3002"
              },
              {
                "name": "pmt",
                "detail": "\u5404\u671F\u6240\u5E94\u652F\u4ED8\u7684\u91D1\u989D\uFF0C\u5728\u6574\u4E2A\u5E74\u91D1\u671F\u95F4\u4FDD\u6301\u4E0D\u53D8\u3002"
              },
              {
                "name": "pv",
                "detail": "\u73B0\u503C\uFF0C\u6216\u4E00\u7CFB\u5217\u672A\u6765\u4ED8\u6B3E\u7684\u5F53\u524D\u503C\u7684\u7D2F\u79EF\u548C\u3002"
              },
              {
                "name": "fv",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A0] - \u672A\u6765\u503C\uFF0C\u6216\u5728\u6700\u540E\u4E00\u6B21\u4ED8\u6B3E\u540E\u5E0C\u671B\u5F97\u5230\u7684\u73B0\u91D1\u4F59\u989D\u3002"
              },
              {
                "name": "type",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A0] - \u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u65F6\u95F4\u662F\u5728\u671F\u521D\u8FD8\u662F\u671F\u672B\u3002\n\n0 \u8868\u793A\u671F\u672B\uFF1B\n\n1 \u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "SLN": {
            "d": "\u8FD4\u56DE\u4E00\u4E2A\u671F\u95F4\u5185\u7684\u8D44\u4EA7\u7684\u76F4\u7EBF\u6298\u65E7\u3002",
            "a": "\u8FD4\u56DE\u4E00\u4E2A\u671F\u95F4\u5185\u7684\u8D44\u4EA7\u7684\u76F4\u7EBF\u6298\u65E7\u3002",
            "p": [
              {
                "name": "cost",
                "detail": "\u8D44\u4EA7\u539F\u503C\u3002"
              },
              {
                "name": "salvage",
                "detail": "\u6298\u65E7\u672B\u5C3E\u65F6\u7684\u503C\uFF08\u6709\u65F6\u4E5F\u79F0\u4E3A\u8D44\u4EA7\u6B8B\u503C\uFF09\u3002"
              },
              {
                "name": "life",
                "detail": "\u8D44\u4EA7\u7684\u6298\u65E7\u671F\u6570\uFF08\u6709\u65F6\u4E5F\u79F0\u4F5C\u8D44\u4EA7\u7684\u4F7F\u7528\u5BFF\u547D\uFF09\u3002"
              }
            ]
          },
          "DURATION": {
            "d": "\u8FD4\u56DE\u5047\u8BBE\u9762\u503C \uFFE5100 \u7684\u5B9A\u671F\u4ED8\u606F\u6709\u4EF7\u8BC1\u5238\u7684\u4FEE\u6B63\u671F\u9650\u3002",
            "a": "\u8FD4\u56DE\u5047\u8BBE\u9762\u503C \uFFE5100 \u7684\u5B9A\u671F\u4ED8\u606F\u6709\u4EF7\u8BC1\u5238\u7684\u4FEE\u6B63\u671F\u9650\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "coupon",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5E74\u606F\u7968\u5229\u7387\u3002"
              },
              {
                "name": "yld",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5E74\u6536\u76CA\u7387\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6570\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8\uFF0Cfrequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8\uFF0Cfrequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8\uFF0Cfrequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "MDURATION": {
            "d": "\u8FD4\u56DE\u5047\u8BBE\u9762\u503C \uFFE5100 \u7684\u6709\u4EF7\u8BC1\u5238\u7684 Macauley \u4FEE\u6B63\u671F\u9650\u3002",
            "a": "\u8FD4\u56DE\u5047\u8BBE\u9762\u503C \uFFE5100 \u7684\u6709\u4EF7\u8BC1\u5238\u7684 Macauley \u4FEE\u6B63\u671F\u9650\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u7ED3\u7B97\u65E5\u3002 \u6709\u4EF7\u8BC1\u5238\u7ED3\u7B97\u65E5\u662F\u5728\u53D1\u884C\u65E5\u4E4B\u540E\uFF0C\u6709\u4EF7\u8BC1\u5238\u5356\u7ED9\u8D2D\u4E70\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5230\u671F\u65E5\u3002 \u5230\u671F\u65E5\u662F\u6709\u4EF7\u8BC1\u5238\u6709\u6548\u671F\u622A\u6B62\u65F6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "coupon",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5E74\u606F\u7968\u5229\u7387\u3002"
              },
              {
                "name": "yld",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u5E74\u6536\u76CA\u7387\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6570\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8\uFF0Cfrequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8\uFF0Cfrequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8\uFF0Cfrequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A0] - \u6307\u793A\u8981\u4F7F\u7528\u54EA\u79CD\u5929\u6570\u8BA1\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A\u201C\u7F8E\u56FD(NASD) 30/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u56FD\u5168\u56FD\u8BC1\u5238\u4EA4\u6613\u5546\u534F\u4F1A\u6807\u51C6\uFF0C\u5047\u8BBE\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\uFF0C\u5E76\u5BF9\u6240\u8F93\u5165\u7684\u6708\u672B\u65E5\u671F\u8FDB\u884C\u5177\u4F53\u8C03\u6574\u3002\n\n1\u8868\u793A\u201C\u5B9E\u9645/\u5B9E\u9645\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8BA1\u7B97\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u4E8E\u7F8E\u56FD\u957F\u671F\u503A\u5238\uFF0C\u4E5F\u662F\u5728\u975E\u8D22\u7ECF\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A\u201C\u5B9E\u9645/360\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A360\u5929\u3002\n\n3\u8868\u793A\u201C\u5B9E\u9645/365\u201D\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u4E8E\u6307\u5B9A\u65E5\u671F\u4E4B\u95F4\u7684\u5B9E\u9645\u5929\u6570\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u5047\u5B9A\u6BCF\u5E74\u4E3A365\u5929\u3002\n\n4\u8868\u793A\u201C\u6B27\u6D3230/360\u201D\u65B9\u6CD5 - \u7C7B\u4F3C\u4E8E0\uFF0C\u6B64\u65B9\u6CD5\u57FA\u4E8E\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u8FDB\u884C\u8BA1\u7B97\uFF0C\u4F46\u6309\u7167\u6B27\u6D32\u91D1\u878D\u60EF\u4F8B\u5BF9\u6708\u672B\u65E5\u671F\u8FDB\u884C\u8C03\u6574\u3002"
              }
            ]
          },
          "BIN2DEC": {
            "d": "\u5C06\u4E8C\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u5341\u8FDB\u5236\u6570\u3002",
            "a": "\u5C06\u4E8C\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u5341\u8FDB\u5236\u6570\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F6C\u6362\u4E3A\u5341\u8FDB\u5236\u6570\u7684\u5E26\u7B26\u53F7\u768410\u4F4D\u4E8C\u8FDB\u5236\u6570\u503C\uFF08\u4EE5\u5B57\u7B26\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E26\u7B26\u53F7\u7684\u4E8C\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u53F7\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8BF4\uFF0C\u8D1F\u6570\u662F\u4EE5\u4E8C\u7684\u8865\u7801\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u5BF9\u4E8E\u6B64\u51FD\u6570\uFF0C\u6700\u5927\u7684\u6B63\u6570\u8F93\u5165\u503C\u4E3A0111111111\uFF0C\u6700\u5C0F\u7684\u8D1F\u6570\u8F93\u5165\u503C\u4E3A1000000000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E26\u7B26\u53F7\u7684\u4E8C\u8FDB\u5236\u6570\u662F\u6709\u6548\u7684\u4E8C\u8FDB\u5236\u6570\uFF0C\u4F1A\u81EA\u52A8\u5C06\u5176\u8F6C\u6362\u4E3A\u76F8\u5E94\u7684\u5B57\u7B26\u4E32\u8F93\u5165\u3002\u4F8B\u5982\uFF0CBIN2DEC(100)\u548CBIN2DEC("100")\u5F97\u51FA\u7684\u7ED3\u679C\u76F8\u540C\uFF0C\u5747\u4E3A4\u3002'
              }
            ]
          },
          "BIN2HEX": {
            "d": "\u5C06\u4E8C\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u5341\u516D\u8FDB\u5236\u6570\u3002",
            "a": "\u5C06\u4E8C\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u5341\u516D\u8FDB\u5236\u6570\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F6C\u6362\u4E3A\u5E26\u7B26\u53F7\u7684\u5341\u516D\u8FDB\u5236\u6570\u7684\u5E26\u7B26\u53F7\u768410\u4F4D\u4E8C\u8FDB\u5236\u6570\u503C\uFF08\u4EE5\u5B57\u7B26\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E26\u7B26\u53F7\u7684\u4E8C\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u53F7\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8BF4\uFF0C\u8D1F\u6570\u662F\u4EE5\u4E8C\u7684\u8865\u7801\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u5BF9\u4E8E\u6B64\u51FD\u6570\uFF0C\u6700\u5927\u7684\u6B63\u6570\u8F93\u5165\u503C\u4E3A0111111111\uFF0C\u6700\u5C0F\u7684\u8D1F\u6570\u8F93\u5165\u503C\u4E3A1000000000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E26\u7B26\u53F7\u7684\u4E8C\u8FDB\u5236\u6570\u662F\u6709\u6548\u7684\u4E8C\u8FDB\u5236\u6570\uFF0C\u4F1A\u81EA\u52A8\u5C06\u5176\u8F6C\u6362\u4E3A\u76F8\u5E94\u7684\u5B57\u7B26\u4E32\u8F93\u5165\u3002\u4F8B\u5982\uFF0CBIN2HEX(11111)\u548CBIN2HEX("11111")\u5F97\u51FA \u7684\u7ED3\u679C\u76F8\u540C\uFF0C\u5747\u4E3A1F\u3002'
              },
              {
                "name": "places",
                "detail": '[ \u53EF\u9009 ] - \u7ED3\u679C\u4E2D\u8981\u786E\u4FDD\u7684\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u8BBE\u7F6E\u7684\u6709\u6548\u4F4D\u6570\u5927\u4E8E\u7ED3\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6570\uFF0C\u5219\u5728\u7ED3\u679C\u7684\u5DE6\u4FA7\u586B\u51450\uFF0C\u4F7F\u603B\u6709\u6548\u4F4D\u6570\u8FBE\u5230\u6709\u6548\u4F4D\u6570\u3002\u4F8B\u5982\uFF0CBIN2HEX("11111",8)\u6240\u5F97\u7684\u7ED3\u679C\u503C\u4E3A0000001F\u3002\n\n\u5982\u679C\u5E26\u7B26\u53F7\u7684\u4E8C\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u4E3A1\uFF0C\u5219\u5FFD\u7565\u6B64\u503C\uFF1B\u5373\u5F53\u63D0\u4F9B\u7684\u5E26\u7B26\u53F7\u7684\u4E8C\u8FDB\u5236\u6570\u5927\u4E8E\u7B49\u4E8E1000000000\u65F6\u5FFD\u7565\u6B64\u503C\u3002'
              }
            ]
          },
          "BIN2OCT": {
            "d": "\u5C06\u4E8C\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u516B\u8FDB\u5236\u6570\u3002",
            "a": "\u5C06\u4E8C\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u516B\u8FDB\u5236\u6570\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F6C\u6362\u4E3A\u5E26\u7B26\u53F7\u7684\u516B\u8FDB\u5236\u6570\u7684\u5E26\u7B26\u53F7\u768410\u4F4D\u4E8C\u8FDB\u5236\u6570\u503C\uFF08\u4EE5\u5B57\u7B26\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E26\u7B26\u53F7\u7684\u4E8C\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u53F7\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8BF4\uFF0C\u8D1F\u6570\u662F\u4EE5\u4E8C\u7684\u8865\u7801\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u5BF9\u4E8E\u6B64\u51FD\u6570\uFF0C\u6700\u5927\u7684\u6B63\u6570\u8F93\u5165\u503C\u4E3A0111111111\uFF0C\u6700\u5C0F\u7684\u8D1F\u6570\u8F93\u5165\u503C\u4E3A1000000000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E26\u7B26\u53F7\u7684\u4E8C\u8FDB\u5236\u6570\u662F\u6709\u6548\u7684\u4E8C\u8FDB\u5236\u6570\uFF0C\u4F1A\u81EA\u52A8\u5C06\u5176\u8F6C\u6362\u4E3A\u76F8\u5E94\u7684\u5B57\u7B26\u4E32\u8F93\u5165\u3002\u4F8B\u5982\uFF0CBIN2OCT(11111)\u548CBIN2OCT("11111")\u5F97\u51FA\u7684\u7ED3\u679C\u76F8\u540C\uFF0C\u5747\u4E3A37\u3002'
              },
              {
                "name": "places",
                "detail": '[ \u53EF\u9009 ] - \u7ED3\u679C\u4E2D\u8981\u786E\u4FDD\u7684\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u8BBE\u7F6E\u7684\u6709\u6548\u4F4D\u6570\u5927\u4E8E\u7ED3\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6570\uFF0C\u5219\u5728\u7ED3\u679C\u7684\u5DE6\u4FA7\u586B\u51450\uFF0C\u4F7F\u603B\u6709\u6548\u4F4D\u6570\u8FBE\u5230\u6709\u6548\u4F4D\u6570\u3002\u4F8B\u5982\uFF0CBIN2OCT("11111")\u5F97\u5230\u7684\u7ED3\u679C\u503C\u4E3A00000037\u3002\n\n\u5982\u679C\u5E26\u7B26\u53F7\u7684\u4E8C\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u4E3A1\uFF0C\u5219\u5FFD\u7565\u6B64\u503C\uFF1B\u5373\u5F53\u63D0\u4F9B\u7684\u5E26\u7B26\u53F7\u7684\u4E8C\u8FDB\u5236\u6570\u5927\u4E8E\u7B49\u4E8E1000000000\u65F6\u5FFD\u7565\u6B64\u503C\u3002'
              }
            ]
          },
          "DEC2BIN": {
            "d": "\u5C06\u5341\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u4E8C\u8FDB\u5236\u6570\u3002",
            "a": "\u5C06\u5341\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u4E8C\u8FDB\u5236\u6570\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F6C\u6362\u4E3A\u5E26\u7B26\u53F7\u7684\u4E8C\u8FDB\u5236\u6570\u7684\u5341\u8FDB\u5236\u6570\u503C\uFF08\u4EE5\u5B57\u7B26\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5BF9\u4E8E\u6B64\u51FD\u6570\uFF0C\u6700\u5927\u7684\u6B63\u6570\u8F93\u5165\u503C\u4E3A511\uFF0C\u6700\u5C0F\u7684\u8D1F\u6570\u8F93\u5165\u503C\u4E3A-512\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5341\u8FDB\u5236\u6570\u662F\u6709\u6548\u7684\u5341\u8FDB\u5236\u6570\uFF0C\u4F1A\u81EA\u52A8\u5C06\u5176\u8F6C\u6362\u4E3A\u76F8\u5E94\u7684\u5B57\u7B26\u4E32\u8F93\u5165\u3002\u4F8B\u5982\uFF0CDEC2BIN(199)\u548CDEC2BIN("199")\u5F97\u51FA\u7684\u7ED3\u679C\u76F8\u540C\uFF0C\u5747\u4E3A11000111\u3002'
              },
              {
                "name": "places",
                "detail": "[ \u53EF\u9009 ] - \u7ED3\u679C\u4E2D\u8981\u786E\u4FDD\u7684\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u8BBE\u7F6E\u7684\u6709\u6548\u4F4D\u6570\u5927\u4E8E\u7ED3\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6570\uFF0C\u5219\u5728\u7ED3\u679C\u7684\u5DE6\u4FA7\u586B\u51450\uFF0C\u4F7F\u603B\u6709\u6548\u4F4D\u6570\u8FBE\u5230\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u5341\u8FDB\u5236\u6570\u4E3A\u8D1F\u6570\uFF0C\u5219\u5FFD\u7565\u6B64\u503C\u3002"
              }
            ]
          },
          "DEC2HEX": {
            "d": "\u5C06\u5341\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u5341\u516D\u8FDB\u5236\u6570\u3002",
            "a": "\u5C06\u5341\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u5341\u516D\u8FDB\u5236\u6570\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F6C\u6362\u4E3A\u5E26\u7B26\u53F7\u7684\u5341\u516D\u8FDB\u5236\u6570\u7684\u5341\u8FDB\u5236\u6570\u503C\uFF08\u4EE5\u5B57\u7B26\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u6B64\u51FD\u6570\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6570\u503C\u4E3A549755813887\uFF0C\u6700\u5C0F\u8D1F\u6570\u503C\u4E3A-549755814888\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5341\u8FDB\u5236\u6570\u662F\u6709\u6548\u7684\u5341\u8FDB\u5236\u6570\uFF0C\u4F1A\u81EA\u52A8\u5C06\u5176\u8F6C\u6362\u4E3A\u76F8\u5E94\u7684\u5B57\u7B26\u4E32\u8F93\u5165\u3002\u4F8B\u5982\uFF0CDEC2HEX(100)\u548CDEC2HEX("100")\u5F97\u51FA\u7684\u7ED3\u679C\u76F8\u540C\uFF0C\u5747\u4E3A64\u3002'
              },
              {
                "name": "places",
                "detail": "[ \u53EF\u9009 ] - \u7ED3\u679C\u4E2D\u8981\u786E\u4FDD\u7684\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u8BBE\u7F6E\u7684\u6709\u6548\u4F4D\u6570\u5927\u4E8E\u7ED3\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6570\uFF0C\u5219\u5728\u7ED3\u679C\u7684\u5DE6\u4FA7\u586B\u51450\uFF0C\u4F7F\u603B\u6709\u6548\u4F4D\u6570\u8FBE\u5230\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u5341\u8FDB\u5236\u6570\u4E3A\u8D1F\u6570\uFF0C\u5219\u5FFD\u7565\u6B64\u503C\u3002"
              }
            ]
          },
          "DEC2OCT": {
            "d": "\u5C06\u5341\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u516B\u8FDB\u5236\u6570\u3002",
            "a": "\u5C06\u5341\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u516B\u8FDB\u5236\u6570\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F6C\u6362\u4E3A\u5E26\u7B26\u53F7\u7684\u516B\u8FDB\u5236\u6570\u7684\u5341\u8FDB\u5236\u6570\u503C\uFF08\u4EE5\u5B57\u7B26\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u6B64\u51FD\u6570\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6570\u503C\u4E3A536870911\uFF0C\u6700\u5C0F\u8D1F\u6570\u503C\u4E3A-53687092\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5341\u8FDB\u5236\u6570\u662F\u6709\u6548\u7684\u5341\u8FDB\u5236\u6570\uFF0C\u4F1A\u81EA\u52A8\u5C06\u5176\u8F6C\u6362\u4E3A\u76F8\u5E94\u7684\u5B57\u7B26\u4E32\u8F93\u5165\u3002\u4F8B\u5982\uFF0CDEC2OCT(199)\u548CDEC2OCT("199")\u5F97\u51FA\u7684\u7ED3\u679C\u76F8\u540C\uFF0C\u5747\u4E3A307\u3002'
              },
              {
                "name": "places",
                "detail": "[ \u53EF\u9009 ] - \u7ED3\u679C\u4E2D\u8981\u786E\u4FDD\u7684\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u8BBE\u7F6E\u7684\u6709\u6548\u4F4D\u6570\u5927\u4E8E\u7ED3\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6570\uFF0C\u5219\u5728\u7ED3\u679C\u7684\u5DE6\u4FA7\u586B\u51450\uFF0C\u4F7F\u603B\u6709\u6548\u4F4D\u6570\u8FBE\u5230\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u5341\u8FDB\u5236\u6570\u4E3A\u8D1F\u6570\uFF0C\u5219\u5FFD\u7565\u6B64\u503C\u3002"
              }
            ]
          },
          "HEX2BIN": {
            "d": "\u5C06\u5341\u516D\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u4E8C\u8FDB\u5236\u6570\u3002",
            "a": "\u5C06\u5341\u516D\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u4E8C\u8FDB\u5236\u6570\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F6C\u6362\u4E3A\u5E26\u7B26\u53F7\u7684\u4E8C\u8FDB\u5236\u6570\u7684\u5E26\u7B26\u53F7\u768440\u4F4D\u5341\u516D\u8FDB\u5236\u6570\u503C\uFF08\u4EE5\u5B57\u7B26\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E26\u7B26\u53F7\u7684\u5341\u516D\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u53F7\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8BF4\uFF0C\u8D1F\u6570\u662F\u4EE5\u4E8C\u7684\u8865\u7801\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u6B64\u51FD\u6570\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6570\u503C\u4E3A1FF\uFF0C\u6700\u5C0F\u8D1F\u6570\u503C\u4E3AFFFFFFFE00\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E26\u7B26\u53F7\u7684\u5341\u516D\u8FDB\u5236\u6570\u662F\u6709\u6548\u7684\u5341\u516D\u8FDB\u5236\u6570\uFF0C\u51FD\u6570\u4F1A\u81EA\u52A8\u5C06\u5176\u8F6C\u6362\u4E3A\u76F8\u5E94\u7684\u5B57\u7B26\u4E32\u8F93\u5165\u3002\u4F8B\u5982\uFF0CHEX2BIN(199)\u548CHEX2BIN("199")\u5F97\u51FA\u7684\u7ED3\u679C\u76F8\u540C\uFF0C\u5747\u4E3A110011001\u3002'
              },
              {
                "name": "places",
                "detail": "[ \u53EF\u9009 ] - \u7ED3\u679C\u4E2D\u8981\u786E\u4FDD\u7684\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u8BBE\u7F6E\u7684\u6709\u6548\u4F4D\u6570\u5927\u4E8E\u7ED3\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6570\uFF0C\u5219\u5728\u7ED3\u679C\u7684\u5DE6\u4FA7\u586B\u51450\uFF0C\u4F7F\u603B\u6709\u6548\u4F4D\u6570\u8FBE\u5230\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u5E26\u7B26\u53F7\u7684\u5341\u516D\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u4E3A1\uFF0C\u5219\u5FFD\u7565\u6B64\u503C\uFF1B\u5373\u5F53\u63D0\u4F9B\u7684\u5E26\u7B26\u53F7\u7684\u5341\u516D\u8FDB\u5236\u6570\u5927\u4E8E\u7B49\u4E8E8000000000\u65F6\u5FFD\u7565\u6B64\u503C\u3002"
              }
            ]
          },
          "HEX2DEC": {
            "d": "\u5C06\u5341\u516D\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u5341\u8FDB\u5236\u6570\u3002",
            "a": "\u5C06\u5341\u516D\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u5341\u8FDB\u5236\u6570\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F6C\u6362\u4E3A\u5341\u8FDB\u5236\u6570\u7684\u5E26\u7B26\u53F7\u768440\u4F4D\u5341\u516D\u8FDB\u5236\u6570\u503C\uFF08\u4EE5\u5B57\u7B26\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E26\u7B26\u53F7\u7684\u5341\u516D\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u53F7\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8BF4\uFF0C\u8D1F\u6570\u662F\u4EE5\u4E8C\u7684\u8865\u7801\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u6B64\u51FD\u6570\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6570\u503C\u4E3A7fffffffff\uFF0C\u6700\u5C0F\u8D1F\u6570\u503C\u4E3A8000000000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E26\u7B26\u53F7\u7684\u5341\u516D\u8FDB\u5236\u6570\u662F\u6709\u6548\u7684\u5341\u516D\u8FDB\u5236\u6570\uFF0C\u51FD\u6570\u4F1A\u81EA\u52A8\u5C06\u5176\u8F6C\u6362\u4E3A\u76F8\u5E94\u7684\u5B57\u7B26\u4E32\u8F93\u5165\u3002\u4F8B\u5982\uFF0CHEX2DEC(199)\u548CHEX2DEC("199")\u5F97\u51FA\u7684\u7ED3\u679C\u76F8\u540C\uFF0C\u5747\u4E3A409\u3002'
              }
            ]
          },
          "HEX2OCT": {
            "d": "\u5C06\u5341\u516D\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u516B\u8FDB\u5236\u6570\u3002",
            "a": "\u5C06\u5341\u516D\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u516B\u8FDB\u5236\u6570\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F6C\u6362\u4E3A\u5E26\u7B26\u53F7\u7684\u516B\u8FDB\u5236\u6570\u7684\u5E26\u7B26\u53F7\u768440\u4F4D\u5341\u516D\u8FDB\u5236\u6570\u503C\uFF08\u4EE5\u5B57\u7B26\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E26\u7B26\u53F7\u7684\u5341\u516D\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u53F7\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8BF4\uFF0C\u8D1F\u6570\u662F\u4EE5\u4E8C\u7684\u8865\u7801\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u6B64\u51FD\u6570\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6570\u503C\u4E3A1FFFFFFF\uFF0C\u6700\u5C0F\u8D1F\u6570\u503C\u4E3AFFE0000000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E26\u7B26\u53F7\u7684\u5341\u516D\u8FDB\u5236\u6570\u662F\u6709\u6548\u7684\u5341\u516D\u8FDB\u5236\u6570\uFF0C\u51FD\u6570\u4F1A\u81EA\u52A8\u5C06\u5176\u8F6C\u6362\u4E3A\u76F8\u5E94\u7684\u5B57\u7B26\u4E32\u8F93\u5165\u3002\u4F8B\u5982\uFF0CHEX2OCT(199)\u548CHEX2OCT("199")\u5F97\u51FA\u7684\u7ED3\u679C\u76F8\u540C\uFF0C\u5747\u4E3A631\u3002'
              },
              {
                "name": "places",
                "detail": "[ \u53EF\u9009 ] - \u7ED3\u679C\u4E2D\u8981\u786E\u4FDD\u7684\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u8BBE\u7F6E\u7684\u6709\u6548\u4F4D\u6570\u5927\u4E8E\u7ED3\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6570\uFF0C\u5219\u5728\u7ED3\u679C\u7684\u5DE6\u4FA7\u586B\u51450\uFF0C\u4F7F\u603B\u6709\u6548\u4F4D\u6570\u8FBE\u5230\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u5E26\u7B26\u53F7\u7684\u5341\u516D\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u4E3A1\uFF0C\u5219\u5FFD\u7565\u6B64\u503C\uFF1B\u5373\u5F53\u7ED9\u5B9A\u7684\u5E26\u7B26\u53F7\u7684\u5341\u516D\u8FDB\u5236\u6570\u5927\u4E8E\u7B49\u4E8E8000000000\u65F6\u5FFD\u7565\u6B64\u503C\u3002"
              }
            ]
          },
          "OCT2BIN": {
            "d": "\u5C06\u516B\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u4E8C\u8FDB\u5236\u6570\u3002",
            "a": "\u5C06\u516B\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u4E8C\u8FDB\u5236\u6570\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F6C\u6362\u4E3A\u5E26\u7B26\u53F7\u7684\u4E8C\u8FDB\u5236\u6570\u7684\u5E26\u7B26\u53F7\u768430\u4F4D\u516B\u8FDB\u5236\u6570\u503C\uFF08\u4EE5\u5B57\u7B26\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E26\u7B26\u53F7\u7684\u516B\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u53F7\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8BF4\uFF0C\u8D1F\u6570\u662F\u4EE5\u4E8C\u7684\u8865\u7801\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u6B64\u51FD\u6570\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6570\u503C\u4E3A777\uFF0C\u6700\u5C0F\u8D1F\u6570\u503C\u4E3A7777777000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E26\u7B26\u53F7\u7684\u516B\u8FDB\u5236\u6570\u662F\u6709\u6548\u7684\u516B\u8FDB\u5236\u6570\uFF0C\u51FD\u6570\u4F1A\u81EA\u52A8\u5C06\u5176\u8F6C\u6362\u4E3A\u76F8\u5E94\u7684\u5B57\u7B26\u4E32\u8F93\u5165\u3002\u4F8B\u5982\uFF0COCT2BIN(177)\u548COCT2BIN("177")\u5F97\u51FA\u7684\u7ED3\u679C\u76F8\u540C\uFF0C\u5747\u4E3A1111111\u3002'
              },
              {
                "name": "places",
                "detail": "[ \u53EF\u9009 ] - \u7ED3\u679C\u4E2D\u8981\u786E\u4FDD\u7684\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u8BBE\u7F6E\u7684\u6709\u6548\u4F4D\u6570\u5927\u4E8E\u7ED3\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6570\uFF0C\u5219\u5728\u7ED3\u679C\u7684\u5DE6\u4FA7\u586B\u51450\uFF0C\u4F7F\u603B\u6709\u6548\u4F4D\u6570\u8FBE\u5230\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u5E26\u7B26\u53F7\u7684\u516B\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u4E3A1\uFF0C\u5219\u5FFD\u7565\u6B64\u503C\uFF1B\u5373\u5F53\u7ED9\u5B9A\u7684\u5E26\u7B26\u53F7\u7684\u516B\u8FDB\u5236\u6570\u5927\u4E8E\u7B49\u4E8E4000000000\u65F6\u5FFD\u7565\u6B64\u503C\u3002"
              }
            ]
          },
          "OCT2DEC": {
            "d": "\u5C06\u516B\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u5341\u8FDB\u5236\u6570\u3002",
            "a": "\u5C06\u516B\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u5341\u8FDB\u5236\u6570\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F6C\u6362\u4E3A\u5341\u8FDB\u5236\u6570\u7684\u5E26\u7B26\u53F7\u768430\u4F4D\u516B\u8FDB\u5236\u6570\u503C\uFF08\u4EE5\u5B57\u7B26\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E26\u7B26\u53F7\u7684ba\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u53F7\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8BF4\uFF0C\u8D1F\u6570\u662F\u4EE5\u4E8C\u7684\u8865\u7801\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u6B64\u51FD\u6570\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6570\u503C\u4E3A3777777777\uFF0C\u6700\u5C0F\u8D1F\u6570\u503C\u4E3A4000000000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E26\u7B26\u53F7\u7684\u516B\u8FDB\u5236\u6570\u662F\u6709\u6548\u7684\u516B\u8FDB\u5236\u6570\uFF0C\u51FD\u6570\u4F1A\u81EA\u52A8\u5C06\u5176\u8F6C\u6362\u4E3A\u76F8\u5E94\u7684\u5B57\u7B26\u4E32\u8F93\u5165\u3002\u4F8B\u5982\uFF0COCT2DEC(177)\u548COCT2DEC("177")\u5F97\u51FA\u7684\u7ED3\u679C\u76F8\u540C\uFF0C\u5747\u4E3A127\u3002'
              }
            ]
          },
          "OCT2HEX": {
            "d": "\u5C06\u516B\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u5341\u516D\u8FDB\u5236\u6570\u3002",
            "a": "\u5C06\u516B\u8FDB\u5236\u6570\u8F6C\u6362\u4E3A\u5341\u516D\u8FDB\u5236\u6570\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F6C\u6362\u4E3A\u5E26\u7B26\u53F7\u7684\u5341\u516D\u8FDB\u5236\u6570\u7684\u5E26\u7B26\u53F7\u768430\u4F4D\u516B\u8FDB\u5236\u6570\u503C\uFF08\u4EE5\u5B57\u7B26\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E26\u7B26\u53F7\u7684ba\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u53F7\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8BF4\uFF0C\u8D1F\u6570\u662F\u4EE5\u4E8C\u7684\u8865\u7801\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u6B64\u51FD\u6570\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6570\u503C\u4E3A3777777777\uFF0C\u6700\u5C0F\u8D1F\u6570\u503C\u4E3A4000000000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E26\u7B26\u53F7\u7684\u516B\u8FDB\u5236\u6570\u662F\u6709\u6548\u7684\u516B\u8FDB\u5236\u6570\uFF0C\u51FD\u6570\u4F1A\u81EA\u52A8\u5C06\u5176\u8F6C\u6362\u4E3A\u76F8\u5E94\u7684\u5B57\u7B26\u4E32\u8F93\u5165\u3002\u4F8B\u5982\uFF0COCT2HEX(177)\u548COCT2HEX("177")\u5F97\u51FA\u7684\u7ED3\u679C\u76F8\u540C\uFF0C\u5747\u4E3A7F\u3002'
              },
              {
                "name": "places",
                "detail": "[ \u53EF\u9009 ] - \u7ED3\u679C\u4E2D\u8981\u786E\u4FDD\u7684\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u8BBE\u7F6E\u7684\u6709\u6548\u4F4D\u6570\u5927\u4E8E\u7ED3\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6570\uFF0C\u5219\u5728\u7ED3\u679C\u7684\u5DE6\u4FA7\u586B\u51450\uFF0C\u4F7F\u603B\u6709\u6548\u4F4D\u6570\u8FBE\u5230\u6709\u6548\u4F4D\u6570\u3002\n\n\u5982\u679C\u5E26\u7B26\u53F7\u7684\u516B\u8FDB\u5236\u6570\u7684\u6700\u9AD8\u4F4D\u4E3A1\uFF0C\u5219\u5FFD\u7565\u6B64\u503C\uFF1B\u5373\u5F53\u7ED9\u5B9A\u7684\u5E26\u7B26\u53F7\u7684\u516B\u8FDB\u5236\u6570\u5927\u4E8E\u7B49\u4E8E4000000000\u65F6\u5FFD\u7565\u6B64\u503C\u3002"
              }
            ]
          },
          "COMPLEX": {
            "d": "\u5C06\u5B9E\u7CFB\u6570\u53CA\u865A\u7CFB\u6570\u8F6C\u6362\u4E3A x+yi \u6216 x+yj \u5F62\u5F0F\u7684\u590D\u6570\u3002",
            "a": "\u5C06\u5B9E\u7CFB\u6570\u53CA\u865A\u7CFB\u6570\u8F6C\u6362\u4E3A x+yi \u6216 x+yj \u5F62\u5F0F\u7684\u590D\u6570\u3002",
            "p": [
              {
                "name": "real_num",
                "detail": "\u590D\u6570\u7684\u5B9E\u7CFB\u6570\u3002"
              },
              {
                "name": "i_num",
                "detail": "\u590D\u6570\u7684\u865A\u7CFB\u6570\u3002"
              },
              {
                "name": "suffix",
                "detail": '[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A "i"] - \u590D\u6570\u4E2D\u865A\u7CFB\u6570\u7684\u540E\u7F00\u3002'
              }
            ]
          },
          "IMREAL": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u590D\u6570\u7684\u5B9E\u7CFB\u6570\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u590D\u6570\u7684\u5B9E\u7CFB\u6570\u3002",
            "p": [
              {
                "name": "inumber",
                "detail": "\u9700\u8981\u8BA1\u7B97\u5176\u5B9E\u7CFB\u6570\u7684\u590D\u6570\u3002"
              }
            ]
          },
          "IMAGINARY": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u590D\u6570\u7684\u865A\u7CFB\u6570\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u590D\u6570\u7684\u865A\u7CFB\u6570\u3002",
            "p": [
              {
                "name": "inumber",
                "detail": "\u9700\u8981\u8BA1\u7B97\u5176\u865A\u7CFB\u6570\u7684\u590D\u6570\u3002"
              }
            ]
          },
          "IMCONJUGATE": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u590D\u6570\u7684\u5171\u8F6D\u590D\u6570\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u590D\u6570\u7684\u5171\u8F6D\u590D\u6570\u3002",
            "p": [
              {
                "name": "inumber",
                "detail": "\u9700\u8981\u8BA1\u7B97\u5176\u5171\u8F6D\u6570\u7684\u590D\u6570\u3002"
              }
            ]
          },
          "IMABS": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u590D\u6570\u7684\u7EDD\u5BF9\u503C\uFF08\u6A21\uFF09\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u590D\u6570\u7684\u7EDD\u5BF9\u503C\uFF08\u6A21\uFF09\u3002",
            "p": [
              {
                "name": "inumber",
                "detail": "\u8981\u8BA1\u7B97\u5176\u7EDD\u5BF9\u503C\u7684\u590D\u6570\u3002"
              }
            ]
          },
          "DELTA": {
            "d": "\u68C0\u9A8C\u4E24\u4E2A\u503C\u662F\u5426\u76F8\u7B49\u3002 \u5982\u679C number1=number2\uFF0C\u5219\u8FD4\u56DE 1\uFF1B\u5426\u5219\u8FD4\u56DE 0\u3002",
            "a": "\u68C0\u9A8C\u4E24\u4E2A\u503C\u662F\u5426\u76F8\u7B49\u3002 \u5982\u679C number1=number2\uFF0C\u5219\u8FD4\u56DE 1\uFF1B\u5426\u5219\u8FD4\u56DE 0\u3002",
            "p": [
              {
                "name": "number1",
                "detail": "\u7B2C\u4E00\u4E2A\u6570\u5B57\u3002"
              },
              {
                "name": "number2",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A 0] - \u7B2C\u4E8C\u4E2A\u6570\u5B57\u3002"
              }
            ]
          },
          "IMSUM": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684 1 \u81F3 255 \u4E2A\u590D\u6570\u7684\u548C\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684 1 \u81F3 255 \u4E2A\u590D\u6570\u7684\u548C\u3002",
            "p": [
              {
                "name": "inumber1",
                "detail": "\u8981\u76F8\u52A0\u7684\u7B2C\u4E00\u4E2A\u590D\u6570"
              },
              {
                "name": "inumber2, \u2026",
                "detail": "[\u53EF\u9009] - \u8981\u4E0E\u503C1 \u76F8\u52A0\u7684\u5176\u4ED6\u590D\u6570"
              }
            ]
          },
          "IMSUB": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u4E24\u4E2A\u590D\u6570\u7684\u5DEE\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u4E24\u4E2A\u590D\u6570\u7684\u5DEE\u3002",
            "p": [
              {
                "name": "inumber1",
                "detail": "\u4ECE\uFF08\u590D\uFF09\u6570\u4E2D\u51CF\u53BB inumber2\u3002"
              },
              {
                "name": "inumber2",
                "detail": "\u4ECE inumber1 \u4E2D\u51CF\uFF08\u590D\uFF09\u6570\u3002"
              }
            ]
          },
          "IMPRODUCT": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684 1 \u81F3 255 \u4E2A\u590D\u6570\u7684\u4E58\u79EF\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684 1 \u81F3 255 \u4E2A\u590D\u6570\u7684\u4E58\u79EF\u3002",
            "p": [
              {
                "name": "inumber1",
                "detail": "\u7528\u4E8E\u8BA1\u7B97\u4E58\u79EF\u7684\u7B2C\u4E00\u4E2A\u590D\u6570"
              },
              {
                "name": "inumber2, \u2026",
                "detail": "[\u53EF\u9009] - \u8981\u76F8\u4E58\u7684\u5176\u4ED6\u590D\u6570\u3002"
              }
            ]
          },
          "IMDIV": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u4E24\u4E2A\u590D\u6570\u7684\u5546\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u4E24\u4E2A\u590D\u6570\u7684\u5546\u3002",
            "p": [
              {
                "name": "inumber1",
                "detail": "\u590D\u6570\u5206\u5B50\u6216\u88AB\u9664\u6570\u3002"
              },
              {
                "name": "inumber2",
                "detail": "\u590D\u6570\u5206\u6BCD\u6216\u9664\u6570\u3002"
              }
            ]
          },
          "NOT": {
            "d": "\u8FD4\u56DE\u67D0\u4E2A\u903B\u8F91\u503C\u7684\u76F8\u53CD\u503C - \u201CNOT(TRUE())\u201D\u5C06\u8FD4\u56DE FALSE\uFF1B\u201CNOT(FALSE())\u201D\u5C06\u8FD4\u56DE TRUE\u3002",
            "a": "\u8FD4\u56DE\u67D0\u4E2A\u903B\u8F91\u503C\u7684\u76F8\u53CD\u503C - \u201CNOT(TRUE())\u201D\u5C06\u8FD4\u56DE FALSE\uFF1B\u201CNOT(FALSE())\u201D\u5C06\u8FD4\u56DE TRUE\u3002",
            "p": [
              {
                "name": "logical",
                "detail": "\u8BA1\u7B97\u7ED3\u679C\u4E3A TRUE \u6216 FALSE \u7684\u4EFB\u4F55\u503C\u6216\u8868\u8FBE\u5F0F\u3002"
              }
            ]
          },
          "TRUE": {
            "d": "\u8FD4\u56DE\u903B\u8F91\u503C TRUE\u3002",
            "a": "\u8FD4\u56DE\u903B\u8F91\u503C TRUE\u3002",
            "p": []
          },
          "FALSE": {
            "d": "\u8FD4\u56DE\u903B\u8F91\u503C FALSE\u3002",
            "a": "\u8FD4\u56DE\u903B\u8F91\u503C FALSE\u3002",
            "p": []
          },
          "AND": {
            "d": "\u6240\u6709\u53C2\u6570\u7684\u8BA1\u7B97\u7ED3\u679C\u4E3A TRUE \u65F6\uFF0C\u8FD4\u56DE TRUE\uFF1B\u53EA\u8981\u6709\u4E00\u4E2A\u53C2\u6570\u7684\u8BA1\u7B97\u7ED3\u679C\u4E3A FALSE\uFF0C\u5373\u8FD4\u56DE FALSE\u3002",
            "a": "\u6240\u6709\u53C2\u6570\u7684\u8BA1\u7B97\u7ED3\u679C\u4E3A TRUE \u65F6\uFF0C\u8FD4\u56DE TRUE\uFF1B\u53EA\u8981\u6709\u4E00\u4E2A\u53C2\u6570\u7684\u8BA1\u7B97\u7ED3\u679C\u4E3A FALSE\uFF0C\u5373\u8FD4\u56DE FALSE\u3002",
            "p": [
              {
                "name": "logical1",
                "detail": "\u8981\u6D4B\u8BD5\u7684\u7B2C\u4E00\u4E2A\u6761\u4EF6\uFF0C\u5176\u8BA1\u7B97\u7ED3\u679C\u53EF\u4EE5\u4E3A TRUE \u6216 FALSE\u3002"
              },
              {
                "name": "logical2,...",
                "detail": "[\u53EF\u9009] - \u8981\u6D4B\u8BD5\u7684\u5176\u4ED6\u6761\u4EF6\uFF0C\u5176\u8BA1\u7B97\u7ED3\u679C\u53EF\u4EE5\u4E3A TRUE \u6216 FALSE\uFF0C\u6700\u591A\u53EF\u5305\u542B 255 \u4E2A\u6761\u4EF6\u3002"
              }
            ]
          },
          "IFERROR": {
            "d": "\u5982\u679C\u7B2C\u4E00\u4E2A\u53C2\u6570\u4E0D\u662F\u9519\u8BEF\u503C\uFF0C\u5C31\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u53C2\u6570\uFF1B\u5426\u5219\uFF0C\u8FD4\u56DE\u7B2C\u4E8C\u4E2A\u53C2\u6570\u3002",
            "a": "\u5982\u679C\u7B2C\u4E00\u4E2A\u53C2\u6570\u4E0D\u662F\u9519\u8BEF\u503C",
            "p": [
              {
                "name": "value",
                "detail": "\u68C0\u67E5\u662F\u5426\u5B58\u5728\u9519\u8BEF\u7684\u53C2\u6570\u3002"
              },
              {
                "name": "value_if_error",
                "detail": "\u516C\u5F0F\u7684\u8BA1\u7B97\u7ED3\u679C\u9519\u8BEF\u65F6\u8FD4\u56DE\u7684\u503C\u3002 \u8BA1\u7B97\u4EE5\u4E0B\u9519\u8BEF\u7C7B\u578B\uFF1A#N/A\u3001#VALUE!\u3001#REF!\u3001#DIV/0!\u3001#NUM!\u3001#NAME? \u6216 #NULL!\u3002"
              }
            ]
          },
          "IF": {
            "d": "\u5F53\u903B\u8F91\u8868\u8FBE\u5F0F\u7684\u503C\u4E3A TRUE \u65F6\u8FD4\u56DE\u4E00\u4E2A\u503C\uFF0C\u800C\u5F53\u5176\u4E3A FALSE \u65F6\u8FD4\u56DE\u53E6\u4E00\u4E2A\u503C\u3002",
            "a": "\u5F53\u903B\u8F91\u8868\u8FBE\u5F0F\u7684\u503C\u4E3A TRUE \u65F6\u8FD4\u56DE\u4E00\u4E2A\u503C\uFF0C\u800C\u5F53\u5176\u4E3A FALSE \u65F6\u8FD4\u56DE\u53E6\u4E00\u4E2A\u503C\u3002",
            "p": [
              {
                "name": "logical_test",
                "detail": "\u4E00\u4E2A\u8868\u8FBE\u5F0F\u6216\u5BF9\u5305\u542B\u8868\u8FBE\u5F0F\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0C\u8BE5\u8868\u8FBE\u5F0F\u4EE3\u8868\u67D0\u79CD\u903B\u8F91\u503C\uFF08\u5373TRUE\u6216FALSE\uFF09\u3002"
              },
              {
                "name": "value_if_true",
                "detail": "\u5F53\u903B\u8F91\u8868\u8FBE\u5F0F\u4E3ATRUE\u65F6\u7684\u8FD4\u56DE\u503C\u3002"
              },
              {
                "name": "value_if_false",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E3A\u7A7A\u767D] - \u5F53\u903B\u8F91\u8868\u8FBE\u5F0F\u7B49\u4E8EFALSE\u65F6\u7684\u51FD\u6570\u8FD4\u56DE\u503C\u3002"
              }
            ]
          },
          "OR": {
            "d": "\u53EA\u8981\u6709\u4E00\u4E2A\u53C2\u6570\u7684\u8BA1\u7B97\u7ED3\u679C\u4E3A TRUE \u65F6\uFF0C\u8FD4\u56DE TRUE\uFF1B\u6240\u6709\u53C2\u6570\u7684\u8BA1\u7B97\u7ED3\u679C\u4E3A FALSE\uFF0C\u5373\u8FD4\u56DE FALSE\u3002",
            "a": "\u53EA\u8981\u6709\u4E00\u4E2A\u53C2\u6570\u7684\u8BA1\u7B97\u7ED3\u679C\u4E3A TRUE \u65F6\uFF0C\u8FD4\u56DE TRUE\uFF1B\u6240\u6709\u53C2\u6570\u7684\u8BA1\u7B97\u7ED3\u679C\u4E3A FALSE\uFF0C\u5373\u8FD4\u56DE FALSE\u3002",
            "p": [
              {
                "name": "logical1",
                "detail": "\u8981\u6D4B\u8BD5\u7684\u7B2C\u4E00\u4E2A\u6761\u4EF6\uFF0C\u5176\u8BA1\u7B97\u7ED3\u679C\u53EF\u4EE5\u4E3A TRUE \u6216 FALSE\u3002"
              },
              {
                "name": "\u903B\u8F91\u8868\u8FBE\u5F0F2",
                "detail": "[\u53EF\u9009] - \u5176\u4ED6\u8868\u8FBE\u5F0F\u6216\u5BF9\u5305\u542B\u8868\u8FBE\u5F0F\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0C\u8FD9\u4E9B\u8868\u8FBE\u5F0F\u4EE3\u8868\u67D0\u79CD\u903B\u8F91\u503C\uFF08\u5373TRUE\u6216FALSE\uFF09\u6216\u8005\u53EF\u4EE5\u5F3A\u5236\u8F6C\u6362\u4E3A\u903B\u8F91\u503C\u3002"
              }
            ]
          },
          "NE": {
            "d": "\u5982\u679C\u6307\u5B9A\u7684\u503C\u4E0D\u76F8\u7B49\uFF0C\u5219\u8FD4\u56DE\u201CTRUE\u201D\uFF1B\u5426\u5219\u8FD4\u56DE\u201CFALSE\u201D\u3002\u76F8\u5F53\u4E8E\u201C<>\u201D\u8FD0\u7B97\u7B26\u3002",
            "a": "\u5982\u679C\u6307\u5B9A\u7684\u503C\u4E0D\u76F8\u7B49\uFF0C\u5219\u8FD4\u56DE\u201CTRUE\u201D\uFF1B\u5426\u5219\u8FD4\u56DE\u201CFALSE\u201D\u3002\u76F8\u5F53\u4E8E\u201C<>\u201D\u8FD0\u7B97\u7B26\u3002",
            "p": [
              {
                "name": "value1",
                "detail": "\u7B2C\u4E00\u4E2A\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u8981\u68C0\u67E5\u662F\u5426\u4E0E value1 \u4E0D\u76F8\u7B49\u7684\u503C\u3002"
              }
            ]
          },
          "EQ": {
            "d": "\u5982\u679C\u6307\u5B9A\u7684\u503C\u76F8\u7B49\uFF0C\u5219\u8FD4\u56DE\u201CTRUE\u201D\uFF1B\u5426\u5219\u8FD4\u56DE\u201CFALSE\u201D\u3002\u76F8\u5F53\u4E8E\u201C=\u201D\u8FD0\u7B97\u7B26\u3002",
            "a": "\u5982\u679C\u6307\u5B9A\u7684\u503C\u76F8\u7B49\uFF0C\u5219\u8FD4\u56DE\u201CTRUE\u201D\uFF1B\u5426\u5219\u8FD4\u56DE\u201CFALSE\u201D\u3002\u76F8\u5F53\u4E8E\u201C=\u201D\u8FD0\u7B97\u7B26\u3002",
            "p": [
              {
                "name": "value1",
                "detail": "\u7B2C\u4E00\u4E2A\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u8981\u68C0\u67E5\u662F\u5426\u4E0E value1 \u76F8\u7B49\u7684\u503C\u3002"
              }
            ]
          },
          "GT": {
            "d": "\u5982\u679C\u7B2C\u4E00\u4E2A\u53C2\u6570\u4E25\u683C\u5927\u4E8E\u7B2C\u4E8C\u4E2A\uFF0C\u5219\u8FD4\u56DE TRUE\uFF1B\u5426\u5219\u8FD4\u56DE FALSE\u3002\u76F8\u5F53\u4E8E\u201C>\u201D\u8FD0\u7B97\u7B26\u3002",
            "a": "\u5982\u679C\u7B2C\u4E00\u4E2A\u53C2\u6570\u4E25\u683C\u5927\u4E8E\u7B2C\u4E8C\u4E2A\uFF0C\u5219\u8FD4\u56DE TRUE\uFF1B\u5426\u5219\u8FD4\u56DE FALSE\u3002\u76F8\u5F53\u4E8E\u201C>\u201D\u8FD0\u7B97\u7B26\u3002",
            "p": [
              {
                "name": "value1",
                "detail": "\u8981\u6D4B\u8BD5\u5176\u662F\u5426\u5927\u4E8E value2 \u7684\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u7B2C\u4E8C\u4E2A\u503C\u3002"
              }
            ]
          },
          "GTE": {
            "d": "\u5982\u679C\u7B2C\u4E00\u4E2A\u53C2\u6570\u5927\u4E8E\u6216\u7B49\u4E8E\u7B2C\u4E8C\u4E2A\uFF0C\u5219\u8FD4\u56DE TRUE\uFF1B\u5426\u5219\u8FD4\u56DE FALSE\u3002\u76F8\u5F53\u4E8E\u201C>=\u201D\u8FD0\u7B97\u7B26\u3002",
            "a": "\u5982\u679C\u7B2C\u4E00\u4E2A\u53C2\u6570\u5927\u4E8E\u6216\u7B49\u4E8E\u7B2C\u4E8C\u4E2A\uFF0C\u5219\u8FD4\u56DE TRUE\uFF1B\u5426\u5219\u8FD4\u56DE FALSE\u3002\u76F8\u5F53\u4E8E\u201C>=\u201D\u8FD0\u7B97\u7B26\u3002",
            "p": [
              {
                "name": "value1",
                "detail": "\u8981\u6D4B\u8BD5\u5176\u662F\u5426\u5927\u4E8E\u7B49\u4E8E value2 \u7684\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u7B2C\u4E8C\u4E2A\u503C\u3002"
              }
            ]
          },
          "LT": {
            "d": "\u5982\u679C\u7B2C\u4E00\u4E2A\u53C2\u6570\u4E25\u683C\u5C0F\u4E8E\u7B2C\u4E8C\u4E2A\uFF0C\u5219\u8FD4\u56DE TRUE\uFF1B\u5426\u5219\u8FD4\u56DE FALSE\u3002\u76F8\u5F53\u4E8E\u201C<\u201D\u8FD0\u7B97\u7B26\u3002",
            "a": "\u5982\u679C\u7B2C\u4E00\u4E2A\u53C2\u6570\u4E25\u683C\u5C0F\u4E8E\u7B2C\u4E8C\u4E2A\uFF0C\u5219\u8FD4\u56DE TRUE\uFF1B\u5426\u5219\u8FD4\u56DE FALSE\u3002\u76F8\u5F53\u4E8E\u201C<\u201D\u8FD0\u7B97\u7B26\u3002",
            "p": [
              {
                "name": "value1",
                "detail": "\u8981\u6D4B\u8BD5\u5176\u662F\u5426\u5C0F\u4E8E value2 \u7684\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u7B2C\u4E8C\u4E2A\u503C\u3002"
              }
            ]
          },
          "LTE": {
            "d": "\u5982\u679C\u7B2C\u4E00\u4E2A\u53C2\u6570\u5C0F\u4E8E\u6216\u7B49\u4E8E\u7B2C\u4E8C\u4E2A\uFF0C\u5219\u8FD4\u56DE TRUE\uFF1B\u5426\u5219\u8FD4\u56DE FALSE\u3002\u76F8\u5F53\u4E8E\u201C<=\u201D\u8FD0\u7B97\u7B26\u3002",
            "a": "\u5982\u679C\u7B2C\u4E00\u4E2A\u53C2\u6570\u5C0F\u4E8E\u6216\u7B49\u4E8E\u7B2C\u4E8C\u4E2A\uFF0C\u5219\u8FD4\u56DE TRUE\uFF1B\u5426\u5219\u8FD4\u56DE FALSE\u3002\u76F8\u5F53\u4E8E\u201C<=\u201D\u8FD0\u7B97\u7B26\u3002",
            "p": [
              {
                "name": "value1",
                "detail": "\u8981\u6D4B\u8BD5\u5176\u662F\u5426\u5C0F\u4E8E\u7B49\u4E8E value2 \u7684\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u7B2C\u4E8C\u4E2A\u503C\u3002"
              }
            ]
          },
          "ADD": {
            "d": "\u8FD4\u56DE\u4E24\u4E2A\u6570\u503C\u4E4B\u548C\u3002\u76F8\u5F53\u4E8E `+` \u8FD0\u7B97\u7B26\u3002",
            "a": "\u8FD4\u56DE\u4E24\u4E2A\u6570\u503C\u4E4B\u548C\u3002\u76F8\u5F53\u4E8E `+` \u8FD0\u7B97\u7B26\u3002",
            "p": [
              {
                "name": "value1",
                "detail": "\u7B2C\u4E00\u4E2A\u52A0\u6570\u3002"
              },
              {
                "name": "value2",
                "detail": "\u7B2C\u4E8C\u4E2A\u52A0\u6570\u3002"
              }
            ]
          },
          "MINUS": {
            "d": "\u8FD4\u56DE\u4E24\u4E2A\u6570\u503C\u4E4B\u5DEE\u3002\u76F8\u5F53\u4E8E\u201C-\u201D\u8FD0\u7B97\u7B26\u3002",
            "a": "\u8FD4\u56DE\u4E24\u4E2A\u6570\u503C\u4E4B\u5DEE\u3002\u76F8\u5F53\u4E8E\u201C-\u201D\u8FD0\u7B97\u7B26\u3002",
            "p": [
              {
                "name": "value1",
                "detail": "\u88AB\u51CF\u6570\uFF0C\u5373\u8981\u5BF9\u5176\u8BA1\u51CF\u7684\u6570\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u51CF\u6570\uFF0C\u5373\u8981\u4ECE value1 \u4E2D\u51CF\u9664\u7684\u6570\u503C\u3002"
              }
            ]
          },
          "MULTIPLY": {
            "d": "\u8FD4\u56DE\u4E24\u4E2A\u6570\u7684\u4E58\u79EF\u3002\u76F8\u5F53\u4E8E\u201C*\u201D\u8FD0\u7B97\u7B26\u3002",
            "a": "\u8FD4\u56DE\u4E24\u4E2A\u6570\u7684\u4E58\u79EF\u3002\u76F8\u5F53\u4E8E\u201C*\u201D\u8FD0\u7B97\u7B26\u3002",
            "p": [
              {
                "name": "value1",
                "detail": "\u7B2C\u4E00\u4E2A\u4E58\u6570\u3002"
              },
              {
                "name": "value2",
                "detail": "\u7B2C\u4E8C\u4E2A\u4E58\u6570\u3002"
              }
            ]
          },
          "DIVIDE": {
            "d": "\u8FD4\u56DE\u4E24\u4E2A\u53C2\u6570\u76F8\u9664\u6240\u5F97\u7684\u7ED3\u679C\u3002\u76F8\u5F53\u4E8E `/` \u8FD0\u7B97\u7B26\u3002",
            "a": "\u8FD4\u56DE\u4E24\u4E2A\u53C2\u6570\u76F8\u9664\u6240\u5F97\u7684\u7ED3\u679C\u3002\u76F8\u5F53\u4E8E `/` \u8FD0\u7B97\u7B26\u3002",
            "p": [
              {
                "name": "value1",
                "detail": "\u8981\u88AB\u9664\u7684\u6570\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u7528\u4E8E\u9664\u5176\u4ED6\u6570\u7684\u6570\u503C\u3002\n\n\u9664\u6570\u4E0D\u5F97\u4E3A0\u3002"
              }
            ]
          },
          "CONCAT": {
            "d": "\u8FD4\u56DE\u4E24\u4E2A\u503C\u7684\u4E32\u8054\u3002\u76F8\u5F53\u4E8E `&` \u8FD0\u7B97\u7B26\u3002",
            "a": "\u8FD4\u56DE\u4E24\u4E2A\u503C\u7684\u4E32\u8054\u3002\u76F8\u5F53\u4E8E `&` \u8FD0\u7B97\u7B26\u3002",
            "p": [
              {
                "name": "value1",
                "detail": "value2 \u5C06\u9644\u4E8E\u5176\u540E\u7684\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u8981\u9644\u4E8E value1 \u4E4B\u540E\u7684\u503C\u3002"
              }
            ]
          },
          "UNARY_PERCENT": {
            "d": "\u8FD4\u56DE\u6309\u767E\u5206\u6BD4\u89E3\u91CA\u7684\u6570\u503C\u3002\u4F8B\u5982\uFF0C\u201CUNARY_PERCENT(100)\u201D\u7B49\u4E8E1\u3002",
            "a": "\u8FD4\u56DE\u6309\u767E\u5206\u6BD4\u89E3\u91CA\u7684\u6570\u503C\u3002\u4F8B\u5982\uFF0C\u201CUNARY_PERCENT(100)\u201D\u7B49\u4E8E1\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u8981\u4F5C\u4E3A\u767E\u5206\u6BD4\u89E3\u91CA\u7684\u6570\u503C\u3002"
              }
            ]
          },
          "CONCATENATE": {
            "d": "\u5C06\u4E24\u4E2A\u6216\u591A\u4E2A\u6587\u672C\u5B57\u7B26\u4E32\u8054\u63A5\u4E3A\u4E00\u4E2A\u5B57\u7B26\u4E32\u3002",
            "a": "\u5C06\u4E24\u4E2A\u6216\u591A\u4E2A\u6587\u672C\u5B57\u7B26\u4E32\u8054\u63A5\u4E3A\u4E00\u4E2A\u5B57\u7B26\u4E32\u3002",
            "p": [
              {
                "name": "text1",
                "detail": "\u521D\u59CB\u5B57\u7B26\u4E32\u3002"
              },
              {
                "name": "text2 ...",
                "detail": "[\u53EF\u9009] - \u8981\u6309\u987A\u5E8F\u8FDE\u63A5\u5728\u4E00\u8D77\u7684\u5176\u4ED6\u5B57\u7B26\u4E32\u3002"
              }
            ]
          },
          "CODE": {
            "d": "\u8FD4\u56DE\u6240\u63D0\u4F9B\u7684\u5B57\u7B26\u4E32\u4E2D\u9996\u5B57\u7B26\u7684 Unicode \u6620\u5C04\u503C\u3002",
            "a": "\u8FD4\u56DE\u6240\u63D0\u4F9B\u7684\u5B57\u7B26\u4E32\u4E2D\u9996\u5B57\u7B26\u7684 Unicode \u6620\u5C04\u503C\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u8FD4\u56DE\u5176\u9996\u5B57\u7B26\u7684Unicode\u6620\u5C04\u503C\u7684\u5B57\u7B26\u4E32\u3002"
              }
            ]
          },
          "CHAR": {
            "d": "\u6309\u7167\u5F53\u524D Unicode \u7F16\u7801\u8868\uFF0C\u5C06\u6570\u5B57\u8F6C\u6362\u4E3A\u5BF9\u5E94\u7684\u5B57\u7B26\u3002",
            "a": "\u6309\u7167\u5F53\u524D Unicode \u7F16\u7801\u8868\uFF0C\u5C06\u6570\u5B57\u8F6C\u6362\u4E3A\u5BF9\u5E94\u7684\u5B57\u7B26\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u4ECB\u4E8E 1 \u5230 255 \u4E4B\u95F4\u7684\u6570\u5B57\u3002"
              }
            ]
          },
          "ARABIC": {
            "d": "\u5C06\u7F57\u9A6C\u6570\u5B57\u8F6C\u6362\u4E3A\u963F\u62C9\u4F2F\u6570\u5B57\u3002",
            "a": "\u5C06\u7F57\u9A6C\u6570\u5B57\u8F6C\u6362\u4E3A\u963F\u62C9\u4F2F\u6570\u5B57\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u8F6C\u6362\u683C\u5F0F\u7684\u7F57\u9A6C\u6570\u5B57"
              }
            ]
          },
          "ROMAN": {
            "d": "\u5C06\u6570\u5B57\u683C\u5F0F\u8BBE\u7F6E\u4E3A\u7F57\u9A6C\u6570\u5B57\u5F62\u5F0F\u3002",
            "a": "\u5C06\u6570\u5B57\u683C\u5F0F\u8BBE\u7F6E\u4E3A\u7F57\u9A6C\u6570\u5B57\u5F62\u5F0F\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u8981\u8BBE\u7F6E\u683C\u5F0F\u7684\u6570\u5B57\uFF0C\u4ECB\u4E8E1\u52303999\u4E4B\u95F4\uFF08\u5305\u62EC\u8FD9\u4E24\u4E2A\u6570\u5B57\uFF09\u3002"
              }
            ]
          },
          "REGEXEXTRACT": {
            "d": "\u6309\u7167\u6B63\u5219\u8868\u8FBE\u5F0F\u63D0\u53D6\u5339\u914D\u7684\u5B50\u4E32\u3002",
            "a": "\u6309\u7167\u6B63\u5219\u8868\u8FBE\u5F0F\u63D0\u53D6\u5339\u914D\u7684\u5B50\u4E32\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8F93\u5165\u6587\u672C\u3002"
              },
              {
                "name": "regular_expression",
                "detail": "\u6B64\u51FD\u6570\u5C06\u8FD4\u56DE\u6587\u672C\u4E2D\u7B26\u5408\u6B64\u8868\u8FBE\u5F0F\u7684\u7B2C\u4E00\u4E2A\u5B50\u4E32\u3002"
              }
            ]
          },
          "REGEXMATCH": {
            "d": "\u5224\u65AD\u4E00\u6BB5\u6587\u672C\u662F\u5426\u4E0E\u6B63\u5219\u8868\u8FBE\u5F0F\u76F8\u5339\u914D\u3002",
            "a": "\u5224\u65AD\u4E00\u6BB5\u6587\u672C\u662F\u5426\u4E0E\u6B63\u5219\u8868\u8FBE\u5F0F\u76F8\u5339\u914D\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u7528\u6B63\u5219\u8868\u8FBE\u5F0F\u6D4B\u8BD5\u7684\u6587\u672C\u3002"
              },
              {
                "name": "regular_expression",
                "detail": "\u7528\u6765\u6D4B\u8BD5\u6587\u672C\u7684\u6B63\u5219\u8868\u8FBE\u5F0F\u3002"
              }
            ]
          },
          "REGEXREPLACE": {
            "d": "\u4F7F\u7528\u6B63\u5219\u8868\u8FBE\u5F0F\u5C06\u6587\u672C\u5B57\u7B26\u4E32\u4E2D\u7684\u4E00\u90E8\u5206\u66FF\u6362\u4E3A\u5176\u4ED6\u6587\u672C\u5B57\u7B26\u4E32\u3002",
            "a": "\u4F7F\u7528\u6B63\u5219\u8868\u8FBE\u5F0F\u5C06\u6587\u672C\u5B57\u7B26\u4E32\u4E2D\u7684\u4E00\u90E8\u5206\u66FF\u6362\u4E3A\u5176\u4ED6\u6587\u672C\u5B57\u7B26\u4E32\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u5BF9\u5176\u5C40\u90E8\u8FDB\u884C\u66FF\u6362\u64CD\u4F5C\u7684\u6587\u672C\u3002"
              },
              {
                "name": "regular_expression",
                "detail": "\u6B63\u5219\u8868\u8FBE\u5F0F\u3002 text \u4E2D\u6240\u6709\u5339\u914D\u7684\u5B9E\u4F8B\u90FD\u5C06\u88AB\u66FF\u6362\u3002"
              },
              {
                "name": "replacement",
                "detail": "\u8981\u63D2\u5165\u5230\u539F\u6709\u6587\u672C\u4E2D\u7684\u6587\u672C\u3002"
              }
            ]
          },
          "T": {
            "d": "\u8FD4\u56DE\u6587\u672C\u683C\u5F0F\u7684\u5B57\u7B26\u4E32\u53C2\u6570\u3002",
            "a": "\u8FD4\u56DE\u6587\u672C\u683C\u5F0F\u7684\u5B57\u7B26\u4E32\u53C2\u6570\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8F6C\u6362\u4E3A\u6587\u672C\u7684\u53C2\u6570\u3002\n\n\u5982\u679C\u503C\u4E3A\u6587\u672C\uFF0CT\u5C06\u8FD4\u56DE\u503C\u672C\u8EAB\u3002\n\n\u5982\u679C\u503C\u4E3A\u6307\u5411\u5305\u542B\u6587\u672C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0CT\u5C06\u8FD4\u56DE\u503C\u4E2D\u7684\u5185\u5BB9\u3002\n\n\u5982\u679C\u503C\u4E3A\u9519\u8BEF\u503C\u6216\u5305\u542B\u9519\u8BEF\u503C\u7684\u5355\u5143\u683C\uFF0CT\u5C06\u8FD4\u56DE\u8BE5\u9519\u8BEF\u503C\u3002\n\n\u5BF9\u4E8E\u6240\u6709\u5176\u4ED6\u60C5\u51B5\uFF0CT\u5C06\u8FD4\u56DE\u7A7A\u4E32\u3002"
              }
            ]
          },
          "FIXED": {
            "d": "\u4EE5\u56FA\u5B9A\u7684\u5C0F\u6570\u4F4D\u6570\u8BBE\u7F6E\u6570\u5B57\u7684\u683C\u5F0F\u3002",
            "a": "\u4EE5\u56FA\u5B9A\u7684\u5C0F\u6570\u4F4D\u6570\u8BBE\u7F6E\u6570\u5B57\u7684\u683C\u5F0F\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u8981\u8FDB\u884C\u820D\u5165\u5E76\u8F6C\u6362\u4E3A\u6587\u672C\u7684\u6570\u5B57\u3002"
              },
              {
                "name": "decimals",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A2] - \u7ED3\u679C\u4E2D\u8981\u663E\u793A\u7684\u5C0F\u6570\u4F4D\u6570\u3002\n\n\u5982\u679C\u6570\u503C\u7684\u6709\u6548\u4F4D\u6570\u5C0F\u4E8E\u5C0F\u6570\u4F4D\u6570\uFF0C\u5C06\u4EE5\u96F6\u586B\u5145\u3002\u5982\u679C\u6570\u503C\u7684\u6709\u6548\u4F4D\u6570\u5927\u4E8E\u5C0F\u6570\u4F4D\u6570\uFF0C\u5219\u5C06\u5176\u820D\u5165\u5230\u6240\u9700\u7684\u5C0F\u6570\u4F4D\u6570\u800C\u4E0D\u662F\u5C06\u5176\u622A\u65AD\u3002"
              },
              {
                "name": "no_commas",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3AFALSE()] - \u4E00\u4E2A\u903B\u8F91\u503C\uFF0C\u5982\u679C\u4E3A TRUE()\uFF0C\u5219\u4F1A\u7981\u6B62 FIXED \u5728\u8FD4\u56DE\u7684\u6587\u672C\u4E2D\u5305\u542B\u9017\u53F7\u3002"
              }
            ]
          },
          "FIND": {
            "d": "\u8FD4\u56DE\u5B57\u7B26\u4E32\u5728\u6587\u672C\u4E2D\u9996\u6B21\u51FA\u73B0\u7684\u4F4D\u7F6E\uFF08\u533A\u5206\u5927\u5C0F\u5199\uFF09\u3002",
            "a": "\u8FD4\u56DE\u5B57\u7B26\u4E32\u5728\u6587\u672C\u4E2D\u9996\u6B21\u51FA\u73B0\u7684\u4F4D\u7F6E\uFF08\u533A\u5206\u5927\u5C0F\u5199\uFF09\u3002",
            "p": [
              {
                "name": "find_text",
                "detail": "\u8981\u5728\u8981\u641C\u7D22\u7684\u6587\u672C\u4E2D\u67E5\u627E\u7684\u5B57\u7B26\u4E32\u3002"
              },
              {
                "name": "within_text",
                "detail": "\u8981\u5728\u5176\u4E2D\u641C\u7D22\u641C\u7D22\u5B57\u7B26\u4E32\u7684\u9996\u6B21\u51FA\u73B0\u4F4D\u7F6E\u7684\u6587\u672C\u3002"
              },
              {
                "name": "start_num",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A1] - \u8981\u5728\u8981\u641C\u7D22\u7684\u6587\u672C\u4E2D\u5F00\u59CB\u641C\u7D22\u7684\u5B57\u7B26\u4F4D\u7F6E\u3002"
              }
            ]
          },
          "FINDB": {
            "d": "\u8FD4\u56DE\u67D0\u4E2A\u5B57\u7B26\u4E32\u5728\u6587\u672C\u4E2D\u9996\u6B21\u51FA\u73B0\u7684\u4F4D\u7F6E\uFF08\u6BCF\u4E2A\u53CC\u5B57\u8282\u5B57\u7B26\u5360\u4E24\u4E2A\u4F4D\u7F6E\uFF09\u3002",
            "a": "\u8FD4\u56DE\u67D0\u4E2A\u5B57\u7B26\u4E32\u5728\u6587\u672C\u4E2D\u9996\u6B21\u51FA\u73B0\u7684\u4F4D\u7F6E\uFF08\u6BCF\u4E2A\u53CC\u5B57\u8282\u5B57\u7B26\u5360\u4E24\u4E2A\u4F4D\u7F6E\uFF09\u3002",
            "p": [
              {
                "name": "find_text",
                "detail": "\u8981\u5728\u8981\u641C\u7D22\u7684\u6587\u672C\u4E2D\u67E5\u627E\u7684\u5B57\u7B26\u4E32\u3002"
              },
              {
                "name": "within_text",
                "detail": "\u8981\u5728\u5176\u4E2D\u641C\u7D22\u641C\u7D22\u5B57\u7B26\u4E32\u7684\u9996\u6B21\u51FA\u73B0\u4F4D\u7F6E\u7684\u6587\u672C\u3002"
              },
              {
                "name": "start_num",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A 1] - \u8981\u5728\u8981\u641C\u7D22\u7684\u6587\u672C\u4E2D\u5F00\u59CB\u641C\u7D22\u7684\u5B57\u7B26\u4F4D\u7F6E\u3002"
              }
            ]
          },
          "JOIN": {
            "d": "\u5C06\u4E00\u4E2A\u6216\u591A\u4E2A\u4F7F\u7528\u6307\u5B9A\u5B9A\u754C\u7B26\u7684\u4E00\u7EF4\u6570\u7EC4\u7684\u5143\u7D20\u8FDE\u63A5\u5230\u4E00\u8D77\u3002",
            "a": "\u5C06\u4E00\u4E2A\u6216\u591A\u4E2A\u4F7F\u7528\u6307\u5B9A\u5B9A\u754C\u7B26\u7684\u4E00\u7EF4\u6570\u7EC4\u7684\u5143\u7D20\u8FDE\u63A5\u5230\u4E00\u8D77\u3002",
            "p": [
              {
                "name": "separator",
                "detail": "\u7F6E\u4E8E\u76F8\u4E92\u8FDE\u63A5\u7684\u503C\u4E4B\u95F4\u7684\u5B57\u7B26\u6216\u5B57\u7B26\u4E32\u3002\n\n\u5B9A\u754C\u7B26\u53EF\u4EE5\u4E3A\u7A7A\uFF0C\u4F8B\u5982JOIN(,{1,2,3})\u3002"
              },
              {
                "name": "array1",
                "detail": "\u8981\u4F7F\u7528\u5B9A\u754C\u7B26\u8FDE\u63A5\u7684\u4E00\u4E2A\u6216\u591A\u4E2A\u503C\u3002"
              },
              {
                "name": "array2, ...",
                "detail": "[\u53EF\u9009] - \u8981\u4F7F\u7528\u5B9A\u754C\u7B26\u8FDE\u63A5\u7684\u5176\u4ED6\u503C\u6216\u6570\u7EC4\u3002"
              }
            ]
          },
          "LEFT": {
            "d": "\u4ECE\u6587\u672C\u5B57\u7B26\u4E32\u7684\u7B2C\u4E00\u4E2A\u5B57\u7B26\u5F00\u59CB\u8FD4\u56DE\u6307\u5B9A\u4E2A\u6570\u7684\u5B57\u7B26\u3002",
            "a": "\u4ECE\u6587\u672C\u5B57\u7B26\u4E32\u7684\u7B2C\u4E00\u4E2A\u5B57\u7B26\u5F00\u59CB\u8FD4\u56DE\u6307\u5B9A\u4E2A\u6570\u7684\u5B57\u7B26\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u5305\u542B\u8981\u63D0\u53D6\u7684\u5B57\u7B26\u7684\u6587\u672C\u5B57\u7B26\u4E32\u3002"
              },
              {
                "name": "num_chars",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A1] - \u6307\u5B9A\u8981\u7531 LEFT \u63D0\u53D6\u7684\u5B57\u7B26\u7684\u6570\u91CF\u3002"
              }
            ]
          },
          "RIGHT": {
            "d": "\u6839\u636E\u6240\u6307\u5B9A\u7684\u5B57\u7B26\u6570\u8FD4\u56DE\u6587\u672C\u5B57\u7B26\u4E32\u4E2D\u6700\u540E\u4E00\u4E2A\u6216\u591A\u4E2A\u5B57\u7B26\u3002",
            "a": "\u6839\u636E\u6240\u6307\u5B9A\u7684\u5B57\u7B26\u6570\u8FD4\u56DE\u6587\u672C\u5B57\u7B26\u4E32\u4E2D\u6700\u540E\u4E00\u4E2A\u6216\u591A\u4E2A\u5B57\u7B26\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u5305\u542B\u8981\u63D0\u53D6\u7684\u5B57\u7B26\u7684\u6587\u672C\u5B57\u7B26\u4E32\u3002"
              },
              {
                "name": "num_chars",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A1] - \u6307\u5B9A\u8981\u7531 RIGHT \u63D0\u53D6\u7684\u5B57\u7B26\u7684\u6570\u91CF\u3002"
              }
            ]
          },
          "MID": {
            "d": "\u8FD4\u56DE\u6587\u672C\u5B57\u7B26\u4E32\u4E2D\u4ECE\u6307\u5B9A\u4F4D\u7F6E\u5F00\u59CB\u7684\u7279\u5B9A\u6570\u76EE\u7684\u5B57\u7B26\u3002",
            "a": "\u8FD4\u56DE\u6587\u672C\u5B57\u7B26\u4E32\u4E2D\u4ECE\u6307\u5B9A\u4F4D\u7F6E\u5F00\u59CB\u7684\u7279\u5B9A\u6570\u76EE\u7684\u5B57\u7B26\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u5305\u542B\u8981\u63D0\u53D6\u7684\u5B57\u7B26\u7684\u6587\u672C\u5B57\u7B26\u4E32\u3002"
              },
              {
                "name": "start_num",
                "detail": "\u8981\u4ECE\u5B57\u7B26\u4E32\u4E2D\u5F00\u59CB\u63D0\u53D6\u7684\u4F4D\u7F6E\u3002\u5B57\u7B26\u4E32\u4E2D\u7B2C\u4E00\u4E2A\u5B57\u7B26\u7684\u7D22\u5F15\u4E3A1\u3002"
              },
              {
                "name": "num_chars",
                "detail": "\u6307\u5B9A\u8981\u7531 MID \u63D0\u53D6\u7684\u5B57\u7B26\u7684\u6570\u91CF\u3002\n\n\u5982\u679C\u63D0\u53D6\u7684\u5B57\u7B26\u6570\u5C1A\u4E0D\u8DB3\u63D0\u53D6\u957F\u5EA6\u4E2A\u5B57\u7B26\u65F6\u5C31\u5230\u8FBE\u4E86\u5B57\u7B26\u4E32\u5C3E\u90E8\uFF0C\u5219MID\u8FD4\u56DE\u4ECE\u5F00\u59CB\u4F4D\u7F6E\u5230\u5B57\u7B26\u4E32\u5C3E\u90E8\u7684\u5B57\u7B26\u3002"
              }
            ]
          },
          "LEN": {
            "d": "\u8FD4\u56DE\u7ED9\u5B9A\u5B57\u7B26\u4E32\u7684\u957F\u5EA6\u3002",
            "a": "\u8FD4\u56DE\u7ED9\u5B9A\u5B57\u7B26\u4E32\u7684\u957F\u5EA6\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u8FD4\u56DE\u5176\u957F\u5EA6\u7684\u5B57\u7B26\u4E32\u3002"
              }
            ]
          },
          "LENB": {
            "d": "\u8FD4\u56DE\u6587\u672C\u4E2D\u6240\u5305\u542B\u7684\u5B57\u7B26\u6570\u3002\u4E0E\u53CC\u5B57\u8282\u5B57\u7B26\u96C6(DBCS)\u4E00\u8D77\u4F7F\u7528\u3002",
            "a": "\u8FD4\u56DE\u6587\u672C\u4E2D\u6240\u5305\u542B\u7684\u5B57\u7B26\u6570\u3002\u4E0E\u53CC\u5B57\u8282\u5B57\u7B26\u96C6(DBCS)\u4E00\u8D77\u4F7F\u7528\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u8FD4\u56DE\u5176\u5B57\u8282\u6570\u7684\u5B57\u7B26\u4E32\u3002\uFF08\u4E00\u4E2A\u6C49\u5B57\u4E3A\u4E24\u4E2A\u5B57\u8282\u6570\uFF09"
              }
            ]
          },
          "LOWER": {
            "d": "\u5C06\u6307\u5B9A\u5B57\u7B26\u4E32\u4E2D\u7684\u5B57\u6BCD\u8F6C\u6362\u4E3A\u5C0F\u5199\u3002",
            "a": "\u5C06\u6307\u5B9A\u5B57\u7B26\u4E32\u4E2D\u7684\u5B57\u6BCD\u8F6C\u6362\u4E3A\u5C0F\u5199\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u8F6C\u6362\u4E3A\u5C0F\u5199\u7684\u5B57\u7B26\u4E32\u3002"
              }
            ]
          },
          "UPPER": {
            "d": "\u5C06\u6307\u5B9A\u5B57\u7B26\u4E32\u4E2D\u7684\u5B57\u6BCD\u8F6C\u6362\u4E3A\u5927\u5199\u3002",
            "a": "\u5C06\u6307\u5B9A\u5B57\u7B26\u4E32\u4E2D\u7684\u5B57\u6BCD\u8F6C\u6362\u4E3A\u5927\u5199\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u8F6C\u6362\u4E3A\u5927\u5199\u7684\u5B57\u7B26\u4E32\u3002"
              }
            ]
          },
          "EXACT": {
            "d": "\u6BD4\u8F83\u4E24\u4E2A\u5B57\u7B26\u4E32\u662F\u5426\u76F8\u540C\u3002",
            "a": "\u6BD4\u8F83\u4E24\u4E2A\u5B57\u7B26\u4E32\u662F\u5426\u76F8\u540C\u3002",
            "p": [
              {
                "name": "text1",
                "detail": "\u8981\u6BD4\u8F83\u7684\u7B2C\u4E00\u4E2A\u5B57\u7B26\u4E32\u3002"
              },
              {
                "name": "text2",
                "detail": "\u8981\u6BD4\u8F83\u7684\u7B2C\u4E8C\u4E2A\u5B57\u7B26\u4E32\u3002"
              }
            ]
          },
          "REPLACE": {
            "d": "\u5C06\u6587\u672C\u5B57\u7B26\u4E32\u7684\u4E00\u90E8\u5206\u66FF\u6362\u4E3A\u5176\u4ED6\u6587\u672C\u5B57\u7B26\u4E32\u3002",
            "a": "\u5C06\u6587\u672C\u5B57\u7B26\u4E32\u7684\u4E00\u90E8\u5206\u66FF\u6362\u4E3A\u5176\u4ED6\u6587\u672C\u5B57\u7B26\u4E32\u3002",
            "p": [
              {
                "name": "old_text",
                "detail": "\u8981\u5BF9\u5176\u5C40\u90E8\u8FDB\u884C\u66FF\u6362\u64CD\u4F5C\u7684\u6587\u672C\u3002"
              },
              {
                "name": "start_num",
                "detail": "\u5F00\u59CB\u8FDB\u884C\u66FF\u6362\u64CD\u4F5C\u7684\u4F4D\u7F6E\uFF08\u6587\u672C\u5F00\u5934\u4F4D\u7F6E\u4E3A 1\uFF09\u3002"
              },
              {
                "name": "num_chars",
                "detail": "\u8981\u5728\u6587\u672C\u4E2D\u66FF\u6362\u7684\u5B57\u7B26\u4E2A\u6570\u3002"
              },
              {
                "name": "new_text",
                "detail": "\u8981\u63D2\u5165\u5230\u539F\u6709\u6587\u672C\u4E2D\u7684\u6587\u672C\u3002"
              }
            ]
          },
          "REPT": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u6587\u672C\u7684\u591A\u6B21\u91CD\u590D\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u6587\u672C\u7684\u591A\u6B21\u91CD\u590D\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u91CD\u590D\u7684\u5B57\u7B26\u6216\u5B57\u7B26\u4E32\u3002"
              },
              {
                "name": "number_times",
                "detail": "\u8981\u91CD\u590D\u7684\u6587\u672C\u8981\u5728\u8FD4\u56DE\u503C\u4E2D\u51FA\u73B0\u7684\u6B21\u6570\u3002\n\n\u6700\u5927\u91CD\u590D\u6B21\u6570\u4E3A100\u3002\u5373\u4F7F\u91CD\u590D\u6B21\u6570\u5927\u4E8E100\uFF0CREPT\u4E5F\u4EC5\u5C06\u76F8\u5E94\u6587\u672C\u91CD\u590D100\u6B21\u3002"
              }
            ]
          },
          "SEARCH": {
            "d": "\u8FD4\u56DE\u5B57\u7B26\u4E32\u5728\u6587\u672C\u4E2D\u9996\u6B21\u51FA\u73B0\u7684\u4F4D\u7F6E\uFF08\u4E0D\u533A\u5206\u5927\u5C0F\u5199\uFF09\u3002",
            "a": "\u8FD4\u56DE\u5B57\u7B26\u4E32\u5728\u6587\u672C\u4E2D\u9996\u6B21\u51FA\u73B0\u7684\u4F4D\u7F6E\uFF08\u4E0D\u533A\u5206\u5927\u5C0F\u5199\uFF09\u3002",
            "p": [
              {
                "name": "find_text",
                "detail": "\u8981\u5728\u8981\u641C\u7D22\u7684\u6587\u672C\u4E2D\u67E5\u627E\u7684\u5B57\u7B26\u4E32\u3002"
              },
              {
                "name": "within_text",
                "detail": "\u8981\u5728\u5176\u4E2D\u641C\u7D22\u641C\u7D22\u5B57\u7B26\u4E32\u7684\u9996\u6B21\u51FA\u73B0\u4F4D\u7F6E\u7684\u6587\u672C\u3002"
              },
              {
                "name": "start_num",
                "detail": "[ \u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3A1 ] - \u8981\u5728\u8981\u641C\u7D22\u7684\u6587\u672C\u4E2D\u5F00\u59CB\u641C\u7D22\u7684\u5B57\u7B26\u4F4D\u7F6E\u3002"
              }
            ]
          },
          "SUBSTITUTE": {
            "d": "\u5728\u6587\u672C\u5B57\u7B26\u4E32\u4E2D\u7528 new_text \u66FF\u6362 old_text\u3002",
            "a": "\u5728\u6587\u672C\u5B57\u7B26\u4E32\u4E2D\u7528 new_text \u66FF\u6362 old_text\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u9700\u8981\u66FF\u6362\u5176\u4E2D\u5B57\u7B26\u7684\u6587\u672C\uFF0C\u6216\u5BF9\u542B\u6709\u6587\u672C\uFF08\u9700\u8981\u66FF\u6362\u5176\u4E2D\u5B57\u7B26\uFF09\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3002"
              },
              {
                "name": "old_text",
                "detail": "\u9700\u8981\u66FF\u6362\u7684\u6587\u672C\u3002"
              },
              {
                "name": "new_text",
                "detail": "\u7528\u4E8E\u66FF\u6362 old_text \u7684\u6587\u672C\u3002"
              },
              {
                "name": "instance_num",
                "detail": "[ \u53EF\u9009 ] - \u6307\u5B9A\u8981\u7528 new_text \u66FF\u6362 old_text \u7684\u4E8B\u4EF6\u3002 \u5982\u679C\u6307\u5B9A\u4E86 instance_num\uFF0C\u5219\u53EA\u6709\u6EE1\u8DB3\u8981\u6C42\u7684 old_text \u88AB\u66FF\u6362\u3002 \u5426\u5219\uFF0C\u6587\u672C\u4E2D\u51FA\u73B0\u7684\u6240\u6709 old_text \u90FD\u4F1A\u66F4\u6539\u4E3A new_text\u3002"
              }
            ]
          },
          "CLEAN": {
            "d": "\u79FB\u9664\u6587\u672C\u4E2D\u7684\u4E0D\u53EF\u6253\u5370 ASCII \u5B57\u7B26\u540E\u5C06\u5176\u8FD4\u56DE\u3002",
            "a": "\u79FB\u9664\u6587\u672C\u4E2D\u7684\u4E0D\u53EF\u6253\u5370 ASCII \u5B57\u7B26\u540E\u5C06\u5176\u8FD4\u56DE\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u79FB\u9664\u5176\u4E2D\u4E0D\u53EF\u6253\u5370\u5B57\u7B26\u7684\u6587\u672C\u3002"
              }
            ]
          },
          "TEXT": {
            "d": "\u6309\u7167\u6307\u5B9A\u683C\u5F0F\u5C06\u6570\u5B57\u8F6C\u6362\u4E3A\u6587\u672C\u3002",
            "a": "\u6309\u7167\u6307\u5B9A\u683C\u5F0F\u5C06\u6570\u5B57\u8F6C\u6362\u4E3A\u6587\u672C\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8BBE\u7F6E\u683C\u5F0F\u7684\u6570\u5B57\u3001\u65E5\u671F\u6216\u65F6\u95F4\u3002"
              },
              {
                "name": "format_text",
                "detail": '\u4EE5\u62EC\u53F7\u62EC\u8D77\u6765\u7684\u6A21\u5F0F\u4E32\uFF0C\u5C06\u6309\u8BE5\u6A21\u5F0F\u8BBE\u7F6E\u6570\u5B57\u7684\u683C\u5F0F\u3002\n\n0\u8868\u793A\u5728\u6570\u503C\u4F4D\u6570\u5C11\u4E8E\u683C\u5F0F\u6307\u5B9A\u7684\u4F4D\u6570\u65F6\u5FC5\u5B9A\u4EE5\u96F6\u586B\u5145\u3002\u4F8B\u5982\uFF0CTEXT(12.3,"000.00")\u5C06\u8FD4\u56DE012.30\u3002\u5F53\u6570\u503C\u7684\u5C0F\u6570\u4F4D\u6570\u8D85\u8FC7\u6A21\u5F0F\u6307\u5B9A\u7684\u5C0F\u6570\u4F4D\u6570\u65F6\uFF0C\u56DB\u820D\u4E94\u5165\u4E3A\u6307\u5B9A\u7684\u5C0F\u6570\u4F4D\u6570\u3002\u4F8B\u5982\uFF0CTEXT(12.305,"00.00")\u5C06\u8FD4\u56DE12.31\u3002\n\n#\u7C7B\u4F3C\u4E8E0\uFF0C\u4F46\u5E76\u4E0D\u662F\u5728\u5C0F\u6570\u70B9\u7684\u4E24\u4FA7\u90FD\u4EE5\u96F6\u586B\u5145\u3002\u4F8B\u5982\uFF0CTEXT(12.3,"###.##")\u5C06\u8FD4\u56DE12.3\u3002'
              }
            ]
          },
          "TRIM": {
            "d": "\u5220\u9664\u6307\u5B9A\u5B57\u7B26\u4E32\u524D\u540E\u7684\u7A7A\u683C\u3002",
            "a": "\u5220\u9664\u6307\u5B9A\u5B57\u7B26\u4E32\u524D\u540E\u7684\u7A7A\u683C\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u4FEE\u526A\u7684\u5B57\u7B26\u4E32\u6216\u6307\u5411\u5305\u542B\u8BE5\u5B57\u7B26\u4E32\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3002"
              }
            ]
          },
          "VALUE": {
            "d": "\u5C06\u53EF\u8BC6\u522B\u7684\u4EFB\u4F55\u65E5\u671F\u3001\u65F6\u95F4\u6216\u6570\u5B57\u683C\u5F0F\u7684\u5B57\u7B26\u4E32\u8F6C\u6362\u4E3A\u6570\u5B57\u3002",
            "a": "\u5C06\u53EF\u8BC6\u522B\u7684\u4EFB\u4F55\u65E5\u671F\u3001\u65F6\u95F4\u6216\u6570\u5B57\u683C\u5F0F\u7684\u5B57\u7B26\u4E32\u8F6C\u6362\u4E3A\u6570\u5B57\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u5305\u542B\u8981\u8F6C\u6362\u7684\u503C\u7684\u5B57\u7B26\u4E32\u3002"
              }
            ]
          },
          "PROPER": {
            "d": "\u5C06\u6307\u5B9A\u5B57\u7B26\u4E32\u4E2D\u6BCF\u4E2A\u5355\u8BCD\u7684\u9996\u5B57\u6BCD\u8F6C\u4E3A\u5927\u5199\u3002",
            "a": "\u5C06\u6307\u5B9A\u5B57\u7B26\u4E32\u4E2D\u6BCF\u4E2A\u5355\u8BCD\u7684\u9996\u5B57\u6BCD\u8F6C\u4E3A\u5927\u5199\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u8F6C\u6362\u7684\u6587\u672C\uFF0C\u5176\u4E2D\u6BCF\u4E2A\u5355\u8BCD\u7684\u9996\u5B57\u6BCD\u90FD\u5C06\u8F6C\u4E3A\u5927\u5199\uFF0C\u6240\u6709\u5176\u4ED6\u5B57\u6BCD\u5219\u8F6C\u4E3A\u5C0F\u5199\u3002"
              }
            ]
          },
          "CONVERT": {
            "d": "\u5C06\u6570\u5B57\u4ECE\u4E00\u79CD\u5EA6\u91CF\u7CFB\u7EDF\u8F6C\u6362\u4E3A\u53E6\u4E00\u79CD\u5EA6\u91CF\u7CFB\u7EDF\u3002",
            "a": "\u5C06\u6570\u5B57\u4ECE\u4E00\u79CD\u5EA6\u91CF\u7CFB\u7EDF\u8F6C\u6362\u4E3A\u53E6\u4E00\u79CD\u5EA6\u91CF\u7CFB\u7EDF\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u662F\u4EE5 from_unit \u4E3A\u5355\u4F4D\u7684\u9700\u8981\u8FDB\u884C\u8F6C\u6362\u7684\u6570\u503C\u3002"
              },
              {
                "name": "from_unit",
                "detail": "\u662F\u6570\u503C\u7684\u5355\u4F4D\u3002"
              },
              {
                "name": "to_unit",
                "detail": "\u662F\u7ED3\u679C\u7684\u5355\u4F4D\u3002"
              }
            ]
          },
          "SUMX2MY2": {
            "d": "\u8FD4\u56DE\u4E24\u6570\u7EC4\u4E2D\u5BF9\u5E94\u6570\u503C\u7684\u5E73\u65B9\u5DEE\u4E4B\u548C\u3002",
            "a": "\u8FD4\u56DE\u4E24\u6570\u7EC4\u4E2D\u5BF9\u5E94\u6570\u503C\u7684\u5E73\u65B9\u5DEE\u4E4B\u548C\u3002",
            "p": [
              {
                "name": "array_x",
                "detail": "\u7B2C\u4E00\u4E2A\u6570\u7EC4\u6216\u6570\u503C\u533A\u57DF\u3002"
              },
              {
                "name": "array_y",
                "detail": "\u7B2C\u4E8C\u4E2A\u6570\u7EC4\u6216\u6570\u503C\u533A\u57DF\u3002"
              }
            ]
          },
          "SUMX2PY2": {
            "d": "\u8FD4\u56DE\u4E24\u6570\u7EC4\u4E2D\u5BF9\u5E94\u6570\u503C\u7684\u5E73\u65B9\u548C\u4E4B\u548C\u3002",
            "a": "\u8FD4\u56DE\u4E24\u6570\u7EC4\u4E2D\u5BF9\u5E94\u6570\u503C\u7684\u5E73\u65B9\u548C\u4E4B\u548C\u3002",
            "p": [
              {
                "name": "array_x",
                "detail": "\u7B2C\u4E00\u4E2A\u6570\u7EC4\u6216\u6570\u503C\u533A\u57DF\u3002"
              },
              {
                "name": "array_y",
                "detail": "\u7B2C\u4E8C\u4E2A\u6570\u7EC4\u6216\u6570\u503C\u533A\u57DF\u3002"
              }
            ]
          },
          "SUMXMY2": {
            "d": "\u8FD4\u56DE\u4E24\u6570\u7EC4\u4E2D\u5BF9\u5E94\u6570\u503C\u4E4B\u5DEE\u7684\u5E73\u65B9\u548C\u3002",
            "a": "\u8FD4\u56DE\u4E24\u6570\u7EC4\u4E2D\u5BF9\u5E94\u6570\u503C\u4E4B\u5DEE\u7684\u5E73\u65B9\u548C\u3002",
            "p": [
              {
                "name": "array_x",
                "detail": "\u7B2C\u4E00\u4E2A\u6570\u7EC4\u6216\u6570\u503C\u533A\u57DF\u3002"
              },
              {
                "name": "array_y",
                "detail": "\u7B2C\u4E8C\u4E2A\u6570\u7EC4\u6216\u6570\u503C\u533A\u57DF\u3002"
              }
            ]
          },
          "TRANSPOSE": {
            "d": "\u5C06\u6570\u7EC4\u6216\u5355\u5143\u683C\u8303\u56F4\u7684\u884C\u5217\u8F6C\u7F6E\u3002",
            "a": "\u5C06\u6570\u7EC4\u6216\u5355\u5143\u683C\u8303\u56F4\u7684\u884C\u5217\u8F6C\u7F6E\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u8981\u5C06\u5176\u884C\u5217\u4E92\u6362\u7684\u6570\u7EC4\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "TREND": {
            "d": "\u8FD4\u56DE\u7EBF\u6027\u8D8B\u52BF\u503C\u3002",
            "a": "\u8FD4\u56DE\u7EBF\u6027\u8D8B\u52BF\u503C\u3002",
            "p": [
              {
                "name": "known_y",
                "detail": "\u5173\u7CFB\u8868\u8FBE\u5F0F y = mx + b \u4E2D\u5DF2\u77E5\u7684 y \u503C\u96C6\u5408\u3002\n\n\u5982\u679C known_y \u4E3A\u4E8C\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\uFF0C\u5219 known_x \u7684\u7EF4\u6570\u5FC5\u987B\u4E0E\u4E4B\u76F8\u540C\uFF0C\u6216\u8005\u7701\u7565\u6B64\u53C2\u6570\u3002\n\n\u5982\u679C known_y \u4E3A\u4E00\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\uFF0Cknown_x \u5219\u53EF\u4EE3\u8868\u4E8C\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\u4E2D\u7684\u591A\u4E2A\u81EA\u53D8\u91CF\u3002\u4E5F\u5C31\u662F\u8BF4\uFF0C\u5982\u679C known_y \u4E3A\u5355\u884C\uFF0C\u5219\u5C06 known_x \u4E2D\u7684\u6BCF\u884C\u89E3\u91CA\u4E3A\u5404\u81EA\u72EC\u7ACB\u7684\u503C\uFF0C\u7C7B\u4F3C\u60C5\u51B5\u4E5F\u9002\u7528\u4E8E known_y \u4E3A\u5355\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "known_x",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u8BE5\u6570\u7EC4\u4E3A{1,2,3,...},\u5176\u5927\u5C0F\u4E0E known_y \u76F8\u540C] - \u5173\u7CFB\u8868\u8FBE\u5F0F y = mx + b \u4E2D\u5DF2\u77E5\u7684\u53EF\u9009 x \u503C\u96C6\u5408\u3002\n\n\u5982\u679C known_y \u4E3A\u4E00\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\uFF0Cknown_x \u5219\u53EF\u4EE3\u8868\u4E8C\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\u4E2D\u7684\u591A\u4E2A\u81EA\u53D8\u91CF\u3002\u4E5F\u5C31\u662F\u8BF4\uFF0C\u5982\u679C known_y \u4E3A\u5355\u884C\uFF0C\u5219\u5C06 known_x \u4E2D\u7684\u6BCF\u884C\u89E3\u91CA\u4E3A\u5404\u81EA\u72EC\u7ACB\u7684\u503C\uFF0C\u7C7B\u4F3C\u60C5\u51B5\u4E5F\u9002\u7528\u4E8E known_y \u4E3A\u5355\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "new_x",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E0E known_x \u76F8\u540C] -  \u9700\u8981\u51FD\u6570 TREND \u8FD4\u56DE\u5BF9\u5E94 y \u503C\u7684\u65B0 x \u503C\u3002"
              },
              {
                "name": "const",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3ATRUE()] - \u4E00\u4E2A\u903B\u8F91\u503C\uFF0C\u7528\u4E8E\u6307\u5B9A\u662F\u5426\u5C06\u5E38\u91CF b \u5F3A\u5236\u8BBE\u4E3A 0\u3002\n\nTRUE() \u8868\u793A b \u5C06\u6309\u6B63\u5E38\u8BA1\u7B97\uFF1B\n\nFALSE() \u8868\u793A b \u5C06\u88AB\u8BBE\u4E3A 0\uFF08\u96F6\uFF09\uFF0Cm \u5C06\u88AB\u8C03\u6574\u4EE5\u4F7F y = mx\u3002"
              }
            ]
          },
          "FREQUENCY": {
            "d": "\u8BA1\u7B97\u6570\u503C\u5728\u67D0\u4E2A\u533A\u57DF\u5185\u7684\u51FA\u73B0\u9891\u7387\uFF0C\u7136\u540E\u8FD4\u56DE\u4E00\u4E2A\u5782\u76F4\u6570\u7EC4\u3002",
            "a": "\u8BA1\u7B97\u6570\u503C\u5728\u67D0\u4E2A\u533A\u57DF\u5185\u7684\u51FA\u73B0\u9891\u7387\uFF0C\u7136\u540E\u8FD4\u56DE\u4E00\u4E2A\u5782\u76F4\u6570\u7EC4\u3002",
            "p": [
              {
                "name": "data_array",
                "detail": "\u8981\u5BF9\u5176\u9891\u7387\u8FDB\u884C\u8BA1\u6570\u7684\u4E00\u7EC4\u6570\u503C\u6216\u5BF9\u8FD9\u7EC4\u6570\u503C\u7684\u5F15\u7528\u3002"
              },
              {
                "name": "bins_array",
                "detail": "\u8981\u5C06 data_array \u4E2D\u7684\u503C\u63D2\u5165\u5230\u7684\u95F4\u9694\u6570\u7EC4\u6216\u5BF9\u95F4\u9694\u7684\u5F15\u7528\u3002\n\n\u4E3A\u6E05\u6670\u8D77\u89C1\uFF0C\u5E94\u5C06\u7C7B\u522B\u6392\u5E8F\uFF0C\u4F46\u5982\u679C\u672A\u6392\u5E8F\uFF0CFREQUENCY\u4F1A\u5728\u5185\u90E8\u5BF9\u8FD9\u4E9B\u6307\u5B9A\u7684\u503C\u8FDB\u884C\u6392\u5E8F\u5E76\u8FD4\u56DE\u6B63\u786E\u7ED3\u679C\u3002"
              }
            ]
          },
          "GROWTH": {
            "d": "\u4F7F\u7528\u73B0\u6709\u6570\u636E\u8BA1\u7B97\u9884\u6D4B\u7684\u6307\u6570\u7B49\u6BD4\u3002",
            "a": "\u4F7F\u7528\u73B0\u6709\u6570\u636E\u8BA1\u7B97\u9884\u6D4B\u7684\u6307\u6570\u7B49\u6BD4\u3002",
            "p": [
              {
                "name": "known_y",
                "detail": "\u5173\u7CFB\u8868\u8FBE\u5F0F y = b*m^x \u4E2D\u5DF2\u77E5\u7684 y \u503C\u96C6\u5408\u3002\n\n\u5982\u679C\u5DF2\u77E5\u6570\u636E_y\u4E3A\u4E8C\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\uFF0C\u5219\u5DF2\u77E5\u6570\u636E_x\u7684\u7EF4\u6570\u5FC5\u987B\u4E0E\u4E4B\u76F8\u540C\uFF0C\u6216\u8005\u7701\u7565\u6B64\u53C2\u6570\u3002\n\n\u5982\u679C\u5DF2\u77E5\u6570\u636E_y\u4E3A\u4E00\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\uFF0C\u5DF2\u77E5\u6570\u636E_x\u5219\u53EF\u4EE3\u8868\u4E8C\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\u4E2D\u7684\u591A\u4E2A\u81EA\u53D8\u91CF\u3002\u4E5F\u5C31\u662F\u8BF4\uFF0C\u5982\u679C\u5DF2\u77E5\u6570\u636E_y\u4E3A\u5355\u884C\uFF0C\u5219\u5C06\u5DF2\u77E5\u6570\u636E_x\u4E2D\u7684\u6BCF\u884C\u89E3\u91CA\u4E3A\u5404\u81EA\u72EC\u7ACB\u7684\u503C\uFF0C\u7C7B\u4F3C\u60C5\u51B5\u4E5F\u9002\u7528\u4E8E\u5DF2\u77E5\u6570\u636E_y\u4E3A\u5355\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "known_x",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u8BE5\u6570\u7EC4\u4E3A{1,2,3,...},\u5176\u5927\u5C0F\u4E0E known_y \u76F8\u540C] - \u5173\u7CFB\u8868\u8FBE\u5F0F y = b*m^x \u4E2D\u5DF2\u77E5\u7684\u53EF\u9009 x \u503C\u96C6\u5408\u3002\n\n\u5982\u679C\u5DF2\u77E5\u6570\u636E_y\u4E3A\u4E00\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\uFF0C\u5DF2\u77E5\u6570\u636E_x\u5219\u53EF\u4EE3\u8868\u4E8C\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\u4E2D\u7684\u591A\u4E2A\u81EA\u53D8\u91CF\u3002\u4E5F\u5C31\u662F\u8BF4\uFF0C\u5982\u679C\u5DF2\u77E5\u6570\u636E_y\u4E3A\u5355\u884C\uFF0C\u5219\u5C06\u5DF2\u77E5\u6570\u636E_x\u4E2D\u7684\u6BCF\u884C\u89E3\u91CA\u4E3A\u5404\u81EA\u72EC\u7ACB\u7684\u503C\uFF0C\u7C7B\u4F3C\u60C5\u51B5\u4E5F\u9002\u7528\u4E8E\u5DF2\u77E5\u6570\u636E_y\u4E3A\u5355\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "new_x",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u4E0E known_x \u76F8\u540C] - \u9700\u8981\u51FD\u6570 GROWTH \u8FD4\u56DE\u5BF9\u5E94 y \u503C\u7684\u65B0 x \u503C\u3002"
              },
              {
                "name": "const",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3ATRUE()] -\u4E00\u4E2A\u903B\u8F91\u503C\uFF0C\u7528\u4E8E\u6307\u5B9A\u662F\u5426\u5C06\u5E38\u91CF b \u5F3A\u5236\u8BBE\u4E3A 1\u3002\n\nTRUE() \u8868\u793A b \u5C06\u6309\u6B63\u5E38\u8BA1\u7B97\uFF1B\n\nFALSE() \u8868\u793A b \u5C06\u88AB\u8BBE\u4E3A 1\uFF0Cm \u5C06\u88AB\u8C03\u6574\u4EE5\u4F7F y = m^x\u3002"
              }
            ]
          },
          "LINEST": {
            "d": "\u53EF\u901A\u8FC7\u4F7F\u7528\u6700\u5C0F\u4E8C\u4E58\u6CD5\u8BA1\u7B97\u4E0E\u73B0\u6709\u6570\u636E\u6700\u4F73\u62DF\u5408\u7684\u76F4\u7EBF\uFF0C\u6765\u8BA1\u7B97\u67D0\u76F4\u7EBF\u7684\u7EDF\u8BA1\u503C\uFF0C\u7136\u540E\u8FD4\u56DE\u63CF\u8FF0\u6B64\u76F4\u7EBF\u7684\u6570\u7EC4\u3002",
            "a": "\u53EF\u901A\u8FC7\u4F7F\u7528\u6700\u5C0F\u4E8C\u4E58\u6CD5\u8BA1\u7B97\u4E0E\u73B0\u6709\u6570\u636E\u6700\u4F73\u62DF\u5408\u7684\u76F4\u7EBF\uFF0C\u6765\u8BA1\u7B97\u67D0\u76F4\u7EBF\u7684\u7EDF\u8BA1\u503C\uFF0C\u7136\u540E\u8FD4\u56DE\u63CF\u8FF0\u6B64\u76F4\u7EBF\u7684\u6570\u7EC4\u3002",
            "p": [
              {
                "name": "known_y",
                "detail": "\u5173\u7CFB\u8868\u8FBE\u5F0F y = mx + b \u4E2D\u5DF2\u77E5\u7684 y \u503C\u96C6\u5408\u3002\n\n\u5982\u679C known_y \u4E3A\u4E8C\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\uFF0C\u5219 known_x \u7684\u7EF4\u6570\u5FC5\u987B\u4E0E\u4E4B\u76F8\u540C\uFF0C\u6216\u8005\u7701\u7565\u6B64\u53C2\u6570\u3002\n\n\u5982\u679C known_y \u4E3A\u4E00\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\uFF0Cknown_x \u5219\u53EF\u4EE3\u8868\u4E8C\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\u4E2D\u7684\u591A\u4E2A\u81EA\u53D8\u91CF\u3002\u4E5F\u5C31\u662F\u8BF4\uFF0C\u5982\u679C known_y \u4E3A\u5355\u884C\uFF0C\u5219\u5C06 known_x \u4E2D\u7684\u6BCF\u884C\u89E3\u91CA\u4E3A\u5404\u81EA\u72EC\u7ACB\u7684\u503C\uFF0C\u7C7B\u4F3C\u60C5\u51B5\u4E5F\u9002\u7528\u4E8E known_y \u4E3A\u5355\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "known_x",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u8BE5\u6570\u7EC4\u4E3A{1,2,3,...},\u5176\u5927\u5C0F\u4E0E known_y \u76F8\u540C] - \u5173\u7CFB\u8868\u8FBE\u5F0F y = mx + b \u4E2D\u5DF2\u77E5\u7684\u53EF\u9009 x \u503C\u96C6\u5408\u3002\n\n\u5982\u679C known_y \u4E3A\u4E00\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\uFF0Cknown_x \u5219\u53EF\u4EE3\u8868\u4E8C\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\u4E2D\u7684\u591A\u4E2A\u81EA\u53D8\u91CF\u3002\u4E5F\u5C31\u662F\u8BF4\uFF0C\u5982\u679C known_y \u4E3A\u5355\u884C\uFF0C\u5219\u5C06 known_x \u4E2D\u7684\u6BCF\u884C\u89E3\u91CA\u4E3A\u5404\u81EA\u72EC\u7ACB\u7684\u503C\uFF0C\u7C7B\u4F3C\u60C5\u51B5\u4E5F\u9002\u7528\u4E8E known_y \u4E3A\u5355\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "const",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3ATRUE()] - \u4E00\u4E2A\u903B\u8F91\u503C\uFF0C\u7528\u4E8E\u6307\u5B9A\u662F\u5426\u5C06\u5E38\u91CF b \u5F3A\u5236\u8BBE\u4E3A 0\u3002\n\nTRUE() \u8868\u793A b \u5C06\u6309\u6B63\u5E38\u8BA1\u7B97\uFF1B\n\nFALSE() \u8868\u793A b \u5C06\u88AB\u8BBE\u4E3A 0\uFF08\u96F6\uFF09\uFF0Cm \u5C06\u88AB\u8C03\u6574\u4EE5\u4F7F y = mx\u3002"
              },
              {
                "name": "stats",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3AFALSE()] - \u4E00\u4E2A\u903B\u8F91\u503C\uFF0C\u7528\u4E8E\u6307\u5B9A\u662F\u5426\u8FD4\u56DE\u9644\u52A0\u56DE\u5F52\u7EDF\u8BA1\u503C\u3002\n\n\u5982\u679C\u8BE6\u7EC6\u4E3ATRUE\uFF0C\u9664\u4E86\u5BF9\u5E94\u4E8E\u6BCF\u4E2A\u81EA\u53D8\u91CF\u7684\u4E00\u7EC4\u7EBF\u6027\u7CFB\u6570\u548Cy\u622A\u8DDD\u4E4B\u5916\uFF0CLINEST\u8FD8\u8FD4\u56DE\u4EE5\u4E0B\u4FE1\u606F\uFF1A\n\n\u6BCF\u9879\u7CFB\u6570\u548C\u622A\u8DDD\u7684\u6807\u51C6\u8BEF\u5DEE\u3001\n\n\u9650\u5B9A\u7CFB\u6570\uFF08\u4ECB\u4E8E0\u548C1\u4E4B\u95F4\uFF0C1\u8868\u793A\u5B8C\u5168\u76F8\u5173\uFF09\u3001\n\n\u56E0\u53D8\u91CF\u503C\u7684\u6807\u51C6\u8BEF\u5DEE\u3001\n\nF\u7EDF\u8BA1\u6216F\u89C2\u6D4B\u503C\uFF0C\u6307\u793A\u6240\u89C2\u6D4B\u5230\u7684\u56E0\u53D8\u91CF\u548C\u81EA\u53D8\u91CF\u53D8\u91CF\u4E4B\u95F4\u7684\u5173\u7CFB\u662F\u968F\u673A\u7684\u8FD8\u662F\u7EBF\u6027\u7684\u3001\n\n\u81EA\u7531\u5EA6\uFF0C\u7528\u4E8E\u5728\u53C2\u7167\u8868\u4E2D\u67E5\u627EF\u7EDF\u8BA1\u503C\u4EE5\u4F30\u7B97\u53EF\u4FE1\u5EA6\u3001\n\n\u56DE\u5F52\u5E73\u65B9\u548C\uFF0C\u4EE5\u53CA\n\n\u6B8B\u5DEE\u5E73\u65B9\u548C\u3002"
              }
            ]
          },
          "LOGEST": {
            "d": "\u5728\u56DE\u5F52\u5206\u6790\u4E2D\uFF0C\u8BA1\u7B97\u6700\u7B26\u5408\u6570\u636E\u7684\u6307\u6570\u56DE\u5F52\u62DF\u5408\u66F2\u7EBF\uFF0C\u5E76\u8FD4\u56DE\u63CF\u8FF0\u8BE5\u66F2\u7EBF\u7684\u6570\u503C\u6570\u7EC4\u3002",
            "a": "\u5728\u56DE\u5F52\u5206\u6790\u4E2D\uFF0C\u8BA1\u7B97\u6700\u7B26\u5408\u6570\u636E\u7684\u6307\u6570\u56DE\u5F52\u62DF\u5408\u66F2\u7EBF\uFF0C\u5E76\u8FD4\u56DE\u63CF\u8FF0\u8BE5\u66F2\u7EBF\u7684\u6570\u503C\u6570\u7EC4\u3002",
            "p": [
              {
                "name": "known_y",
                "detail": "\u5173\u7CFB\u8868\u8FBE\u5F0F y = mx + b \u4E2D\u5DF2\u77E5\u7684 y \u503C\u96C6\u5408\u3002\n\n\u5982\u679C known_y \u4E3A\u4E8C\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\uFF0C\u5219 known_x \u7684\u7EF4\u6570\u5FC5\u987B\u4E0E\u4E4B\u76F8\u540C\uFF0C\u6216\u8005\u7701\u7565\u6B64\u53C2\u6570\u3002\n\n\u5982\u679C known_y \u4E3A\u4E00\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\uFF0Cknown_x \u5219\u53EF\u4EE3\u8868\u4E8C\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\u4E2D\u7684\u591A\u4E2A\u81EA\u53D8\u91CF\u3002\u4E5F\u5C31\u662F\u8BF4\uFF0C\u5982\u679C known_y \u4E3A\u5355\u884C\uFF0C\u5219\u5C06 known_x \u4E2D\u7684\u6BCF\u884C\u89E3\u91CA\u4E3A\u5404\u81EA\u72EC\u7ACB\u7684\u503C\uFF0C\u7C7B\u4F3C\u60C5\u51B5\u4E5F\u9002\u7528\u4E8E known_y \u4E3A\u5355\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "known_x",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u8BE5\u6570\u7EC4\u4E3A{1,2,3,...},\u5176\u5927\u5C0F\u4E0E known_y \u76F8\u540C] - \u5173\u7CFB\u8868\u8FBE\u5F0F y = mx + b \u4E2D\u5DF2\u77E5\u7684\u53EF\u9009 x \u503C\u96C6\u5408\u3002\n\n\u5982\u679C known_y \u4E3A\u4E00\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\uFF0Cknown_x \u5219\u53EF\u4EE3\u8868\u4E8C\u7EF4\u6570\u7EC4\u6216\u8303\u56F4\u4E2D\u7684\u591A\u4E2A\u81EA\u53D8\u91CF\u3002\u4E5F\u5C31\u662F\u8BF4\uFF0C\u5982\u679C known_y \u4E3A\u5355\u884C\uFF0C\u5219\u5C06 known_x \u4E2D\u7684\u6BCF\u884C\u89E3\u91CA\u4E3A\u5404\u81EA\u72EC\u7ACB\u7684\u503C\uFF0C\u7C7B\u4F3C\u60C5\u51B5\u4E5F\u9002\u7528\u4E8E known_y \u4E3A\u5355\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "const",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3ATRUE()] - \u4E00\u4E2A\u903B\u8F91\u503C\uFF0C\u7528\u4E8E\u6307\u5B9A\u662F\u5426\u5C06\u5E38\u91CF b \u5F3A\u5236\u8BBE\u4E3A 0\u3002\n\nTRUE() \u8868\u793A b \u5C06\u6309\u6B63\u5E38\u8BA1\u7B97\uFF1B\n\nFALSE() \u8868\u793A b \u5C06\u88AB\u8BBE\u4E3A 0\uFF08\u96F6\uFF09\uFF0Cm \u5C06\u88AB\u8C03\u6574\u4EE5\u4F7F y = mx\u3002"
              },
              {
                "name": "stats",
                "detail": "[\u53EF\u9009 - \u9ED8\u8BA4\u503C\u4E3AFALSE()] - \u4E00\u4E2A\u903B\u8F91\u503C\uFF0C\u7528\u4E8E\u6307\u5B9A\u662F\u5426\u8FD4\u56DE\u9644\u52A0\u56DE\u5F52\u7EDF\u8BA1\u503C\u3002\n\n\u5982\u679C\u8BE6\u7EC6\u4E3ATRUE\uFF0C\u5219\u9664\u4E86\u4E3A\u6BCF\u4E2A\u81EA\u53D8\u91CF\u548C\u7CFB\u6570 b \u8FD4\u56DE\u4E00\u7EC4\u6307\u6570\u503C\u4E4B\u5916\uFF0CLOGEST \u8FD8\u5C06\u8FD4\u56DE\u4EE5\u4E0B\u6570\u636E\uFF1A\n\n\u6BCF\u9879\u6307\u6570\u548C\u7CFB\u6570\u7684\u6807\u51C6\u8BEF\u5DEE\u3001\n\n\u9650\u5B9A\u7CFB\u6570\uFF08\u4ECB\u4E8E 0 \u548C 1 \u4E4B\u95F4\uFF0C1 \u8868\u793A\u5B8C\u5168\u76F8\u5173\uFF09\u3001\n\n\u56E0\u53D8\u91CF\u503C\u7684\u6807\u51C6\u8BEF\u5DEE\u3001\n\nF \u7EDF\u8BA1\u6216 F \u89C2\u6D4B\u503C\uFF0C\u6307\u793A\u6240\u89C2\u6D4B\u5230\u7684\u56E0\u53D8\u91CF\u548C\u81EA\u53D8\u91CF\u4E4B\u95F4\u7684\u5173\u7CFB\u662F\u968F\u673A\u7684\u8FD8\u662F\u6307\u6570\u7684\u3001\n\n\u81EA\u7531\u5EA6 - \u7528\u4E8E\u5728\u53C2\u7167\u8868\u4E2D\u67E5\u627E F \u7EDF\u8BA1\u503C\u4EE5\u4F30\u7B97\u53EF\u4FE1\u5EA6\u3001\n\n\u56DE\u5F52\u5E73\u65B9\u548C\uFF0C\u4EE5\u53CA\n\n\u6B8B\u5DEE\u5E73\u65B9\u548C\u3002"
              }
            ]
          },
          "MDETERM": {
            "d": "\u8FD4\u56DE\u4E00\u4E2A\u6570\u7EC4\u7684\u77E9\u9635\u884C\u5217\u5F0F\u7684\u503C\u3002",
            "a": "\u8FD4\u56DE\u4E00\u4E2A\u6570\u7EC4\u7684\u77E9\u9635\u884C\u5217\u5F0F\u7684\u503C\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u884C\u6570\u548C\u5217\u6570\u76F8\u7B49\u7684\u6570\u503C\u6570\u7EC4\u3002"
              }
            ]
          },
          "MINVERSE": {
            "d": "\u8FD4\u56DE\u6570\u7EC4\u4E2D\u5B58\u50A8\u7684\u77E9\u9635\u7684\u9006\u77E9\u9635\u3002",
            "a": "\u8FD4\u56DE\u6570\u7EC4\u4E2D\u5B58\u50A8\u7684\u77E9\u9635\u7684\u9006\u77E9\u9635\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u884C\u6570\u548C\u5217\u6570\u76F8\u7B49\u7684\u6570\u503C\u6570\u7EC4\u3002"
              }
            ]
          },
          "MMULT": {
            "d": "\u8FD4\u56DE\u4E24\u4E2A\u6570\u7EC4\u7684\u77E9\u9635\u4E58\u79EF\u3002\u7ED3\u679C\u77E9\u9635\u7684\u884C\u6570\u4E0E array1 \u7684\u884C\u6570\u76F8\u540C\uFF0C\u77E9\u9635\u7684\u5217\u6570\u4E0E array2 \u7684\u5217\u6570\u76F8\u540C\u3002",
            "a": "\u8FD4\u56DE\u4E24\u4E2A\u6570\u7EC4\u7684\u77E9\u9635\u4E58\u79EF\u3002\u7ED3\u679C\u77E9\u9635\u7684\u884C\u6570\u4E0E array1 \u7684\u884C\u6570\u76F8\u540C\uFF0C\u77E9\u9635\u7684\u5217\u6570\u4E0E array2 \u7684\u5217\u6570\u76F8\u540C\u3002",
            "p": [
              {
                "name": "array1",
                "detail": "\u8981\u8FDB\u884C\u77E9\u9635\u4E58\u6CD5\u8FD0\u7B97\u7684\u7B2C\u4E00\u4E2A\u77E9\u9635\u6570\u7EC4\u3002\n\narray1 \u5217\u6570\u5FC5\u987B\u4E0E array2 \u7684\u884C\u6570\u76F8\u540C"
              },
              {
                "name": "array2",
                "detail": "\u8981\u8FDB\u884C\u77E9\u9635\u4E58\u6CD5\u8FD0\u7B97\u7684\u7B2C\u4E8C\u4E2A\u77E9\u9635\u6570\u7EC4\u3002\n\narray2 \u7684\u884C\u6570\u5FC5\u987B\u4E0E array1 \u5217\u6570\u76F8\u540C"
              }
            ]
          },
          "SUMPRODUCT": {
            "d": "\u5728\u7ED9\u5B9A\u7684\u51E0\u7EC4\u6570\u7EC4\u4E2D\uFF0C\u5C06\u6570\u7EC4\u95F4\u5BF9\u5E94\u7684\u5143\u7D20\u76F8\u4E58\uFF0C\u5E76\u8FD4\u56DE\u4E58\u79EF\u4E4B\u548C\u3002",
            "a": "\u5728\u7ED9\u5B9A\u7684\u51E0\u7EC4\u6570\u7EC4\u4E2D\uFF0C\u5C06\u6570\u7EC4\u95F4\u5BF9\u5E94\u7684\u5143\u7D20\u76F8\u4E58\uFF0C\u5E76\u8FD4\u56DE\u4E58\u79EF\u4E4B\u548C\u3002",
            "p": [
              {
                "name": "array1",
                "detail": "\u5176\u76F8\u5E94\u5143\u7D20\u9700\u8981\u8FDB\u884C\u76F8\u4E58\u5E76\u6C42\u548C\u7684\u7B2C\u4E00\u4E2A\u6570\u7EC4\u53C2\u6570\u3002"
              },
              {
                "name": "array2",
                "detail": "[\u53EF\u9009] - \u5176\u76F8\u5E94\u5143\u7D20\u9700\u8981\u8FDB\u884C\u76F8\u4E58\u5E76\u6C42\u548C\u7684\u5176\u5B83\u6570\u7EC4\u53C2\u6570\u3002"
              }
            ]
          },
          "ISFORMULA": {
            "d": "\u68C0\u67E5\u516C\u5F0F\u662F\u5426\u4F4D\u4E8E\u5F15\u7528\u7684\u5355\u5143\u683C\u4E2D\u3002",
            "a": "\u68C0\u67E5\u516C\u5F0F\u662F\u5426\u4F4D\u4E8E\u5F15\u7528\u7684\u5355\u5143\u683C\u4E2D\u3002",
            "p": [
              {
                "name": "cell",
                "detail": "\u8981\u68C0\u67E5\u662F\u5426\u5B58\u5728\u516C\u5F0F\u7684\u5355\u5143\u683C\u3002\n\n\u5982\u679C cell \u4E3A\u5305\u542B\u516C\u5F0F\u7684\u5355\u5143\u683C\uFF0C\u5219 ISFORMULA \u5C06\u8FD4\u56DE TRUE\u3002\u5982\u679C cell \u4E3A\u76F8\u5E94\u5355\u5143\u683C\u8303\u56F4\uFF0C\u5219\u5F53\u8BE5\u8303\u56F4\u5185\u7684\u9996\u4E2A\u5355\u5143\u683C\u5305\u542B\u516C\u5F0F\u65F6\uFF0C\u7CFB\u7EDF\u4F1A\u8FD4\u56DE TRUE\u3002\u5982\u679C\u662F\u4EFB\u4F55\u5176\u4ED6\u503C\uFF0C\u7CFB\u7EDF\u90FD\u5C06\u8FD4\u56DE FALSE\u3002"
              }
            ]
          },
          "CELL": {
            "d": "\u8FD4\u56DE\u6709\u5173\u5355\u5143\u683C\u7684\u683C\u5F0F\u3001\u4F4D\u7F6E\u6216\u5185\u5BB9\u7684\u4FE1\u606F\u3002",
            "a": "\u8FD4\u56DE\u6709\u5173\u5355\u5143\u683C\u7684\u683C\u5F0F\u3001\u4F4D\u7F6E\u6216\u5185\u5BB9\u7684\u4FE1\u606F\u3002",
            "p": [
              {
                "name": "info_type",
                "detail": "\u4E00\u4E2A\u6587\u672C\u503C\uFF0C\u6307\u5B9A\u8981\u8FD4\u56DE\u7684\u5355\u5143\u683C\u4FE1\u606F\u7684\u7C7B\u578B\u3002"
              },
              {
                "name": "reference",
                "detail": "\u9700\u8981\u5176\u76F8\u5173\u4FE1\u606F\u7684\u5355\u5143\u683C\u3002"
              }
            ]
          },
          "NA": {
            "d": "\u8FD4\u56DE\u9519\u8BEF\u503C #N/A\u3002",
            "a": "\u8FD4\u56DE\u9519\u8BEF\u503C #N/A\u3002",
            "p": []
          },
          "ERROR_TYPE": {
            "d": "\u8FD4\u56DE\u4E0E\u5176\u4ED6\u5355\u5143\u683C\u4E2D\u7684\u9519\u8BEF\u503C\u76F8\u5BF9\u5E94\u7684\u6570\u5B57\u3002",
            "a": "\u8FD4\u56DE\u4E0E\u5176\u4ED6\u5355\u5143\u683C\u4E2D\u7684\u9519\u8BEF\u503C\u76F8\u5BF9\u5E94\u7684\u6570\u5B57\u3002",
            "p": [
              {
                "name": "error_val",
                "detail": "\u7528\u4E8E\u67E5\u627E\u9519\u8BEF\u53F7\u7684\u5355\u5143\u683C\uFF0C\u867D\u7136\u60A8\u4E5F\u53EF\u4EE5\u76F4\u63A5\u63D0\u4F9B\u9519\u8BEF\u503C\u3002"
              }
            ]
          },
          "ISBLANK": {
            "d": "\u68C0\u67E5\u6240\u5F15\u7528\u7684\u5355\u5143\u683C\u662F\u5426\u4E3A\u7A7A\u3002",
            "a": "\u68C0\u67E5\u6240\u5F15\u7528\u7684\u5355\u5143\u683C\u662F\u5426\u4E3A\u7A7A\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u5BF9\u8981\u68C0\u67E5\u5176\u662F\u5426\u4E3A\u7A7A\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\u3002\n\n\u5982\u679C\u662F\u7A7A\u5355\u5143\u683C\uFF0C\u5219 TRUE\uFF1B\u5426\u5219\u8FD4\u56DE FALSE\u3002"
              }
            ]
          },
          "ISERR": {
            "d": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F\u5426\u4E3A #N/A \u4EE5\u5916\u7684\u9519\u8BEF\u503C\u3002",
            "a": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F\u5426\u4E3A #N/A \u4EE5\u5916\u7684\u9519\u8BEF\u503C\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u9A8C\u8BC1\u5176\u662F\u5426\u4E3A#N/A\u4EE5\u5916\u7684\u9519\u8BEF\u7C7B\u578B\u7684\u503C\u3002\n\n\u5982\u679C\u503C\u662F\u9664#N/A\u4E4B\u5916\u7684\u4EFB\u4F55\u9519\u8BEF\uFF08\u5305\u62EC#DIV/0!\u3001#NAME?\u3001#NULL!\u3001#NUM!\u3001#VALUE!\u548C#REF!\uFF09\uFF0CISERR\u5C06\u8FD4\u56DETRUE\u3002"
              }
            ]
          },
          "ISERROR": {
            "d": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F\u5426\u4E3A\u9519\u8BEF\u503C\u3002",
            "a": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F\u5426\u4E3A\u9519\u8BEF\u503C\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u9A8C\u8BC1\u5176\u662F\u5426\u4E3A\u9519\u8BEF\u7C7B\u578B\u7684\u503C\u3002\n\n\u53EA\u8981\u503C\u662F\u67D0\u79CD\u9519\u8BEF\u503C\uFF08\u5305\u62EC#DIV/0!\u3001#N/A\u3001#NAME?\u3001#NULL!\u3001#NUM!\u3001#VALUE!\u548C#REF!\uFF09\uFF0CISERROR\u5C31\u4F1A\u8FD4\u56DETRUE\u3002"
              }
            ]
          },
          "ISLOGICAL": {
            "d": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F TRUE \u8FD8\u662F FALSE\u3002",
            "a": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F TRUE \u8FD8\u662F FALSE\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u9A8C\u8BC1\u5176\u4E3A\u903B\u8F91TRUE\u8FD8\u662F\u903B\u8F91FALSE\u7684\u503C\u3002\n\n*\u5982\u679C\u503C\u4E3ATRUE\u6216FALSE\uFF0C\u6216\u4E3A\u6307\u5411\u503C\u4E3ATRUE\u6216FALSE\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0CISLOGICAL\u5C06\u8FD4\u56DETRUE\u3002"
              }
            ]
          },
          "ISNA": {
            "d": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F\u5426\u4E3A\u9519\u8BEF\u503C #N/A\u3002",
            "a": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F\u5426\u4E3A\u9519\u8BEF\u503C #N/A\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u4E0E\u9519\u8BEF\u503C#N/A\u8FDB\u884C\u6BD4\u8F83\u7684\u503C\u3002\n\n*\u5982\u679C\u503C\u4E3A#N/A\u6216\u6307\u5411\u5305\u542B#N/A\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0C\u5219ISNA\u5C06\u8FD4\u56DETRUE\uFF0C\u5426\u5219\u8FD4\u56DEFALSE\u3002"
              }
            ]
          },
          "ISNONTEXT": {
            "d": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F\u5426\u4E3A\u975E\u6587\u672C\u3002",
            "a": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F\u5426\u4E3A\u975E\u6587\u672C\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u68C0\u67E5\u7684\u6587\u672C\u3002\n\n*\u5982\u679C\u53C2\u6570\u4E3A\u6587\u672C\u503C\u6216\u6307\u5411\u5305\u542B\u6587\u672C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0CISNONTEXT\u5C06\u8FD4\u56DEFALSE\uFF0C\u5426\u5219\u8FD4\u56DETRUE\u3002\n\n\u5F53\u503C\u4E3A\u6307\u5411\u7A7A\u5355\u5143\u683C\u7684\u5F15\u7528\u65F6\uFF0CISNONTEXT\u4F1A\u8FD4\u56DETRUE\u3002\n\n\u5F53\u503C\u4E3A\u7A7A\u5B57\u7B26\u4E32\u65F6\uFF0CISNONTEXT\u5C06\u8FD4\u56DEFALSE\uFF0C\u56E0\u4E3A\u7A7A\u4E32\u88AB\u89C6\u4F5C\u6587\u672C\u3002"
              }
            ]
          },
          "ISNUMBER": {
            "d": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F\u5426\u4E3A\u6570\u5B57\u3002",
            "a": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F\u5426\u4E3A\u6570\u5B57\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u9A8C\u8BC1\u5176\u662F\u5426\u4E3A\u6570\u5B57\u7684\u503C\u3002\n\n*\u5982\u679C\u53C2\u6570\u4E3A\u6570\u5B57\u6216\u6307\u5411\u5185\u5BB9\u4E3A\u6570\u5B57\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0CISNUMBER\u5C06\u8FD4\u56DETRUE\uFF0C\u5426\u5219\u8FD4\u56DEFALSE\u3002"
              }
            ]
          },
          "ISREF": {
            "d": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F\u5426\u4E3A\u6709\u6548\u7684\u5355\u5143\u683C\u5F15\u7528\u3002",
            "a": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F\u5426\u4E3A\u6709\u6548\u7684\u5355\u5143\u683C\u5F15\u7528\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u9A8C\u8BC1\u5176\u662F\u5426\u4E3A\u5355\u5143\u683C\u5F15\u7528\u7684\u503C\u3002\n\n*\u5982\u679C\u53C2\u6570\u662F\u6709\u6548\u7684\u5355\u5143\u683C\u5F15\u7528\uFF0CISREF\u5C06\u8FD4\u56DETRUE\uFF0C\u5426\u5219\u8FD4\u56DEFALSE\u3002"
              }
            ]
          },
          "ISTEXT": {
            "d": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F\u5426\u4E3A\u6587\u672C\u3002",
            "a": "\u68C0\u67E5\u67D0\u4E2A\u503C\u662F\u5426\u4E3A\u6587\u672C\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u9A8C\u8BC1\u5176\u662F\u5426\u4E3A\u6587\u672C\u7684\u503C\u3002\n\n\u5982\u679C\u53C2\u6570\u4E3A\u6587\u672C\u503C\u6216\u6307\u5411\u5305\u542B\u6587\u672C\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0CISTEXT\u5C06\u8FD4\u56DETRUE\uFF0C\u5426\u5219\u8FD4\u56DEFALSE\u3002"
              }
            ]
          },
          "TYPE": {
            "d": "\u8FD4\u56DE\u6570\u503C\u7684\u7C7B\u578B\u3002",
            "a": "\u8FD4\u56DE\u6570\u503C\u7684\u7C7B\u578B\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u786E\u5B9A\u5176\u7C7B\u578B\u7684\u6570\u636E\u3002\n\n\u6570\u5B57 \u8FD4\u56DE 1;\n\n\u6587\u672C \u8FD4\u56DE 2;\n\n\u903B\u8F91\u503C \u8FD4\u56DE 4;\n\n\u9519\u8BEF\u503C \u8FD4\u56DE 16;\n\n\u6570\u7EC4 \u8FD4\u56DE 64;"
              }
            ]
          },
          "N": {
            "d": "\u8FD4\u56DE\u8F6C\u5316\u4E3A\u6570\u503C\u540E\u7684\u503C\u3002",
            "a": "\u8FD4\u56DE\u8F6C\u5316\u4E3A\u6570\u503C\u540E\u7684\u503C\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8F6C\u6362\u4E3A\u6570\u5B57\u7684\u53C2\u6570\u3002\n\n\u5982\u679C\u503C\u4E3A\u6570\u5B57\uFF0C\u5219\u8FD4\u56DE\u8BE5\u6570\u5B57\u3002\n\n\u5982\u679C\u503C\u4E3A\u65E5\u671F\uFF0C\u5219\u8FD4\u56DE\u8BE5\u65E5\u671F\u7684\u5E8F\u5217\u53F7\u3002\n\n\u5982\u679C\u503C\u4E3ATRUE\uFF0C\u5219\u8FD4\u56DE1\u3002\n\n\u5982\u679C\u503C\u4E3AFALSE\uFF0C\u5219\u8FD4\u56DE0\u3002\n\n\u5982\u679C\u503C\u4E3A\u9519\u8BEF\u503C\uFF0C\u5219\u8FD4\u56DE\u9519\u8BEF\u503C\u3002\n\n\u5982\u679C\u503C\u4E3A\u5176\u4ED6\u503C\uFF0C\u5219\u8FD4\u56DE0\u3002"
              }
            ]
          },
          "TO_DATE": {
            "d": "\u5C06\u6307\u5B9A\u7684\u6570\u5B57\u8F6C\u6362\u4E3A\u65E5\u671F\u3002",
            "a": "\u5C06\u6307\u5B9A\u7684\u6570\u5B57\u8F6C\u6362\u4E3A\u65E5\u671F\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8F6C\u6362\u4E3A\u65E5\u671F\u7684\u53C2\u6570\u6216\u5176\u5355\u5143\u683C\u5F15\u7528\u3002\n\n\u5982\u679C\u503C\u4E3A\u6570\u5B57\u6216\u6307\u5411\u5185\u5BB9\u4E3A\u6570\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0CTO_DATE\u4F1A\u5C06\u503C\u8F6C\u6362\u4E3A\u76F8\u5E94\u7684\u65E5\u671F\u5E76\u8FD4\u56DE\uFF0C\u503C\u4EE3\u8868\u4ECE\u5341\u4E8C\u670830\u65E5\u5230\u5BF9\u5E94\u7684\u65E5\u671F\u4E4B\u95F4\u7684\u5929\u6570\uFF0C\n\n\u8D1F\u503C\u8868\u793A\u5BF9\u5E94\u7684\u65E5\u671F\u5728\u5341\u4E8C\u670830\u65E5\u4E4B\u524D\uFF0C\u800C\u5C0F\u6570\u503C\u5219\u4EE3\u8868\u4E00\u5929\u4E2D\u4ECE\u5348\u591C\u7B97\u8D77\u7684\u65F6\u95F4\u3002\n\u5982\u679C\u503C\u4E0D\u662F\u6570\u5B57\u6216\u6307\u5411\u5185\u5BB9\u4E3A\u6570\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0C\u5219TO_DATE\u5C06\u5728\u4E0D\u505A\u4EFB\u4F55\u4FEE\u6539\u7684\u60C5\u51B5\u4E0B\u8FD4\u56DE\u503C\u3002"
              }
            ]
          },
          "TO_PURE_NUMBER": {
            "d": "\u5C06\u7ED9\u5B9A\u7684\u65E5\u671F/\u65F6\u95F4\u3001\u767E\u5206\u6BD4\u3001\u8D27\u5E01\u91D1\u989D\u6216\u5176\u4ED6\u683C\u5F0F\u7684\u6570\u503C\u8F6C\u6362\u4E3A\u4E0D\u5E26\u683C\u5F0F\u7684\u7EAF\u6570\u5B57\u3002",
            "a": "\u5C06\u7ED9\u5B9A\u7684\u65E5\u671F/\u65F6\u95F4\u3001\u767E\u5206\u6BD4\u3001\u8D27\u5E01\u91D1\u989D\u6216\u5176\u4ED6\u683C\u5F0F\u7684\u6570\u503C\u8F6C\u6362\u4E3A\u4E0D\u5E26\u683C\u5F0F\u7684\u7EAF\u6570\u5B57\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8F6C\u6362\u4E3A\u7EAF\u6570\u5B57\u7684\u53C2\u6570\u6216\u5176\u5355\u5143\u683C\u5F15\u7528\u3002\n\n\u5982\u679C\u503C\u4E3A\u6570\u5B57\u6216\u6307\u5411\u5305\u542B\u6570\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0CTO_PURE_NUMBER\u5C06\u4EE5\u4E0D\u5E26\u4EFB\u4F55\u683C\u5F0F\u4E0E\u89E3\u91CA\u7684\u5F62\u5F0F\u8FD4\u56DE\u503C\u3002\n\n\u5982\u679C\u503C\u4E0D\u662F\u6570\u5B57\u6216\u6307\u5411\u5185\u5BB9\u4E3A\u6570\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0C\u5219TO_PERCENT\u5C06\u5728\u4E0D\u505A\u4EFB\u4F55\u4FEE\u6539\u7684\u60C5\u51B5\u4E0B\u8FD4\u56DE\u503C\u3002"
              }
            ]
          },
          "TO_TEXT": {
            "d": "\u5C06\u7ED9\u5B9A\u7684\u6570\u5B57\u503C\u8F6C\u6362\u4E3A\u6587\u672C\u683C\u5F0F\u3002",
            "a": "\u5C06\u7ED9\u5B9A\u7684\u6570\u5B57\u503C\u8F6C\u6362\u4E3A\u6587\u672C\u683C\u5F0F\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8F6C\u6362\u4E3A\u6587\u672C\u7684\u53C2\u6570\u6216\u5176\u5355\u5143\u683C\u5F15\u7528\u3002\n\n\u5982\u679C\u503C\u4E3A\u6570\u5B57\u6216\u6307\u5411\u5305\u542B\u6570\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0CTO_TEXT\u5C06\u8FD4\u56DE\u5B57\u7B26\u4E32\u5F62\u5F0F\u7684\u503C\uFF0C\u5E76\u4FDD\u6301\u73B0\u6709\u683C\u5F0F\u3002\u5373\u539F\u4E3A\u8D27\u5E01\u7684\u4ECD\u4E3A\u8D27\u5E01\uFF0C\u539F\u4E3A\u5341\u8FDB\u5236\u6570\u7684\u4ECD\u4E3A\u5341\u8FDB\u5236\u6570\uFF0C\u539F\u4E3A\u767E\u5206\u6BD4\u7684\u4ECD\u4E3A\u767E\u5206\u6BD4\uFF0C\u539F\u4E3A\u65E5\u671F\u7684\u4ECD\u4E3A\u65E5\u671F\u3002\n\n\u5982\u679C\u503C\u4E0D\u662F\u6570\u5B57\u6216\u6307\u5411\u5185\u5BB9\u4E3A\u6570\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0C\u5219TO_TEXT\u5C06\u5728\u4E0D\u505A\u4EFB\u4F55\u4FEE\u6539\u7684\u60C5\u51B5\u4E0B\u8FD4\u56DE\u503C\u3002"
              }
            ]
          },
          "TO_DOLLARS": {
            "d": "\u5C06\u6307\u5B9A\u7684\u6570\u5B57\u8F6C\u6362\u4E3A\u7F8E\u5143\u91D1\u989D\u3002",
            "a": "\u5C06\u6307\u5B9A\u7684\u6570\u5B57\u8F6C\u6362\u4E3A\u7F8E\u5143\u91D1\u989D\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8F6C\u6362\u4E3A\u7F8E\u5143\u91D1\u989D\u7684\u53C2\u6570\u6216\u5176\u5355\u5143\u683C\u5F15\u7528\u3002\n\n\u5982\u679C\u503C\u4E0D\u662F\u6570\u5B57\u6216\u6307\u5411\u5185\u5BB9\u4E3A\u6570\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0C\u5219 TO_DOLLARS \u5C06\u5728\u4E0D\u505A\u4EFB\u4F55\u4FEE\u6539\u7684\u60C5\u51B5\u4E0B\u8FD4\u56DE\u503C\u3002"
              }
            ]
          },
          "TO_PERCENT": {
            "d": "\u5C06\u6307\u5B9A\u7684\u6570\u5B57\u8F6C\u6362\u4E3A\u767E\u5206\u6BD4\u3002",
            "a": "\u5C06\u6307\u5B9A\u7684\u6570\u5B57\u8F6C\u6362\u4E3A\u767E\u5206\u6BD4\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8F6C\u6362\u4E3A\u767E\u5206\u6BD4\u7684\u53C2\u6570\u6216\u5176\u5355\u5143\u683C\u5F15\u7528\u3002\n\n\u5982\u679C\u503C\u4E3A\u6570\u5B57\u6216\u6307\u5411\u5305\u542B\u6570\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0CTO_PERCENT\u4F1A\u4EE51 = 100%\u4E3A\u6807\u51C6\uFF0C\u5C06\u503C\u8F6C\u6362\u4E3A\u767E\u5206\u6BD4\u3002\n\n\u5982\u679C\u503C\u4E0D\u662F\u6570\u5B57\u6216\u6307\u5411\u5185\u5BB9\u4E3A\u6570\u503C\u7684\u5355\u5143\u683C\u7684\u5F15\u7528\uFF0C\u5219TO_PERCENT\u5C06\u5728\u4E0D\u505A\u4EFB\u4F55\u4FEE\u6539\u7684\u60C5\u51B5\u4E0B\u8FD4\u56DE\u503C\u3002"
              }
            ]
          },
          "DGET": {
            "d": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u4ECE\u5217\u8868\u6216\u6570\u636E\u5E93\u7684\u5217\u4E2D\u63D0\u53D6\u7B26\u5408\u6307\u5B9A\u6761\u4EF6\u7684\u5355\u4E2A\u503C\u3002",
            "a": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u4ECE\u5217\u8868\u6216\u6570\u636E\u5E93\u7684\u5217\u4E2D\u63D0\u53D6\u7B26\u5408\u6307\u5B9A\u6761\u4EF6\u7684\u5355\u4E2A\u503C\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u6784\u6210\u5217\u8868\u6216\u6570\u636E\u5E93\u7684\u5355\u5143\u683C\u533A\u57DF\uFF0C\u5217\u8868\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6807\u7B7E\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9A database \u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u63D0\u53D6\u548C\u7528\u4E8E\u8BA1\u7B97\u7684\u503C\u3002\n\nfield \u53EF\u4EE5\u662F\u4E0E database \u7B2C\u4E00\u884C\u4E2D\u67D0\u4E2A\u5217\u6807\u9898\u5BF9\u5E94\u7684\u6587\u672C\u6807\u7B7E\uFF0C\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u5173\u5217\u7684\u6570\u5B57\u7D22\u5F15\uFF0C\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u4E3A 1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u6761\u4EF6\u7684\u5355\u5143\u683C\u533A\u57DF\u3002\u8BA1\u7B97\u4E4B\u524D\u5C06\u4F7F\u7528\u8FD9\u4E9B\u6761\u4EF6\u6765\u8FC7\u6EE4 database \u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DMAX": {
            "d": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6700\u5927\u6570\u5B57\u3002",
            "a": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6700\u5927\u6570\u5B57\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u6784\u6210\u5217\u8868\u6216\u6570\u636E\u5E93\u7684\u5355\u5143\u683C\u533A\u57DF\uFF0C\u5217\u8868\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6807\u7B7E\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9A database \u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u63D0\u53D6\u548C\u7528\u4E8E\u8BA1\u7B97\u7684\u503C\u3002\n\nfield \u53EF\u4EE5\u662F\u4E0E database \u7B2C\u4E00\u884C\u4E2D\u67D0\u4E2A\u5217\u6807\u9898\u5BF9\u5E94\u7684\u6587\u672C\u6807\u7B7E\uFF0C\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u5173\u5217\u7684\u6570\u5B57\u7D22\u5F15\uFF0C\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u4E3A 1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u6761\u4EF6\u7684\u5355\u5143\u683C\u533A\u57DF\u3002\u8BA1\u7B97\u4E4B\u524D\u5C06\u4F7F\u7528\u8FD9\u4E9B\u6761\u4EF6\u6765\u8FC7\u6EE4 database \u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DMIN": {
            "d": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6700\u5C0F\u6570\u5B57\u3002",
            "a": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6700\u5C0F\u6570\u5B57\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u6784\u6210\u5217\u8868\u6216\u6570\u636E\u5E93\u7684\u5355\u5143\u683C\u533A\u57DF\uFF0C\u5217\u8868\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6807\u7B7E\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9A database \u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u63D0\u53D6\u548C\u7528\u4E8E\u8BA1\u7B97\u7684\u503C\u3002\n\nfield \u53EF\u4EE5\u662F\u4E0E database \u7B2C\u4E00\u884C\u4E2D\u67D0\u4E2A\u5217\u6807\u9898\u5BF9\u5E94\u7684\u6587\u672C\u6807\u7B7E\uFF0C\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u5173\u5217\u7684\u6570\u5B57\u7D22\u5F15\uFF0C\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u4E3A 1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u6761\u4EF6\u7684\u5355\u5143\u683C\u533A\u57DF\u3002\u8BA1\u7B97\u4E4B\u524D\u5C06\u4F7F\u7528\u8FD9\u4E9B\u6761\u4EF6\u6765\u8FC7\u6EE4 database \u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DAVERAGE": {
            "d": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u5BF9\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6570\u503C\u6C42\u5E73\u5747\u503C\u3002",
            "a": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u5BF9\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6570\u503C\u6C42\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u6784\u6210\u5217\u8868\u6216\u6570\u636E\u5E93\u7684\u5355\u5143\u683C\u533A\u57DF\uFF0C\u5217\u8868\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6807\u7B7E\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9A database \u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u63D0\u53D6\u548C\u7528\u4E8E\u8BA1\u7B97\u7684\u503C\u3002\n\nfield \u53EF\u4EE5\u662F\u4E0E database \u7B2C\u4E00\u884C\u4E2D\u67D0\u4E2A\u5217\u6807\u9898\u5BF9\u5E94\u7684\u6587\u672C\u6807\u7B7E\uFF0C\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u5173\u5217\u7684\u6570\u5B57\u7D22\u5F15\uFF0C\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u4E3A 1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u6761\u4EF6\u7684\u5355\u5143\u683C\u533A\u57DF\u3002\u8BA1\u7B97\u4E4B\u524D\u5C06\u4F7F\u7528\u8FD9\u4E9B\u6761\u4EF6\u6765\u8FC7\u6EE4 database \u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DCOUNT": {
            "d": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u5305\u542B\u6570\u5B57\u7684\u5355\u5143\u683C\u7684\u4E2A\u6570\u3002",
            "a": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u5305\u542B\u6570\u5B57\u7684\u5355\u5143\u683C\u7684\u4E2A\u6570\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u6784\u6210\u5217\u8868\u6216\u6570\u636E\u5E93\u7684\u5355\u5143\u683C\u533A\u57DF\uFF0C\u5217\u8868\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6807\u7B7E\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9A database \u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u63D0\u53D6\u548C\u7528\u4E8E\u8BA1\u7B97\u7684\u503C\u3002\n\nfield \u53EF\u4EE5\u662F\u4E0E database \u7B2C\u4E00\u884C\u4E2D\u67D0\u4E2A\u5217\u6807\u9898\u5BF9\u5E94\u7684\u6587\u672C\u6807\u7B7E\uFF0C\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u5173\u5217\u7684\u6570\u5B57\u7D22\u5F15\uFF0C\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u4E3A 1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u6761\u4EF6\u7684\u5355\u5143\u683C\u533A\u57DF\u3002\u8BA1\u7B97\u4E4B\u524D\u5C06\u4F7F\u7528\u8FD9\u4E9B\u6761\u4EF6\u6765\u8FC7\u6EE4 database \u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DCOUNTA": {
            "d": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u975E\u7A7A\u5355\u5143\u683C\u7684\u4E2A\u6570\u3002",
            "a": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u975E\u7A7A\u5355\u5143\u683C\u7684\u4E2A\u6570\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u6784\u6210\u5217\u8868\u6216\u6570\u636E\u5E93\u7684\u5355\u5143\u683C\u533A\u57DF\uFF0C\u5217\u8868\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6807\u7B7E\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9A database \u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u63D0\u53D6\u548C\u7528\u4E8E\u8BA1\u7B97\u7684\u503C\u3002\n\nfield \u53EF\u4EE5\u662F\u4E0E database \u7B2C\u4E00\u884C\u4E2D\u67D0\u4E2A\u5217\u6807\u9898\u5BF9\u5E94\u7684\u6587\u672C\u6807\u7B7E\uFF0C\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u5173\u5217\u7684\u6570\u5B57\u7D22\u5F15\uFF0C\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u4E3A 1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u6761\u4EF6\u7684\u5355\u5143\u683C\u533A\u57DF\u3002\u8BA1\u7B97\u4E4B\u524D\u5C06\u4F7F\u7528\u8FD9\u4E9B\u6761\u4EF6\u6765\u8FC7\u6EE4 database \u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DPRODUCT": {
            "d": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6570\u503C\u7684\u4E58\u79EF\u3002",
            "a": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6570\u503C\u7684\u4E58\u79EF\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u6784\u6210\u5217\u8868\u6216\u6570\u636E\u5E93\u7684\u5355\u5143\u683C\u533A\u57DF\uFF0C\u5217\u8868\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6807\u7B7E\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9A database \u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u63D0\u53D6\u548C\u7528\u4E8E\u8BA1\u7B97\u7684\u503C\u3002\n\nfield \u53EF\u4EE5\u662F\u4E0E database \u7B2C\u4E00\u884C\u4E2D\u67D0\u4E2A\u5217\u6807\u9898\u5BF9\u5E94\u7684\u6587\u672C\u6807\u7B7E\uFF0C\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u5173\u5217\u7684\u6570\u5B57\u7D22\u5F15\uFF0C\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u4E3A 1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u6761\u4EF6\u7684\u5355\u5143\u683C\u533A\u57DF\u3002\u8BA1\u7B97\u4E4B\u524D\u5C06\u4F7F\u7528\u8FD9\u4E9B\u6761\u4EF6\u6765\u8FC7\u6EE4 database \u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DSTDEV": {
            "d": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5229\u7528\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6570\u5B57\u4F5C\u4E3A\u4E00\u4E2A\u6837\u672C\u4F30\u7B97\u51FA\u7684\u603B\u4F53\u6807\u51C6\u504F\u5DEE\u3002",
            "a": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5229\u7528\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6570\u5B57\u4F5C\u4E3A\u4E00\u4E2A\u6837\u672C\u4F30\u7B97\u51FA\u7684\u603B\u4F53\u6807\u51C6\u504F\u5DEE\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u6784\u6210\u5217\u8868\u6216\u6570\u636E\u5E93\u7684\u5355\u5143\u683C\u533A\u57DF\uFF0C\u5217\u8868\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6807\u7B7E\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9A database \u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u63D0\u53D6\u548C\u7528\u4E8E\u8BA1\u7B97\u7684\u503C\u3002\n\nfield \u53EF\u4EE5\u662F\u4E0E database \u7B2C\u4E00\u884C\u4E2D\u67D0\u4E2A\u5217\u6807\u9898\u5BF9\u5E94\u7684\u6587\u672C\u6807\u7B7E\uFF0C\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u5173\u5217\u7684\u6570\u5B57\u7D22\u5F15\uFF0C\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u4E3A 1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u6761\u4EF6\u7684\u5355\u5143\u683C\u533A\u57DF\u3002\u8BA1\u7B97\u4E4B\u524D\u5C06\u4F7F\u7528\u8FD9\u4E9B\u6761\u4EF6\u6765\u8FC7\u6EE4 database \u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DSTDEVP": {
            "d": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5229\u7528\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6570\u5B57\u4F5C\u4E3A\u6837\u672C\u603B\u4F53\u8BA1\u7B97\u51FA\u7684\u603B\u4F53\u6807\u51C6\u504F\u5DEE\u3002",
            "a": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5229\u7528\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6570\u5B57\u4F5C\u4E3A\u6837\u672C\u603B\u4F53\u8BA1\u7B97\u51FA\u7684\u603B\u4F53\u6807\u51C6\u504F\u5DEE\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u6784\u6210\u5217\u8868\u6216\u6570\u636E\u5E93\u7684\u5355\u5143\u683C\u533A\u57DF\uFF0C\u5217\u8868\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6807\u7B7E\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9A database \u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u63D0\u53D6\u548C\u7528\u4E8E\u8BA1\u7B97\u7684\u503C\u3002\n\nfield \u53EF\u4EE5\u662F\u4E0E database \u7B2C\u4E00\u884C\u4E2D\u67D0\u4E2A\u5217\u6807\u9898\u5BF9\u5E94\u7684\u6587\u672C\u6807\u7B7E\uFF0C\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u5173\u5217\u7684\u6570\u5B57\u7D22\u5F15\uFF0C\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u4E3A 1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u6761\u4EF6\u7684\u5355\u5143\u683C\u533A\u57DF\u3002\u8BA1\u7B97\u4E4B\u524D\u5C06\u4F7F\u7528\u8FD9\u4E9B\u6761\u4EF6\u6765\u8FC7\u6EE4 database \u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DSUM": {
            "d": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6570\u5B57\u4E4B\u548C\u3002",
            "a": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6570\u5B57\u4E4B\u548C\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u6784\u6210\u5217\u8868\u6216\u6570\u636E\u5E93\u7684\u5355\u5143\u683C\u533A\u57DF\uFF0C\u5217\u8868\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6807\u7B7E\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9A database \u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u63D0\u53D6\u548C\u7528\u4E8E\u8BA1\u7B97\u7684\u503C\u3002\n\nfield \u53EF\u4EE5\u662F\u4E0E database \u7B2C\u4E00\u884C\u4E2D\u67D0\u4E2A\u5217\u6807\u9898\u5BF9\u5E94\u7684\u6587\u672C\u6807\u7B7E\uFF0C\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u5173\u5217\u7684\u6570\u5B57\u7D22\u5F15\uFF0C\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u4E3A 1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u6761\u4EF6\u7684\u5355\u5143\u683C\u533A\u57DF\u3002\u8BA1\u7B97\u4E4B\u524D\u5C06\u4F7F\u7528\u8FD9\u4E9B\u6761\u4EF6\u6765\u8FC7\u6EE4 database \u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DVAR": {
            "d": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5229\u7528\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6570\u5B57\u4F5C\u4E3A\u4E00\u4E2A\u6837\u672C\u4F30\u7B97\u51FA\u7684\u603B\u4F53\u65B9\u5DEE\u3002",
            "a": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u8FD4\u56DE\u5229\u7528\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6570\u5B57\u4F5C\u4E3A\u4E00\u4E2A\u6837\u672C\u4F30\u7B97\u51FA\u7684\u603B\u4F53\u65B9\u5DEE\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u6784\u6210\u5217\u8868\u6216\u6570\u636E\u5E93\u7684\u5355\u5143\u683C\u533A\u57DF\uFF0C\u5217\u8868\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6807\u7B7E\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9A database \u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u63D0\u53D6\u548C\u7528\u4E8E\u8BA1\u7B97\u7684\u503C\u3002\n\nfield \u53EF\u4EE5\u662F\u4E0E database \u7B2C\u4E00\u884C\u4E2D\u67D0\u4E2A\u5217\u6807\u9898\u5BF9\u5E94\u7684\u6587\u672C\u6807\u7B7E\uFF0C\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u5173\u5217\u7684\u6570\u5B57\u7D22\u5F15\uFF0C\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u4E3A 1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u6761\u4EF6\u7684\u5355\u5143\u683C\u533A\u57DF\u3002\u8BA1\u7B97\u4E4B\u524D\u5C06\u4F7F\u7528\u8FD9\u4E9B\u6761\u4EF6\u6765\u8FC7\u6EE4 database \u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DVARP": {
            "d": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u901A\u8FC7\u4F7F\u7528\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6570\u5B57\u8BA1\u7B97\u6837\u672C\u603B\u4F53\u7684\u6837\u672C\u603B\u4F53\u65B9\u5DEE\u3002",
            "a": "\u4F7F\u7528 SQL \u5F0F\u67E5\u8BE2\uFF0C\u901A\u8FC7\u4F7F\u7528\u5217\u8868\u6216\u6570\u636E\u5E93\u4E2D\u6EE1\u8DB3\u6307\u5B9A\u6761\u4EF6\u7684\u8BB0\u5F55\u5B57\u6BB5\uFF08\u5217\uFF09\u4E2D\u7684\u6570\u5B57\u8BA1\u7B97\u6837\u672C\u603B\u4F53\u7684\u6837\u672C\u603B\u4F53\u65B9\u5DEE\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u6784\u6210\u5217\u8868\u6216\u6570\u636E\u5E93\u7684\u5355\u5143\u683C\u533A\u57DF\uFF0C\u5217\u8868\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6807\u7B7E\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9A database \u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u63D0\u53D6\u548C\u7528\u4E8E\u8BA1\u7B97\u7684\u503C\u3002\n\nfield \u53EF\u4EE5\u662F\u4E0E database \u7B2C\u4E00\u884C\u4E2D\u67D0\u4E2A\u5217\u6807\u9898\u5BF9\u5E94\u7684\u6587\u672C\u6807\u7B7E\uFF0C\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u5173\u5217\u7684\u6570\u5B57\u7D22\u5F15\uFF0C\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u4E3A 1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u6761\u4EF6\u7684\u5355\u5143\u683C\u533A\u57DF\u3002\u8BA1\u7B97\u4E4B\u524D\u5C06\u4F7F\u7528\u8FD9\u4E9B\u6761\u4EF6\u6765\u8FC7\u6EE4 database \u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "AGE_BY_IDCARD": {
            "d": "\u6839\u636E\u4E2D\u56FD\u8EAB\u4EFD\u8BC1\u53F7\u8BA1\u7B97\u51FA\u5E74\u9F84\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8BC1",
            "a": "\u6839\u636E\u8EAB\u4EFD\u8BC1\u53F7\u5F97\u5230\u5E74\u9F84\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8BC1\u53F7",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8BC1\u53F7\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u622A\u6B62\u65E5\u671F",
                "detail": "\u5E74\u9F84\u8BA1\u7B97\u7684\u622A\u6B62\u65E5\u671F\u6216\u8303\u56F4\uFF0C\u9ED8\u8BA4\u4E3A\u5F53\u65E5\u3002"
              }
            ]
          },
          "SEX_BY_IDCARD": {
            "d": "\u6839\u636E\u4E2D\u56FD\u8EAB\u4EFD\u8BC1\u53F7\u8BA1\u7B97\u51FA\u6027\u522B\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8BC1",
            "a": "\u6839\u636E\u8EAB\u4EFD\u8BC1\u53F7\u5F97\u5230\u6027\u522B\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8BC1\u53F7",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8BC1\u53F7\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "BIRTHDAY_BY_IDCARD": {
            "d": "\u6839\u636E\u4E2D\u56FD\u8EAB\u4EFD\u8BC1\u53F7\u8BA1\u7B97\u51FA\u751F\u65E5\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8BC1",
            "a": "\u6839\u636E\u8EAB\u4EFD\u8BC1\u53F7\u5F97\u5230\u751F\u65E5\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8BC1\u53F7",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8BC1\u53F7\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "\u751F\u65E5\u683C\u5F0F",
                "detail": "\u65E5\u671F\u7C7B\u578B,\u9ED8\u8BA40:[1900/01/01], 1:[1900-01-01], 2:[1900\u5E741\u67081\u65E5]"
              }
            ]
          },
          "PROVINCE_BY_IDCARD": {
            "d": "\u6839\u636E\u4E2D\u56FD\u8EAB\u4EFD\u8BC1\u53F7\u8BA1\u7B97\u51FA\u7C4D\u8D2F\u7684\u7701\u4EFD\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8BC1",
            "a": "\u6839\u636E\u8EAB\u4EFD\u8BC1\u53F7\u5F97\u5230\u7C4D\u8D2F\u7684\u7701\u4EFD\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8BC1\u53F7",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8BC1\u53F7\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "CITY_BY_IDCARD": {
            "d": "\u6839\u636E\u4E2D\u56FD\u8EAB\u4EFD\u8BC1\u53F7\u8BA1\u7B97\u51FA\u7C4D\u8D2F\u7684\u57CE\u5E02\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8BC1",
            "a": "\u6839\u636E\u8EAB\u4EFD\u8BC1\u53F7\u5F97\u5230\u7C4D\u8D2F\u7684\u57CE\u5E02\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8BC1\u53F7",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8BC1\u53F7\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "STAR_BY_IDCARD": {
            "d": "\u6839\u636E\u4E2D\u56FD\u8EAB\u4EFD\u8BC1\u53F7\u8BA1\u7B97\u51FA\u661F\u5EA7\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8BC1",
            "a": "\u6839\u636E\u8EAB\u4EFD\u8BC1\u53F7\u5F97\u5230\u661F\u5EA7\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8BC1\u53F7",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8BC1\u53F7\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "ANIMAL_BY_IDCARD": {
            "d": "\u6839\u636E\u4E2D\u56FD\u8EAB\u4EFD\u8BC1\u53F7\u8BA1\u7B97\u51FA\u751F\u8096\uFF08\u9F20\u3001\u725B\u3001\u864E\u3001\u5154...\uFF09\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8BC1",
            "a": "\u6839\u636E\u8EAB\u4EFD\u8BC1\u53F7\u5F97\u5230\u751F\u8096\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8BC1\u53F7",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8BC1\u53F7\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "ISIDCARD": {
            "d": "\u9A8C\u8BC1\u8EAB\u4EFD\u8BC1\u7684\u683C\u5F0F\u662F\u5426\u6B63\u786E\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8BC1",
            "a": "\u9A8C\u8BC1\u8EAB\u4EFD\u8BC1\u683C\u5F0F\u6B63\u786E\u6027\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8BC1\u53F7",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8BC1\u53F7\u6216\u8303\u56F4\u3002"
              }
            ]
          },
          "DM_TEXT_CUTWORD": {
            "d": "\u6587\u672C\u5206\u8BCD\u3002\u628A\u4E00\u8FDE\u4E32\u6587\u5B57\u62C6\u5206\u4E3A\u4E00\u7CFB\u5217\u5355\u72EC\u8BCD\u8BED",
            "a": "\u4E2D\u6587\u6587\u672C\u5206\u8BCD\u3002",
            "p": [
              {
                "name": "\u6587\u672C",
                "detail": "\u4EFB\u610F\u9700\u8981\u5206\u8BCD\u7684\u6587\u672C\u3002"
              },
              {
                "name": "\u5206\u8BCD\u6A21\u5F0F",
                "detail": "\u9ED8\u8BA4\u4E3A0[\u7CBE\u786E\u6A21\u5F0F], 1[\u5168\u6A21\u5F0F], 2[\u641C\u7D22\u5F15\u64CE\u6A21\u5F0F]\u3002"
              }
            ]
          },
          "DM_TEXT_TFIDF": {
            "d": "\u91C7\u7528tf-idf\u7B97\u6CD5\u8FDB\u884C\u5173\u952E\u8BCD\u63D0\u53D6\u3002\u4ECE\u4E00\u8FDE\u4E32\u6587\u5B57\u4E2D\u8BC6\u522B\u5173\u952E\u8BCD",
            "a": "tf-idf\u5173\u952E\u8BCD\u8BC6\u522B\u3002",
            "p": [
              {
                "name": "\u6587\u672C",
                "detail": "\u4EFB\u610F\u9700\u8981\u5206\u8BCD\u7684\u6587\u672C\u3002"
              },
              {
                "name": "\u5173\u952E\u8BCD\u4E2A\u6570",
                "detail": "\u7B97\u6CD5\u8FD4\u56DE\u7684\u5173\u952E\u8BCD\u4E2A\u6570\uFF0C\u9ED8\u8BA420"
              },
              {
                "name": "\u8BED\u6599\u5E93",
                "detail": "\u9009\u62E9\u7279\u5B9A\u9886\u57DF\u7684\u8BED\u6599\u5E93\uFF0C\u9ED8\u8BA40[\u901A\u7528], 1[\u91D1\u878D], 2[\u533B\u7597]"
              }
            ]
          },
          "DM_TEXT_TEXTRANK": {
            "d": "\u91C7\u7528TextRank\u7B97\u6CD5\u8FDB\u884C\u5173\u952E\u8BCD\u63D0\u53D6\u3002\u4ECE\u4E00\u8FDE\u4E32\u6587\u5B57\u4E2D\u8BC6\u522B\u5173\u952E\u8BCD",
            "a": "TextRank\u5173\u952E\u8BCD\u8BC6\u522B\u3002",
            "p": [
              {
                "name": "\u6587\u672C",
                "detail": "\u4EFB\u610F\u9700\u8981\u5206\u8BCD\u7684\u6587\u672C\u3002"
              },
              {
                "name": "\u5173\u952E\u8BCD\u4E2A\u6570",
                "detail": "\u7B97\u6CD5\u8FD4\u56DE\u7684\u5173\u952E\u8BCD\u4E2A\u6570\uFF0C\u9ED8\u8BA420"
              },
              {
                "name": "\u8BED\u6599\u5E93",
                "detail": "\u9009\u62E9\u7279\u5B9A\u9886\u57DF\u7684\u8BED\u6599\u5E93\uFF0C\u9ED8\u8BA40[\u901A\u7528], 1[\u91D1\u878D], 2[\u533B\u7597]"
              }
            ]
          },
          "DATA_CN_STOCK_CLOSE": {
            "d": "\u6839\u636E\u80A1\u7968\u4EE3\u7801\u548C\u65E5\u671F\uFF0C\u8FD4\u56DEA\u80A1\u5BF9\u5E94\u80A1\u7968\u6536\u76D8\u4EF7\u3002",
            "a": "\u8FD4\u56DEA\u80A1\u5BF9\u5E94\u80A1\u7968\u6536\u76D8\u4EF7\u3002",
            "p": [
              {
                "name": "\u80A1\u7968\u4EE3\u7801",
                "detail": "6\u4F4D\u80A1\u7968\u4EE3\u7801\uFF0C\u5FC5\u586B\u9879\u3002"
              },
              {
                "name": "\u65E5\u671F",
                "detail": "\u80A1\u7968\u7684\u4EA4\u6613\u65E5\uFF0C\u9ED8\u8BA4\u4E3A\u6700\u65B0\u4EA4\u6613\u65E5"
              },
              {
                "name": "\u590D\u6743\u9664\u6743",
                "detail": "\u9009\u62E9\u80A1\u7968\u7684\u9664\u6743\u590D\u6743\u7C7B\u578B\uFF0C\u9ED8\u8BA40[\u524D\u590D\u6743], 1[\u539F\u59CB\u4EF7\u683C], 2[\u540E\u590D\u6743]"
              }
            ]
          },
          "DATA_CN_STOCK_OPEN": {
            "d": "\u6839\u636E\u80A1\u7968\u4EE3\u7801\u548C\u65E5\u671F\uFF0C\u8FD4\u56DEA\u80A1\u5BF9\u5E94\u80A1\u7968\u5F00\u76D8\u4EF7\u3002",
            "a": "\u8FD4\u56DEA\u80A1\u5BF9\u5E94\u80A1\u7968\u5F00\u76D8\u4EF7\u3002",
            "p": [
              {
                "name": "\u80A1\u7968\u4EE3\u7801",
                "detail": "6\u4F4D\u80A1\u7968\u4EE3\u7801\uFF0C\u5FC5\u586B\u9879\u3002"
              },
              {
                "name": "\u65E5\u671F",
                "detail": "\u80A1\u7968\u7684\u4EA4\u6613\u65E5\uFF0C\u9ED8\u8BA4\u4E3A\u6700\u65B0\u4EA4\u6613\u65E5"
              },
              {
                "name": "\u590D\u6743\u9664\u6743",
                "detail": "\u9009\u62E9\u80A1\u7968\u7684\u9664\u6743\u590D\u6743\u7C7B\u578B\uFF0C\u9ED8\u8BA40[\u524D\u590D\u6743], 1[\u539F\u59CB\u4EF7\u683C], 2[\u540E\u590D\u6743]"
              }
            ]
          },
          "DATA_CN_STOCK_MAX": {
            "d": "\u6839\u636E\u80A1\u7968\u4EE3\u7801\u548C\u65E5\u671F\uFF0C\u8FD4\u56DEA\u80A1\u5BF9\u5E94\u80A1\u7968\u6700\u9AD8\u4EF7\u3002",
            "a": "\u8FD4\u56DEA\u80A1\u5BF9\u5E94\u80A1\u7968\u6700\u9AD8\u4EF7\u3002",
            "p": [
              {
                "name": "\u80A1\u7968\u4EE3\u7801",
                "detail": "6\u4F4D\u80A1\u7968\u4EE3\u7801\uFF0C\u5FC5\u586B\u9879\u3002"
              },
              {
                "name": "\u65E5\u671F",
                "detail": "\u80A1\u7968\u7684\u4EA4\u6613\u65E5\uFF0C\u9ED8\u8BA4\u4E3A\u6700\u65B0\u4EA4\u6613\u65E5"
              },
              {
                "name": "\u590D\u6743\u9664\u6743",
                "detail": "\u9009\u62E9\u80A1\u7968\u7684\u9664\u6743\u590D\u6743\u7C7B\u578B\uFF0C\u9ED8\u8BA40[\u524D\u590D\u6743], 1[\u539F\u59CB\u4EF7\u683C], 2[\u540E\u590D\u6743]"
              }
            ]
          },
          "DATA_CN_STOCK_MIN": {
            "d": "\u6839\u636E\u80A1\u7968\u4EE3\u7801\u548C\u65E5\u671F\uFF0C\u8FD4\u56DEA\u80A1\u5BF9\u5E94\u80A1\u7968\u6700\u4F4E\u4EF7\u3002",
            "a": "\u8FD4\u56DEA\u80A1\u5BF9\u5E94\u80A1\u7968\u6700\u4F4E\u4EF7\u3002",
            "p": [
              {
                "name": "\u80A1\u7968\u4EE3\u7801",
                "detail": "6\u4F4D\u80A1\u7968\u4EE3\u7801\uFF0C\u5FC5\u586B\u9879\u3002"
              },
              {
                "name": "\u65E5\u671F",
                "detail": "\u80A1\u7968\u7684\u4EA4\u6613\u65E5\uFF0C\u9ED8\u8BA4\u4E3A\u6700\u65B0\u4EA4\u6613\u65E5"
              },
              {
                "name": "\u590D\u6743\u9664\u6743",
                "detail": "\u9009\u62E9\u80A1\u7968\u7684\u9664\u6743\u590D\u6743\u7C7B\u578B\uFF0C\u9ED8\u8BA40[\u524D\u590D\u6743], 1[\u539F\u59CB\u4EF7\u683C], 2[\u540E\u590D\u6743]"
              }
            ]
          },
          "DATA_CN_STOCK_VOLUMN": {
            "d": "\u6839\u636E\u80A1\u7968\u4EE3\u7801\u548C\u65E5\u671F\uFF0C\u8FD4\u56DEA\u80A1\u5BF9\u5E94\u80A1\u7968\u6210\u4EA4\u91CF\u3002",
            "a": "\u8FD4\u56DEA\u80A1\u5BF9\u5E94\u80A1\u7968\u6210\u4EA4\u91CF\u3002",
            "p": [
              {
                "name": "\u80A1\u7968\u4EE3\u7801",
                "detail": "6\u4F4D\u80A1\u7968\u4EE3\u7801\uFF0C\u5FC5\u586B\u9879\u3002"
              },
              {
                "name": "\u65E5\u671F",
                "detail": "\u80A1\u7968\u7684\u4EA4\u6613\u65E5\uFF0C\u9ED8\u8BA4\u4E3A\u6700\u65B0\u4EA4\u6613\u65E5"
              },
              {
                "name": "\u590D\u6743\u9664\u6743",
                "detail": "\u9009\u62E9\u80A1\u7968\u7684\u9664\u6743\u590D\u6743\u7C7B\u578B\uFF0C\u9ED8\u8BA40[\u524D\u590D\u6743], 1[\u539F\u59CB\u4EF7\u683C], 2[\u540E\u590D\u6743]"
              }
            ]
          },
          "DATA_CN_STOCK_AMOUNT": {
            "d": "\u6839\u636E\u80A1\u7968\u4EE3\u7801\u548C\u65E5\u671F\uFF0C\u8FD4\u56DEA\u80A1\u5BF9\u5E94\u80A1\u7968\u6210\u4EA4\u989D\u3002",
            "a": "\u8FD4\u56DEA\u80A1\u5BF9\u5E94\u80A1\u7968\u6210\u4EA4\u989D\u3002",
            "p": [
              {
                "name": "\u80A1\u7968\u4EE3\u7801",
                "detail": "6\u4F4D\u80A1\u7968\u4EE3\u7801\uFF0C\u5FC5\u586B\u9879\u3002"
              },
              {
                "name": "\u65E5\u671F",
                "detail": "\u80A1\u7968\u7684\u4EA4\u6613\u65E5\uFF0C\u9ED8\u8BA4\u4E3A\u6700\u65B0\u4EA4\u6613\u65E5"
              },
              {
                "name": "\u590D\u6743\u9664\u6743",
                "detail": "\u9009\u62E9\u80A1\u7968\u7684\u9664\u6743\u590D\u6743\u7C7B\u578B\uFF0C\u9ED8\u8BA40[\u524D\u590D\u6743], 1[\u539F\u59CB\u4EF7\u683C], 2[\u540E\u590D\u6743]"
              }
            ]
          },
          "ISDATE": {
            "d": "\u9A8C\u8BC1\u65E5\u671F\u7684\u683C\u5F0F\u662F\u5426\u6B63\u786E\u3002\u652F\u6301\u591A\u79CD\u65E5\u671F\u683C\u5F0F",
            "a": "\u9A8C\u8BC1\u65E5\u671F\u683C\u5F0F\u6B63\u786E\u6027\u3002",
            "p": [
              {
                "name": "\u65E5\u671F",
                "detail": "\u65E5\u671F\u503C\uFF0C\u4F8B\u59821990/01/01, 1990\u5E741\u67081\u65E5\u7B49\u3002"
              }
            ]
          },
          "LINESPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5355\u5143\u683C\u5185\u7684\u6298\u7EBF\u56FEsparklines\uFF0C\u7528\u4E8E\u63CF\u8FF0\u6570\u636E\u7684\u8FDE\u7EED\u8D70\u52BF",
            "a": "\u751F\u6210\u5355\u5143\u683C\u6298\u7EBF\u56FE",
            "p": [
              {
                "name": "\u6570\u636E\u8303\u56F4",
                "detail": "\u6570\u636E\u8303\u56F4\uFF0C\u6570\u503C\u624D\u80FD\u88AB\u6709\u6548\u8BA1\u7B97\uFF0C\u4F8B\u5982A1:A20\uFF0C {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u7EBF\u6761\u989C\u8272",
                "detail": "\u7EBF\u56FE\u7684\u7EBF\u6761\u989C\u8272\uFF0C\u53EF\u4EE5\u662F\u5426\u4E2A\u8303\u56F4A1\u3001\u8272\u8868\u7D22\u5F15\u6570\u503C\u6216\u8005\u5177\u4F53\u989C\u8272\u503C\uFF0C\u8BBE\u7F6E\u4E3A0\u6216false\u5219\u4E0D\u663E\u793A\uFF0C\u652F\u6301regx\u3001rgb\u3001rgba\u7B49\u3002\u9ED8\u8BA4#2ec7c9"
              },
              {
                "name": "\u7EBF\u6761\u7C97\u7EC6",
                "detail": "\u6298\u7EBF\u56FE\u7EBF\u6BB5\u7C97\u7EC6\uFF0C\u9ED8\u8BA4\u4E3A1px"
              },
              {
                "name": "\u8F85\u52A9\u7EBF",
                "detail": "\u4E00\u6761\u6A2A\u7EBF\uFF0C\u53EF\u4EE5\u662Fmin\u3001max\u3001avg\u3001median\u3001\u8303\u56F4\u6216\u81EA\u5B9A\u4E49\u6570\u503C\uFF0C\u9ED8\u8BA40\u65E0"
              },
              {
                "name": "\u8F85\u52A9\u7EBF\u989C\u8272",
                "detail": "\u8F85\u52A9\u7EBF\u7684\u989C\u8272\u8BBE\u7F6E\uFF0C\u540C\u7EBF\u6761\u989C\u8272\u914D\u7F6E\uFF0C\u9ED8\u8BA4#000"
              },
              {
                "name": "\u6700\u5927\u503C\u6807\u8BC6",
                "detail": "\u6807\u8BC6\u7EBF\u56FE\u6700\u5927\u503C\uFF0C\u540C\u7EBF\u6761\u989C\u8272\u914D\u7F6E\uFF0C\u9ED8\u8BA40\u4E0D\u663E\u793A"
              },
              {
                "name": "\u6700\u5C0F\u503C\u6807\u8BC6",
                "detail": "\u6807\u8BC6\u7EBF\u56FE\u6700\u5C0F\u503C\uFF0C\u540C\u7EBF\u6761\u989C\u8272\u914D\u7F6E\uFF0C\u9ED8\u8BA40\u4E0D\u663E\u793A"
              },
              {
                "name": "\u6807\u8BC6\u5927\u5C0F",
                "detail": "\u6700\u5927\u503C\u548C\u6700\u5C0F\u503C\u7684\u6807\u8BC6\u5927\u5C0F\u8BBE\u7F6E\uFF0C\u9ED8\u8BA4\u4E3A1.5"
              }
            ]
          },
          "AREASPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5355\u5143\u683C\u5185\u7684\u9762\u79EF\u56FEsparklines\uFF0C\u4E00\u822C\u7528\u4E8E\u63CF\u8FF0\u6570\u636E\u7684\u8FDE\u7EED\u7D2F\u79EF\u503C\u8D70\u52BF",
            "a": "\u751F\u6210\u5355\u5143\u683C\u9762\u79EF\u56FE",
            "p": [
              {
                "name": "\u6570\u636E\u8303\u56F4",
                "detail": "\u6570\u636E\u8303\u56F4\uFF0C\u6570\u503C\u624D\u80FD\u88AB\u6709\u6548\u8BA1\u7B97\uFF0C\u4F8B\u5982A1:A20\uFF0C {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u7EBF\u6761\u989C\u8272",
                "detail": "\u7EBF\u56FE\u7684\u7EBF\u6761\u989C\u8272\uFF0C\u53EF\u4EE5\u662F\u5426\u4E2A\u8303\u56F4A1\u3001\u8272\u8868\u7D22\u5F15\u6570\u503C\u6216\u8005\u5177\u4F53\u989C\u8272\u503C\uFF0C\u8BBE\u7F6E\u4E3A0\u6216false\u5219\u4E0D\u663E\u793A\uFF0C\u652F\u6301regx\u3001rgb\u3001rgba\u7B49\u3002\u9ED8\u8BA4#2ec7c9"
              },
              {
                "name": "\u586B\u5145\u989C\u8272",
                "detail": "\u5F62\u6210\u9762\u79EF\u56FE\uFF0C\u540C\u7EBF\u6761\u989C\u8272\u914D\u7F6E\uFF0C\u9ED8\u8BA40\u4E0D\u663E\u793A"
              },
              {
                "name": "\u7EBF\u6761\u7C97\u7EC6",
                "detail": "\u6298\u7EBF\u56FE\u7EBF\u6BB5\u7C97\u7EC6\uFF0C\u9ED8\u8BA4\u4E3A1px"
              },
              {
                "name": "\u8F85\u52A9\u7EBF",
                "detail": "\u4E00\u6761\u6A2A\u7EBF\uFF0C\u53EF\u4EE5\u662Fmin\u3001max\u3001avg\u3001median\u3001\u8303\u56F4\u6216\u81EA\u5B9A\u4E49\u6570\u503C\uFF0C\u9ED8\u8BA40\u65E0"
              },
              {
                "name": "\u8F85\u52A9\u7EBF\u989C\u8272",
                "detail": "\u8F85\u52A9\u7EBF\u7684\u989C\u8272\u8BBE\u7F6E\uFF0C\u540C\u7EBF\u6761\u989C\u8272\u914D\u7F6E\uFF0C\u9ED8\u8BA4#000"
              }
            ]
          },
          "COLUMNSPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5355\u5143\u683C\u5185\u7684\u5782\u76F4\u67F1\u72B6\u56FEsparklines\uFF0C\u4E00\u822C\u7528\u4E8E\u63CF\u8FF0\u79BB\u6563\u6570\u636E\u4E4B\u95F4\u7684\u5927\u5C0F\u60C5\u51B5",
            "a": "\u751F\u6210\u5355\u5143\u683C\u5782\u76F4\u67F1\u72B6\u56FE",
            "p": [
              {
                "name": "\u6570\u636E\u8303\u56F4",
                "detail": "\u6570\u636E\u8303\u56F4\uFF0C\u6570\u503C\u624D\u80FD\u88AB\u6709\u6548\u8BA1\u7B97\uFF0C\u4F8B\u5982A1:A20\uFF0C {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u67F1\u6761\u95F4\u9694",
                "detail": "\u67F1\u6761\u4E4B\u95F4\u7684\u95F4\u9694\u8DDD\u79BB\uFF0C\u9ED8\u8BA4\u4E3A1"
              },
              {
                "name": "\u67F1\u6761\u989C\u8272",
                "detail": "\u7EBF\u56FE\u7684\u7EBF\u6761\u989C\u8272\uFF0C\u53EF\u4EE5\u662F\u5426\u4E2A\u8303\u56F4A1\u3001\u8272\u8868\u7D22\u5F15\u6570\u503C\u6216\u8005\u5177\u4F53\u989C\u8272\u503C\uFF0C\u8BBE\u7F6E\u4E3A0\u6216false\u5219\u4E0D\u663E\u793A\uFF0C\u652F\u6301regx\u3001rgb\u3001rgba\u7B49\u3002\u9ED8\u8BA4#fc5c5c"
              },
              {
                "name": "\u8D1F\u5411\u67F1\u6761\u989C\u8272",
                "detail": "\u8D1F\u5411\u67F1\u6761\u989C\u8272\u8BBE\u7F6E\uFF0C\u4EE3\u8868\u8D1F\u503C\u7684\u989C\u8272\uFF0C\u540C\u67F1\u6761\u989C\u8272\u914D\u7F6E\uFF0C\u9ED8\u8BA4#97b552"
              },
              {
                "name": "\u6700\u5927\u503C",
                "detail": "\u67F1\u56FE\u6700\u5927\u503C\uFF0C\u7528\u4E8E\u89C4\u8303\u67F1\u56FE\u957F\u5EA6\uFF0C\u9ED8\u8BA4\u4E3A\u81EA\u52A8\u8BA1\u7B97false\u3001auto\u3001null"
              },
              {
                "name": "\u8272\u677F",
                "detail": "\u8C03\u8272\u677F\u53EF\u4EE5\u5355\u72EC\u8BBE\u7F6E\u6BCF\u4E2A\u67F1\u6761\u7684\u989C\u8272\uFF0C\u53EF\u8BBE\u7F6E\u591A\u4E2A\uFF0C\u652F\u6301\u4E24\u79CD\u683C\u5F0F\uFF1A1\u989C\u8272\u4F8B\u5982#000\uFF0C\u4EE3\u8868\u7B2C\u4E00\u4E2A\u67F1\u7684\u989C\u8272\u662F\u9ED1\u8272\uFF1B2\u6570\u503C\u8303\u56F4:\u989C\u8272\uFF0C\u4F8B\u5982-2:#000\u8868\u793A\u6570\u503C\u4E3A-2\u7684\u67F1\u4E3A\u9ED1\u8272\uFF0C0:5:#000\u8868\u793A\u6570\u503C0-5\u7684\u67F1\u4E3A\u9ED1\u8272\uFF0C\u9ED8\u8BA4\u4E3A\u7A7A"
              }
            ]
          },
          "STACKCOLUMNSPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5355\u5143\u683C\u5185\u7684\u7D2F\u79EF\u5782\u76F4\u67F1\u72B6\u56FEsparklines\uFF0C\u4E00\u822C\u7528\u4E8E\u63CF\u8FF0\u79BB\u6563\u6570\u636E\u591A\u4E2A\u7EF4\u5EA6\u7684\u6570\u503C\u5927\u5C0F",
            "a": "\u751F\u6210\u5355\u5143\u683C\u7D2F\u79EF\u5782\u76F4\u67F1\u72B6\u56FE",
            "p": [
              {
                "name": "\u6570\u636E\u8303\u56F4",
                "detail": "\u6570\u636E\u8303\u56F4\uFF0C\u6570\u503C\u624D\u80FD\u88AB\u6709\u6548\u8BA1\u7B97\uFF0C\u4F8B\u5982A1:A20\uFF0C {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u6309\u5217\u5806\u79EF",
                "detail": "\u5982\u679C\u9700\u8981\u6309\u884C\u5806\u79EF\u5219\u672C\u9879\u8BBE\u4E3Afalse\u62160\uFF0C\u9ED8\u8BA4\u4E3A\u662F1"
              },
              {
                "name": "\u67F1\u6761\u95F4\u9694",
                "detail": "\u67F1\u6761\u4E4B\u95F4\u7684\u95F4\u9694\u8DDD\u79BB\uFF0C\u9ED8\u8BA4\u4E3A1"
              },
              {
                "name": "\u6700\u5927\u503C",
                "detail": "\u7D2F\u79EF\u67F1\u56FE\u6700\u5927\u503C\uFF0C\u7528\u4E8E\u89C4\u8303\u67F1\u56FE\u957F\u5EA6\uFF0C\u9ED8\u8BA4\u4E3A\u81EA\u52A8\u8BA1\u7B97false\u3001auto\u3001null"
              },
              {
                "name": "\u7D2F\u79EF\u8272\u677F",
                "detail": "\u8C03\u8272\u677F\u53EF\u4EE5\u5355\u72EC\u8BBE\u7F6E\u6BCF\u4E2A\u7EF4\u5EA6\u7684\u67F1\u6761\u989C\u8272\uFF0C\u53EF\u8BBE\u7F6E\u4E3AA1:A10\u7B49\u8303\u56F4\uFF0C\u9ED8\u8BA4\u4E3A#2ec7c9, #fc5c5c, #5ab1ef, #ffb980..."
              }
            ]
          },
          "BARSPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5355\u5143\u683C\u5185\u7684\u6A2A\u5411\u6761\u5F62\u56FEsparklines\uFF0C\u4E00\u822C\u7528\u4E8E\u63CF\u8FF0\u79BB\u6563\u6570\u636E\u4E4B\u95F4\u7684\u5927\u5C0F\u60C5\u51B5",
            "a": "\u751F\u6210\u5355\u5143\u683C\u6A2A\u5411\u6761\u5F62\u56FE",
            "p": [
              {
                "name": "\u6570\u636E\u8303\u56F4",
                "detail": "\u6570\u636E\u8303\u56F4\uFF0C\u6570\u503C\u624D\u80FD\u88AB\u6709\u6548\u8BA1\u7B97\uFF0C\u4F8B\u5982A1:A20\uFF0C {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u67F1\u6761\u95F4\u9694",
                "detail": "\u67F1\u6761\u4E4B\u95F4\u7684\u95F4\u9694\u8DDD\u79BB\uFF0C\u9ED8\u8BA4\u4E3A1"
              },
              {
                "name": "\u67F1\u6761\u989C\u8272",
                "detail": "\u7EBF\u56FE\u7684\u7EBF\u6761\u989C\u8272\uFF0C\u53EF\u4EE5\u662F\u5426\u4E2A\u8303\u56F4A1\u3001\u8272\u8868\u7D22\u5F15\u6570\u503C\u6216\u8005\u5177\u4F53\u989C\u8272\u503C\uFF0C\u8BBE\u7F6E\u4E3A0\u6216false\u5219\u4E0D\u663E\u793A\uFF0C\u652F\u6301regx\u3001rgb\u3001rgba\u7B49\u3002\u9ED8\u8BA4#fc5c5c"
              },
              {
                "name": "\u8D1F\u5411\u67F1\u6761\u989C\u8272",
                "detail": "\u8D1F\u5411\u67F1\u6761\u989C\u8272\u8BBE\u7F6E\uFF0C\u4EE3\u8868\u8D1F\u503C\u7684\u989C\u8272\uFF0C\u540C\u67F1\u6761\u989C\u8272\u914D\u7F6E\uFF0C\u9ED8\u8BA4#97b552"
              },
              {
                "name": "\u6700\u5927\u503C",
                "detail": "\u67F1\u56FE\u6700\u5927\u503C\uFF0C\u7528\u4E8E\u89C4\u8303\u67F1\u56FE\u957F\u5EA6\uFF0C\u9ED8\u8BA4\u4E3A\u81EA\u52A8\u8BA1\u7B97false\u3001auto\u3001null"
              },
              {
                "name": "\u8272\u677F",
                "detail": "\u8C03\u8272\u677F\u53EF\u4EE5\u5355\u72EC\u8BBE\u7F6E\u6BCF\u4E2A\u67F1\u6761\u7684\u989C\u8272\uFF0C\u53EF\u8BBE\u7F6E\u591A\u4E2A\uFF0C\u652F\u6301\u4E24\u79CD\u683C\u5F0F\uFF1A1\u989C\u8272\u4F8B\u5982#000\uFF0C\u4EE3\u8868\u7B2C\u4E00\u4E2A\u67F1\u7684\u989C\u8272\u662F\u9ED1\u8272\uFF1B2\u6570\u503C\u8303\u56F4:\u989C\u8272\uFF0C\u4F8B\u5982-2:#000\u8868\u793A\u6570\u503C\u4E3A-2\u7684\u67F1\u4E3A\u9ED1\u8272\uFF0C0:5:#000\u8868\u793A\u6570\u503C0-5\u7684\u67F1\u4E3A\u9ED1\u8272\uFF0C\u9ED8\u8BA4\u4E3A\u7A7A"
              }
            ]
          },
          "STACKBARSPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5355\u5143\u683C\u5185\u7684\u7D2F\u79EF\u6A2A\u5411\u6761\u5F62\u56FEsparklines\uFF0C\u4E00\u822C\u7528\u4E8E\u63CF\u8FF0\u79BB\u6563\u6570\u636E\u591A\u4E2A\u7EF4\u5EA6\u7684\u6570\u503C\u5927\u5C0F",
            "a": "\u751F\u6210\u5355\u5143\u683C\u7D2F\u79EF\u6A2A\u5411\u6761\u5F62\u56FE",
            "p": [
              {
                "name": "\u6570\u636E\u8303\u56F4",
                "detail": "\u6570\u636E\u8303\u56F4\uFF0C\u6570\u503C\u624D\u80FD\u88AB\u6709\u6548\u8BA1\u7B97\uFF0C\u4F8B\u5982A1:A20\uFF0C {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u6309\u5217\u5806\u79EF",
                "detail": "\u5982\u679C\u9700\u8981\u6309\u884C\u5806\u79EF\u5219\u672C\u9879\u8BBE\u4E3Afalse\u62160\uFF0C\u9ED8\u8BA4\u4E3A\u662F1"
              },
              {
                "name": "\u67F1\u6761\u95F4\u9694",
                "detail": "\u67F1\u6761\u4E4B\u95F4\u7684\u95F4\u9694\u8DDD\u79BB\uFF0C\u9ED8\u8BA4\u4E3A1"
              },
              {
                "name": "\u6700\u5927\u503C",
                "detail": "\u7D2F\u79EF\u67F1\u56FE\u6700\u5927\u503C\uFF0C\u7528\u4E8E\u89C4\u8303\u67F1\u56FE\u957F\u5EA6\uFF0C\u9ED8\u8BA4\u4E3A\u81EA\u52A8\u8BA1\u7B97false\u3001auto\u3001null"
              },
              {
                "name": "\u7D2F\u79EF\u8272\u677F",
                "detail": "\u8C03\u8272\u677F\u53EF\u4EE5\u5355\u72EC\u8BBE\u7F6E\u6BCF\u4E2A\u7EF4\u5EA6\u7684\u67F1\u6761\u989C\u8272\uFF0C\u53EF\u8BBE\u7F6E\u4E3AA1:A10\u7B49\u8303\u56F4\uFF0C\u9ED8\u8BA4\u4E3A#2ec7c9, #fc5c5c, #5ab1ef, #ffb980..."
              }
            ]
          },
          "DISCRETESPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5355\u5143\u683C\u5185\u7684\u79BB\u6563\u56FEsparklines\uFF0C\u4E00\u822C\u7528\u4E8E\u63CF\u8FF0\u79BB\u6563\u6570\u636E\u8D70\u52BF",
            "a": "\u751F\u6210\u5355\u5143\u683C\u79BB\u6563\u56FE",
            "p": [
              {
                "name": "\u6570\u636E\u8303\u56F4",
                "detail": "\u6570\u636E\u8303\u56F4\uFF0C\u6570\u503C\u624D\u80FD\u88AB\u6709\u6548\u8BA1\u7B97\uFF0C\u4F8B\u5982A1:A20\uFF0C {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u5206\u5272\u9608\u503C",
                "detail": "\u79BB\u6563\u56FE\u67F1\u5F62\u989C\u8272\u7684\u533A\u5206\uFF0C\u4F8B\u5982\uFF1A\u8BE5\u503C\u4E3A0\uFF0C\u5219\u5927\u4E8E0\u4E3A\u84DD\u8272\uFF0C\u5C0F\u4E8E0\u4E3A\u7EA2\u8272\uFF0C\u9ED8\u8BA4\u4E3A0"
              },
              {
                "name": "\u9608\u503C\u4EE5\u4E0A\u989C\u8272",
                "detail": "\u7EBF\u56FE\u7684\u7EBF\u6761\u989C\u8272\uFF0C\u53EF\u4EE5\u662F\u5426\u4E2A\u8303\u56F4A1\u3001\u8272\u8868\u7D22\u5F15\u6570\u503C\u6216\u8005\u5177\u4F53\u989C\u8272\u503C\uFF0C\u8BBE\u7F6E\u4E3A0\u6216false\u5219\u4E0D\u663E\u793A\uFF0C\u652F\u6301regx\u3001rgb\u3001rgba\u7B49\u3002\u9ED8\u8BA4#2ec7c9"
              },
              {
                "name": "\u9608\u503C\u4EE5\u4E0B\u989C\u8272",
                "detail": "\u9608\u503C\u4EE5\u4E0B\u67F1\u6761\u989C\u8272\u8BBE\u7F6E\uFF0C\u540C\u9608\u503C\u4EE5\u4E0A\u989C\u8272\uFF0C\u9ED8\u8BA4#fc5c5c"
              }
            ]
          },
          "TRISTATESPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5355\u5143\u683C\u5185\u7684\u4E09\u6001\u56FEsparklines\uFF0C\u4E00\u822C\u7528\u4E8E\u63CF\u8FF0\u4E09\u79CD\u6001\u52BF\u7684\u8D70\u52BF\u4F8B\u5982\u80DC\u8D1F\u5E73",
            "a": "\u751F\u6210\u5355\u5143\u683C\u4E09\u6001\u56FE",
            "p": [
              {
                "name": "\u6570\u636E\u8303\u56F4",
                "detail": "\u6570\u636E\u8303\u56F4\uFF0C\u6570\u503C\u624D\u80FD\u88AB\u6709\u6548\u8BA1\u7B97\uFF0C\u4F8B\u5982A1:A20\uFF0C {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u67F1\u6761\u95F4\u9694",
                "detail": "\u67F1\u6761\u4E4B\u95F4\u7684\u95F4\u9694\u8DDD\u79BB\uFF0C\u9ED8\u8BA4\u4E3A1"
              },
              {
                "name": "\u67F1\u6761\u989C\u8272",
                "detail": "\u7EBF\u56FE\u7684\u7EBF\u6761\u989C\u8272\uFF0C\u53EF\u4EE5\u662F\u5426\u4E2A\u8303\u56F4A1\u3001\u8272\u8868\u7D22\u5F15\u6570\u503C\u6216\u8005\u5177\u4F53\u989C\u8272\u503C\uFF0C\u8BBE\u7F6E\u4E3A0\u6216false\u5219\u4E0D\u663E\u793A\uFF0C\u652F\u6301regx\u3001rgb\u3001rgba\u7B49\u3002\u9ED8\u8BA4#fc5c5c"
              },
              {
                "name": "\u8D1F\u5411\u67F1\u6761\u989C\u8272",
                "detail": "\u8D1F\u5411\u67F1\u6761\u989C\u8272\u8BBE\u7F6E\uFF0C\u4EE3\u8868\u8D1F\u503C\u7684\u989C\u8272\uFF0C\u540C\u67F1\u6761\u989C\u8272\u914D\u7F6E\uFF0C\u9ED8\u8BA4#97b552"
              },
              {
                "name": "\u96F6\u503C\u67F1\u6761\u989C\u8272",
                "detail": "\u96F6\u503C\u67F1\u6761\u989C\u8272\u8BBE\u7F6E\uFF0C\u4EE3\u88680\u503C\u989C\u8272\uFF0C\u540C\u67F1\u6761\u989C\u8272\u914D\u7F6E\uFF0C\u9ED8\u8BA4#999"
              },
              {
                "name": "\u8272\u677F",
                "detail": "\u8C03\u8272\u677F\u53EF\u4EE5\u5355\u72EC\u8BBE\u7F6E\u6BCF\u4E2A\u67F1\u6761\u7684\u989C\u8272\uFF0C\u53EF\u8BBE\u7F6E\u591A\u4E2A\uFF0C\u652F\u6301\u4E24\u79CD\u683C\u5F0F\uFF1A1\u989C\u8272\u4F8B\u5982#000\uFF0C\u4EE3\u8868\u7B2C\u4E00\u4E2A\u67F1\u7684\u989C\u8272\u662F\u9ED1\u8272\uFF1B2\u6570\u503C\u8303\u56F4:\u989C\u8272\uFF0C\u4F8B\u5982-2:#000\u8868\u793A\u6570\u503C\u4E3A-2\u7684\u67F1\u4E3A\u9ED1\u8272\uFF0C0-5:#000\u8868\u793A\u6570\u503C0-5\u7684\u67F1\u4E3A\u9ED1\u8272\uFF0C\u9ED8\u8BA4\u4E3A\u7A7A"
              }
            ]
          },
          "PIESPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5355\u5143\u683C\u5185\u7684\u997C\u56FEsparklines\uFF0C\u4E00\u822C\u7528\u4E8E\u63CF\u8FF0\u6570\u636E\u5360\u6BD4",
            "a": "\u751F\u6210\u5355\u5143\u683C\u997C\u56FE",
            "p": [
              {
                "name": "\u6570\u636E\u8303\u56F4",
                "detail": "\u6570\u636E\u8303\u56F4\uFF0C\u6570\u503C\u624D\u80FD\u88AB\u6709\u6548\u8BA1\u7B97\uFF0C\u4F8B\u5982A1:A20\uFF0C {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u65CB\u8F6C\u89D2\u5EA6",
                "detail": "\u997C\u56FE\u7684\u65CB\u8F6C\u89D2\u5EA6\uFF0C\u9ED8\u8BA4\u4E3A0"
              },
              {
                "name": "\u997C\u56FE\u8FB9\u6846",
                "detail": "\u997C\u56FE\u8FB9\u6846\u5927\u5C0F\uFF0C\u9ED8\u8BA4\u4E3A\u65E00"
              },
              {
                "name": "\u8FB9\u6846\u989C\u8272",
                "detail": "\u997C\u56FE\u8FB9\u6846\u989C\u8272\uFF0C\u9ED8\u8BA4\u4E3A#000"
              },
              {
                "name": "\u997C\u56FE\u8272\u677F",
                "detail": "\u8C03\u8272\u677F\u53EF\u4EE5\u8BBE\u7F6E\u5207\u7247\u7684\u989C\u8272\uFF0C\u53EF\u8BBE\u7F6E\u4E3AA1:A10\u7B49\u8303\u56F4\uFF0C\u9ED8\u8BA4\u4E3A#2ec7c9, #fc5c5c, #5ab1ef, #ffb980..."
              }
            ]
          },
          "BOXSPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5355\u5143\u683C\u5185\u7684\u7BB1\u7EBF\u56FEsparklines\uFF0C\u4E00\u822C\u7528\u4E8E\u63CF\u8FF0\u6570\u636E\u96C6\u7684\u7EDF\u8BA1\u5206\u5E03",
            "a": "\u751F\u6210\u5355\u5143\u683C\u7BB1\u7EBF\u56FE",
            "p": [
              {
                "name": "\u6570\u636E\u8303\u56F4",
                "detail": "\u6570\u636E\u8303\u56F4\uFF0C\u6570\u503C\u624D\u80FD\u88AB\u6709\u6548\u8BA1\u7B97\uFF0C\u4F8B\u5982A1:A20\uFF0C {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u79BB\u7FA4\u70B9\u6BD4\u4F8B",
                "detail": "\u79BB\u7FA4\u70B9\u7684\u9608\u503C\u8303\u56F4\uFF0C\u5982\u679C\u4E3A0\u6216false\u5219\u4E0D\u663E\u793A\uFF0C\u9ED8\u8BA4\u4E3A1.5\u500D"
              },
              {
                "name": "\u76EE\u6807\u70B9\u503C",
                "detail": "\u7BB1\u7EBF\u56FE\u4E0A\u7684\u76EE\u6807\u503C\u8BBE\u7F6E\uFF0C\u9ED8\u8BA4\u4E3Afalse\u4E0D\u663E\u793A"
              },
              {
                "name": "\u6570\u636E\u70B9\u5927\u5C0F",
                "detail": "\u76EE\u6807\u70B9\u548C\u79BB\u7FA4\u70B9\u7684\u534A\u5F84\u5927\u5C0F\u8BBE\u7F6E\uFF0C\u9ED8\u8BA4\u4E3A1.5"
              }
            ]
          },
          "BULLETSPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5355\u5143\u683C\u5185\u7684\u5B50\u5F39\u56FEsparklines\uFF0C\u4E00\u822C\u7528\u4E8E\u63CF\u8FF0\u4EFB\u52A1\u8FBE\u6210\u7387",
            "a": "\u751F\u6210\u5355\u5143\u683C\u5B50\u5F39\u56FE",
            "p": [
              {
                "name": "\u76EE\u6807",
                "detail": "\u8FBE\u6210\u7684\u76EE\u6807\u503C\uFF0C\u6570\u503C\u624D\u80FD\u88AB\u6709\u6548\u8BA1\u7B97\uFF0C\u4F8B\u5982A1\uFF0C 100\u7B49\u3002"
              },
              {
                "name": "\u5B9E\u9645\u5B8C\u6210",
                "detail": "\u76EE\u524D\u5B8C\u6210\u503C\uFF0C\u6570\u503C\u624D\u80FD\u88AB\u6709\u6548\u8BA1\u7B97\uFF0C\u4F8B\u5982A1\uFF0C 100\u7B49\u3002"
              },
              {
                "name": "\u5BF9\u6BD4\u503C",
                "detail": "\u5BF9\u6BD4\u503C\uFF0C\u4F8B\u5982\u8D85\u989D\u3001\u6700\u4F4E\u3001\u83B7\u5956\u5E95\u7EBF\u7B49\uFF0C\u6570\u503C\u624D\u80FD\u88AB\u6709\u6548\u8BA1\u7B97\uFF0C\u4F8B\u5982A1\uFF0C 100\u7B49\u3002\u53EF\u4EE5\u8BBE\u7F6E\u6700\u591A9\u4E2A\u5BF9\u6BD4\u503C"
              }
            ]
          },
          "COMPOSESPLINES": {
            "d": "\u652F\u6301\u591A\u4E2A\u7C7B\u578B\u7684\u56FE\u753B\u5728\u540C\u4E00\u4E2A\u5355\u5143\u683C,\u6BCF\u4E2A\u53C2\u6570\u4EE3\u8868\u4E00\u4E2Asparklines\u56FE",
            "a": "\u7EC4\u5408sparklines\u56FE\u5230\u4E00\u4E2A\u5355\u5143\u683C",
            "p": [
              {
                "name": "\u56FE\u8BBE\u7F6E",
                "detail": "sparklines\u56FE\u8BBE\u7F6E\uFF0C\u4F8B\u5982A1:A20\uFF0C \u4E00\u4E2A\u5B8C\u6210\u7684\u997C\u56FE\u3001\u7EBF\u56FE\u8BBE\u7F6E\u7B49\u3002"
              }
            ]
          },
          "SORT": {
            "d": "\u8FD4\u56DE\u6570\u7EC4\u4E2D\u5143\u7D20\u7684\u6392\u5E8F\u6570\u7EC4\u3002\u8FD4\u56DE\u7684\u6570\u7EC4\u4E0E\u63D0\u4F9B\u7684\u6570\u7EC4\u53C2\u6570\u5F62\u72B6\u76F8\u540C\u3002",
            "a": "\u8FD4\u56DE\u6570\u7EC4\u4E2D\u5143\u7D20\u7684\u6392\u5E8F\u6570\u7EC4\u3002\u8FD4\u56DE\u7684\u6570\u7EC4\u4E0E\u63D0\u4F9B\u7684\u6570\u7EC4\u53C2\u6570\u5F62\u72B6\u76F8\u540C\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u8981\u6392\u5E8F\u7684\u8303\u56F4\u6216\u6570\u7EC4\u3002"
              },
              {
                "name": "sort_index",
                "detail": "[\u53EF\u9009] - \u8868\u793A\u8981\u6392\u5E8F\u7684\u884C\u6216\u5217\u7684\u6570\u5B57\u3002\uFF08\u9ED8\u8BA4row1/col1\uFF09"
              },
              {
                "name": "sort_order",
                "detail": "[\u53EF\u9009] - \u8868\u793A\u6240\u9700\u6392\u5E8F\u987A\u5E8F\u7684\u6570\u5B57\uFF1B1\u8868\u793A\u5347\u5E8F\uFF08\u9ED8\u8BA4\uFF09\uFF0C-1\u8868\u793A\u964D\u5E8F\u3002"
              },
              {
                "name": "by_col",
                "detail": "[\u53EF\u9009] - \u8868\u793A\u6240\u9700\u6392\u5E8F\u65B9\u5411\u7684\u903B\u8F91\u503C\uFF1B\u6309\u884C\u6392\u5E8F\u4E3AFALSE()\uFF08\u9ED8\u8BA4\uFF09\uFF0C\u6309\u5217\u6392\u5E8F\u4E3ATRUE()\u3002"
              }
            ]
          },
          "FILTER": {
            "d": "\u57FA\u4E8E\u4E00\u4E2A\u5E03\u5C14\uFF08\u771F/\u5047\uFF09\u6570\u7EC4\u8FC7\u6EE4\u4E00\u4E2A\u6570\u7EC4\u3002",
            "a": "\u57FA\u4E8E\u4E00\u4E2A\u5E03\u5C14\uFF08\u771F/\u5047\uFF09\u6570\u7EC4\u8FC7\u6EE4\u4E00\u4E2A\u6570\u7EC4\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u8981\u7B5B\u9009\u7684\u6570\u7EC4\u6216\u8303\u56F4\u3002"
              },
              {
                "name": "include",
                "detail": "\u5E03\u5C14\u6570\u7EC4\uFF0C\u5176\u9AD8\u5EA6\u6216\u5BBD\u5EA6\u4E0E\u6570\u7EC4\u76F8\u540C"
              },
              {
                "name": "if_empty",
                "detail": "[\u53EF\u9009] - \u5982\u679C\u5305\u542B\u6570\u7EC4\u4E2D\u7684\u6240\u6709\u503C\u90FD\u4E3A\u7A7A(filter\u4E0D\u8FD4\u56DE\u4EFB\u4F55\u503C)\uFF0C\u5219\u8FD4\u56DE\u7684\u503C\u3002"
              }
            ]
          },
          "UNIQUE": {
            "d": "\u8FD4\u56DE\u5217\u8868\u6216\u533A\u57DF\u4E2D\u7684\u552F\u4E00\u503C\u7684\u5217\u8868\u3002",
            "a": "\u8FD4\u56DE\u5217\u8868\u6216\u533A\u57DF\u4E2D\u7684\u552F\u4E00\u503C\u7684\u5217\u8868\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u4ECE\u5176\u8FD4\u56DE\u552F\u4E00\u503C\u7684\u6570\u7EC4\u6216\u533A\u57DF\u3002"
              },
              {
                "name": "by_col",
                "detail": "[\u53EF\u9009] - \u903B\u8F91\u503C\uFF0C\u6307\u793A\u5982\u4F55\u6BD4\u8F83\uFF1B\u6309\u884C = FALSE() \u6216\u7701\u7565\uFF1B\u6309\u5217 = TRUE()\u3002"
              },
              {
                "name": "occurs_once",
                "detail": "[\u53EF\u9009] - \u903B\u8F91\u503C\uFF0C\u4EC5\u8FD4\u56DE\u552F\u4E00\u503C\u4E2D\u51FA\u73B0\u4E00\u6B21 = TRUE()\uFF1B\u5305\u62EC\u6240\u6709\u552F\u4E00\u503C = FALSE() \u6216\u7701\u7565\u3002"
              }
            ]
          },
          "RANDARRAY": {
            "d": "\u8FD4\u56DE 0 \u5230 1 \u4E4B\u95F4\u7684\u968F\u673A\u6570\u5B57\u6570\u7EC4\u3002",
            "a": "\u8FD4\u56DE 0 \u5230 1 \u4E4B\u95F4\u7684\u968F\u673A\u6570\u5B57\u6570\u7EC4\u3002",
            "p": [
              {
                "name": "rows",
                "detail": "[\u53EF\u9009] - \u8981\u8FD4\u56DE\u7684\u884C\u6570\u3002"
              },
              {
                "name": "cols",
                "detail": "[\u53EF\u9009] - \u8981\u8FD4\u56DE\u7684\u5217\u6570\u3002"
              }
            ]
          },
          "SEQUENCE": {
            "d": "\u751F\u6210\u6570\u5B57\u5E8F\u5217\u7684\u5217\u8868\u3002",
            "a": "\u751F\u6210\u6570\u5B57\u5E8F\u5217\u7684\u5217\u8868\u3002",
            "p": [
              {
                "name": "rows",
                "detail": "\u8981\u8FD4\u56DE\u7684\u884C\u6570\u3002"
              },
              {
                "name": "cols",
                "detail": "[\u53EF\u9009] - \u8981\u8FD4\u56DE\u7684\u5217\u6570\u3002"
              },
              {
                "name": "start",
                "detail": "[\u53EF\u9009] - \u5E8F\u5217\u4E2D\u7684\u7B2C\u4E00\u4E2A\u6570\u5B57\u3002"
              },
              {
                "name": "step",
                "detail": "[\u53EF\u9009] - \u5E8F\u5217\u4E2D\u6BCF\u4E2A\u5E8F\u5217\u503C\u7684\u589E\u91CF\u3002"
              }
            ]
          },
          "EVALUATE": {
            "d": "\u5BF9\u4EE5\u6587\u5B57\u8868\u793A\u7684\u516C\u5F0F\u6216\u8005\u8868\u8FBE\u5F0F\u6C42\u503C\uFF0C\u5E76\u8FD4\u56DE\u7ED3\u679C\u3002",
            "a": "\u6839\u636E\u6587\u5B57\u516C\u5F0F\u6216\u8005\u8868\u8FBE\u5F0F\u6C42\u503C\u3002",
            "p": [
              {
                "name": "\u516C\u5F0F",
                "detail": "\u516C\u5F0F\u6216\u8868\u8FBE\u5F0F"
              }
            ]
          },
          "REMOTE": {
            "d": "Calls a function on a remote server",
            "a": "Calls a function on a remote back end server/API.",
            "p": [
              {
                "name": "remote_expression",
                "detail": "Formula"
              }
            ]
          }
        },
        toolbar: {
          undo: "\u64A4\u9500",
          redo: "\u91CD\u505A",
          paintFormat: "\u683C\u5F0F\u5237",
          currencyFormat: "\u8D27\u5E01\u683C\u5F0F",
          percentageFormat: "\u767E\u5206\u6BD4\u683C\u5F0F",
          numberDecrease: "\u51CF\u5C11\u5C0F\u6570\u4F4D\u6570",
          numberIncrease: "\u589E\u52A0\u5C0F\u6570\u4F4D\u6570",
          moreFormats: "\u66F4\u591A\u683C\u5F0F",
          font: "\u5B57\u4F53",
          fontSize: "\u5B57\u53F7\u5927\u5C0F",
          bold: "\u7C97\u4F53 (Ctrl+B)",
          italic: "\u659C\u4F53 (Ctrl+I)",
          strikethrough: "\u5220\u9664\u7EBF (Alt+Shift+5)",
          underline: "\u4E0B\u5212\u7EBF",
          textColor: "\u6587\u672C\u989C\u8272",
          chooseColor: "\u989C\u8272\u9009\u62E9",
          resetColor: "\u91CD\u7F6E\u989C\u8272",
          customColor: "\u81EA\u5B9A\u4E49",
          alternatingColors: "\u4EA4\u66FF\u989C\u8272",
          confirmColor: "\u786E\u5B9A\u989C\u8272",
          cancelColor: "\u53D6\u6D88",
          collapse: "\u6536\u8D77",
          fillColor: "\u5355\u5143\u683C\u989C\u8272",
          border: "\u8FB9\u6846",
          borderStyle: "\u8FB9\u6846\u7C7B\u578B",
          mergeCell: "\u5408\u5E76\u5355\u5143\u683C",
          chooseMergeType: "\u9009\u62E9\u5408\u5E76\u7C7B\u578B",
          horizontalAlign: "\u6C34\u5E73\u5BF9\u9F50",
          verticalAlign: "\u5782\u76F4\u5BF9\u9F50",
          alignment: "\u5BF9\u9F50\u65B9\u5F0F",
          textWrap: "\u6587\u672C\u6362\u884C",
          textWrapMode: "\u6362\u884C\u65B9\u5F0F",
          textRotate: "\u6587\u672C\u65CB\u8F6C",
          textRotateMode: "\u65CB\u8F6C\u65B9\u5F0F",
          freezeTopRow: "\u51BB\u7ED3\u7B2C\u4E00\u884C",
          sortAndFilter: "\u6392\u5E8F\u548C\u7B5B\u9009",
          findAndReplace: "\u67E5\u627E\u66FF\u6362",
          sum: "\u6C42\u548C",
          autoSum: "\u81EA\u52A8\u6C42\u548C",
          moreFunction: "\u66F4\u591A\u51FD\u6570",
          conditionalFormat: "\u6761\u4EF6\u683C\u5F0F",
          postil: "\u6279\u6CE8",
          pivotTable: "\u6570\u636E\u900F\u89C6\u8868",
          chart: "\u56FE\u8868",
          screenshot: "\u622A\u56FE",
          splitColumn: "\u5206\u5217",
          insertImage: "\u63D2\u5165\u56FE\u7247",
          insertLink: "\u63D2\u5165\u94FE\u63A5",
          dataVerification: "\u6570\u636E\u9A8C\u8BC1",
          protection: "\u4FDD\u62A4\u5DE5\u4F5C\u8868\u5185\u5BB9",
          clearText: "\u6E05\u9664\u989C\u8272\u9009\u62E9",
          noColorSelectedText: "\u6CA1\u6709\u989C\u8272\u88AB\u9009\u62E9",
          toolMore: "\u66F4\u591A",
          toolLess: "\u5C11\u4E8E",
          toolClose: "\u6536\u8D77",
          toolMoreTip: "\u66F4\u591A\u529F\u80FD",
          moreOptions: "\u66F4\u591A\u9009\u9879",
          cellFormat: "\u8BBE\u7F6E\u5355\u5143\u683C\u683C\u5F0F",
          print: "\u6253\u5370"
        },
        alternatingColors: {
          applyRange: "\u5E94\u7528\u8303\u56F4",
          selectRange: "\u9009\u62E9\u5E94\u7528\u8303\u56F4",
          header: "\u9875\u7709",
          footer: "\u9875\u811A",
          errorInfo: "\u4E0D\u80FD\u5BF9\u591A\u91CD\u9009\u62E9\u533A\u57DF\u6267\u884C\u6B64\u64CD\u4F5C\uFF0C\u8BF7\u9009\u62E9\u5355\u4E2A\u533A\u57DF\uFF0C\u7136\u540E\u518D\u8BD5",
          textTitle: "\u683C\u5F0F\u6837\u5F0F",
          custom: "\u81EA\u5B9A\u4E49",
          close: "\u5173\u95ED",
          selectionTextColor: "\u9009\u62E9\u6587\u672C\u989C\u8272",
          selectionCellColor: "\u9009\u62E9\u5355\u5143\u683C\u989C\u8272",
          removeColor: "\u79FB\u9664\u4EA4\u66FF\u989C\u8272",
          colorShow: "\u989C\u8272",
          currentColor: "\u5F53\u524D\u989C\u8272",
          tipSelectRange: "\u8BF7\u9009\u62E9\u4EA4\u66FF\u989C\u8272\u5E94\u7528\u8303\u56F4",
          errorNoRange: "\u60A8\u9009\u62E9\u7684\u5E94\u7528\u8303\u56F4\u4E0D\u662F\u9009\u533A\uFF01",
          errorExistColors: "\u60A8\u9009\u62E9\u7684\u5E94\u7528\u8303\u56F4\u5DF2\u5B58\u5728\u4EA4\u66FF\u989C\u8272\u4E14\u4E0D\u5C5E\u4E8E\u4F60\u8981\u7F16\u8F91\u7684\u5E94\u7528\u8303\u56F4\uFF01"
        },
        button: {
          confirm: "\u786E\u5B9A",
          cancel: "\u53D6\u6D88",
          close: "\u5173\u95ED",
          update: "Update",
          delete: "Delete",
          insert: "\u65B0\u5EFA",
          prevPage: "\u4E0A\u4E00\u9875",
          nextPage: "\u4E0B\u4E00\u9875",
          total: "\u603B\u5171\uFF1A"
        },
        paint: {
          start: "\u683C\u5F0F\u5237\u5F00\u542F",
          end: "ESC\u952E\u9000\u51FA",
          tipSelectRange: "\u8BF7\u9009\u62E9\u9700\u8981\u590D\u5236\u683C\u5F0F\u7684\u533A\u57DF",
          tipNotMulti: "\u65E0\u6CD5\u5BF9\u591A\u91CD\u9009\u62E9\u533A\u57DF\u6267\u884C\u6B64\u64CD\u4F5C"
        },
        format: {
          moreCurrency: "\u66F4\u591A\u8D27\u5E01\u683C\u5F0F",
          moreDateTime: "\u66F4\u591A\u65E5\u671F\u4E0E\u65F6\u95F4\u683C\u5F0F",
          moreNumber: "\u66F4\u591A\u6570\u5B57\u683C\u5F0F",
          titleCurrency: "\u8D27\u5E01\u683C\u5F0F",
          decimalPlaces: "\u5C0F\u6570\u4F4D\u6570",
          titleDateTime: "\u65E5\u671F\u4E0E\u65F6\u95F4\u683C\u5F0F",
          titleNumber: "\u6570\u5B57\u683C\u5F0F"
        },
        info: {
          detailUpdate: "\u65B0\u6253\u5F00",
          detailSave: "\u5DF2\u6062\u590D\u672C\u5730\u7F13\u5B58",
          row: "\u884C",
          column: "\u5217",
          loading: "\u6E32\u67D3\u4E2D\xB7\xB7\xB7",
          copy: "\u526F\u672C",
          return: "\u8FD4\u56DE",
          rename: "\u91CD\u547D\u540D",
          tips: "\u8868\u683C\u91CD\u547D\u540D",
          noName: "\u65E0\u6807\u9898\u7684\u7535\u5B50\u8868\u683C",
          wait: "\u5F85\u66F4\u65B0",
          add: "\u6DFB\u52A0",
          addLast: "\u5728\u5E95\u90E8\u6DFB\u52A0",
          backTop: "\u56DE\u5230\u9876\u90E8",
          pageInfo: "\u5171${total}\u6761\uFF0C${totalPage}\u9875\uFF0C\u5F53\u524D\u5DF2\u663E\u793A${currentPage}\u9875",
          nextPage: "\u4E0B\u4E00\u9875",
          tipInputNumber: "\u8BF7\u8F93\u5165\u6570\u5B57",
          tipInputNumberLimit: "\u589E\u52A0\u8303\u56F4\u9650\u5236\u57281-100",
          tipRowHeightLimit: "\u884C\u9AD8\u5FC5\u987B\u57280 ~ 545\u4E4B\u95F4",
          tipColumnWidthLimit: "\u5217\u5BBD\u5FC5\u987B\u57280 ~ 2038\u4E4B\u95F4",
          pageInfoFull: "\u5171${total}\u6761\uFF0C${totalPage}\u9875\uFF0C\u5DF2\u663E\u793A\u5168\u90E8\u6570\u636E"
        },
        currencyDetail: {
          RMB: "\u4EBA\u6C11\u5E01",
          USdollar: "\u7F8E\u5143",
          EUR: "\u6B27\u5143",
          GBP: "\u82F1\u9551",
          HK: "\u6E2F\u5143",
          JPY: "\u65E5\u5143",
          AlbanianLek: "\u963F\u5C14\u5DF4\u5C3C\u4E9A\u5217\u514B",
          AlgerianDinar: "\u963F\u5C14\u53CA\u5229\u4E9A\u7B2C\u7EB3\u5C14",
          Afghani: "\u963F\u5BCC\u6C57\u5C3C",
          ArgentinePeso: "\u963F\u6839\u5EF7\u6BD4\u7D22",
          UnitedArabEmiratesDirham: "\u963F\u62C9\u4F2F\u8054\u5408\u914B\u957F\u56FD\u8FEA\u62C9\u59C6",
          ArubanFlorin: "\u963F\u9C81\u5DF4\u5F17\u7F57\u6797",
          OmaniRial: "\u963F\u66FC\u91CC\u4E9A\u5C14",
          Azerbaijanimanat: "\u963F\u585E\u62DC\u7586\u9A6C\u7EB3\u7279",
          EgyptianPound: "\u57C3\u53CA\u9551",
          EthiopianBirr: "\u57C3\u585E\u4FC4\u6BD4\u4E9A\u6BD4\u5C14",
          AngolaKwanza: "\u5B89\u54E5\u62C9\u5BBD\u624E",
          AustralianDollar: "\u6FB3\u5927\u5229\u4E9A\u5143",
          Patacas: "\u6FB3\u95E8\u5143",
          BarbadosDollar: "\u5DF4\u5DF4\u591A\u65AF\u5143",
          PapuaNewGuineaKina: "\u5DF4\u5E03\u4E9A\u65B0\u51E0\u5185\u4E9A\u57FA\u90A3",
          BahamianDollar: "\u5DF4\u54C8\u9A6C\u5143",
          PakistanRupee: "\u5DF4\u57FA\u65AF\u5766\u5362\u6BD4",
          ParaguayanGuarani: "\u5DF4\u62C9\u572D\u74DC\u62C9\u5C3C",
          BahrainiDinar: "\u5DF4\u6797\u7B2C\u7EB3\u5C14",
          PanamanianBalboa: "\u5DF4\u62FF\u9A6C\u5DF4\u6CE2\u4E9A",
          Brazilianreal: "\u5DF4\u897F\u91CC\u4E9A\u4F0A",
          Belarusianruble: "\u767D\u4FC4\u7F57\u65AF\u5362\u5E03",
          BermudianDollar: "\u767E\u6155\u5927\u5143",
          BulgarianLev: "\u4FDD\u52A0\u5229\u4E9A\u5217\u5F17",
          IcelandKrona: "\u51B0\u5C9B\u514B\u6717",
          BosniaHerzegovinaConvertibleMark: "\u6CE2\u9ED1\u53EF\u5151\u6362\u9A6C\u514B",
          PolishZloty: "\u6CE2\u5170\u5179\u7F57\u63D0",
          Boliviano: "\u73BB\u5229\u7EF4\u4E9A\u8BFA",
          BelizeDollar: "\u4F2F\u5229\u5179\u5143",
          BotswanaPula: "\u535A\u8328\u74E6\u7EB3\u666E\u62C9",
          NotDannuzhamu: "\u4E0D\u4E39\u52AA\u624E\u59C6",
          BurundiFranc: "\u5E03\u9686\u8FEA\u6CD5\u90CE",
          NorthKoreanWon: "\u671D\u9C9C\u5706",
          DanishKrone: "\u4E39\u9EA6\u514B\u6717",
          EastCaribbeanDollar: "\u4E1C\u52A0\u52D2\u6BD4\u5143",
          DominicaPeso: "\u591A\u7C73\u5C3C\u52A0\u6BD4\u7D22",
          RussianRuble: "\u4FC4\u56FD\u5362\u5E03",
          EritreanNakfa: "\u5384\u7ACB\u7279\u91CC\u4E9A\u7EB3\u514B\u6CD5",
          CFAfranc: "\u975E\u6D32\u91D1\u878D\u5171\u540C\u4F53\u6CD5\u90CE",
          PhilippinePeso: "\u83F2\u5F8B\u5BBE\u6BD4\u7D22",
          FijiDollar: "\u6590\u6D4E\u5143",
          CapeVerdeEscudo: "\u4F5B\u5F97\u89D2\u57C3\u65AF\u5E93\u591A",
          FalklandIslandsPound: "\u798F\u514B\u5170\u7FA4\u5C9B\u9551",
          GambianDalasi: "\u5188\u6BD4\u4E9A\u8FBE\u62C9\u897F",
          Congolesefranc: "\u521A\u679C\u6CD5\u90CE",
          ColombianPeso: "\u54E5\u4F26\u6BD4\u4E9A\u6BD4\u7D22",
          CostaRicanColon: "\u54E5\u65AF\u8FBE\u9ECE\u52A0\u79D1\u6717",
          CubanPeso: "\u53E4\u5DF4\u6BD4\u7D22",
          Cubanconvertiblepeso: "\u53E4\u5DF4\u53EF\u5151\u6362\u6BD4\u7D22",
          GuyanaDollar: "\u572D\u4E9A\u90A3\u5143",
          KazakhstanTenge: "\u54C8\u8428\u514B\u65AF\u5766\u575A\u6208",
          Haitiangourde: "\u6D77\u5730\u53E4\u5FB7",
          won: "\u97E9\u5143",
          NetherlandsAntillesGuilder: "\u8377\u5C5E\u5B89\u7684\u5217\u65AF\u76FE",
          Honduraslempiras: "\u6D2A\u90FD\u62C9\u65AF\u62C9\u4F26\u76AE\u62C9",
          DjiboutiFranc: "\u5409\u5E03\u63D0\u6CD5\u90CE",
          KyrgyzstanSom: "\u5409\u5C14\u5409\u65AF\u65AF\u5766\u7D22\u59C6",
          GuineaFranc: "\u51E0\u5185\u4E9A\u6CD5\u90CE",
          CanadianDollar: "\u52A0\u62FF\u5927\u5143",
          GhanaianCedi: "\u52A0\u7EB3\u585E\u5730",
          Cambodianriel: "\u67EC\u57D4\u5BE8\u745E\u5C14",
          CzechKoruna: "\u6377\u514B\u514B\u6717",
          ZimbabweDollar: "\u6D25\u5DF4\u5E03\u97E6\u5143",
          QatariRiyal: "\u5361\u5854\u5C14\u91CC\u4E9A\u5C14",
          CaymanIslandsDollar: "\u5F00\u66FC\u7FA4\u5C9B\u5143",
          Comorianfranc: "\u79D1\u6469\u7F57\u6CD5\u90CE",
          KuwaitiDinar: "\u79D1\u5A01\u7279\u7B2C\u7EB3\u5C14",
          CroatianKuna: "\u514B\u7F57\u5730\u4E9A\u5E93\u7EB3",
          KenyanShilling: "\u80AF\u5C3C\u4E9A\u5148\u4EE4",
          LesothoLoti: "\u83B1\u7D22\u6258\u6D1B\u8482",
          LaoKip: "\u8001\u631D\u57FA\u666E",
          LebanesePound: "\u9ECE\u5DF4\u5AE9\u9551",
          Lithuanianlitas: "\u7ACB\u9676\u5B9B\u7ACB\u7279",
          LibyanDinar: "\u5229\u6BD4\u4E9A\u7B2C\u7EB3\u5C14",
          LiberianDollar: "\u5229\u6BD4\u4E9A\u5143",
          RwandaFranc: "\u5362\u65FA\u8FBE\u6CD5\u90CE",
          RomanianLeu: "\u7F57\u9A6C\u5C3C\u4E9A\u5217\u4F0A",
          MalagasyAriary: "\u9A6C\u8FBE\u52A0\u65AF\u52A0\u963F\u91CC\u4E9A\u91CC",
          MaldivianRufiyaa: "\u9A6C\u5C14\u4EE3\u592B\u62C9\u83F2\u4E9A",
          MalawiKwacha: "\u9A6C\u62C9\u7EF4\u514B\u74E6\u67E5",
          MalaysianRinggit: "\u9A6C\u6765\u897F\u4E9A\u6797\u5409\u7279",
          MacedoniawearingDinar: "\u9A6C\u5176\u987F\u6234\u7B2C\u7EB3\u5C14",
          MauritiusRupee: "\u6BDB\u91CC\u6C42\u65AF\u5362\u6BD4",
          MauritanianOuguiya: "\u6BDB\u91CC\u5854\u5C3C\u4E9A\u4E4C\u5409\u4E9A",
          MongolianTugrik: "\u8499\u53E4\u56FE\u683C\u91CC\u514B",
          BangladeshiTaka: "\u5B5F\u52A0\u62C9\u5854\u5361",
          PeruvianNuevoSol: "\u79D8\u9C81\u65B0\u7D22\u5C14",
          MyanmarKyat: "\u7F05\u7538\u5F00\u4E9A\u7279",
          MoldovanLeu: "\u6469\u5C14\u591A\u74E6\u5217\u4F0A",
          MoroccanDirham: "\u6469\u6D1B\u54E5\u8FEA\u62C9\u59C6",
          MozambiqueMetical: "\u83AB\u6851\u6BD4\u514B\u6885\u8482\u5361\u5C14",
          MexicanPeso: "\u58A8\u897F\u54E5\u6BD4\u7D22",
          NamibianDollar: "\u7EB3\u7C73\u6BD4\u4E9A\u5143",
          SouthAfricanRand: "\u5357\u975E\u5170\u7279",
          SouthSudanesePound: "\u5357\u82CF\u4E39\u9551",
          NicaraguaCordoba: "\u5C3C\u52A0\u62C9\u74DC\u79D1\u591A\u5DF4",
          NepaleseRupee: "\u5C3C\u6CCA\u5C14\u5362\u6BD4",
          NigerianNaira: "\u5C3C\u65E5\u5229\u4E9A\u5948\u62C9",
          NorwegianKrone: "\u632A\u5A01\u514B\u6717",
          GeorgianLari: "\u4E54\u6CBB\u4E9A\u62C9\u745E",
          RMBOffshore: "\u4EBA\u6C11\u5E01\uFF08\u79BB\u5CB8\uFF09",
          SwedishKrona: "\u745E\u5178\u514B\u6717",
          SwissFranc: "\u745E\u58EB\u6CD5\u90CE",
          SerbianDinar: "\u585E\u5C14\u7EF4\u4E9A\u7B2C\u7EB3\u5C14",
          SierraLeone: "\u585E\u62C9\u5229\u6602\u5229\u6602",
          SeychellesRupee: "\u585E\u820C\u5C14\u5362\u6BD4",
          SaudiRiyal: "\u6C99\u7279\u91CC\u4E9A\u5C14",
          SaoTomeDobra: "\u5723\u591A\u7F8E\u591A\u5E03\u62C9",
          SaintHelenapound: "\u5723\u8D6B\u52D2\u62FF\u7FA4\u5C9B\u78C5",
          SriLankaRupee: "\u65AF\u91CC\u5170\u5361\u5362\u6BD4",
          SwazilandLilangeni: "\u65AF\u5A01\u58EB\u5170\u91CC\u5170\u5409\u5C3C",
          SudanesePound: "\u82CF\u4E39\u9551",
          Surinamesedollar: "\u82CF\u91CC\u5357\u5143",
          SolomonIslandsDollar: "\u6240\u7F57\u95E8\u7FA4\u5C9B\u5143",
          SomaliShilling: "\u7D22\u9A6C\u91CC\u5148\u4EE4",
          TajikistanSomoni: "\u5854\u5409\u514B\u65AF\u5766\u7D22\u83AB\u5C3C",
          PacificFranc: "\u592A\u5E73\u6D0B\u6CD5\u90CE",
          ThaiBaht: "\u6CF0\u56FD\u94E2",
          TanzanianShilling: "\u5766\u6851\u5C3C\u4E9A\u5148\u4EE4",
          TonganPaanga: "\u6C64\u52A0\u6F58\u52A0",
          TrinidadandTobagoDollar: "\u7279\u7ACB\u5C3C\u8FBE\u548C\u591A\u5DF4\u54E5\u5143",
          TunisianDinar: "\u7A81\u5C3C\u65AF\u7B2C\u7EB3\u5C14",
          TurkishLira: "\u571F\u8033\u5176\u91CC\u62C9",
          VanuatuVatu: "\u74E6\u52AA\u963F\u56FE\u74E6\u56FE",
          GuatemalanQuetzal: "\u5371\u5730\u9A6C\u62C9\u683C\u67E5\u5C14",
          CommissionBolivar: "\u59D4\u5185\u745E\u62C9\u535A\u5229\u74E6",
          BruneiDollar: "\u6587\u83B1\u5143",
          UgandanShilling: "\u4E4C\u5E72\u8FBE\u5148\u4EE4",
          UkrainianHryvnia: "\u4E4C\u514B\u5170\u683C\u91CC\u592B\u5C3C\u4E9A",
          UruguayanPeso: "\u4E4C\u62C9\u572D\u6BD4\u7D22",
          Uzbekistansom: "\u4E4C\u5179\u522B\u514B\u65AF\u5766\u82CF\u59C6",
          WesternSamoaTala: "\u897F\u8428\u6469\u4E9A\u5854\u62C9",
          SingaporeDollar: "\u65B0\u52A0\u5761\u5143",
          NT: "\u65B0\u53F0\u5E01",
          NewZealandDollar: "\u65B0\u897F\u5170\u5143",
          HungarianForint: "\u5308\u7259\u5229\u798F\u6797",
          SyrianPound: "\u53D9\u5229\u4E9A\u9551",
          JamaicanDollar: "\u7259\u4E70\u52A0\u5143",
          ArmenianDram: "\u4E9A\u7F8E\u5C3C\u4E9A\u5FB7\u62C9\u59C6",
          YemeniRial: "\u4E5F\u95E8\u91CC\u4E9A\u5C14",
          IraqiDinar: "\u4F0A\u62C9\u514B\u7B2C\u7EB3\u5C14",
          IranianRial: "\u4F0A\u6717\u91CC\u4E9A\u5C14",
          NewIsraeliShekel: "\u4EE5\u8272\u5217\u65B0\u8C22\u514B\u5C14",
          IndianRupee: "\u5370\u5EA6\u5362\u6BD4",
          IndonesianRupiah: "\u5370\u5EA6\u5C3C\u897F\u4E9A\u5362\u6BD4",
          JordanianDinar: "\u7EA6\u65E6\u7B2C\u7EB3\u5C14",
          VND: "\u8D8A\u5357\u76FE",
          ZambianKwacha: "\u8D5E\u6BD4\u4E9A\u514B\u74E6\u67E5",
          GibraltarPound: "\u76F4\u5E03\u7F57\u9640\u9551",
          ChileanPeso: "\u667A\u5229\u6BD4\u7D22",
          CFAFrancBEAC: "\u4E2D\u975E\u91D1\u878D\u5408\u4F5C\u6CD5\u90CE"
        },
        defaultFmt: [
          {"text": "\u81EA\u52A8", "value": "General", "example": ""},
          {"text": "\u7EAF\u6587\u672C", "value": "@", "example": ""},
          {"text": "", "value": "split", "example": ""},
          {"text": "\u6570\u5B57", "value": "##0.00", "example": "1000.12"},
          {"text": "\u767E\u5206\u6BD4", "value": "#0.00%", "example": "12.21%"},
          {"text": "\u79D1\u5B66\u8BA1\u6570", "value": "0.00E+00", "example": "1.01E+5"},
          {"text": "", "value": "split", "example": ""},
          {"text": "\u4F1A\u8BA1", "value": "\xA5(0.00)", "example": "\xA5(1200.09)"},
          {"text": "\u4E07\u5143", "value": "w", "example": "1\u4EBF2000\u4E072500"},
          {"text": "\u8D27\u5E01", "value": "\xA50.00", "example": "\xA51200.09"},
          {"text": "\u4E07\u51432\u4F4D\u5C0F\u6570", "value": "w0.00", "example": "2\u4E072500.55"},
          {"text": "", "value": "split", "example": ""},
          {"text": "\u65E5\u671F", "value": "yyyy-MM-dd", "example": "2017-11-29"},
          {"text": "\u65F6\u95F4", "value": "hh:mm AM/PM", "example": "3:00 PM"},
          {"text": "\u65F6\u95F424H", "value": "hh:mm", "example": "15:00"},
          {"text": "\u65E5\u671F\u65F6\u95F4", "value": "yyyy-MM-dd hh:mm AM/PM", "example": "2017-11-29 3:00 PM"},
          {"text": "\u65E5\u671F\u65F6\u95F424H", "value": "yyyy-MM-dd hh:mm", "example": "2017-11-29 15:00"},
          {"text": "", "value": "split", "example": ""},
          {"text": "\u81EA\u5B9A\u4E49\u683C\u5F0F", "value": "fmtOtherSelf", "example": "more"}
        ],
        dateFmtList: [
          {
            "name": "1930-08-05",
            "value": "yyyy-MM-dd"
          },
          {
            "name": "1930/8/5",
            "value": "yyyy/MM/dd"
          },
          {
            "name": "1930\u5E748\u67085\u65E5",
            "value": 'yyyy"\u5E74"M"\u6708"d"\u65E5"'
          },
          {
            "name": "08-05",
            "value": "MM-dd"
          },
          {
            "name": "8-5",
            "value": "M-d"
          },
          {
            "name": "8\u67085\u65E5",
            "value": 'M"\u6708"d"\u65E5"'
          },
          {
            "name": "13:30:30",
            "value": "h:mm:ss"
          },
          {
            "name": "13:30",
            "value": "h:mm"
          },
          {
            "name": "\u4E0B\u534801:30",
            "value": "\u4E0A\u5348/\u4E0B\u5348 hh:mm"
          },
          {
            "name": "\u4E0B\u53481:30",
            "value": "\u4E0A\u5348/\u4E0B\u5348 h:mm"
          },
          {
            "name": "\u4E0B\u53481:30:30",
            "value": "\u4E0A\u5348/\u4E0B\u5348 h:mm:ss"
          },
          {
            "name": "08-05 \u4E0B\u534801:30",
            "value": "MM-dd \u4E0A\u5348/\u4E0B\u5348 hh:mm"
          }
        ],
        fontFamily: {
          MicrosoftYaHei: "Microsoft YaHei"
        },
        fontarray: ["Times New Roman", "Arial", "Tahoma", "Verdana", "\u5FAE\u8F6F\u96C5\u9ED1", "\u5B8B\u4F53", "\u9ED1\u4F53", "\u6977\u4F53", "\u4EFF\u5B8B", "\u65B0\u5B8B\u4F53", "\u534E\u6587\u65B0\u9B4F", "\u534E\u6587\u884C\u6977", "\u534E\u6587\u96B6\u4E66"],
        fontjson: {"times new roman": 0, "arial": 1, "tahoma": 2, "verdana": 3, "\u5FAE\u8F6F\u96C5\u9ED1": 4, "microsoft yahei": 4, "\u5B8B\u4F53": 5, "simsun": 5, "\u9ED1\u4F53": 6, "simhei": 6, "\u6977\u4F53": 7, "kaiti": 7, "\u4EFF\u5B8B": 8, "fangsong": 8, "\u65B0\u5B8B\u4F53": 9, "nsimsun": 9, "\u534E\u6587\u65B0\u9B4F": 10, "stxinwei": 10, "\u534E\u6587\u884C\u6977": 11, "stxingkai": 11, "\u534E\u6587\u96B6\u4E66": 12, "stliti": 12},
        border: {
          borderTop: "\u4E0A\u6846\u7EBF",
          borderBottom: "\u4E0B\u6846\u7EBF",
          borderLeft: "\u5DE6\u6846\u7EBF",
          borderRight: "\u53F3\u6846\u7EBF",
          borderNone: "\u65E0",
          borderAll: "\u6240\u6709",
          borderOutside: "\u5916\u4FA7",
          borderInside: "\u5185\u4FA7",
          borderHorizontal: "\u5185\u4FA7\u6A2A\u7EBF",
          borderVertical: "\u5185\u4FA7\u7AD6\u7EBF",
          borderColor: "\u8FB9\u6846\u989C\u8272",
          borderSize: "\u8FB9\u6846\u7C97\u7EC6"
        },
        merge: {
          mergeAll: "\u5168\u90E8\u5408\u5E76",
          mergeV: "\u5782\u76F4\u5408\u5E76",
          mergeH: "\u6C34\u5E73\u5408\u5E76",
          mergeCancel: "\u53D6\u6D88\u5408\u5E76",
          overlappingError: "\u4E0D\u80FD\u5408\u5E76\u91CD\u53E0\u533A\u57DF",
          partiallyError: "\u65E0\u6CD5\u5BF9\u90E8\u5206\u5408\u5E76\u5355\u5143\u683C\u6267\u884C\u6B64\u64CD\u4F5C"
        },
        align: {
          left: "\u5DE6\u5BF9\u9F50",
          center: "\u4E2D\u95F4\u5BF9\u9F50",
          right: "\u53F3\u5BF9\u9F50",
          top: "\u9876\u90E8\u5BF9\u9F50",
          middle: "\u5C45\u4E2D\u5BF9\u9F50",
          bottom: "\u5E95\u90E8\u5BF9\u9F50"
        },
        textWrap: {
          "overflow": "\u6EA2\u51FA",
          "wrap": "\u81EA\u52A8\u6362\u884C",
          "clip": "\u622A\u65AD"
        },
        rotation: {
          "none": "\u65E0\u65CB\u8F6C",
          "angleup": "\u5411\u4E0A\u503E\u659C",
          "angledown": "\u5411\u4E0B\u503E\u659C",
          "vertical": "\u7AD6\u6392\u6587\u5B57",
          "rotationUp": "\u5411\u4E0A90\xB0",
          "rotationDown": "\u5411\u4E0B90\xB0"
        },
        freezen: {
          default: "\u51BB\u7ED3\u7B2C\u4E00\u884C",
          freezenRow: "\u51BB\u7ED3\u7B2C\u4E00\u884C",
          freezenColumn: "\u51BB\u7ED3\u7B2CA\u5217",
          freezenRC: "\u51BB\u7ED3\u7B2C\u4E00\u884C\u7B2CA\u5217",
          freezenRowRange: "\u51BB\u7ED3\u884C\u5230\u9009\u533A",
          freezenColumnRange: "\u51BB\u7ED3\u5217\u5230\u9009\u533A",
          freezenRCRange: "\u51BB\u7ED3\u884C\u5217\u5230\u9009\u533A",
          freezenCancel: "\u53D6\u6D88\u51BB\u7ED3",
          noSeletionError: "\u6CA1\u6709\u9009\u533A",
          rangeRCOverErrorTitle: "\u51BB\u7ED3\u63D0\u9192",
          rangeRCOverError: "\u51BB\u7ED3\u7A97\u683C\u8D85\u8FC7\u53EF\u89C1\u8303\u56F4\uFF0C\u4F1A\u5BFC\u81F4\u65E0\u6CD5\u6B63\u5E38\u64CD\u4F5C\uFF0C\u8BF7\u91CD\u65B0\u8BBE\u7F6E\u51BB\u7ED3\u533A\u57DF\u3002"
        },
        sort: {
          "asc": "\u5347\u5E8F",
          "desc": "\u964D\u5E8F",
          "custom": "\u81EA\u5B9A\u4E49\u6392\u5E8F",
          "hasTitle": "\u6570\u636E\u5177\u6709\u6807\u9898\u884C",
          "sortBy": "\u6392\u5E8F\u4F9D\u636E",
          "addOthers": "\u6DFB\u52A0\u5176\u4ED6\u6392\u5E8F\u5217",
          "close": "\u5173\u95ED",
          "confirm": "\u6392\u5E8F",
          "columnOperation": "\u5217",
          "secondaryTitle": "\u6B21\u8981\u6392\u5E8F",
          "sortTitle": "\u6392\u5E8F\u8303\u56F4",
          "sortRangeTitle": "\u6392\u5E8F\u8303\u56F4\u4ECE",
          "sortRangeTitleTo": "\u5230",
          "noRangeError": "\u4E0D\u80FD\u5BF9\u591A\u91CD\u9009\u62E9\u533A\u57DF\u6267\u884C\u6B64\u64CD\u4F5C\uFF0C\u8BF7\u9009\u62E9\u5355\u4E2A\u533A\u57DF\uFF0C\u7136\u540E\u518D\u8BD5",
          "mergeError": "\u9009\u533A\u6709\u5408\u5E76\u5355\u5143\u683C\uFF0C\u65E0\u6CD5\u6267\u884C\u6B64\u64CD\u4F5C\uFF01",
          "columnSortMergeError": "\u5217\u6392\u5E8F\u4F1A\u6269\u5C55\u81F3\u6574\u4E2A\u8868\u683C\u9009\u533A\uFF0C\u9009\u533A\u6709\u5408\u5E76\u5355\u5143\u683C\uFF0C\u65E0\u6CD5\u6267\u884C\u6B64\u64CD\u4F5C\uFF0C\u8BF7\u9009\u62E9\u529F\u80FD\u680F\u6392\u5E8F\u529F\u80FD\uFF01"
        },
        filter: {
          "filter": "\u7B5B\u9009",
          "clearFilter": "\u6E05\u9664\u7B5B\u9009",
          sortByAsc: "\u4EE5A-Z\u5347\u5E8F\u6392\u5217",
          sortByDesc: "\u4EE5Z-A\u964D\u5E8F\u6392\u5217",
          filterByColor: "\u6309\u989C\u8272\u7B5B\u9009",
          filterByCondition: "\u6309\u6761\u4EF6\u8FC7\u6EE4",
          filterByValues: "\u6309\u503C\u8FC7\u6EE4",
          filiterInputNone: "\u65E0",
          filiterInputTip: "\u8F93\u5165\u7B5B\u9009\u503C",
          filiterRangeStart: "\u4ECE",
          filiterRangeStartTip: "\u8303\u56F4\u5F00\u59CB",
          filiterRangeEnd: "\u5230",
          filiterRangeEndTip: "\u8303\u56F4\u7ED3\u675F",
          filterValueByAllBtn: "\u5168\u9009",
          filterValueByClearBtn: "\u6E05\u9664",
          filterValueByInverseBtn: "\u53CD\u9009",
          filterValueByTip: "\u6309\u7167\u503C\u8FDB\u884C\u7B5B\u9009",
          filterConform: "\u786E \u8BA4",
          filterCancel: "\u53D6 \u6D88",
          conditionNone: "\u65E0",
          conditionCellIsNull: "\u5355\u5143\u683C\u4E3A\u7A7A",
          conditionCellNotNull: "\u5355\u5143\u683C\u6709\u6570\u636E",
          conditionCellTextContain: "\u6587\u672C\u5305\u542B",
          conditionCellTextNotContain: "\u6587\u672C\u4E0D\u5305\u542B",
          conditionCellTextStart: "\u6587\u672C\u5F00\u5934\u4E3A",
          conditionCellTextEnd: "\u6587\u672C\u7ED3\u5C3E\u4E3A",
          conditionCellTextEqual: "\u6587\u672C\u7B49\u4E8E",
          conditionCellDateEqual: "\u65E5\u671F\u7B49\u4E8E",
          conditionCellDateBefore: "\u65E5\u671F\u65E9\u4E8E",
          conditionCellDateAfter: "\u65E5\u671F\u665A\u4E8E",
          conditionCellGreater: "\u5927\u4E8E",
          conditionCellGreaterEqual: "\u5927\u4E8E\u7B49\u4E8E",
          conditionCellLess: "\u5C0F\u4E8E",
          conditionCellLessEqual: "\u5C0F\u4E8E\u7B49\u4E8E",
          conditionCellEqual: "\u7B49\u4E8E",
          conditionCellNotEqual: "\u4E0D\u7B49\u4E8E",
          conditionCellBetween: "\u4ECB\u4E8E",
          conditionCellNotBetween: "\u4E0D\u5728\u5176\u4E2D",
          filiterMoreDataTip: "\u6570\u636E\u91CF\u5927\uFF01\u8BF7\u7A0D\u540E",
          filiterMonthText: "\u6708",
          filiterYearText: "\u5E74",
          filiterByColorTip: "\u6309\u5355\u5143\u683C\u989C\u8272\u7B5B\u9009",
          filiterByTextColorTip: "\u6309\u5355\u5143\u683C\u5B57\u4F53\u989C\u8272\u7B5B\u9009",
          filterContainerOneColorTip: "\u672C\u5217\u4EC5\u5305\u542B\u4E00\u79CD\u989C\u8272",
          filterDateFormatTip: "\u65E5\u671F\u683C\u5F0F",
          valueBlank: "(\u7A7A\u767D)",
          mergeError: "\u7B5B\u9009\u9009\u533A\u6709\u5408\u5E76\u5355\u5143\u683C\uFF0C\u65E0\u6CD5\u6267\u884C\u6B64\u64CD\u4F5C\uFF01"
        },
        rightclick: {
          copy: "\u590D\u5236",
          copyAs: "\u590D\u5236\u4E3A",
          paste: "\u7C98\u8D34",
          insert: "\u63D2\u5165",
          delete: "\u5220\u9664",
          deleteCell: "\u5220\u9664\u5355\u5143\u683C",
          deleteSelected: "\u5220\u9664\u9009\u4E2D",
          hide: "\u9690\u85CF",
          hideSelected: "\u9690\u85CF\u9009\u4E2D",
          showHide: "\u663E\u793A\u9690\u85CF",
          to: "\u5411",
          left: "\u5DE6",
          right: "\u53F3",
          top: "\u4E0A",
          bottom: "\u4E0B",
          moveLeft: "\u5DE6\u79FB",
          moveUp: "\u4E0A\u79FB",
          add: "\u589E\u52A0",
          row: "\u884C",
          column: "\u5217",
          width: "\u5BBD",
          height: "\u9AD8",
          number: "\u6570\u5B57",
          confirm: "\u786E\u8BA4",
          orderAZ: "A-Z\u987A\u5E8F\u6392\u5217",
          orderZA: "Z-A\u964D\u5E8F\u6392\u5217",
          clearContent: "\u6E05\u9664\u5185\u5BB9",
          matrix: "\u77E9\u9635\u64CD\u4F5C\u9009\u533A",
          sortSelection: "\u6392\u5E8F\u9009\u533A",
          filterSelection: "\u7B5B\u9009\u9009\u533A",
          chartGeneration: "\u56FE\u8868\u751F\u6210",
          firstLineTitle: "\u9996\u884C\u4E3A\u6807\u9898",
          untitled: "\u65E0\u6807\u9898",
          array1: "\u4E00\u7EF4\u6570\u7EC4",
          array2: "\u4E8C\u7EF4\u6570\u7EC4",
          array3: "\u591A\u7EF4\u6570\u7EC4",
          diagonal: "\u5BF9\u89D2\u7EBF",
          antiDiagonal: "\u53CD\u5BF9\u89D2\u7EBF",
          diagonalOffset: "\u5BF9\u89D2\u504F\u79FB",
          offset: "\u504F\u79FB\u91CF",
          boolean: "\u5E03\u5C14\u503C",
          flip: "\u7FFB\u8F6C",
          upAndDown: "\u4E0A\u4E0B",
          leftAndRight: "\u5DE6\u53F3",
          clockwise: "\u987A\u65F6\u9488",
          counterclockwise: "\u9006\u65F6\u9488",
          transpose: "\u8F6C\u7F6E",
          matrixCalculation: "\u77E9\u9635\u8BA1\u7B97",
          plus: "\u52A0",
          minus: "\u51CF",
          multiply: "\u4E58",
          divided: "\u9664",
          power: "\u6B21\u65B9",
          root: "\u6B21\u65B9\u6839",
          log: "log",
          delete0: "\u5220\u9664\u4E24\u7AEF0\u503C",
          removeDuplicate: "\u5220\u9664\u91CD\u590D\u503C",
          byRow: "\u6309\u884C",
          byCol: "\u6309\u5217",
          generateNewMatrix: "\u751F\u6210\u65B0\u77E9\u9635"
        },
        comment: {
          "insert": "\u65B0\u5EFA\u6279\u6CE8",
          "edit": "\u7F16\u8F91\u6279\u6CE8",
          "delete": "\u5220\u9664",
          "showOne": "\u663E\u793A/\u9690\u85CF\u6279\u6CE8",
          "showAll": "\u663E\u793A/\u9690\u85CF\u6240\u6709\u6279\u6CE8"
        },
        screenshot: {
          screenshotTipNoSelection: "\u8BF7\u6846\u9009\u9700\u8981\u622A\u56FE\u7684\u8303\u56F4",
          screenshotTipTitle: "\u63D0\u793A\uFF01",
          screenshotTipHasMerge: "\u65E0\u6CD5\u5BF9\u5408\u5E76\u5355\u5143\u683C\u6267\u884C\u6B64\u64CD\u4F5C",
          screenshotTipHasMulti: "\u65E0\u6CD5\u5BF9\u591A\u91CD\u9009\u62E9\u533A\u57DF\u6267\u884C\u6B64\u64CD\u4F5C",
          screenshotTipSuccess: "\u622A\u53D6\u6210\u529F",
          screenshotImageName: "\u622A\u56FE",
          downLoadClose: "\u5173\u95ED",
          downLoadCopy: "\u590D\u5236\u5230\u526A\u5207\u677F",
          downLoadBtn: "\u4E0B\u8F7D",
          browserNotTip: "\u4E0B\u8F7D\u529F\u80FDIE\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\uFF01",
          rightclickTip: "\u8BF7\u5728\u56FE\u7247\u4E0A\u53F3\u952E\u70B9\u51FB'\u590D\u5236'",
          successTip: "\u5DF2\u6210\u529F\u590D\u5236\uFF08\u5982\u679C\u7C98\u8D34\u5931\u8D25\uFF0C\u8BF7\u5728\u56FE\u7247\u4E0A\u53F3\u952E\u70B9\u51FB'\u590D\u5236\u56FE\u7247'\uFF09"
        },
        splitText: {
          splitDelimiters: "\u5206\u5272\u7B26\u53F7",
          splitOther: "\u5176\u5B83",
          splitContinueSymbol: "\u8FDE\u7EED\u5206\u9694\u7B26\u53F7\u89C6\u4E3A\u5355\u4E2A\u5904\u7406",
          splitDataPreview: "\u6570\u636E\u9884\u89C8",
          splitTextTitle: "\u6587\u672C\u5206\u5217",
          splitConfirmToExe: "\u6B64\u5904\u5DF2\u6709\u6570\u636E\uFF0C\u662F\u5426\u66FF\u6362\u5B83\uFF1F",
          tipNoMulti: "\u4E0D\u80FD\u5BF9\u591A\u91CD\u9009\u62E9\u533A\u57DF\u6267\u884C\u6B64\u64CD\u4F5C\uFF0C\u8BF7\u9009\u62E9\u5355\u4E2A\u533A\u57DF\uFF0C\u7136\u540E\u518D\u8BD5",
          tipNoMultiColumn: "\u4E00\u6B21\u53EA\u80FD\u8F6C\u6362\u4E00\u5217\u6570\u636E\uFF0C\u9009\u5B9A\u533A\u57DF\u53EF\u4EE5\u6709\u591A\u884C\uFF0C\u4F46\u4E0D\u80FD\u6709\u591A\u5217\uFF0C\u8BF7\u5728\u9009\u5B9A\u5355\u5217\u533A\u57DF\u4EE5\u540E\u518D\u8BD5"
        },
        imageText: {
          imageSetting: "\u56FE\u7247\u8BBE\u7F6E",
          close: "\u5173\u95ED",
          conventional: "\u5E38\u89C4",
          moveCell1: "\u79FB\u52A8\u5E76\u8C03\u6574\u5355\u5143\u683C\u5927\u5C0F",
          moveCell2: "\u79FB\u52A8\u5E76\u4E14\u4E0D\u8C03\u6574\u5355\u5143\u683C\u7684\u5927\u5C0F",
          moveCell3: "\u4E0D\u8981\u79FB\u52A8\u5355\u5143\u683C\u5E76\u8C03\u6574\u5176\u5927\u5C0F",
          fixedPos: "\u56FA\u5B9A\u4F4D\u7F6E",
          border: "\u8FB9\u6846",
          width: "\u5BBD\u5EA6",
          radius: "\u534A\u5F84",
          style: "\u6837\u5F0F",
          solid: "\u5B9E\u7EBF",
          dashed: "\u865A\u7EBF",
          dotted: "\u70B9\u72B6",
          double: "\u53CC\u7EBF",
          color: "\u989C\u8272"
        },
        punctuation: {
          "tab": "Tab \u952E",
          "semicolon": "\u5206\u53F7",
          "comma": "\u9017\u53F7",
          "space": "\u7A7A\u683C"
        },
        findAndReplace: {
          find: "\u67E5\u627E",
          replace: "\u66FF\u6362",
          goto: "\u8F6C\u5230",
          location: "\u5B9A\u4F4D\u6761\u4EF6",
          formula: "\u516C\u5F0F",
          date: "\u65E5\u671F",
          number: "\u6570\u5B57",
          string: "\u5B57\u7B26",
          error: "\u9519\u8BEF",
          condition: "\u6761\u4EF6\u683C\u5F0F",
          rowSpan: "\u95F4\u9694\u884C",
          columnSpan: "\u95F4\u9694\u5217",
          locationExample: "\u5B9A\u4F4D",
          lessTwoRowTip: "\u8BF7\u9009\u62E9\u6700\u5C11\u4E24\u884C",
          lessTwoColumnTip: "\u8BF7\u9009\u62E9\u6700\u5C11\u4E24\u884C",
          findTextbox: "\u67E5\u627E\u5185\u5BB9",
          replaceTextbox: "\u66FF\u6362\u5185\u5BB9",
          regexTextbox: "\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D",
          wholeTextbox: "\u6574\u8BCD\u5339\u914D",
          distinguishTextbox: "\u533A\u5206\u5927\u5C0F\u5199\u5339\u914D",
          allReplaceBtn: "\u5168\u90E8\u66FF\u6362",
          replaceBtn: "\u66FF\u6362",
          allFindBtn: "\u67E5\u627E\u5168\u90E8",
          findBtn: "\u67E5\u627E\u4E0B\u4E00\u4E2A",
          noFindTip: "\u6CA1\u6709\u67E5\u627E\u5230\u8BE5\u5185\u5BB9",
          modeTip: "\u8BE5\u6A21\u5F0F\u4E0B\u4E0D\u53EF\u8FDB\u884C\u6B64\u64CD\u4F5C",
          searchTargetSheet: "\u5DE5\u4F5C\u8868",
          searchTargetCell: "\u5355\u5143\u683C",
          searchTargetValue: "\u503C",
          searchInputTip: "\u8BF7\u8F93\u5165\u67E5\u627E\u5185\u5BB9",
          noReplceTip: "\u6CA1\u6709\u53EF\u66FF\u6362\u7684\u5185\u5BB9",
          noMatchTip: "\u627E\u4E0D\u5230\u5339\u914D\u9879",
          successTip: "\u5DF2\u7ECF\u5E2E\u60A8\u641C\u7D22\u5E76\u8FDB\u884C\u4E86${xlength}\u5904\u66FF\u6362",
          locationConstant: "\u5E38\u91CF",
          locationFormula: "\u516C\u5F0F",
          locationDate: "\u65E5\u671F",
          locationDigital: "\u6570\u5B57",
          locationString: "\u5B57\u7B26",
          locationBool: "\u903B\u8F91\u503C",
          locationError: "\u9519\u8BEF",
          locationNull: "\u7A7A\u503C",
          locationCondition: "\u6761\u4EF6\u683C\u5F0F",
          locationRowSpan: "\u95F4\u9694\u884C",
          locationColumnSpan: "\u95F4\u9694\u5217",
          locationTiplessTwoRow: "\u8BF7\u9009\u62E9\u6700\u5C11\u4E24\u884C",
          locationTiplessTwoColumn: "\u8BF7\u9009\u62E9\u6700\u5C11\u4E24\u5217",
          locationTipNotFindCell: "\u672A\u627E\u5230\u5355\u5143\u683C"
        },
        sheetconfig: {
          delete: "\u5220\u9664",
          copy: "\u590D\u5236",
          rename: "\u91CD\u547D\u540D",
          changeColor: "\u66F4\u6539\u989C\u8272",
          hide: "\u9690\u85CF",
          unhide: "\u53D6\u6D88\u9690\u85CF",
          moveLeft: "\u5411\u5DE6\u79FB",
          moveRight: "\u5411\u53F3\u79FB",
          resetColor: "\u91CD\u7F6E\u989C\u8272",
          cancelText: "\u53D6\u6D88",
          chooseText: "\u786E\u5B9A\u989C\u8272",
          tipNameRepeat: "\u6807\u7B7E\u9875\u7684\u540D\u79F0\u4E0D\u80FD\u91CD\u590D\uFF01\u8BF7\u91CD\u65B0\u4FEE\u6539",
          noMoreSheet: "\u5DE5\u4F5C\u8584\u5185\u81F3\u5C11\u542B\u6709\u4E00\u5F20\u53EF\u89C6\u5DE5\u4F5C\u8868\u3002\u82E5\u9700\u5220\u9664\u9009\u5B9A\u7684\u5DE5\u4F5C\u8868\uFF0C\u8BF7\u5148\u63D2\u5165\u4E00\u5F20\u65B0\u5DE5\u4F5C\u8868\u6216\u663E\u793A\u4E00\u5F20\u9690\u85CF\u7684\u5DE5\u4F5C\u8868\u3002",
          confirmDelete: "\u662F\u5426\u5220\u9664",
          redoDelete: "\u53EF\u4EE5\u901A\u8FC7Ctrl+Z\u64A4\u9500\u5220\u9664",
          noHide: "\u4E0D\u80FD\u9690\u85CF, \u81F3\u5C11\u4FDD\u7559\u4E00\u4E2Asheet\u6807\u7B7E",
          chartEditNoOpt: "\u56FE\u8868\u7F16\u8F91\u6A21\u5F0F\u4E0B\u4E0D\u5141\u8BB8\u8BE5\u64CD\u4F5C\uFF01",
          sheetNameSpecCharError: "\u540D\u79F0\u4E0D\u80FD\u8D85\u8FC731\u4E2A\u5B57\u7B26\uFF0C\u9996\u5C3E\u4E0D\u80FD\u662F' \u4E14\u540D\u79F0\u4E0D\u80FD\u5305\u542B:\r\n[ ] : \\ ? * /",
          sheetNamecannotIsEmptyError: "\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A!"
        },
        conditionformat: {
          conditionformat_greaterThan: "\u6761\u4EF6\u683C\u5F0F\u2014\u2014\u5927\u4E8E",
          conditionformat_greaterThan_title: "\u4E3A\u5927\u4E8E\u4EE5\u4E0B\u503C\u7684\u5355\u5143\u683C\u8BBE\u7F6E\u683C\u5F0F",
          conditionformat_lessThan: "\u6761\u4EF6\u683C\u5F0F\u2014\u2014\u5C0F\u4E8E",
          conditionformat_lessThan_title: "\u4E3A\u5C0F\u4E8E\u4EE5\u4E0B\u503C\u7684\u5355\u5143\u683C\u8BBE\u7F6E\u683C\u5F0F",
          conditionformat_betweenness: "\u6761\u4EF6\u683C\u5F0F\u2014\u2014\u4ECB\u4E8E",
          conditionformat_betweenness_title: "\u4E3A\u4ECB\u4E8E\u4EE5\u4E0B\u503C\u7684\u5355\u5143\u683C\u8BBE\u7F6E\u683C\u5F0F",
          conditionformat_equal: "\u6761\u4EF6\u683C\u5F0F\u2014\u2014\u7B49\u4E8E",
          conditionformat_equal_title: "\u4E3A\u7B49\u4E8E\u4EE5\u4E0B\u503C\u7684\u5355\u5143\u683C\u8BBE\u7F6E\u683C\u5F0F",
          conditionformat_textContains: "\u6761\u4EF6\u683C\u5F0F\u2014\u2014\u6587\u672C\u5305\u542B",
          conditionformat_textContains_title: "\u4E3A\u5305\u542B\u4EE5\u4E0B\u6587\u672C\u7684\u5355\u5143\u683C\u8BBE\u7F6E\u683C\u5F0F",
          conditionformat_occurrenceDate: "\u6761\u4EF6\u683C\u5F0F\u2014\u2014\u53D1\u751F\u65E5\u671F",
          conditionformat_occurrenceDate_title: "\u4E3A\u5305\u542B\u4EE5\u4E0B\u65E5\u671F\u7684\u5355\u5143\u683C\u8BBE\u7F6E\u683C\u5F0F",
          conditionformat_duplicateValue: "\u6761\u4EF6\u683C\u5F0F\u2014\u2014\u91CD\u590D\u503C",
          conditionformat_duplicateValue_title: "\u4E3A\u5305\u542B\u4EE5\u4E0B\u7C7B\u578B\u503C\u7684\u5355\u5143\u683C\u8BBE\u7F6E\u683C\u5F0F",
          conditionformat_top10: "\u6761\u4EF6\u683C\u5F0F\u2014\u2014\u524D 10 \u9879",
          conditionformat_top10_percent: "\u6761\u4EF6\u683C\u5F0F\u2014\u2014\u524D 10%",
          conditionformat_top10_title: "\u4E3A\u503C\u6700\u5927\u7684\u90A3\u4E9B\u5355\u5143\u683C\u8BBE\u7F6E\u683C\u5F0F",
          conditionformat_last10: "\u6761\u4EF6\u683C\u5F0F\u2014\u2014\u6700\u540E 10 \u9879",
          conditionformat_last10_percent: "\u6761\u4EF6\u683C\u5F0F\u2014\u2014\u6700\u540E 10%",
          conditionformat_last10_title: "\u4E3A\u503C\u6700\u5C0F\u7684\u90A3\u4E9B\u5355\u5143\u683C\u8BBE\u7F6E\u683C\u5F0F",
          conditionformat_AboveAverage: "\u6761\u4EF6\u683C\u5F0F\u2014\u2014\u9AD8\u4E8E\u5E73\u5747\u503C",
          conditionformat_AboveAverage_title: "\u4E3A\u9AD8\u4E8E\u5E73\u5747\u503C\u7684\u5355\u5143\u683C\u8BBE\u7F6E\u683C\u5F0F",
          conditionformat_SubAverage: "\u6761\u4EF6\u683C\u5F0F\u2014\u2014\u4F4E\u4E8E\u5E73\u5747\u503C",
          conditionformat_SubAverage_title: "\u4E3A\u4F4E\u4E8E\u5E73\u5747\u503C\u7684\u5355\u5143\u683C\u8BBE\u7F6E\u683C\u5F0F",
          rule: "\u89C4\u5219",
          newRule: "\u65B0\u5EFA\u89C4\u5219",
          editRule: "\u7F16\u8F91\u89C4\u5219",
          deleteRule: "\u5220\u9664\u89C4\u5219",
          deleteCellRule: "\u6E05\u9664\u6240\u9009\u5355\u5143\u683C\u7684\u89C4\u5219",
          deleteSheetRule: "\u6E05\u9664\u6574\u4E2A\u5DE5\u4F5C\u8868\u7684\u89C4\u5219",
          manageRules: "\u7BA1\u7406\u89C4\u5219",
          showRules: "\u663E\u793A\u5176\u683C\u5F0F\u89C4\u5219",
          highlightCellRules: "\u7A81\u51FA\u663E\u793A\u5355\u5143\u683C\u89C4\u5219",
          itemSelectionRules: "\u9879\u76EE\u9009\u53D6\u89C4\u5219",
          conditionformatManageRules: "\u6761\u4EF6\u683C\u5F0F\u89C4\u5219\u7BA1\u7406\u5668",
          format: "\u683C\u5F0F",
          setFormat: "\u8BBE\u7F6E\u683C\u5F0F",
          setAs: "\u8BBE\u7F6E\u4E3A",
          setAsByArea: "\u9488\u5BF9\u9009\u5B9A\u533A\u57DF\uFF0C\u8BBE\u7F6E\u4E3A",
          applyRange: "\u5E94\u7528\u8303\u56F4",
          selectRange: "\u70B9\u51FB\u9009\u62E9\u5E94\u7528\u8303\u56F4",
          selectRange_percent: "\u6240\u9009\u8303\u56F4\u7684\u767E\u5206\u6BD4",
          selectRange_average: "\u9009\u5B9A\u8303\u56F4\u7684\u5E73\u5747\u503C",
          selectRange_value: "\u9009\u5B9A\u8303\u56F4\u4E2D\u7684\u6570\u503C",
          pleaseSelectRange: "\u8BF7\u9009\u62E9\u5E94\u7528\u8303\u56F4",
          selectDataRange: "\u70B9\u51FB\u9009\u62E9\u6570\u636E\u8303\u56F4",
          selectCell: "\u9009\u62E9\u5355\u5143\u683C",
          pleaseSelectCell: "\u8BF7\u9009\u62E9\u5355\u5143\u683C",
          pleaseSelectADate: "\u8BF7\u9009\u62E9\u65E5\u671F",
          pleaseEnterInteger: "\u8BF7\u8F93\u5165\u4E00\u4E2A\u4ECB\u4E8E 1 \u548C 1000 \u4E4B\u95F4\u7684\u6574\u6570",
          onlySingleCell: "\u53EA\u80FD\u5BF9\u5355\u4E2A\u5355\u5143\u683C\u8FDB\u884C\u5F15\u7528",
          conditionValueCanOnly: "\u6761\u4EF6\u503C\u53EA\u80FD\u662F\u6570\u5B57\u6216\u8005\u5355\u4E2A\u5355\u5143\u683C",
          ruleTypeItem1: "\u57FA\u4E8E\u5404\u81EA\u503C\u8BBE\u7F6E\u6240\u6709\u5355\u5143\u683C\u7684\u683C\u5F0F",
          ruleTypeItem2: "\u53EA\u4E3A\u5305\u542B\u4EE5\u4E0B\u5185\u5BB9\u7684\u5355\u5143\u683C\u8BBE\u7F6E\u683C\u5F0F",
          ruleTypeItem2_title: "\u53EA\u4E3A\u6EE1\u8DB3\u4EE5\u4E0B\u6761\u4EF6\u7684\u5355\u5143\u683C",
          ruleTypeItem3: "\u4EC5\u5BF9\u6392\u540D\u9760\u524D\u6216\u9760\u540E\u7684\u6570\u503C\u8BBE\u7F6E\u683C\u5F0F",
          ruleTypeItem3_title: "\u4E3A\u4EE5\u4E0B\u6392\u540D\u5185\u7684\u503C",
          ruleTypeItem4: "\u4EC5\u5BF9\u9AD8\u4E8E\u6216\u4F4E\u4E8E\u5E73\u5747\u503C\u7684\u6570\u503C\u8BBE\u7F6E\u683C\u5F0F",
          ruleTypeItem4_title: "\u4E3A\u6EE1\u8DB3\u4EE5\u4E0B\u6761\u4EF6\u7684\u503C",
          ruleTypeItem5: "\u4EC5\u5BF9\u552F\u4E00\u503C\u6216\u91CD\u590D\u503C\u8BBE\u7F6E\u683C\u5F0F",
          ruleTypeItem6: "\u4F7F\u7528\u516C\u5F0F\u786E\u5B9A\u8981\u8BBE\u7F6E\u683C\u5F0F\u7684\u5355\u5143\u683C",
          formula: "\u516C\u5F0F",
          textColor: "\u6587\u672C\u989C\u8272",
          cellColor: "\u5355\u5143\u683C\u989C\u8272",
          confirm: "\u786E\u5B9A",
          confirmColor: "\u786E\u5B9A\u989C\u8272",
          cancel: "\u53D6\u6D88",
          close: "\u5173\u95ED",
          clearColorSelect: "\u6E05\u9664\u989C\u8272\u9009\u62E9",
          sheet: "\u8868",
          currentSheet: "\u5F53\u524D\u5DE5\u4F5C\u8868",
          dataBar: "\u6570\u636E\u6761",
          dataBarColor: "\u6570\u636E\u6761\u989C\u8272",
          gradientDataBar_1: "\u84DD-\u767D\u6E10\u53D8\u6570\u636E\u6761",
          gradientDataBar_2: "\u7EFF-\u767D\u6E10\u53D8\u6570\u636E\u6761",
          gradientDataBar_3: "\u7EA2-\u767D\u6E10\u53D8\u6570\u636E\u6761",
          gradientDataBar_4: "\u6A59-\u767D\u6E10\u53D8\u6570\u636E\u6761",
          gradientDataBar_5: "\u6D45\u84DD-\u767D\u6E10\u53D8\u6570\u636E\u6761",
          gradientDataBar_6: "\u7D2B-\u767D\u6E10\u53D8\u6570\u636E\u6761",
          solidColorDataBar_1: "\u84DD\u8272\u6570\u636E\u6761",
          solidColorDataBar_2: "\u7EFF\u8272\u6570\u636E\u6761",
          solidColorDataBar_3: "\u7EA2\u8272\u6570\u636E\u6761",
          solidColorDataBar_4: "\u6A59\u8272\u6570\u636E\u6761",
          solidColorDataBar_5: "\u6D45\u84DD\u8272\u6570\u636E\u6761",
          solidColorDataBar_6: "\u7D2B\u8272\u6570\u636E\u6761",
          colorGradation: "\u8272\u9636",
          colorGradation_1: "\u7EFF-\u9EC4-\u7EA2\u8272\u9636",
          colorGradation_2: "\u7EA2-\u9EC4-\u7EFF\u8272\u9636",
          colorGradation_3: "\u7EFF-\u767D-\u7EA2\u8272\u9636",
          colorGradation_4: "\u7EA2-\u767D-\u7EFF\u8272\u9636",
          colorGradation_5: "\u84DD-\u767D-\u7EA2\u8272\u9636",
          colorGradation_6: "\u7EA2-\u767D-\u84DD\u8272\u9636",
          colorGradation_7: "\u767D-\u7EA2\u8272\u9636",
          colorGradation_8: "\u7EA2-\u767D\u8272\u9636",
          colorGradation_9: "\u7EFF-\u767D\u8272\u9636",
          colorGradation_10: "\u767D-\u7EFF\u8272\u9636",
          colorGradation_11: "\u7EFF-\u9EC4\u8272\u9636",
          colorGradation_12: "\u9EC4-\u7EFF\u8272\u9636",
          icons: "\u56FE\u6807\u96C6",
          pleaseSelectIcon: "\u8BF7\u70B9\u51FB\u9009\u62E9\u4E00\u7EC4\u56FE\u6807\uFF1A",
          cellValue: "\u5355\u5143\u683C\u503C",
          specificText: "\u7279\u5B9A\u6587\u672C",
          occurrence: "\u53D1\u751F\u65E5\u671F",
          greaterThan: "\u5927\u4E8E",
          lessThan: "\u5C0F\u4E8E",
          between: "\u4ECB\u4E8E",
          equal: "\u7B49\u4E8E",
          in: "\u548C",
          to: "\u5230",
          between2: "\u4E4B\u95F4",
          contain: "\u5305\u542B",
          textContains: "\u6587\u672C\u5305\u542B",
          duplicateValue: "\u91CD\u590D\u503C",
          uniqueValue: "\u552F\u4E00\u503C",
          top: "\u524D",
          top10: "\u524D 10 \u9879",
          top10_percent: "\u524D 10%",
          last: "\u540E",
          last10: "\u540E 10 \u9879",
          last10_percent: "\u540E 10%",
          oneself: "\u4E2A",
          above: "\u9AD8\u4E8E",
          aboveAverage: "\u9AD8\u4E8E\u5E73\u5747\u503C",
          below: "\u4F4E\u4E8E",
          belowAverage: "\u4F4E\u4E8E\u5E73\u5747\u503C",
          all: "\u5168\u90E8",
          yesterday: "\u6628\u5929",
          today: "\u4ECA\u5929",
          tomorrow: "\u660E\u5929",
          lastWeek: "\u4E0A\u5468",
          thisWeek: "\u672C\u5468",
          lastMonth: "\u4E0A\u6708",
          thisMonth: "\u672C\u6708",
          lastYear: "\u53BB\u5E74",
          thisYear: "\u672C\u5E74",
          last7days: "\u6700\u8FD17\u5929",
          last30days: "\u6700\u8FD130\u5929",
          next7days: "\u672A\u67657\u5929",
          next30days: "\u672A\u676530\u5929",
          next60days: "\u672A\u676560\u5929",
          chooseRuleType: "\u9009\u62E9\u89C4\u5219\u7C7B\u578B",
          editRuleDescription: "\u7F16\u8F91\u89C4\u5219\u8BF4\u660E",
          newFormatRule: "\u65B0\u5EFA\u683C\u5F0F\u89C4\u5219",
          editFormatRule: "\u7F16\u8F91\u683C\u5F0F\u89C4\u5219",
          formatStyle: "\u683C\u5F0F\u6837\u5F0F",
          fillType: "\u586B\u5145\u7C7B\u578B",
          color: "\u989C\u8272",
          twocolor: "\u53CC\u8272",
          tricolor: "\u4E09\u8272",
          multicolor: "\u5F69\u8272",
          grayColor: "\u7070\u8272",
          gradient: "\u6E10\u53D8",
          solid: "\u5B9E\u5FC3",
          maxValue: "\u6700\u5927\u503C",
          medianValue: "\u4E2D\u95F4\u503C",
          minValue: "\u6700\u5C0F\u503C",
          direction: "\u65B9\u5411",
          threeWayArrow: "\u4E09\u5411\u7BAD\u5934",
          fourWayArrow: "\u56DB\u5411\u7BAD\u5934",
          fiveWayArrow: "\u4E94\u5411\u7BAD\u5934",
          threeTriangles: "3\u4E2A\u4E09\u89D2\u5F62",
          shape: "\u5F62\u72B6",
          threeColorTrafficLight: "\u4E09\u8272\u4EA4\u901A\u706F",
          fourColorTrafficLight: "\u56DB\u8272\u4EA4\u901A\u706F",
          threeSigns: "\u4E09\u6807\u5FD7",
          greenRedBlackGradient: "\u7EFF-\u7EA2-\u9ED1\u6E10\u53D8",
          rimless: "\u65E0\u8FB9\u6846",
          bordered: "\u6709\u8FB9\u6846",
          mark: "\u6807\u8BB0",
          threeSymbols: "\u4E09\u4E2A\u7B26\u53F7",
          tricolorFlag: "\u4E09\u8272\u65D7",
          circled: "\u6709\u5706\u5708",
          noCircle: "\u65E0\u5706\u5708",
          grade: "\u7B49\u7EA7",
          grade4: "\u56DB\u7B49\u7EA7",
          grade5: "\u4E94\u7B49\u7EA7",
          threeStars: "3\u4E2A\u661F\u5F62",
          fiveQuadrantDiagram: "\u4E94\u8C61\u9650\u56FE",
          fiveBoxes: "5\u4E2A\u6846"
        },
        insertLink: {
          linkText: "\u6587\u672C",
          linkType: "\u94FE\u63A5\u7C7B\u578B",
          external: "\u5916\u90E8\u94FE\u63A5",
          internal: "\u5185\u90E8\u94FE\u63A5",
          linkAddress: "\u94FE\u63A5\u5730\u5740",
          linkSheet: "\u5DE5\u4F5C\u8868",
          linkCell: "\u5355\u5143\u683C\u5F15\u7528",
          linkTooltip: "\u63D0\u793A",
          placeholder1: "\u8BF7\u8F93\u5165\u7F51\u9875\u94FE\u63A5\u5730\u5740",
          placeholder2: "\u8BF7\u8F93\u5165\u8981\u5F15\u7528\u7684\u5355\u5143\u683C\uFF0C\u4F8BA1",
          placeholder3: "\u8BF7\u8F93\u5165\u63D0\u793A\u5185\u5BB9",
          tooltipInfo1: "\u8BF7\u8F93\u5165\u6709\u6548\u7684\u94FE\u63A5",
          tooltipInfo2: "\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u5355\u5143\u683C\u5F15\u7528"
        },
        dataVerification: {
          cellRange: "\u5355\u5143\u683C\u8303\u56F4",
          selectCellRange: "\u70B9\u51FB\u9009\u62E9\u5355\u5143\u683C\u8303\u56F4",
          selectCellRange2: "\u8BF7\u9009\u62E9\u5355\u5143\u683C\u8303\u56F4",
          verificationCondition: "\u9A8C\u8BC1\u6761\u4EF6",
          allowMultiSelect: "\u662F\u5426\u5141\u8BB8\u591A\u9009",
          dropdown: "\u4E0B\u62C9\u5217\u8868",
          checkbox: "\u590D\u9009\u6846",
          number: "\u6570\u5B57",
          number_integer: "\u6570\u5B57-\u6574\u6570",
          number_decimal: "\u6570\u5B57-\u5C0F\u6570",
          text_content: "\u6587\u672C-\u5185\u5BB9",
          text_length: "\u6587\u672C-\u957F\u5EA6",
          date: "\u65E5\u671F",
          validity: "\u6709\u6548\u6027",
          placeholder1: "\u8BF7\u8F93\u5165\u9009\u9879\uFF0C\u4EE5\u82F1\u6587\u9017\u53F7\u5206\u9694\uFF0C\u59821,2,3,4,5",
          placeholder2: "\u8BF7\u8F93\u5165\u5185\u5BB9",
          placeholder3: "\u6570\u503C\uFF0C\u598210",
          placeholder4: "\u8BF7\u8F93\u5165\u6307\u5B9A\u7684\u6587\u672C",
          placeholder5: "\u8BF7\u8F93\u5165\u9009\u4E2D\u5355\u5143\u683C\u65F6\u663E\u793A\u7684\u63D0\u793A\u8BED",
          selected: "\u9009\u62E9\u65F6",
          notSelected: "\u672A\u9009\u62E9",
          between: "\u4ECB\u4E8E",
          notBetween: "\u4E0D\u4ECB\u4E8E",
          equal: "\u7B49\u4E8E",
          notEqualTo: "\u4E0D\u7B49\u4E8E",
          moreThanThe: "\u5927\u4E8E",
          lessThan: "\u5C0F\u4E8E",
          greaterOrEqualTo: "\u5927\u4E8E\u7B49\u4E8E",
          lessThanOrEqualTo: "\u5C0F\u4E8E\u7B49\u4E8E",
          include: "\u5305\u62EC",
          exclude: "\u4E0D\u5305\u62EC",
          earlierThan: "\u65E9\u4E8E",
          noEarlierThan: "\u4E0D\u65E9\u4E8E",
          laterThan: "\u665A\u4E8E",
          noLaterThan: "\u4E0D\u665A\u4E8E",
          identificationNumber: "\u8EAB\u4EFD\u8BC1\u53F7\u7801",
          phoneNumber: "\u624B\u673A\u53F7",
          remote: "\u81EA\u52A8\u8FDC\u7A0B\u83B7\u53D6\u9009\u9879",
          prohibitInput: "\u8F93\u5165\u6570\u636E\u65E0\u6548\u65F6\u7981\u6B62\u8F93\u5165",
          hintShow: "\u9009\u4E2D\u5355\u5143\u683C\u65F6\u663E\u793A\u63D0\u793A\u8BED",
          deleteVerification: "\u5220\u9664\u9A8C\u8BC1",
          tooltipInfo1: "\u4E0B\u62C9\u5217\u8868\u9009\u9879\u4E0D\u53EF\u4E3A\u7A7A",
          tooltipInfo2: "\u590D\u9009\u6846\u5185\u5BB9\u4E0D\u53EF\u4E3A\u7A7A",
          tooltipInfo3: "\u8F93\u5165\u7684\u503C\u4E0D\u662F\u6570\u503C\u7C7B\u578B",
          tooltipInfo4: "\u6570\u503C2\u4E0D\u80FD\u5C0F\u4E8E\u6570\u503C1",
          tooltipInfo5: "\u6587\u672C\u5185\u5BB9\u4E0D\u80FD\u4E3A\u7A7A",
          tooltipInfo6: "\u8F93\u5165\u7684\u503C\u4E0D\u662F\u65E5\u671F\u7C7B\u578B",
          tooltipInfo7: "\u65E5\u671F2\u4E0D\u80FD\u5C0F\u4E8E\u65E5\u671F1",
          textlengthInteger: "\u6587\u672C\u957F\u5EA6\u5FC5\u987B\u662F\u5927\u4E8E\u7B49\u4E8E0\u7684\u6574\u6570"
        },
        formula: {
          sum: "\u6C42\u548C",
          average: "\u5E73\u5747\u503C",
          count: "\u8BA1\u6570",
          max: "\u6700\u5927\u503C",
          min: "\u6700\u5C0F\u503C",
          ifGenerate: "if\u516C\u5F0F\u751F\u6210\u5668",
          find: "\u66F4\u591A\u51FD\u6570",
          tipNotBelongToIf: "\u8BE5\u5355\u5143\u683C\u51FD\u6570\u4E0D\u5C5E\u4E8Eif\u516C\u5F0F\uFF01",
          tipSelectCell: "\u8BF7\u9009\u62E9\u5355\u5143\u683C\u63D2\u5165\u51FD\u6570",
          ifGenCompareValueTitle: "\u6BD4\u8F83\u503C",
          ifGenSelectCellTitle: "\u70B9\u51FB\u9009\u62E9\u5355\u5143\u683C",
          ifGenRangeTitle: "\u8303\u56F4",
          ifGenRangeTo: "\u81F3",
          ifGenRangeEvaluate: "\u8303\u56F4\u8BC4\u4F30",
          ifGenSelectRangeTitle: "\u70B9\u51FB\u9009\u62E9\u8303\u56F4",
          ifGenCutWay: "\u5212\u5206\u65B9\u5F0F",
          ifGenCutSame: "\u5212\u5206\u503C\u76F8\u540C",
          ifGenCutNpiece: "\u5212\u5206\u4E3AN\u4EFD",
          ifGenCutCustom: "\u81EA\u5B9A\u4E49\u8F93\u5165",
          ifGenCutConfirm: "\u751F\u6210",
          ifGenTipSelectCell: "\u9009\u62E9\u5355\u5143\u683C",
          ifGenTipSelectCellPlace: "\u8BF7\u9009\u62E9\u5355\u5143\u683C",
          ifGenTipSelectRange: "\u9009\u62E9\u5355\u8303\u56F4",
          ifGenTipSelectRangePlace: "\u8BF7\u9009\u62E9\u8303\u56F4",
          ifGenTipNotNullValue: "\u6BD4\u8F83\u503C\u4E0D\u80FD\u4E3A\u7A7A\uFF01",
          ifGenTipLableTitile: "\u6807\u7B7E",
          ifGenTipRangeNotforNull: "\u8303\u56F4\u4E0D\u80FD\u4E3A\u7A7A\uFF01",
          ifGenTipCutValueNotforNull: "\u5212\u5206\u503C\u4E0D\u80FD\u4E3A\u7A7A\uFF01",
          ifGenTipNotGenCondition: "\u6CA1\u6709\u751F\u6210\u53EF\u7528\u7684\u6761\u4EF6\uFF01"
        },
        formulaMore: {
          valueTitle: "\u503C",
          tipSelectDataRange: "\u9009\u53D6\u6570\u636E\u8303\u56F4",
          tipDataRangeTile: "\u6570\u636E\u8303\u56F4",
          findFunctionTitle: "\u67E5\u627E\u51FD\u6570",
          tipInputFunctionName: "\u8BF7\u8F93\u5165\u60A8\u8981\u67E5\u627E\u7684\u51FD\u6570\u540D\u79F0\u6216\u51FD\u6570\u529F\u80FD\u7684\u7B80\u8981\u63CF\u8FF0",
          "Array": "\u6570\u7EC4",
          "Database": "\u6570\u636E\u6E90",
          "Date": "\u65E5\u671F",
          "Engineering": "\u5DE5\u7A0B\u8BA1\u7B97",
          "Filter": "\u8FC7\u6EE4\u5668",
          "Financial": "\u8D22\u52A1",
          "luckysheet": "Luckysheet\u5185\u7F6E",
          "other": "\u5176\u5B83",
          "Logical": "\u903B\u8F91",
          "Lookup": "\u67E5\u627E",
          "Math": "\u6570\u5B66",
          "Operator": "\u8FD0\u7B97\u7B26",
          "Parser": "\u8F6C\u6362\u5DE5\u5177",
          "Statistical": "\u7EDF\u8BA1",
          "Text": "\u6587\u672C",
          "dataMining": "\u6570\u636E\u6316\u6398",
          "selectFunctionTitle": "\u9009\u62E9\u51FD\u6570",
          "calculationResult": "\u8BA1\u7B97\u7ED3\u679C",
          tipSuccessText: "\u6210\u529F",
          tipParamErrorText: "\u53C2\u6570\u7C7B\u578B\u9519\u8BEF",
          "helpClose": "\u5173\u95ED",
          "helpCollapse": "\u6536\u8D77",
          "helpExample": "\u793A\u4F8B",
          "helpAbstract": "\u6458\u8981",
          "execfunctionError": '\u63D0\u793A", "\u516C\u5F0F\u5B58\u5728\u9519\u8BEF',
          "execfunctionSelfError": "\u516C\u5F0F\u4E0D\u53EF\u5F15\u7528\u5176\u672C\u8EAB\u7684\u5355\u5143\u683C",
          "execfunctionSelfErrorResult": "\u516C\u5F0F\u4E0D\u53EF\u5F15\u7528\u5176\u672C\u8EAB\u7684\u5355\u5143\u683C\uFF0C\u4F1A\u5BFC\u81F4\u8BA1\u7B97\u7ED3\u679C\u4E0D\u51C6\u786E",
          "allowRepeatText": "\u53EF\u91CD\u590D",
          "allowOptionText": "\u53EF\u9009",
          "selectCategory": "\u6216\u9009\u62E9\u7C7B\u522B"
        },
        drag: {
          noMerge: "\u65E0\u6CD5\u5BF9\u5408\u5E76\u5355\u5143\u683C\u6267\u884C\u6B64\u64CD\u4F5C",
          affectPivot: "\u65E0\u6CD5\u5BF9\u6240\u9009\u5355\u5143\u683C\u8FDB\u884C\u6B64\u66F4\u6539\uFF0C\u56E0\u4E3A\u5B83\u4F1A\u5F71\u54CD\u6570\u636E\u900F\u89C6\u8868\uFF01",
          noMulti: "\u65E0\u6CD5\u5BF9\u591A\u91CD\u9009\u62E9\u533A\u57DF\u6267\u884C\u6B64\u64CD\u4F5C,\u8BF7\u9009\u62E9\u5355\u4E2A\u533A\u57DF",
          noPaste: "\u65E0\u6CD5\u5728\u6B64\u5904\u7C98\u8D34\u6B64\u5185\u5BB9\uFF0C\u8BF7\u9009\u62E9\u7C98\u8D34\u533A\u57DF\u7684\u4E00\u4E2A\u5355\u5143\u683C\uFF0C\u7136\u540E\u518D\u6B21\u5C1D\u8BD5\u7C98\u8D34",
          noPartMerge: "\u65E0\u6CD5\u5BF9\u90E8\u5206\u5408\u5E76\u5355\u5143\u683C\u6267\u884C\u6B64\u64CD\u4F5C",
          inputCorrect: "\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u6570\u503C",
          notLessOne: "\u884C\u5217\u6570\u4E0D\u80FD\u5C0F\u4E8E1",
          offsetColumnLessZero: "\u504F\u79FB\u5217\u4E0D\u80FD\u4E3A\u8D1F\u6570\uFF01",
          pasteMustKeybordAlert: "Copy and paste in the Sheet: Ctrl + C to copy, Ctrl + V to paste, Ctrl + X to cut",
          pasteMustKeybordAlertHTMLTitle: "Copy and paste in the Sheet",
          pasteMustKeybordAlertHTML: "<span style='line-height: 1.0;font-size:36px;font-weight: bold;color:#666;'>Ctrl + C</span>&nbsp;&nbsp;to copy<br/><span style='line-height: 1.0;font-size:36px;font-weight: bold;color:#666;'>Ctrl + V</span>&nbsp;&nbsp;to paste<br/><span style='line-height: 1.0;font-size:36px;font-weight: bold;color:#666;'>Ctrl + X</span>&nbsp;&nbsp;to cut"
        },
        paste: {
          warning: "\u63D0\u793A",
          errorNotAllowMulti: "\u4E0D\u80FD\u5BF9\u591A\u91CD\u9009\u62E9\u533A\u57DF\u6267\u884C\u6B64\u64CD\u4F5C\uFF0C\u8BF7\u9009\u62E9\u5355\u4E2A\u533A\u57DF\uFF0C\u7136\u540E\u518D\u8BD5",
          errorNotAllowMerged: "\u4E0D\u80FD\u5BF9\u5408\u5E76\u5355\u5143\u683C\u505A\u90E8\u5206\u66F4\u6539"
        },
        pivotTable: {
          title: "\u6570\u636E\u900F\u89C6\u8868",
          closePannel: "\u5173\u95ED",
          editRange: "\u7F16\u8F91\u8303\u56F4",
          tipPivotFieldSelected: "\u9009\u62E9\u9700\u8981\u6DFB\u52A0\u5230\u6570\u636E\u900F\u89C6\u8868\u7684\u5B57\u6BB5",
          tipClearSelectedField: "\u6E05\u9664\u6240\u6709\u5DF2\u9009\u5B57\u6BB5",
          btnClearSelectedField: "\u6E05\u9664",
          btnFilter: "\u7B5B\u9009",
          titleRow: "\u884C",
          titleColumn: "\u5217",
          titleValue: "\u6570\u503C",
          tipShowColumn: "\u7EDF\u8BA1\u5B57\u6BB5\u663E\u793A\u4E3A\u5217",
          tipShowRow: "\u7EDF\u8BA1\u5B57\u6BB5\u663E\u793A\u4E3A\u884C",
          titleSelectionDataRange: "\u9009\u53D6\u6570\u636E\u8303\u56F4",
          titleDataRange: "\u6570\u636E\u8303\u56F4",
          valueSum: "\u603B\u8BA1",
          valueStatisticsSUM: "\u6C42\u548C",
          valueStatisticsCOUNT: "\u6570\u503C\u8BA1\u6570",
          valueStatisticsCOUNTA: "\u8BA1\u6570",
          valueStatisticsCOUNTUNIQUE: "\u53BB\u91CD\u8BA1\u6570",
          valueStatisticsAVERAGE: "\u5E73\u5747\u503C",
          valueStatisticsMAX: "\u6700\u5927\u503C",
          valueStatisticsMIN: "\u6700\u5C0F\u503C",
          valueStatisticsMEDIAN: "\u4E2D\u4F4D\u6570",
          valueStatisticsPRODUCT: "\u4E58\u79EF",
          valueStatisticsSTDEV: "\u6807\u51C6\u5DEE",
          valueStatisticsSTDEVP: "\u6574\u4F53\u6807\u51C6\u5DEE",
          valueStatisticslet: "\u65B9\u5DEE",
          valueStatisticsVARP: "\u6574\u4F53\u65B9\u5DEE",
          errorNotAllowEdit: "\u975E\u7F16\u8F91\u6A21\u5F0F\u4E0B\u7981\u6B62\u8BE5\u64CD\u4F5C\uFF01",
          errorNotAllowMulti: "\u4E0D\u80FD\u5BF9\u591A\u91CD\u9009\u62E9\u533A\u57DF\u6267\u884C\u6B64\u64CD\u4F5C\uFF0C\u8BF7\u9009\u62E9\u5355\u4E2A\u533A\u57DF\uFF0C\u7136\u540E\u518D\u8BD5",
          errorSelectRange: "\u8BF7\u9009\u62E9\u65B0\u5EFA\u900F\u89C6\u8868\u7684\u533A\u57DF",
          errorIsDamage: "\u6B64\u6570\u636E\u900F\u89C6\u8868\u7684\u6E90\u6570\u636E\u5DF2\u635F\u574F\uFF01",
          errorNotAllowPivotData: "\u4E0D\u53EF\u9009\u62E9\u6570\u636E\u900F\u89C6\u8868\u4E3A\u6E90\u6570\u636E\uFF01",
          errorSelectionRange: "\u9009\u62E9\u5931\u8D25, \u8F93\u5165\u8303\u56F4\u9519\u8BEF\uFF01",
          errorIncreaseRange: "\u8BF7\u6269\u5927\u9009\u62E9\u7684\u6570\u636E\u8303\u56F4!",
          titleAddColumn: "\u6DFB\u52A0\u5217\u5230\u6570\u636E\u900F\u89C6\u8868",
          titleMoveColumn: "\u79FB\u52A8\u8BE5\u5217\u5230\u4E0B\u65B9\u767D\u6846",
          titleClearColumnFilter: "\u6E05\u9664\u8BE5\u5217\u7684\u7B5B\u9009\u6761\u4EF6",
          titleFilterColumn: "\u7B5B\u9009\u8BE5\u5217",
          titleSort: "\u6392\u5E8F",
          titleNoSort: "\u65E0\u6392\u5E8F",
          titleSortAsc: "\u5347\u5E8F",
          titleSortDesc: "\u964D\u5E8F",
          titleSortBy: "\u6392\u5E8F\u4F9D\u636E",
          titleShowSum: "\u663E\u793A\u603B\u8BA1",
          titleStasticTrue: "\u662F",
          titleStasticFalse: "\u5426"
        },
        dropCell: {
          copyCell: "\u590D\u5236\u5355\u5143\u683C",
          sequence: "\u586B\u5145\u5E8F\u5217",
          onlyFormat: "\u4EC5\u586B\u5145\u683C\u5F0F",
          noFormat: "\u4E0D\u5E26\u683C\u5F0F\u586B\u5145",
          day: "\u4EE5\u5929\u6570\u586B\u5145",
          workDay: "\u4EE5\u5DE5\u4F5C\u65E5\u586B\u5145",
          month: "\u4EE5\u6708\u586B\u5145",
          year: "\u4EE5\u5E74\u586B\u5145",
          chineseNumber: "\u4EE5\u4E2D\u6587\u5C0F\u5199\u6570\u5B57\u586B\u5145"
        },
        imageCtrl: {
          borderTile: "\u56FE\u7247\u8FB9\u6846\u989C\u8272\u9009\u62E9",
          borderCur: "\u5F53\u524D\u989C\u8272"
        },
        protection: {
          protectiontTitle: "\u4FDD\u62A4\u5DE5\u4F5C\u8868",
          enterPassword: "\u8BF7\u8F93\u5165\u5BC6\u7801\uFF08\u53EF\u7559\u7A7A\uFF09",
          enterHint: "\u60A8\u8BD5\u56FE\u66F4\u6539\u7684\u5355\u5143\u683C\u6216\u56FE\u8868\u4F4D\u4E8E\u53D7\u4FDD\u62A4\u7684\u5DE5\u4F5C\u8868\u4E2D\u3002\u82E5\u8981\u66F4\u6539\uFF0C\u8BF7\u53D6\u6D88\u5DE5\u4F5C\u8868\u4FDD\u62A4\u3002\u60A8\u53EF\u80FD\u9700\u8981\u8F93\u5165\u5BC6\u7801",
          swichProtectionTip: "\u4FDD\u62A4\u5DE5\u4F5C\u8868\u53CA\u9501\u5B9A\u7684\u5355\u5143\u683C\u5185\u5BB9",
          authorityTitle: "\u5141\u8BB8\u6B64\u5DE5\u4F5C\u8868\u7684\u7528\u6237\u8FDB\u884C:",
          selectLockedCells: "\u9009\u5B9A\u9501\u5B9A\u5355\u5143\u683C",
          selectunLockedCells: "\u9009\u5B9A\u89E3\u9664\u9501\u5B9A\u7684\u5355\u5143\u683C",
          formatCells: "\u8BBE\u7F6E\u5355\u5143\u683C\u683C\u5F0F",
          formatColumns: "\u8BBE\u7F6E\u5217\u683C\u5F0F",
          formatRows: "\u8BBE\u7F6E\u884C\u683C\u5F0F",
          insertColumns: "\u63D2\u5165\u5217",
          insertRows: "\u63D2\u5165\u884C",
          insertHyperlinks: "\u63D2\u5165\u8D85\u94FE\u63A5",
          deleteColumns: "\u5220\u9664\u5217",
          deleteRows: "\u5220\u9664\u884C",
          sort: "\u6392\u5E8F",
          filter: "\u4F7F\u7528\u81EA\u52A8\u7B5B\u9009",
          usePivotTablereports: "\u4F7F\u7528\u6570\u636E\u900F\u89C6\u8868\u548C\u62A5\u8868",
          editObjects: "\u7F16\u8F91\u5BF9\u8C61",
          editScenarios: "\u7F16\u8F91\u65B9\u6848",
          allowRangeTitle: "\u5141\u8BB8\u7528\u6237\u7F16\u8F91\u533A\u57DF",
          allowRangeAdd: "\u65B0\u5EFA...",
          allowRangeAddTitle: "\u6807\u9898",
          allowRangeAddSqrf: "\u5F15\u7528\u5355\u5143\u683C",
          selectCellRange: "\u70B9\u51FB\u9009\u62E9\u5355\u5143\u683C\u8303\u56F4",
          selectCellRangeHolder: "\u8BF7\u8F93\u5165\u5355\u5143\u683C\u8303\u56F4",
          allowRangeAddTitlePassword: "\u5BC6\u7801",
          allowRangeAddTitleHint: "\u63D0\u793A",
          allowRangeAddTitleHintTitle: "\u8BBE\u7F6E\u5BC6\u7801\u540E\uFF0C\u63D0\u793A\u7528\u6237\u8F93\u5165\u5BC6\u7801(\u53EF\u7559\u7A7A)",
          allowRangeAddtitleDefault: "\u8BF7\u8F93\u5165\u533A\u57DF\u540D\u79F0",
          rangeItemDblclick: "\u53CC\u51FB\u8FDB\u884C\u7F16\u8F91",
          rangeItemHasPassword: "\u5DF2\u8BBE\u7F6E\u5BC6\u7801",
          rangeItemErrorTitleNull: "\u6807\u9898\u4E0D\u80FD\u4E3A\u7A7A",
          rangeItemErrorRangeNull: "\u5355\u5143\u683C\u8303\u56F4\u4E0D\u80FD\u4E3A\u7A7A",
          rangeItemErrorRange: "\u5355\u5143\u683C\u8303\u56F4\u683C\u5F0F\u9519\u8BEF",
          validationTitle: "\u9A8C\u8BC1\u63D0\u793A",
          validationTips: "\u9700\u8981\u8F93\u5165\u5BC6\u7801\u6765\u64A4\u9500\u5DE5\u4F5C\u8868\u7684\u4FDD\u62A4",
          validationInputHint: "\u8BF7\u8F93\u5165\u5BC6\u7801",
          checkPasswordNullalert: "\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A\uFF01",
          checkPasswordWrongalert: "\u5BC6\u7801\u9519\u8BEF\uFF0C\u8BF7\u91CD\u8BD5\uFF01",
          checkPasswordSucceedalert: "\u89E3\u9501\u6210\u529F\uFF0C\u53EF\u4EE5\u7F16\u8F91\u8BE5\u533A\u57DF!",
          defaultRangeHintText: "\u8BE5\u5355\u5143\u683C\u6B63\u5728\u53D7\u5BC6\u7801\u4FDD\u62A4\u3002",
          defaultSheetHintText: "\u8BE5\u5355\u5143\u683C\u6216\u56FE\u8868\u4F4D\u4E8E\u53D7\u4FDD\u62A4\u7684\u5DE5\u4F5C\u8868\u4E2D\uFF0C\u82E5\u8981\u8FDB\u884C\u66F4\u6539\uFF0C\u8BF7\u53D6\u6D88\u5DE5\u4F5C\u8868\u4FDD\u62A4\uFF0C\u60A8\u53EF\u80FD\u9700\u8981\u8F93\u5165\u5BC6\u7801\u3002"
        },
        cellFormat: {
          cellFormatTitle: "\u8BBE\u7F6E\u5355\u5143\u683C\u683C\u5F0F",
          protection: "\u4FDD\u62A4",
          locked: "\u9501\u5B9A\u5355\u5143\u683C",
          hidden: "\u9690\u85CF\u516C\u5F0F",
          protectionTips: "\u53EA\u6709\u4FDD\u62A4\u5DE5\u4F5C\u8868\u529F\u80FD(\u5728\u83DC\u5355\u680F\u70B9\u51FB\u4FDD\u62A4\u5DE5\u4F5C\u8868\u6309\u94AE\u8FDB\u884C\u8BBE\u7F6E)\u5F00\u542F\u540E\uFF0C\u9501\u5B9A\u5355\u5143\u683C\u6216\u9690\u85CF\u516C\u5F0F\u624D\u80FD\u751F\u6548",
          tipsPart: "\u90E8\u5206\u9009\u4E2D",
          tipsAll: "\u5168\u90E8\u9009\u4E2D",
          selectionIsNullAlert: "\u8BF7\u9009\u62E9\u4E00\u4E2A\u8303\u56F4\uFF01",
          sheetDataIsNullAlert: "\u6570\u636E\u4E3A\u7A7A\u65E0\u6CD5\u8BBE\u7F6E\uFF01"
        },
        print: {
          normalBtn: "\u5E38\u89C4\u89C6\u56FE",
          layoutBtn: "\u9875\u9762\u5E03\u5C40",
          pageBtn: "\u5206\u9875\u9884\u89C8",
          menuItemPrint: "\u6253\u5370(Ctrl+P)",
          menuItemAreas: "\u6253\u5370\u533A\u57DF",
          menuItemRows: "\u6253\u5370\u6807\u9898\u884C",
          menuItemColumns: "\u6253\u5370\u6807\u9898\u5217"
        },
        edit: {
          typing: "\u6B63\u5728\u8F93\u5165"
        },
        websocket: {
          success: "WebSocket\u8FDE\u63A5\u6210\u529F",
          refresh: "WebSocket\u8FDE\u63A5\u53D1\u751F\u9519\u8BEF, \u8BF7\u5237\u65B0\u9875\u9762\uFF01",
          wait: "WebSocket\u8FDE\u63A5\u53D1\u751F\u9519\u8BEF, \u8BF7\u8010\u5FC3\u7B49\u5F85\uFF01",
          close: "WebSocket\u8FDE\u63A5\u5173\u95ED",
          contact: "\u670D\u52A1\u5668\u901A\u4FE1\u53D1\u751F\u9519\u8BEF\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u540E\u518D\u8BD5\uFF0C\u5982\u82E5\u4E0D\u884C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\uFF01",
          support: "\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301WebSocket"
        }
      };
    }
  });

  // src/locale/es.js
  var es_default;
  var init_es = __esm({
    "src/locale/es.js"() {
      es_default = {
        functionlist: {
          "SUMIF": {
            "d": "Returns a conditional sum across a range.",
            "a": "A conditional sum across a range.",
            "p": [
              {
                "name": "range",
                "detail": "The range which is tested against `criterion`."
              },
              {
                "name": "criterion",
                "detail": "The pattern or test to apply to `range`."
              },
              {
                "name": "sum_range",
                "detail": "The range to be summed, if different from `range`."
              }
            ]
          },
          "TAN": {
            "d": "Returns the tangent of an angle provided in radians.",
            "a": "Tangent of an angle provided in radians.",
            "p": [
              {
                "name": "angle",
                "detail": "The angle to find the tangent of, in radians."
              }
            ]
          },
          "TANH": {
            "d": "Returns the hyperbolic tangent of any real number.",
            "a": "Hyperbolic tangent of any real number.",
            "p": [
              {
                "name": "value",
                "detail": "Any real value to calculate the hyperbolic tangent of."
              }
            ]
          },
          "CEILING": {
            "d": "Rounds a number up to the nearest integer multiple of specified significance `factor`.",
            "a": "Rounds number up to nearest multiple of a factor.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round up to the nearest integer multiple of `factor`."
              },
              {
                "name": "factor",
                "detail": "The number to whose multiples `value` will be rounded."
              }
            ]
          },
          "ATAN": {
            "d": "Returns the inverse tangent of a value, in radians.",
            "a": "Inverse tangent of a value, in radians.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the inverse tangent."
              }
            ]
          },
          "ASINH": {
            "d": "Returns the inverse hyperbolic sine of a number.",
            "a": "Inverse hyperbolic sine of a number.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the inverse hyperbolic sine."
              }
            ]
          },
          "ABS": {
            "d": "Returns the absolute value of a number.",
            "a": "Absolute value of a number.",
            "p": [
              {
                "name": "value",
                "detail": "The number of which to return the absolute value."
              }
            ]
          },
          "ACOS": {
            "d": "Returns the inverse cosine of a value, in radians.",
            "a": "Inverse cosine of a value, in radians.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the inverse cosine. Must be between `-1` and `1`, inclusive."
              }
            ]
          },
          "ACOSH": {
            "d": "Returns the inverse hyperbolic cosine of a number.",
            "a": "Inverse hyperbolic cosine of a number.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the inverse hyperbolic cosine. Must be greater than or equal to `1`."
              }
            ]
          },
          "MULTINOMIAL": {
            "d": "Returns the factorial of the sum of values divided by the product of the values' factorials.",
            "a": "Multinomial distribution function.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider."
              }
            ]
          },
          "ATANH": {
            "d": "Returns the inverse hyperbolic tangent of a number.",
            "a": "Inverse hyperbolic tangent of a number.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the inverse hyperbolic tangent. Must be between -1 and 1, exclusive."
              }
            ]
          },
          "ATAN2": {
            "d": "Returns the angle between the x-axis and a line segment from the origin (0,0) to specified coordinate pair (`x`,`y`), in radians.",
            "a": "Arctangent of a value.",
            "p": [
              {
                "name": "x",
                "detail": "The x coordinate of the endpoint of the line segment for which to calculate the angle from the x-axis."
              },
              {
                "name": "y",
                "detail": "The y coordinate of the endpoint of the line segment for which to calculate the angle from the x-axis."
              }
            ]
          },
          "COUNTBLANK": {
            "d": "Returns the number of empty values in a list of values and ranges.",
            "a": "Number of empty values.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range in which to count the number of blanks."
              }
            ]
          },
          "COSH": {
            "d": "Returns the hyperbolic cosine of any real number.",
            "a": "Hyperbolic cosine of any real number.",
            "p": [
              {
                "name": "value",
                "detail": "Any real value to calculate the hyperbolic cosine of."
              }
            ]
          },
          "INT": {
            "d": "Rounds a number down to the nearest integer that is less than or equal to it.",
            "a": "Rounds number down to nearest integer.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round down to the nearest integer."
              }
            ]
          },
          "ISEVEN": {
            "d": "Checks whether the provided value is even.",
            "a": "Whether the provided value is even.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as even."
              }
            ]
          },
          "ISODD": {
            "d": "Checks whether the provided value is odd.",
            "a": "Whether the provided value is odd.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as odd."
              }
            ]
          },
          "LCM": {
            "d": "Returns the least common multiple of one or more integers.",
            "a": "Least common multiple of one or more integers.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range whose factors to consider in a calculation to find the least common multiple."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges whose factors to consider to find the least common multiple."
              }
            ]
          },
          "LN": {
            "d": "Returns the logarithm of a number, base e (Euler's number).",
            "a": "The logarithm of a number, base e (euler's number).",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the logarithm, base e."
              }
            ]
          },
          "LOG": {
            "d": "Returns the logarithm of a number with respect to a base.",
            "a": "The logarithm of a number with respect to a base.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the logarithm."
              },
              {
                "name": "base",
                "detail": "The base to use for calculation of the logarithm."
              }
            ]
          },
          "LOG10": {
            "d": "Returns the logarithm of a number, base 10.",
            "a": "The logarithm of a number, base 10.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the logarithm, base 10."
              }
            ]
          },
          "MOD": {
            "d": "Returns the result of the modulo operator, the remainder after a division operation.",
            "a": "Modulo (remainder) operator.",
            "p": [
              {
                "name": "dividend",
                "detail": "The number to be divided to find the remainder."
              },
              {
                "name": "divisor",
                "detail": "The number to divide by."
              }
            ]
          },
          "MROUND": {
            "d": "Rounds one number to the nearest integer multiple of another.",
            "a": "Rounds a number to the nearest integer multiple.",
            "p": [
              {
                "name": "value",
                "detail": "The number to round to the nearest integer multiple of another."
              },
              {
                "name": "factor",
                "detail": "The number to whose multiples `value` will be rounded."
              }
            ]
          },
          "ODD": {
            "d": "Rounds a number up to the nearest odd integer.",
            "a": "Rounds a number up to the nearest odd integer.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round to the next greatest odd number."
              }
            ]
          },
          "SUMSQ": {
            "d": "Returns the sum of the squares of a series of numbers and/or cells.",
            "a": "Sum of squares.",
            "p": [
              {
                "name": "value1",
                "detail": "The first number or range whose squares to add together."
              },
              {
                "name": "value2",
                "detail": "Additional numbers or ranges whose squares to add to the square(s) of `value1`."
              }
            ]
          },
          "COMBIN": {
            "d": "Returns the number of ways to choose some number of objects from a pool of a given size of objects.",
            "a": "Number of combinations from a set of objects.",
            "p": [
              {
                "name": "n",
                "detail": "The size of the pool of objects to choose from."
              },
              {
                "name": "k",
                "detail": "The number of objects to choose."
              }
            ]
          },
          "SUM": {
            "d": "Returns the sum of a series of numbers and/or cells.",
            "a": "Sum of a series of numbers and/or cells.",
            "p": [
              {
                "name": "value1",
                "detail": "The first number or range to add together."
              },
              {
                "name": "value2",
                "detail": "Additional numbers or ranges to add to `value1`."
              }
            ]
          },
          "SUBTOTAL": {
            "d": "Returns a subtotal for a vertical range of cells using a specified aggregation function.",
            "a": "Subtotal for a range using a specific function.",
            "p": [
              {
                "name": "function_code",
                "detail": "The function to use in subtotal aggregation."
              },
              {
                "name": "range1",
                "detail": "The first range over which to calculate a subtotal."
              },
              {
                "name": "range2",
                "detail": "Additional ranges over which to calculate subtotals."
              }
            ]
          },
          "ASIN": {
            "d": "Returns the inverse sine of a value, in radians.",
            "a": "Inverse sine of a value, in radians.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the inverse sine. Must be between `-1` and `1`, inclusive."
              }
            ]
          },
          "COUNTIF": {
            "d": "Returns a conditional count across a range.",
            "a": "A conditional count across a range.",
            "p": [
              {
                "name": "range",
                "detail": "The range that is tested against `criterion`."
              },
              {
                "name": "criterion",
                "detail": "The pattern or test to apply to `range`."
              }
            ]
          },
          "RADIANS": {
            "d": "Converts an angle value in degrees to radians.",
            "a": "Converts an angle value in degrees to radians.",
            "p": [
              {
                "name": "angle",
                "detail": "The angle to convert from degrees to radians."
              }
            ]
          },
          "RAND": {
            "d": "Returns a random number between 0 inclusive and 1 exclusive.",
            "a": "A random number between 0 inclusive and 1 exclusive.",
            "p": []
          },
          "COUNTUNIQUE": {
            "d": "Counts the number of unique values in a list of specified values and ranges.",
            "a": "Counts number of unique values in a range.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider for uniqueness."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider for uniqueness."
              }
            ]
          },
          "DEGREES": {
            "d": "Converts an angle value in radians to degrees.",
            "a": "Converts an angle value in radians to degrees.",
            "p": [
              {
                "name": "angle",
                "detail": "The angle to convert from radians to degrees."
              }
            ]
          },
          "ERFC": {
            "d": "Returns the complementary Gauss error function of a value.",
            "a": "Complementary gauss error function of a value.",
            "p": [
              {
                "name": "z",
                "detail": "The number for which to calculate the complementary Gauss error function."
              }
            ]
          },
          "EVEN": {
            "d": "Rounds a number up to the nearest even integer.",
            "a": "Rounds a number up to the nearest even integer.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round to the next greatest even number."
              }
            ]
          },
          "EXP": {
            "d": "Returns Euler's number, e (~2.718) raised to a power.",
            "a": "Euler's number, e (~2.718) raised to a power.",
            "p": [
              {
                "name": "exponent",
                "detail": "The exponent to raise e to."
              }
            ]
          },
          "FACT": {
            "d": "Returns the factorial of a number.",
            "a": "Factorial of a number.",
            "p": [
              {
                "name": "value",
                "detail": "The number or reference to a number whose factorial will be calculated and returned."
              }
            ]
          },
          "FACTDOUBLE": {
            "d": 'Returns the "double factorial" of a number.',
            "a": '"double factorial" of a number.',
            "p": [
              {
                "name": "value",
                "detail": "The number or reference to a number whose double factorial will be calculated and returned."
              }
            ]
          },
          "PI": {
            "d": "Returns the value of Pi to 14 decimal places.",
            "a": "The number pi.",
            "p": []
          },
          "FLOOR": {
            "d": "Rounds a number down to the nearest integer multiple of specified significance `factor`.",
            "a": "Rounds number down to nearest multiple of a factor.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round down to the nearest integer multiple of `factor`."
              },
              {
                "name": "factor",
                "detail": "The number to whose multiples `value` will be rounded."
              }
            ]
          },
          "GCD": {
            "d": "Returns the greatest common divisor of one or more integers.",
            "a": "Greatest common divisor of one or more integers.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range whose factors to consider in a calculation to find the greatest common divisor."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges whose factors to consider to find the greatest common divisor."
              }
            ]
          },
          "RANDBETWEEN": {
            "d": "Returns a uniformly random integer between two values, inclusive.",
            "a": "Random integer between two values, inclusive.",
            "p": [
              {
                "name": "low",
                "detail": "The low end of the random range."
              },
              {
                "name": "high",
                "detail": "The high end of the random range."
              }
            ]
          },
          "ROUND": {
            "d": "Rounds a number to a certain number of decimal places according to standard rules.",
            "a": "Rounds a number according to standard rules.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round to `places` number of places."
              },
              {
                "name": "places",
                "detail": "The number of decimal places to which to round."
              }
            ]
          },
          "ROUNDDOWN": {
            "d": "Rounds a number to a certain number of decimal places, always rounding down to the next valid increment.",
            "a": "Rounds down a number.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round to `places` number of places, always rounding down."
              },
              {
                "name": "places",
                "detail": "The number of decimal places to which to round."
              }
            ]
          },
          "ROUNDUP": {
            "d": "Rounds a number to a certain number of decimal places, always rounding up to the next valid increment.",
            "a": "Rounds up a number.",
            "p": [
              {
                "name": "value",
                "detail": "The value to round to `places` number of places, always rounding up."
              },
              {
                "name": "places",
                "detail": "The number of decimal places to which to round."
              }
            ]
          },
          "SERIESSUM": {
            "d": "Given parameters `x`, `n`, `m`, and `a`, returns the power series sum a",
            "a": "Sum of a power series.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the power series. Varies depending on the type of approximation, may be angle, exponent, or some other value."
              },
              {
                "name": "n",
                "detail": "The initial power to which to raise `x` in the power series."
              },
              {
                "name": "m",
                "detail": "The additive increment by which to increase `x`."
              },
              {
                "name": "a",
                "detail": "The array or range containing the coefficients of the power series."
              }
            ]
          },
          "SIGN": {
            "d": "Given an input number, returns `-1` if it is negative, `1` if positive, and `0` if it is zero.",
            "a": "Sign of a provided number (+/-/0).",
            "p": [
              {
                "name": "value",
                "detail": "The value whose sign will be evaluated."
              }
            ]
          },
          "SIN": {
            "d": "Returns the sine of an angle provided in radians.",
            "a": "Sine of an angle provided in radians.",
            "p": [
              {
                "name": "angle",
                "detail": "The angle to find the sine of, in radians."
              }
            ]
          },
          "SINH": {
            "d": "Returns the hyperbolic sine of any real number.",
            "a": "Hyperbolic sine of any real number.",
            "p": [
              {
                "name": "value",
                "detail": "Any real value to calculate the hyperbolic sine of."
              }
            ]
          },
          "SQRT": {
            "d": "Returns the positive square root of a positive number.",
            "a": "Positive square root of a positive number.",
            "p": [
              {
                "name": "value",
                "detail": "The number for which to calculate the positive square root."
              }
            ]
          },
          "SQRTPI": {
            "d": "Returns the positive square root of the product of Pi and the given positive number.",
            "a": "Square root of the product of pi and number.",
            "p": [
              {
                "name": "value",
                "detail": "The number which will be multiplied by Pi and have the product's square root returned"
              }
            ]
          },
          "GAMMALN": {
            "d": "Returns the logarithm of a specified Gamma function, base e (Euler's number).",
            "a": "Logarithm of gamma function.",
            "p": [
              {
                "name": "value",
                "detail": "The input to the Gamma function. The natural logarithm of Gamma(`value`) will be returned."
              }
            ]
          },
          "COS": {
            "d": "Returns the cosine of an angle provided in radians.",
            "a": "Cosine of an angle provided in radians.",
            "p": [
              {
                "name": "angle",
                "detail": "The angle to find the cosine of, in radians."
              }
            ]
          },
          "TRUNC": {
            "d": "Truncates a number to a certain number of significant digits by omitting less significant digits.",
            "a": "Truncates a number.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be truncated."
              },
              {
                "name": "places",
                "detail": "The number of significant digits to the right of the decimal point to retain."
              }
            ]
          },
          "QUOTIENT": {
            "d": "Returns one number divided by another.",
            "a": "One number divided by another.",
            "p": [
              {
                "name": "dividend",
                "detail": "The number to be divided."
              },
              {
                "name": "divisor",
                "detail": "The number to divide by."
              }
            ]
          },
          "POWER": {
            "d": "Returns a number raised to a power.",
            "a": "A number raised to a power.",
            "p": [
              {
                "name": "base",
                "detail": "The number to raise to the `exponent` power."
              },
              {
                "name": "exponent",
                "detail": "The exponent to raise `base` to."
              }
            ]
          },
          "SUMIFS": {
            "d": "Returns the sum of a range depending on multiple criteria.",
            "a": "Sums a range depending on multiple criteria.",
            "p": [
              {
                "name": "sum_range",
                "detail": "The range to sum."
              },
              {
                "name": "criteria_range1",
                "detail": "The range to check against criterion1."
              },
              {
                "name": "criterion1",
                "detail": "The pattern or test to apply to criteria_range1."
              },
              {
                "name": "criteria_range2",
                "detail": "Additional ranges to check."
              }
            ]
          },
          "COUNTIFS": {
            "d": "Returns the count of a range depending on multiple criteria.",
            "a": "Count values depending on multiple criteria.",
            "p": [
              {
                "name": "criteria_range1",
                "detail": "The range to check against `criterion1`."
              },
              {
                "name": "criterion1",
                "detail": "The pattern or test to apply to `criteria_range1`."
              },
              {
                "name": "criteria_range2",
                "detail": "Additional ranges to check."
              }
            ]
          },
          "PRODUCT": {
            "d": "Returns the result of multiplying a series of numbers together.",
            "a": "Result of multiplying a series of numbers together.",
            "p": [
              {
                "name": "factor1",
                "detail": "The first number or range to calculate for the product."
              },
              {
                "name": "factor2",
                "detail": "More numbers or ranges to calculate for the product."
              }
            ]
          },
          "HARMEAN": {
            "d": "Calculates the harmonic mean of a dataset.",
            "a": "The harmonic mean of a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the population."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the population."
              }
            ]
          },
          "HYPGEOMDIST": {
            "d": "Calculates the probability of drawing a certain number of successes in a certain number of tries given a population of a certain size containing a certain number of successes, without replacement of draws.",
            "a": "Hypergeometric distribution probability.",
            "p": [
              {
                "name": "num_successes",
                "detail": "The desired number of successes."
              },
              {
                "name": "num_draws",
                "detail": "The number of permitted draws."
              },
              {
                "name": "successes_in_pop",
                "detail": "The total number of successes in the population."
              },
              {
                "name": "pop_size",
                "detail": "The total size of the population"
              },
              {
                "name": "cumulative",
                "detail": "Determine the logical value of the function form. \n\nIf cumulative is TRUE(), HYPGEOM.DIST returns the cumulative distribution function;\n\nif FALSE(), it returns the probability density function."
              }
            ]
          },
          "INTERCEPT": {
            "d": "Calculates the y-value at which the line resulting from linear regression of a dataset will intersect the y-axis (x=0).",
            "a": "Y-intercept of line derived via linear regression.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "KURT": {
            "d": 'Calculates the kurtosis of a dataset, which describes the shape, and in particular the "peakedness" of that dataset.',
            "a": "Kurtosis of a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the dataset."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the dataset."
              }
            ]
          },
          "LARGE": {
            "d": "Returns the nth largest element from a data set, where n is user-defined.",
            "a": "Nth largest element from a data set.",
            "p": [
              {
                "name": "data",
                "detail": "Array or range containing the dataset to consider."
              },
              {
                "name": "n",
                "detail": "The rank from largest to smallest of the element to return."
              }
            ]
          },
          "STDEVA": {
            "d": "Calculates the standard deviation based on a sample, setting text to the value `0`.",
            "a": "Standard deviation of sample (text as 0).",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the sample."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the sample."
              }
            ]
          },
          "STDEVP": {
            "d": "Calculates the standard deviation based on an entire population.",
            "a": "Standard deviation of an entire population.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the population."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the population."
              }
            ]
          },
          "GEOMEAN": {
            "d": "Calculates the geometric mean of a dataset.",
            "a": "The geometric mean of a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the population."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the population."
              }
            ]
          },
          "RANK_EQ": {
            "d": "Returns the rank of a specified value in a dataset. If there is more than one entry of the same value in the dataset, the top rank of the entries will be returned.",
            "a": "Top rank of a specified value in a dataset.",
            "p": [
              {
                "name": "value",
                "detail": "The value whose rank will be determined."
              },
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "is_ascending",
                "detail": "Whether to consider the values in `data` in descending or ascending order. If omitted, the default is descending (FALSE)."
              }
            ]
          },
          "RANK_AVG": {
            "d": "Returns the rank of a specified value in a dataset. If there is more than one entry of the same value in the dataset, the average rank of the entries will be returned.",
            "a": "Average rank of a specified value in a dataset.",
            "p": [
              {
                "name": "value",
                "detail": "The value whose rank will be determined."
              },
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "is_ascending",
                "detail": "Whether to consider the values in `data` in descending or ascending order. If omitted, the default is descending (FALSE)."
              }
            ]
          },
          "PERCENTRANK_EXC": {
            "d": "Returns the percentage rank (percentile) from 0 to 1 exclusive of a specified value in a dataset.",
            "a": "Percentage rank (percentile) from 0 to 1 exclusive.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "value",
                "detail": "The value whose percentage rank will be determined."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant figures to use in the calculation. Default is 3."
              }
            ]
          },
          "PERCENTRANK_INC": {
            "d": "Returns the percentage rank (percentile) from 0 to 1 inclusive of a specified value in a dataset.",
            "a": "Percentage rank (percentile) from 0 to 1 inclusive.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "value",
                "detail": "The value whose percentage rank will be determined."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant figures to use in the calculation. Default is 3."
              }
            ]
          },
          "FORECAST": {
            "d": "Calculates the expected y-value for a specified x based on a linear regression of a dataset.",
            "a": "Expected y-value based of linear regression.",
            "p": [
              {
                "name": "x",
                "detail": "The value on the x-axis to forecast."
              },
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "FISHERINV": {
            "d": "Returns the inverse Fisher transformation of a specified value.",
            "a": "Inverse fisher transformation of a specified value.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the inverse Fisher transformation."
              }
            ]
          },
          "FISHER": {
            "d": "Returns the Fisher transformation of a specified value.",
            "a": "Fisher transformation of a specified value.",
            "p": [
              {
                "name": "value",
                "detail": "The value for which to calculate the Fisher transformation."
              }
            ]
          },
          "MODE_SNGL": {
            "d": "Returns the most commonly occurring value in a dataset.",
            "a": "Most commonly occurring value in a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating mode."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating mode."
              }
            ]
          },
          "WEIBULL_DIST": {
            "d": "Returns the value of the Weibull distribution function (or Weibull cumulative distribution function) for a specified shape and scale.",
            "a": "Weibull distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the Weibull distribution function."
              },
              {
                "name": "shape",
                "detail": "The shape parameter of the Weibull distribution function."
              },
              {
                "name": "scale",
                "detail": "The scale parameter of the Weibull distribution function."
              },
              {
                "name": "cumulative",
                "detail": "Whether to use the cumulative distribution function."
              }
            ]
          },
          "COUNT": {
            "d": "Returns the number of numeric values in a dataset.",
            "a": "The number of numeric values in dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when counting."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when counting."
              }
            ]
          },
          "COUNTA": {
            "d": "Returns the number of values in a dataset.",
            "a": "The number of values in a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when counting."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when counting."
              }
            ]
          },
          "AVEDEV": {
            "d": "Calculates the average of the magnitudes of deviations of data from a dataset's mean.",
            "a": "Average magnitude of deviations from mean.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the sample."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the sample."
              }
            ]
          },
          "AVERAGE": {
            "d": "Returns the numerical average value in a dataset, ignoring text.",
            "a": "Numerical average value in a dataset, ignoring text.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating the average value."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating the average value."
              }
            ]
          },
          "AVERAGEA": {
            "d": "Returns the numerical average value in a dataset.",
            "a": "Numerical average value in a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating the average value."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating the average value."
              }
            ]
          },
          "BINOM_DIST": {
            "d": "Calculates the probability of drawing a certain number of successes (or a maximum number of successes) in a certain number of tries given a population of a certain size containing a certain number of successes, with replacement of draws.",
            "a": "Binomial distribution probability.",
            "p": [
              {
                "name": "num_successes",
                "detail": "The number of successes for which to calculate the probability in `num_trials` trials."
              },
              {
                "name": "num_trials",
                "detail": "The number of independent trials."
              },
              {
                "name": "prob_success",
                "detail": "The probability of success in any given trial."
              },
              {
                "name": "cumulative",
                "detail": "Whether to use the binomial cumulative distribution."
              }
            ]
          },
          "BINOM_INV": {
            "d": "Calculates the smallest value for which the cumulative binomial distribution is greater than or equal to a specified criteria.",
            "a": "Inverse cumulative binomial distribution function.",
            "p": [
              {
                "name": "num_trials",
                "detail": "The number of independent trials."
              },
              {
                "name": "prob_success",
                "detail": "The probability of success in any given trial."
              },
              {
                "name": "target_prob",
                "detail": "The desired threshold probability."
              }
            ]
          },
          "CONFIDENCE_NORM": {
            "d": "Calculates the width of half the confidence interval for a normal distribution.",
            "a": "Confidence interval for a normal distribution.",
            "p": [
              {
                "name": "alpha",
                "detail": "One minus the desired confidence level. E.g. `0.1` for `0.9`, or 90%, confidence."
              },
              {
                "name": "standard_deviation",
                "detail": "The standard deviation of the population."
              },
              {
                "name": "pop_size",
                "detail": "The size of the population."
              }
            ]
          },
          "CORREL": {
            "d": "Calculates r, the Pearson product-moment correlation coefficient of a dataset.",
            "a": "Pearson Product-Moment Correlation Coefficient.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "COVARIANCE_P": {
            "d": "Calculates the covariance of a dataset.",
            "a": "The covariance of a dataset.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "COVARIANCE_S": {
            "d": "Calculates the sample covariance of a dataset.",
            "a": "The sample covariance of a dataset.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "DEVSQ": {
            "d": "Calculates the sum of squares of deviations based on a sample.",
            "a": "The sum of squares of deviations based on a sample.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the sample."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the sample."
              }
            ]
          },
          "EXPON_DIST": {
            "d": "Returns the value of the exponential distribution function with a specified lambda at a specified value.",
            "a": "Exponential distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the exponential distribution function."
              },
              {
                "name": "lambda",
                "detail": "The lambda to specify the exponential distribution function."
              },
              {
                "name": "cumulative",
                "detail": "Whether to use the exponential cumulative distribution."
              }
            ]
          },
          "AVERAGEIF": {
            "d": "Returns the average of a range depending on criteria.",
            "a": "Average of values depending on criteria.",
            "p": [
              {
                "name": "criteria_range",
                "detail": "The range to check against `criterion`."
              },
              {
                "name": "criterion",
                "detail": "The pattern or test to apply to `criteria_range`."
              },
              {
                "name": "average_range",
                "detail": "The range to average. If not included, `criteria_range` is used for the average instead."
              }
            ]
          },
          "AVERAGEIFS": {
            "d": "Returns the average of a range depending on multiple criteria.",
            "a": "Average of values depending on multiple criteria.",
            "p": [
              {
                "name": "average_range",
                "detail": "The range to average."
              },
              {
                "name": "criteria_range1",
                "detail": "The range to check against `criterion1`."
              },
              {
                "name": "criterion1",
                "detail": "The pattern or test to apply to `criteria_range1`."
              },
              {
                "name": "criteria_range2",
                "detail": "Additional ranges to check."
              }
            ]
          },
          "PERMUT": {
            "d": "Returns the number of ways to choose some number of objects from a pool of a given size of objects, considering order.",
            "a": "Number of permutations from a number of objects.",
            "p": [
              {
                "name": "n",
                "detail": "The size of the pool of objects to choose from."
              },
              {
                "name": "k",
                "detail": "The number of objects to choose."
              }
            ]
          },
          "TRIMMEAN": {
            "d": "Calculates the mean of a dataset excluding some proportion of data from the high and low ends of the dataset.",
            "a": "Mean of a dataset excluding high/low ends.",
            "p": [
              {
                "name": "data",
                "detail": "Array or range containing the dataset to consider."
              },
              {
                "name": "exclude_proportion",
                "detail": "The proportion of the dataset to exclude, from the extremities of the set."
              }
            ]
          },
          "PERCENTILE_EXC": {
            "d": "Returns the value at a given percentile of a dataset exclusive of 0 and 1.",
            "a": "Value at a given percentile of a dataset exclusive of 0 and 1.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "percentile",
                "detail": "The percentile, exclusive of 0 and 1, whose value within 'data' will be calculated and returned."
              }
            ]
          },
          "PERCENTILE_INC": {
            "d": "Returns the value at a given percentile of a dataset.",
            "a": "Value at a given percentile of a dataset.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "percentile",
                "detail": "The percentile whose value within `data` will be calculated and returned.`"
              }
            ]
          },
          "PEARSON": {
            "d": "Calculates r, the Pearson product-moment correlation coefficient of a dataset.",
            "a": "Pearson Product-Moment Correlation Coefficient.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "NORM_S_INV": {
            "d": "Returns the value of the inverse standard normal distribution function for a specified value.",
            "a": "Inverse standard normal distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the inverse standard normal distribution function."
              }
            ]
          },
          "NORM_S_DIST": {
            "d": "Returns the value of the standard normal cumulative distribution function for a specified value.",
            "a": "Standard normal cumulative distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the standard normal cumulative distribution function."
              },
              {
                "name": "cumulative",
                "detail": "Determine the logical value of the function form. \n\nIf TRUE(), it returns the cumulative distribution function;\n\nIf it is FALSE(), it returns the probability density function."
              }
            ]
          },
          "NORM_INV": {
            "d": "Returns the value of the inverse normal distribution function for a specified value, mean, and standard deviation.",
            "a": "Inverse normal distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the inverse normal distribution function."
              },
              {
                "name": "mean",
                "detail": "The mean (mu) of the normal distribution function."
              },
              {
                "name": "standard_deviation",
                "detail": "The standard deviation (sigma) of the normal distribution function."
              }
            ]
          },
          "NORM_DIST": {
            "d": "Returns the value of the normal distribution function (or normal cumulative distribution function) for a specified value, mean, and standard deviation.",
            "a": "Normal distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the normal distribution function."
              },
              {
                "name": "mean",
                "detail": "The mean (mu) of the normal distribution function."
              },
              {
                "name": "standard_deviation",
                "detail": "The standard deviation (sigma) of the normal distribution function."
              },
              {
                "name": "cumulative",
                "detail": "Whether to use the normal cumulative distribution function rather than the distribution function."
              }
            ]
          },
          "NEGBINOM_DIST": {
            "d": "Calculates the probability of drawing a certain number of failures before a certain number of successes given a probability of success in independent trials.",
            "a": "Negative binomial distribution probability.",
            "p": [
              {
                "name": "num_failures",
                "detail": "The number of failures to model."
              },
              {
                "name": "num_successes",
                "detail": "The number of successes to model."
              },
              {
                "name": "prob_success",
                "detail": "The probability of success in any given trial."
              },
              {
                "name": "cumulative",
                "detail": "Determine the logical value of the function form. \n\nIf TRUE(), it returns the cumulative distribution function;\n\nIf it is FALSE(), it returns the probability density function."
              }
            ]
          },
          "MINA": {
            "d": "Returns the minimum numeric value in a dataset.",
            "a": "Minimum numeric value in a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating the minimum value."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating the minimum value."
              }
            ]
          },
          "MIN": {
            "d": "Returns the minimum value in a numeric dataset.",
            "a": "Minimum value in a numeric dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating the minimum value."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating the minimum value."
              }
            ]
          },
          "MEDIAN": {
            "d": "Returns the median value in a numeric dataset.",
            "a": "Median value in a numeric dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating the median value."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating the median value."
              }
            ]
          },
          "MAXA": {
            "d": "Returns the maximum numeric value in a dataset.",
            "a": "Maximum numeric value in a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating the maximum value."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating the maximum value."
              }
            ]
          },
          "MAX": {
            "d": "Returns the maximum value in a numeric dataset.",
            "a": "Maximum value in a numeric dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range to consider when calculating the maximum value."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to consider when calculating the maximum value."
              }
            ]
          },
          "LOGNORM_INV": {
            "d": "Returns the value of the inverse log-normal cumulative distribution with given mean and standard deviation at a specified value.",
            "a": "Inverse log-normal cumulative distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the inverse log-normal cumulative distribution function."
              },
              {
                "name": "mean",
                "detail": "The mean (mu) of the inverse log-normal cumulative distribution function."
              },
              {
                "name": "standard_deviation",
                "detail": "The standard deviation (sigma) of the inverse log-normal cumulative distribution function."
              }
            ]
          },
          "LOGNORM_DIST": {
            "d": "Returns the value of the log-normal cumulative distribution with given mean and standard deviation at a specified value.",
            "a": "Log-normal cumulative distribution probability.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the log-normal cumulative distribution function."
              },
              {
                "name": "mean",
                "detail": "The mean (mu) of the log-normal cumulative distribution function."
              },
              {
                "name": "standard_deviation",
                "detail": "The standard deviation (sigma) of the log-normal cumulative distribution function."
              },
              {
                "name": "cumulative",
                "detail": "Determine the logical value of the function form. \n\nIf TRUE(), it returns the cumulative distribution function;\n\nIf it is FALSE(), it returns the probability density function."
              }
            ]
          },
          "Z_TEST": {
            "d": "Returns the one-tailed p-value of a Z-test with standard distribution.",
            "a": "One-tailed p-value of a z-test.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "value",
                "detail": "The test statistic to use in the Z-test."
              },
              {
                "name": "standard_deviation",
                "detail": "The standard deviation to assume for the Z-test. If this is not provided, the standard deviation of the data will be used."
              }
            ]
          },
          "PROB": {
            "d": "Given a set of values and corresponding probabilities, calculates the probability that a value chosen at random falls between two limits.",
            "a": "Probability values lie in a range.",
            "p": [
              {
                "name": "data",
                "detail": "Array or range containing the dataset to consider."
              },
              {
                "name": "probabilities",
                "detail": "Array or range containing probabilities corresponding to `data`."
              },
              {
                "name": "low_limit",
                "detail": "The lower bound on the value range for which to calculate the probability."
              },
              {
                "name": "high_limit",
                "detail": "The upper bound on the value range for which to calculate the probability."
              }
            ]
          },
          "QUARTILE_EXC": {
            "d": "Returns a value nearest to a specified quartile of a dataset exclusive of 0 and 4.",
            "a": "Value nearest to a specific quartile of a dataset exclusive of 0 and 4.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "quartile_number",
                "detail": "Which quartile to return."
              }
            ]
          },
          "QUARTILE_INC": {
            "d": "Returns a value nearest to a specified quartile of a dataset.",
            "a": "Value nearest to a specific quartile of a dataset.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "quartile_number",
                "detail": "Which quartile value to return."
              }
            ]
          },
          "POISSON_DIST": {
            "d": "Returns the value of the Poisson distribution function (or Poisson cumulative distribution function) for a specified value and mean.",
            "a": "Poisson distribution function.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the Poisson distribution function."
              },
              {
                "name": "mean",
                "detail": "The mean (mu) of the Poisson distribution function."
              },
              {
                "name": "cumulative",
                "detail": "Whether to use the Poisson cumulative distribution function rather than the distribution function."
              }
            ]
          },
          "RSQ": {
            "d": "Calculates the square of r, the Pearson product-moment correlation coefficient of a dataset.",
            "a": "Square of the correlation coefficient.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "T_DIST": {
            "d": "Calculates the left tail probability for a Student's t-distribution with a given input (x).",
            "a": "The left-tailed Student's t-distribution",
            "p": [
              {
                "name": "x",
                "detail": "The input to the t-distribution function."
              },
              {
                "name": "degrees_freedom",
                "detail": "The number of degrees of freedom."
              },
              {
                "name": "cumulative",
                "detail": "If cumulative is TRUE, T.DIST returns the cumulative distribution function; if FALSE, it returns the probability density function."
              }
            ]
          },
          "T_DIST_2T": {
            "d": "Calculates the probability for two tailed Student's t-distribution with a given input (x).",
            "a": "The two tailed Student's t-distribution",
            "p": [
              {
                "name": "x",
                "detail": "The input to the t-distribution function."
              },
              {
                "name": "degrees_freedom",
                "detail": "The number of degrees of freedom."
              }
            ]
          },
          "T_DIST_RT": {
            "d": "Calculates the right tail probability for a Student's t-distribution with a given input (x).",
            "a": "The right-tailed Student's t-distribution",
            "p": [
              {
                "name": "x",
                "detail": "The input to the t-distribution function."
              },
              {
                "name": "degrees_freedom",
                "detail": "The number of degrees of freedom."
              }
            ]
          },
          "T_INV": {
            "d": "Calculates the negative inverse of the one-tailed TDIST function.",
            "a": "T.INV",
            "p": [
              {
                "name": "probability",
                "detail": "The probability associated with the two-tailed t-distribution."
              },
              {
                "name": "degrees_freedom",
                "detail": "The number of degrees of freedom."
              }
            ]
          },
          "T_INV_2T": {
            "d": "Calculates the inverse of the two-tailed TDIST function.",
            "a": "T.INV.2T",
            "p": [
              {
                "name": "probability",
                "detail": "The probability associated with the two-tailed t-distribution."
              },
              {
                "name": "degrees_freedom",
                "detail": "The number of degrees of freedom."
              }
            ]
          },
          "T_TEST": {
            "d": "t-test. Returns the probability associated with Student's t-test. Determines whether two samples are likely to have come from the same two underlying populations that have the same mean.",
            "a": "Returns the probability associated with t-test.",
            "p": [
              {
                "name": "range1",
                "detail": "The first sample of data or group of cells to consider for the t-test."
              },
              {
                "name": "range2",
                "detail": "The second sample of data or group of cells to consider for the t-test."
              },
              {
                "name": "tails",
                "detail": "Specifies the number of distribution tails."
              },
              {
                "name": "type",
                "detail": "Specifies the type of t-test."
              }
            ]
          },
          "F_DIST": {
            "d": "Calculates the left-tailed F probability distribution (degree of diversity) for two data sets with given input x. Alternately called Fisher-Snedecor distribution or Snedecor's F distribution.",
            "a": "F probability distribution (left-tailed).",
            "p": [
              {
                "name": "x",
                "detail": "The input to the F probability distribution function. The value at which to evaluate the function."
              },
              {
                "name": "degrees_freedom1",
                "detail": "The numerator of the number of degrees of freedom."
              },
              {
                "name": "degrees_freedom2",
                "detail": "The denominator of the number of degrees of freedom."
              },
              {
                "name": "cumulative",
                "detail": "Logical value that determines the form of the function."
              }
            ]
          },
          "F_DIST_RT": {
            "d": "Calculates the right-tailed F probability distribution (degree of diversity) for two data sets with given input x. Alternately called Fisher-Snedecor distribution or Snedecor's F distribution.",
            "a": "F probability distribution.",
            "p": [
              {
                "name": "x",
                "detail": "The input to the F probability distribution function. The value at which to evaluate the function."
              },
              {
                "name": "degrees_freedom1",
                "detail": "The numerator of the number of degrees of freedom."
              },
              {
                "name": "degrees_freedom2",
                "detail": "The denominator of the number of degrees of freedom."
              }
            ]
          },
          "VAR_P": {
            "d": "Calculates the variance based on an entire population.",
            "a": "Variance of entire population.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the population."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the population."
              }
            ]
          },
          "VAR_S": {
            "d": "Calculates the variance based on a sample.",
            "a": "Variance.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the sample."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the sample."
              }
            ]
          },
          "VARA": {
            "d": "Calculates the variance based on a sample, setting text to the value `0`.",
            "a": "Variance of sample (text as 0).",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the sample."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the sample."
              }
            ]
          },
          "VARPA": {
            "d": "Calculates the variance based on an entire population, setting text to the value `0`.",
            "a": "Variance of entire population (text as 0).",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the population."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the population."
              }
            ]
          },
          "STEYX": {
            "d": "Calculates the standard error of the predicted y-value for each x in the regression of a dataset.",
            "a": "Standard error of predicted y-values in regression.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "STANDARDIZE": {
            "d": "Calculates the normalized equivalent of a random variable given mean and standard deviation of the distribution.",
            "a": "Normalized equivalent of a random variable.",
            "p": [
              {
                "name": "value",
                "detail": "The value of the random variable to normalize."
              },
              {
                "name": "mean",
                "detail": "The mean of the distribution."
              },
              {
                "name": "standard_deviation",
                "detail": "The standard deviation of the distribution."
              }
            ]
          },
          "SMALL": {
            "d": "Returns the nth smallest element from a data set, where n is user-defined.",
            "a": "Nth smallest element in a data set.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the dataset to consider."
              },
              {
                "name": "n",
                "detail": "The rank from smallest to largest of the element to return."
              }
            ]
          },
          "SLOPE": {
            "d": "Calculates the slope of the line resulting from linear regression of a dataset.",
            "a": "Slope of line from linear regression of data.",
            "p": [
              {
                "name": "data_y",
                "detail": "The range representing the array or matrix of dependent data."
              },
              {
                "name": "data_x",
                "detail": "The range representing the array or matrix of independent data."
              }
            ]
          },
          "SKEW": {
            "d": "Calculates the skewness of a dataset, which describes the symmetry of that dataset about the mean.",
            "a": "Skewness of a dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the dataset."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the dataset."
              }
            ]
          },
          "SKEW_P": {
            "d": "Calculates the skewness of a dataset, which describes the symmetry of that dataset about the mean. This assumes the dataset is for the population.",
            "a": "Skewness of a population's dataset.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value or range of the dataset."
              },
              {
                "name": "value2",
                "detail": "Additional values or ranges to include in the dataset."
              }
            ]
          },
          "VLOOKUP": {
            "d": "Vertical lookup. Searches down the first column of a range for a key and returns the value of a specified cell in the row found.",
            "a": "Vertical lookup.",
            "p": [
              {
                "name": "search_key",
                "detail": 'The value to search for. For example, `42`, `"Cats"`, or `I24`.'
              },
              {
                "name": "range",
                "detail": "The range to consider for the search. The first column in the range is searched for the key specified in `search_key`."
              },
              {
                "name": "index",
                "detail": "The column index of the value to be returned, where the first column in `range` is numbered 1."
              },
              {
                "name": "is_sorted",
                "detail": "Indicates whether the column to be searched (the first column of the specified range) is sorted, in which case the closest match for `search_key` will be returned."
              }
            ]
          },
          "HLOOKUP": {
            "d": "Horizontal lookup. Searches across the first row of a range for a key and returns the value of a specified cell in the column found.",
            "a": "Horizontal lookup",
            "p": [
              {
                "name": "search_key",
                "detail": 'The value to search for. For example, `42`, `"Cats"`, or `I24`.'
              },
              {
                "name": "range",
                "detail": "The range to consider for the search. The first row in the range is searched for the key specified in `search_key`."
              },
              {
                "name": "index",
                "detail": "The row index of the value to be returned, where the first row in `range` is numbered 1."
              },
              {
                "name": "is_sorted",
                "detail": "Indicates whether the row to be searched (the first row of the specified range) is sorted."
              }
            ]
          },
          "LOOKUP": {
            "d": "Looks through a sorted row or column for a key and returns the value of the cell in a result range located in the same position as the search row or column.",
            "a": "Look up a value.",
            "p": [
              {
                "name": "search_key",
                "detail": 'The value to search for in the row or column. For example, `42`, `"Cats"`, or `I24`.'
              },
              {
                "name": "search_range|search_result_array",
                "detail": "One method of using this function is to provide a single sorted row or column `search_range` to look through for the `search_key` with a second argument `result_range`. The other way is to combine these two arguments into one `search_result_array` where the first row or column is searched and a value is returned from the last row or column in the array. If `search_key` is not found, a non-exact match may be returned."
              },
              {
                "name": "result_range",
                "detail": "The range from which to return a result. The value returned corresponds to the location where `search_key` is found in `search_range`. This range must be only a single row or column and should not be used if using the `search_result_array` method."
              }
            ]
          },
          "ADDRESS": {
            "d": "Returns a cell reference as a string.",
            "a": "Cell reference as a string.",
            "p": [
              {
                "name": "row",
                "detail": "The row number of the cell reference"
              },
              {
                "name": "column",
                "detail": "The column number (not name) of the cell reference. `A` is column number `1`."
              },
              {
                "name": "absolute_relative_mode",
                "detail": "An indicator of whether the reference is row/column absolute. `1` is row and column absolute (e.g. $A$1), `2` is row absolute and column relative (e.g. A$1), `3` is row relative and column absolute (e.g. $A1), and `4` is row and column relative (e.g. A1)."
              },
              {
                "name": "use_a1_notation",
                "detail": "A boolean indicating whether to use `A1` style notation (TRUE) or `R1C1` style notation (FALSE)."
              },
              {
                "name": "sheet",
                "detail": "Text indicating the name of the sheet into which the address points."
              }
            ]
          },
          "INDIRECT": {
            "d": "Returns a cell reference specified by a string.",
            "a": "A cell reference specified by a string.",
            "p": [
              {
                "name": "cell_reference_as_string",
                "detail": "A cell reference, written as a string with surrounding quotation marks."
              },
              {
                "name": "is_A1_notation",
                "detail": "Indicates if the cell reference is in A1 notation (TRUE) or R1C1 notation (FALSE)."
              }
            ]
          },
          "ROW": {
            "d": "Returns the row number of a specified cell.",
            "a": "Row number of a specified cell.",
            "p": [
              {
                "name": "cell_reference",
                "detail": "The cell whose row number will be returned."
              }
            ]
          },
          "ROWS": {
            "d": "Returns the number of rows in a specified array or range.",
            "a": "Number of rows in a specified array or range.",
            "p": [
              {
                "name": "range",
                "detail": "The range whose row count will be returned."
              }
            ]
          },
          "COLUMN": {
            "d": "Returns the column number of a specified cell, with `A=1`.",
            "a": "Column number of a specified cell.",
            "p": [
              {
                "name": "cell_reference",
                "detail": "The cell whose column number will be returned. Column `A` corresponds to `1`."
              }
            ]
          },
          "COLUMNS": {
            "d": "Returns the number of columns in a specified array or range.",
            "a": "Number of columns in a specified array or range.",
            "p": [
              {
                "name": "range",
                "detail": "The range whose column count will be returned."
              }
            ]
          },
          "OFFSET": {
            "d": "Returns a range reference shifted a specified number of rows and columns from a starting cell reference.",
            "a": "A range reference offset relative to a cell.",
            "p": [
              {
                "name": "cell_reference",
                "detail": "The starting point from which to count the offset rows and columns."
              },
              {
                "name": "offset_rows",
                "detail": "The number of rows to offset by."
              },
              {
                "name": "offset_columns",
                "detail": "The number of columns to offset by."
              },
              {
                "name": "height",
                "detail": "The height of the range to return starting at the offset target."
              },
              {
                "name": "width",
                "detail": "The width of the range to return starting at the offset target."
              }
            ]
          },
          "MATCH": {
            "d": "Returns the relative position of an item in a range that matches a specified value.",
            "a": "Position of item in range that matches value.",
            "p": [
              {
                "name": "search_key",
                "detail": 'The value to search for. For example, `42`, `"Cats"`, or `I24`.'
              },
              {
                "name": "range",
                "detail": "The one-dimensional array to be searched."
              },
              {
                "name": "search_type",
                "detail": "The search method. `1` (default) finds the largest value less than or equal to `search_key` when `range` is sorted in ascending order. `0` finds the exact value when `range` is unsorted. `-1` finds the smallest value greater than or equal to `search_key` when `range` is sorted in descending order."
              }
            ]
          },
          "INDEX": {
            "d": "Returns the content of a cell, specified by row and column offset.",
            "a": "Content of cell specified by row and column offset.",
            "p": [
              {
                "name": "reference",
                "detail": "The array of cells to be offset into."
              },
              {
                "name": "row",
                "detail": "The number of offset rows."
              },
              {
                "name": "column",
                "detail": "The number of offset columns."
              }
            ]
          },
          "GETPIVOTDATA": {
            "d": "Extracts an aggregated value from a pivot table that corresponds to the specified row and column headings.",
            "a": "Extracts an aggregated value from a pivot table that corresponds to the specified row and column headings.",
            "p": [
              {
                "name": "value_name",
                "detail": "The name of the value in the pivot table for which you want to get data."
              },
              {
                "name": "any_pivot_table_cell",
                "detail": "Any reference to a cell in the desired pivot table (top corner recommended)."
              },
              {
                "name": "original_column",
                "detail": "The name of the column in the original data set (not the pivot table)."
              },
              {
                "name": "pivot_item",
                "detail": "The name of the row or column shown in the pivot table corresponding to *original_column* that you want to retrieve."
              }
            ]
          },
          "CHOOSE": {
            "d": "Returns an element from a list of choices based on index.",
            "a": "An element from a list of choices based on index.",
            "p": [
              {
                "name": "index",
                "detail": "Which choice (of the up to 30 provided) to return."
              },
              {
                "name": "choice1",
                "detail": "A potential value to return. Required. May be a reference to a cell or an individual value."
              },
              {
                "name": "choice2",
                "detail": "Additional values among which to choose."
              }
            ]
          },
          "HYPERLINK": {
            "d": "Creates a hyperlink inside a cell.",
            "a": "Creates a hyperlink inside a cell.",
            "p": [
              {
                "name": "url",
                "detail": "The full URL of the link location enclosed in quotation marks, or a reference to a cell containing such a URL."
              },
              {
                "name": "link_label",
                "detail": "The text to display in the cell as the link, enclosed in quotation marks, or a reference to a cell containing such a label."
              }
            ]
          },
          "TIME": {
            "d": "Converts a provided hour, minute, and second into a time.",
            "a": "Converts hour/minute/second into a time.",
            "p": [
              {
                "name": "hour",
                "detail": "The hour component of the time."
              },
              {
                "name": "minute",
                "detail": "The minute component of the time."
              },
              {
                "name": "second",
                "detail": "The second component of the time."
              }
            ]
          },
          "TIMEVALUE": {
            "d": "Returns the fraction of a 24-hour day the time represents.",
            "a": "Converts a time string into its serial number representation.",
            "p": [
              {
                "name": "time_string",
                "detail": "The string that holds the time representation."
              }
            ]
          },
          "EOMONTH": {
            "d": "Returns a date on the last day of a month that falls a specified number of months before or after another date.",
            "a": "Last day of a month before or after a date.",
            "p": [
              {
                "name": "start_date",
                "detail": "The date from which to calculate the result."
              },
              {
                "name": "months",
                "detail": "The number of months before (negative) or after (positive) 'start_date' to consider."
              }
            ]
          },
          "EDATE": {
            "d": "Returns a date a specified number of months before or after another date.",
            "a": "Date a number of months before/after another date.",
            "p": [
              {
                "name": "start_date",
                "detail": "The date from which to calculate the result."
              },
              {
                "name": "months",
                "detail": "The number of months before (negative) or after (positive) 'start_date' to calculate."
              }
            ]
          },
          "SECOND": {
            "d": "Returns the second component of a specific time, in numeric format.",
            "a": "Second component of a specific time.",
            "p": [
              {
                "name": "time",
                "detail": "The time from which to calculate the second component"
              }
            ]
          },
          "MINUTE": {
            "d": "Returns the minute component of a specific time, in numeric format.",
            "a": "Minute component of a specific time.",
            "p": [
              {
                "name": "time",
                "detail": "The time from which to calculate the minute component."
              }
            ]
          },
          "HOUR": {
            "d": "Returns the hour component of a specific time, in numeric format.",
            "a": "Hour component of a specific time.",
            "p": [
              {
                "name": "time",
                "detail": "The time from which to calculate the hour component."
              }
            ]
          },
          "NOW": {
            "d": "Returns the current date and time as a date value.",
            "a": "Current date and time as a date value.",
            "p": []
          },
          "NETWORKDAYS": {
            "d": "Returns the number of net working days between two provided days.",
            "a": "Net working days between two provided days.",
            "p": [
              {
                "name": "start_date",
                "detail": "The start date of the period from which to calculate the number of net working days."
              },
              {
                "name": "end_date",
                "detail": "The end date of the period from which to calculate the number of net working days."
              },
              {
                "name": "holidays",
                "detail": "A range or array constant containing the date serial numbers to consider holidays."
              }
            ]
          },
          "NETWORKDAYS_INTL": {
            "d": "Returns the number of net working days between two provided days excluding specified weekend days and holidays.",
            "a": "Net working days between two dates (specifying weekends).",
            "p": [
              {
                "name": "start_date",
                "detail": "The start date of the period from which to calculate the number of net working days."
              },
              {
                "name": "end_date",
                "detail": "The end date of the period from which to calculate the number of net working days."
              },
              {
                "name": "weekend",
                "detail": "A number or string representing which days of the week are considered weekends."
              },
              {
                "name": "holidays",
                "detail": "A range or array constant containing the dates to consider as holidays."
              }
            ]
          },
          "ISOWEEKNUM": {
            "d": "Returns a number representing the ISO week of the year where the provided date falls.",
            "a": "ISO week number of the year.",
            "p": [
              {
                "name": "date",
                "detail": "The date for which to determine the ISO week number. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              }
            ]
          },
          "WEEKNUM": {
            "d": "Returns a number representing the week of the year where the provided date falls.",
            "a": "Week number of the year.",
            "p": [
              {
                "name": "date",
                "detail": "The date for which to determine the week number. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "type",
                "detail": "A number representing the day that a week starts on. Sunday = 1."
              }
            ]
          },
          "WEEKDAY": {
            "d": "Returns a number representing the day of the week of the date provided.",
            "a": "Day of the week of the date provided (as number).",
            "p": [
              {
                "name": "date",
                "detail": "The date for which to determine the day of the week. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "type",
                "detail": "A number indicating which numbering system to use to represent weekdays. By default, counts starting with Sunday = 1."
              }
            ]
          },
          "DAY": {
            "d": "Returns the day of the month that a specific date falls on, in numeric format.",
            "a": "Day of the month that a specific date falls on.",
            "p": [
              {
                "name": "date",
                "detail": "The date from which to extract the day."
              }
            ]
          },
          "DAYS": {
            "d": "Returns the number of days between two dates.",
            "a": "Number of days between two dates.",
            "p": [
              {
                "name": "end_date",
                "detail": "The end of the date range."
              },
              {
                "name": "start_date",
                "detail": "The start of the date range."
              }
            ]
          },
          "DAYS360": {
            "d": "Returns the difference between two days based on the 360 day year used in some financial interest calculations.",
            "a": "Days between two dates on a 360-day year.",
            "p": [
              {
                "name": "start_date",
                "detail": "The start date to consider in the calculation. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "end_date",
                "detail": "The end date to consider in the calculation. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "method",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "DATE": {
            "d": "Converts a provided year, month, and day into a date.",
            "a": "Converts year/month/day into a date.",
            "p": [
              {
                "name": "year",
                "detail": "The year component of the date."
              },
              {
                "name": "month",
                "detail": "The month component of the date."
              },
              {
                "name": "day",
                "detail": "The day component of the date."
              }
            ]
          },
          "DATEVALUE": {
            "d": "Converts a provided date string in a known format to a date value.",
            "a": "Converts a date string to a date value.",
            "p": [
              {
                "name": "date_string",
                "detail": "The string representing the date."
              }
            ]
          },
          "DATEDIF": {
            "d": "Calculates the number of days, months, or years between two dates.",
            "a": "Date Difference.",
            "p": [
              {
                "name": "start_date",
                "detail": "The start date to consider in the calculation. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "end_date",
                "detail": "The end date to consider in the calculation. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "unit",
                "detail": 'A string abbreviation for unit of time. For example, "M" for month. Accepted values are "Y","M","D","MD","YM","YD".'
              }
            ]
          },
          "WORKDAY": {
            "d": "Calculates the date after a number of working days from a specified start date.",
            "a": "Number of working days from start date.",
            "p": [
              {
                "name": "start_date",
                "detail": "The date from which to begin counting."
              },
              {
                "name": "num_days",
                "detail": "The number of working days to advance from `start_date`. If negative, counts backwards."
              },
              {
                "name": "holidays",
                "detail": "A range or array constant containing the dates to consider holidays."
              }
            ]
          },
          "WORKDAY_INTL": {
            "d": "Calculates the date after a specified number of workdays excluding specified weekend days and holidays.",
            "a": "Date after a number of workdays (specifying weekends).",
            "p": [
              {
                "name": "start_date",
                "detail": "The date from which to begin counting."
              },
              {
                "name": "num_days",
                "detail": "The number of working days to advance from `start_date`. If negative, counts backwards."
              },
              {
                "name": "weekend",
                "detail": "A number or string representing which days of the week are considered weekends."
              },
              {
                "name": "holidays",
                "detail": "A range or array constant containing the dates to consider holidays."
              }
            ]
          },
          "YEAR": {
            "d": "Returns the year specified by a given date.",
            "a": "Year specified by a given date.",
            "p": [
              {
                "name": "date",
                "detail": "The date from which to extract the year."
              }
            ]
          },
          "YEARFRAC": {
            "d": "Returns the number of years, including fractional years, between two dates using a specified day count convention.",
            "a": "Exact number of years between two dates.",
            "p": [
              {
                "name": "start_date",
                "detail": "The start date to consider in the calculation. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "end_date",
                "detail": "The end date to consider in the calculation. Must be a reference to a cell containing a date, a function returning a date type, or a number."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "TODAY": {
            "d": "Returns the current date as a date value.",
            "a": "Current date as a date value.",
            "p": []
          },
          "MONTH": {
            "d": "Returns the month of the year a specific date falls in, in numeric format.",
            "a": "Month of the year a specific date falls in.",
            "p": [
              {
                "name": "date",
                "detail": "The date from which to extract the month."
              }
            ]
          },
          "EFFECT": {
            "d": "Calculates the annual effective interest rate given the nominal rate and number of compounding periods per year.",
            "a": "Annual effective interest rate.",
            "p": [
              {
                "name": "nominal_rate",
                "detail": "The nominal interest rate per year."
              },
              {
                "name": "periods_per_year",
                "detail": "The number of compounding periods per year."
              }
            ]
          },
          "DOLLAR": {
            "d": "Formats a number into the currency specific to your spreadsheet locale.",
            "a": "Formats a number as currency specific to your spreadsheet locale.",
            "p": [
              {
                "name": "number",
                "detail": "The value to be formatted."
              },
              {
                "name": "number_of_places",
                "detail": "The number of decimal places to display."
              }
            ]
          },
          "DOLLARDE": {
            "d": "Converts a price quotation given as a decimal fraction into a decimal value.",
            "a": "Converts a decimal fraction to decimal value.",
            "p": [
              {
                "name": "fractional_price",
                "detail": "The price quotation given using fractional decimal conventions."
              },
              {
                "name": "unit",
                "detail": "The units of the fraction, e.g. `8` for 1/8ths or `32` for 1/32nds."
              }
            ]
          },
          "DOLLARFR": {
            "d": "Converts a price quotation given as a decimal value into a decimal fraction.",
            "a": "Converts a decimal value to decimal fraction.",
            "p": [
              {
                "name": "decimal_price",
                "detail": "The price quotation given as a decimal value."
              },
              {
                "name": "unit",
                "detail": "The units of the desired fraction, e.g. `8` for 1/8ths or `32` for 1/32nds."
              }
            ]
          },
          "DB": {
            "d": "Calculates the depreciation of an asset for a specified period using the arithmetic declining balance method.",
            "a": "Depreciation via declining balance method.",
            "p": [
              {
                "name": "cost",
                "detail": "The initial cost of the asset."
              },
              {
                "name": "salvage",
                "detail": "The value of the asset at the end of depreciation."
              },
              {
                "name": "life",
                "detail": "The number of periods over which the asset is depreciated."
              },
              {
                "name": "period",
                "detail": "The single period within `life` for which to calculate depreciation."
              },
              {
                "name": "month",
                "detail": "The number of months in the first year of depreciation."
              }
            ]
          },
          "DDB": {
            "d": "Calculates the depreciation of an asset for a specified period using the double-declining balance method.",
            "a": "Depreciation via double-declining balance method.",
            "p": [
              {
                "name": "cost",
                "detail": "The initial cost of the asset."
              },
              {
                "name": "salvage",
                "detail": "The value of the asset at the end of depreciation."
              },
              {
                "name": "life",
                "detail": "The number of periods over which the asset is depreciated."
              },
              {
                "name": "period",
                "detail": "The single period within `life` for which to calculate depreciation."
              },
              {
                "name": "factor",
                "detail": "The factor by which depreciation decreases."
              }
            ]
          },
          "RATE": {
            "d": "Calculates the interest rate of an annuity investment based on constant-amount periodic payments and the assumption of a constant interest rate.",
            "a": "Interest rate of an annuity investment.",
            "p": [
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "payment_per_period",
                "detail": "The amount per period to be paid."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "future_value",
                "detail": "The future value remaining after the final payment has been made."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              },
              {
                "name": "rate_guess",
                "detail": "An estimate for what the interest rate will be."
              }
            ]
          },
          "CUMPRINC": {
            "d": "Calculates the cumulative principal paid over a range of payment periods for an investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Cumulative principal paid over a set of periods.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "first_period",
                "detail": "The number of the payment period to begin the cumulative calculation."
              },
              {
                "name": "last_period",
                "detail": "The number of the payment period to end the cumulative calculation."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "COUPNUM": {
            "d": "Calculates the number of coupons, or interest payments, between the settlement date and the maturity date of the investment.",
            "a": "Number of coupons between settlement and maturity.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "SYD": {
            "d": "Calculates the depreciation of an asset for a specified period using the sum of years digits method.",
            "a": "Depreciation via sum of years digits method.",
            "p": [
              {
                "name": "cost",
                "detail": "The initial cost of the asset."
              },
              {
                "name": "salvage",
                "detail": "The value of the asset at the end of depreciation."
              },
              {
                "name": "life",
                "detail": "The number of periods over which the asset is depreciated."
              },
              {
                "name": "period",
                "detail": "The single period within `life` for which to calculate depreciation."
              }
            ]
          },
          "TBILLEQ": {
            "d": "Calculates the equivalent annualized rate of return of a US Treasury Bill based on discount rate.",
            "a": "Equivalent rate of return for a Treasury bill.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "discount",
                "detail": "The discount rate of the bill at time of purchase."
              }
            ]
          },
          "TBILLYIELD": {
            "d": "Calculates the yield of a US Treasury Bill based on price.",
            "a": "The yield of a us treasury bill based on price.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "price",
                "detail": "The price at which the security is bought per 100 face value."
              }
            ]
          },
          "TBILLPRICE": {
            "d": "Calculates the price of a US Treasury Bill based on discount rate.",
            "a": "Price of US treasury bill.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "discount",
                "detail": "The discount rate of the bill at time of purchase."
              }
            ]
          },
          "PV": {
            "d": "Calculates the present value of an annuity investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Present value of an annuity investment.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "payment_amount",
                "detail": "The amount per period to be paid."
              },
              {
                "name": "future_value",
                "detail": "The future value remaining after the final payment has been made."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "ACCRINT": {
            "d": "Calculates the accrued interest of a security that has periodic payments.",
            "a": "Accrued interest of security with periodic payments.",
            "p": [
              {
                "name": "issue",
                "detail": "The date the security was initially issued."
              },
              {
                "name": "first_payment",
                "detail": "The first date interest will be paid."
              },
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "rate",
                "detail": "The annualized rate of interest."
              },
              {
                "name": "redemption",
                "detail": "The redemption amount per 100 face value, or par."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              },
              {
                "name": "calc_method",
                "detail": "[Optional-defaults to TRUE()] - A logical value that specifies the method used to calculate the total accrued interest when the settlement date is later than the first interest accrual date. \n\nIf the value is TRUE, the total accrued interest from the issue date to the settlement date is returned. \n\nIf the value is FALSE, return the accrued interest from the first interest accrual date to the settlement date."
              }
            ]
          },
          "ACCRINTM": {
            "d": "Calculates the accrued interest of a security that pays interest at maturity.",
            "a": "Accrued interest of security paying at maturity.",
            "p": [
              {
                "name": "issue",
                "detail": "The date the security was initially issued."
              },
              {
                "name": "maturity",
                "detail": "The maturity date of the security."
              },
              {
                "name": "rate",
                "detail": "The annualized rate of interest."
              },
              {
                "name": "redemption",
                "detail": "The redemption amount per 100 face value, or par."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "COUPDAYBS": {
            "d": "Calculates the number of days from the first coupon, or interest payment, until settlement.",
            "a": "Number of days from first coupon to settlement.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "COUPDAYS": {
            "d": "Calculates the number of days in the coupon, or interest payment, period that contains the specified settlement date.",
            "a": "Days in coupon period containing settlement date.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "COUPDAYSNC": {
            "d": "Calculates the number of days from the settlement date until the next coupon, or interest payment.",
            "a": "Days from settlement until next coupon.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "COUPNCD": {
            "d": "Calculates next coupon, or interest payment, date after the settlement date.",
            "a": "Next coupon date after the settlement date.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "COUPPCD": {
            "d": "Calculates last coupon, or interest payment, date before the settlement date.",
            "a": "Last coupon date before settlement date.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "FV": {
            "d": "Calculates the future value of an annuity investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Future value of an annuity investment.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "payment_amount",
                "detail": "The amount per period to be paid."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "FVSCHEDULE": {
            "d": "Calculates the future value of some principal based on a specified series of potentially varying interest rates.",
            "a": "Future value of principal from series of rates.",
            "p": [
              {
                "name": "principal",
                "detail": "The amount of initial capital or value to compound against."
              },
              {
                "name": "rate_schedule",
                "detail": "A series of interest rates to compound against the `principal`."
              }
            ]
          },
          "YIELD": {
            "d": "Calculates the annual yield of a security paying periodic interest, such as a US Treasury Bond, based on price.",
            "a": "Annual yield of a security paying periodic interest.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "rate",
                "detail": "The annualized rate of interest."
              },
              {
                "name": "price",
                "detail": "The price at which the security is bought per 100 face value."
              },
              {
                "name": "redemption",
                "detail": "The redemption amount per 100 face value, or par."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "YIELDDISC": {
            "d": "Calculates the annual yield of a discount (non-interest-bearing) security, based on price.",
            "a": "Annual yield of a discount security.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "price",
                "detail": "The price at which the security is bought per 100 face value."
              },
              {
                "name": "redemption",
                "detail": "The redemption amount per 100 face value, or par."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "NOMINAL": {
            "d": "Calculates the annual nominal interest rate given the effective rate and number of compounding periods per year.",
            "a": "Annual nominal interest rate.",
            "p": [
              {
                "name": "effective_rate",
                "detail": "The effective interest rate per year."
              },
              {
                "name": "periods_per_year",
                "detail": "The number of compounding periods per year."
              }
            ]
          },
          "XIRR": {
            "d": "Calculates the internal rate of return of an investment based on a specified series of potentially irregularly spaced cash flows.",
            "a": "Internal rate of return given non-periodic cashflows.",
            "p": [
              {
                "name": "cashflow_amounts",
                "detail": "An array or range containing the income or payments associated with the investment."
              },
              {
                "name": "cashflow_dates",
                "detail": "An array or range with dates corresponding to the cash flows in `cashflow_amounts`."
              },
              {
                "name": "rate_guess",
                "detail": "An estimate for what the internal rate of return will be."
              }
            ]
          },
          "MIRR": {
            "d": "Calculates the modified internal rate of return on an investment based on a series of periodic cash flows and the difference between the interest rate paid on financing versus the return received on reinvested income.",
            "a": "Modified internal rate of return.",
            "p": [
              {
                "name": "cashflow_amounts",
                "detail": "An array or range containing the income or payments associated with the investment."
              },
              {
                "name": "financing_rate",
                "detail": "The interest rate paid on funds invested."
              },
              {
                "name": "reinvestment_return_rate",
                "detail": "The return (as a percentage) earned on reinvestment of income received from the investment."
              }
            ]
          },
          "IRR": {
            "d": "Calculates the internal rate of return on an investment based on a series of periodic cash flows.",
            "a": "Internal rate of return given periodic cashflows.",
            "p": [
              {
                "name": "cashflow_amounts",
                "detail": "An array or range containing the income or payments associated with the investment."
              },
              {
                "name": "rate_guess",
                "detail": "An estimate for what the internal rate of return will be."
              }
            ]
          },
          "NPV": {
            "d": "Calculates the net present value of an investment based on a series of periodic cash flows and a discount rate.",
            "a": "The net present value of an investment based on a series of periodic cash flows and a discount rate.",
            "p": [
              {
                "name": "discount",
                "detail": "The discount rate of the investment over one period."
              },
              {
                "name": "cashflow1",
                "detail": "The first future cash flow."
              },
              {
                "name": "cashflow2",
                "detail": "Additional future cash flows."
              }
            ]
          },
          "XNPV": {
            "d": "Calculates the net present value of an investment based on a specified series of potentially irregularly spaced cash flows and a discount rate.",
            "a": "Net present value given non-periodic cashflows.",
            "p": [
              {
                "name": "discount",
                "detail": "The discount rate of the investment over one period."
              },
              {
                "name": "cashflow_amounts",
                "detail": "A range of cells containing the income or payments associated with the investment."
              },
              {
                "name": "cashflow_dates",
                "detail": "A range of cells with dates corresponding to the cash flows in `cashflow_amounts`."
              }
            ]
          },
          "CUMIPMT": {
            "d": "Calculates the cumulative interest over a range of payment periods for an investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Cumulative interest paid over a set of periods.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "first_period",
                "detail": "The number of the payment period to begin the cumulative calculation."
              },
              {
                "name": "last_period",
                "detail": "The number of the payment period to end the cumulative calculation."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "PMT": {
            "d": "Calculates the periodic payment for an annuity investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Periodic payment for an annuity investment.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "future_value",
                "detail": "The future value remaining after the final payment has been made."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "IPMT": {
            "d": "Calculates the payment on interest for an investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Payment on interest for an investment.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "period",
                "detail": "The amortization period, in terms of number of periods."
              },
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "future_value",
                "detail": "The future value remaining after the final payment has been made."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "PPMT": {
            "d": "Calculates the payment on the principal of an investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Payment on the principal of an investment.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "period",
                "detail": "The amortization period, in terms of number of periods."
              },
              {
                "name": "number_of_periods",
                "detail": "The number of payments to be made."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "future_value",
                "detail": "The future value remaining after the final payment has been made."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "INTRATE": {
            "d": "Calculates the effective interest rate generated when an investment is purchased at one price and sold at another with no interest or dividends generated by the investment itself.",
            "a": "Calculates effective interest rate.",
            "p": [
              {
                "name": "buy_date",
                "detail": "The date of purchase of the investment."
              },
              {
                "name": "sell_date",
                "detail": "The date of sale of the investment."
              },
              {
                "name": "buy_price",
                "detail": "The price at which the investment was purchased."
              },
              {
                "name": "sell_price",
                "detail": "The price at which the investment was sold."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "PRICE": {
            "d": "Calculates the price of a security paying periodic interest, such as a US Treasury Bond, based on expected yield.",
            "a": "Price of a security paying periodic interest.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "rate",
                "detail": "The annualized rate of interest."
              },
              {
                "name": "yield",
                "detail": "The expected annual yield of the security."
              },
              {
                "name": "redemption",
                "detail": "The redemption amount per 100 face value, or par."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "PRICEDISC": {
            "d": "Calculates the price of a discount (non-interest-bearing) security, based on expected yield.",
            "a": "Price of a discount security.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "discount",
                "detail": "The discount rate of the security at time of purchase."
              },
              {
                "name": "redemption",
                "detail": "The redemption amount per 100 face value, or par."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "PRICEMAT": {
            "d": "Calculates the price of a security paying interest at maturity, based on expected yield.",
            "a": "Price of security paying interest at maturity.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "issue",
                "detail": "The date the security was initially issued."
              },
              {
                "name": "rate",
                "detail": "The annualized rate of interest."
              },
              {
                "name": "yield",
                "detail": "The expected annual yield of the security."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "RECEIVED": {
            "d": "Calculates the amount received at maturity for an investment in fixed-income securities purchased on a given date.",
            "a": "Amount received at maturity for a security.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "investment",
                "detail": "The amount invested (irrespective of face value of each security)."
              },
              {
                "name": "discount",
                "detail": "The discount rate of the security invested in."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "DISC": {
            "d": "Calculates the discount rate of a security based on price.",
            "a": "The discount rate of a security based on price.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "price",
                "detail": "The price at which the security is bought per 100 face value."
              },
              {
                "name": "redemption",
                "detail": "The redemption amount per 100 face value, or par."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "NPER": {
            "d": "Calculates the number of payment periods for an investment based on constant-amount periodic payments and a constant interest rate.",
            "a": "Number of payment periods for an investment.",
            "p": [
              {
                "name": "rate",
                "detail": "The interest rate."
              },
              {
                "name": "payment_amount",
                "detail": "The amount of each payment made."
              },
              {
                "name": "present_value",
                "detail": "The current value of the annuity."
              },
              {
                "name": "future_value",
                "detail": "The future value remaining after the final payment has been made."
              },
              {
                "name": "end_or_beginning",
                "detail": "Whether payments are due at the end (`0`) or beginning (`1`) of each period."
              }
            ]
          },
          "SLN": {
            "d": "Calculates the depreciation of an asset for one period using the straight-line method.",
            "a": "Depreciation of asset using the straight-line method.",
            "p": [
              {
                "name": "cost",
                "detail": "The initial cost of the asset."
              },
              {
                "name": "salvage",
                "detail": "The value of the asset at the end of depreciation."
              },
              {
                "name": "life",
                "detail": "The number of periods over which the asset is depreciated."
              }
            ]
          },
          "DURATION": {
            "d": "Calculates the number of compounding periods required for an investment of a specified present value appreciating at a given rate to reach a target value.",
            "a": "Number of periods for an investment to reach a value.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "rate",
                "detail": "The annualized rate of interest."
              },
              {
                "name": "yield",
                "detail": "The expected annual yield of the security."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "MDURATION": {
            "d": "Calculates the modified Macaulay duration of a security paying periodic interest, such as a US Treasury Bond, based on expected yield.",
            "a": "Modified Macaulay duration.",
            "p": [
              {
                "name": "settlement",
                "detail": "The settlement date of the security, the date after issuance when the security is delivered to the buyer."
              },
              {
                "name": "maturity",
                "detail": "The maturity or end date of the security, when it can be redeemed at face, or par value."
              },
              {
                "name": "rate",
                "detail": "The annualized rate of interest."
              },
              {
                "name": "yield",
                "detail": "The expected annual yield of the security."
              },
              {
                "name": "frequency",
                "detail": "The number of interest or coupon payments per year (1, 2, or 4)."
              },
              {
                "name": "day_count_convention",
                "detail": "An indicator of what day count method to use."
              }
            ]
          },
          "BIN2DEC": {
            "d": "Converts a signed binary number to decimal format.",
            "a": "Converts a signed binary number to decimal format.",
            "p": [
              {
                "name": "signed_binary_number",
                "detail": "The signed 10-bit binary value to be converted to decimal, provided as a string."
              }
            ]
          },
          "BIN2HEX": {
            "d": "Converts a signed binary number to signed hexadecimal format.",
            "a": "Converts a binary number to hexadecimal.",
            "p": [
              {
                "name": "signed_binary_number",
                "detail": "The signed 10-bit binary value to be converted to signed hexademical, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "BIN2OCT": {
            "d": "Converts a signed binary number to signed octal format.",
            "a": "Converts a binary number to octal.",
            "p": [
              {
                "name": "signed_binary_number",
                "detail": "The signed 10-bit binary value to be converted to signed octal, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "DEC2BIN": {
            "d": "Converts a decimal number to signed binary format.",
            "a": "Converts a decimal number to signed binary format.",
            "p": [
              {
                "name": "decimal_number",
                "detail": "The decimal value to be converted to signed binary, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "DEC2HEX": {
            "d": "Converts a decimal number to signed hexadecimal format.",
            "a": "Converts a decimal number to hexadecimal.",
            "p": [
              {
                "name": "decimal_number",
                "detail": "The decimal value to be converted to signed hexadecimal, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "DEC2OCT": {
            "d": "Converts a decimal number to signed octal format.",
            "a": "Converts a decimal number to signed octal format.",
            "p": [
              {
                "name": "decimal_number",
                "detail": "The decimal value to be converted to signed octal, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "HEX2BIN": {
            "d": "Converts a signed hexadecimal number to signed binary format.",
            "a": "Converts a hexadecimal number to binary.",
            "p": [
              {
                "name": "signed_hexadecimal_number",
                "detail": "The signed 40-bit hexadecimal value to be converted to signed binary, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "HEX2DEC": {
            "d": "Converts a signed hexadecimal number to decimal format.",
            "a": "Converts a hexadecimal number to decimal.",
            "p": [
              {
                "name": "signed_hexadecimal_number",
                "detail": "The signed 40-bit hexadecimal value to be converted to decimal, provided as a string."
              }
            ]
          },
          "HEX2OCT": {
            "d": "Converts a signed hexadecimal number to signed octal format.",
            "a": "Converts a hexadecimal number to octal.",
            "p": [
              {
                "name": "signed_hexadecimal_number",
                "detail": "The signed 40-bit hexadecimal value to be converted to signed octal, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "OCT2BIN": {
            "d": "Converts a signed octal number to signed binary format.",
            "a": "Converts an octal number to binary.",
            "p": [
              {
                "name": "signed_octal_number",
                "detail": "The signed 30-bit octal value to be converted to signed binary, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "OCT2DEC": {
            "d": "Converts a signed octal number to decimal format.",
            "a": "Converts a signed octal number to decimal format.",
            "p": [
              {
                "name": "signed_octal_number",
                "detail": "The signed 30-bit octal value to be converted to decimal, provided as a string."
              }
            ]
          },
          "OCT2HEX": {
            "d": "Converts a signed octal number to signed hexadecimal format.",
            "a": "Converts an octal number to hexadecimal.",
            "p": [
              {
                "name": "signed_octal_number",
                "detail": "The signed 30-bit octal value to be converted to signed hexadecimal, provided as a string."
              },
              {
                "name": "significant_digits",
                "detail": "The number of significant digits to ensure in the result."
              }
            ]
          },
          "COMPLEX": {
            "d": "Creates a complex number given real and imaginary coefficients.",
            "a": "Creates a complex number.",
            "p": [
              {
                "name": "real_part",
                "detail": "The real coefficient."
              },
              {
                "name": "imaginary_part",
                "detail": "The imaginary coefficient."
              },
              {
                "name": "suffix",
                "detail": "The suffix for the imaginary coefficient, can only be 'i' or 'j'. If omitted, 'i' will be used."
              }
            ]
          },
          "IMREAL": {
            "d": "Returns the real coefficient of a complex number.",
            "a": "The real coefficient of a complex number.",
            "p": [
              {
                "name": "complex_number",
                "detail": "The complex number, in the a+bi or a+bj format."
              }
            ]
          },
          "IMAGINARY": {
            "d": "Returns the imaginary coefficient of a complex number.",
            "a": "The imaginary coefficient of a complex number.",
            "p": [
              {
                "name": "complex_number",
                "detail": "The complex number, in the a+bi or a+bj format."
              }
            ]
          },
          "IMCONJUGATE": {
            "d": "Returns the complex conjugate of a number.",
            "a": "The complex conjugate of a number.",
            "p": [
              {
                "name": "number",
                "detail": "The complex number to calculate the conjugate for."
              }
            ]
          },
          "IMABS": {
            "d": "Returns absolute value (or modulus) of a complex number.",
            "a": "The absolute value of a complex number.",
            "p": [
              {
                "name": "number",
                "detail": "The complex number to calculate the absolute value of."
              }
            ]
          },
          "DELTA": {
            "d": "Compare two numeric values, returning 1 if they're equal.",
            "a": "Compare two numeric values.",
            "p": [
              {
                "name": "number1",
                "detail": "The first number to compare."
              },
              {
                "name": "number2",
                "detail": "The second number to compare."
              }
            ]
          },
          "IMSUM": {
            "d": "Returns the sum of a series of complex numbers.",
            "a": "Sum of a series of complex numbers.",
            "p": [
              {
                "name": "value1",
                "detail": "The first complex number or range to add together."
              },
              {
                "name": "value2",
                "detail": "Additional complex numbers or ranges to add to `value1`."
              }
            ]
          },
          "IMSUB": {
            "d": "Returns the difference between two complex numbers.",
            "a": "The difference between two complex numbers.",
            "p": [
              {
                "name": "first_number",
                "detail": "The complex number to subtract second_number from."
              },
              {
                "name": "second_number",
                "detail": "The complex number to subtract from first_number."
              }
            ]
          },
          "IMPRODUCT": {
            "d": "Returns the result of multiplying a series of complex numbers together.",
            "a": "Result of multiplying a series of complex numbers together.",
            "p": [
              {
                "name": "factor1",
                "detail": "The first number or range to calculate for the product."
              },
              {
                "name": "factor2",
                "detail": "Additional complex numbers or ranges to calculate for the product."
              }
            ]
          },
          "IMDIV": {
            "d": "Returns one complex number divided by another.",
            "a": "One complex number divided by another.",
            "p": [
              {
                "name": "dividend",
                "detail": "The complex number to be divided."
              },
              {
                "name": "divisor",
                "detail": "The complex number to divide by."
              }
            ]
          },
          "NOT": {
            "d": "Returns the opposite of a logical value - `NOT(TRUE)` returns `FALSE`; `NOT(FALSE)` returns `TRUE`.",
            "a": "Returns opposite of provided logical value.",
            "p": [
              {
                "name": "logical_expression",
                "detail": "An expression or reference to a cell holding an expression that represents some logical value."
              }
            ]
          },
          "TRUE": {
            "d": "Returns the logical value `TRUE`.",
            "a": "Logical value `true`.",
            "p": []
          },
          "FALSE": {
            "d": "Returns the logical value `FALSE`.",
            "a": "Logical value `false`.",
            "p": []
          },
          "AND": {
            "d": "Returns true if all of the provided arguments are logically true, and false if any of the provided arguments are logically false.",
            "a": "Logical `and` operator.",
            "p": [
              {
                "name": "logical_expression1",
                "detail": "An expression or reference to a cell containing an expression that represents some logical value, i.e. `TRUE` or `FALSE`, or an expression that can be coerced to a logical value."
              },
              {
                "name": "logical_expression2",
                "detail": "More expressions that represent logical values."
              }
            ]
          },
          "IFERROR": {
            "d": "Returns the first argument if it is not an error value, otherwise returns the second argument if present, or a blank if the second argument is absent.",
            "a": "Value if it is not an error, otherwise 2nd argument.",
            "p": [
              {
                "name": "value",
                "detail": "The value to return if `value` itself is not an error."
              },
              {
                "name": "value_if_error",
                "detail": "The value the function returns if `value` is an error."
              }
            ]
          },
          "IF": {
            "d": "Returns one value if a logical expression is `TRUE` and another if it is `FALSE`.",
            "a": "Returns value depending on logical expression.",
            "p": [
              {
                "name": "logical_expression",
                "detail": "An expression or reference to a cell containing an expression that represents some logical value, i.e. `TRUE` or `FALSE`."
              },
              {
                "name": "value_if_true",
                "detail": "The value the function returns if `logical_expression` is `TRUE`."
              },
              {
                "name": "value_if_false",
                "detail": "The value the function returns if `logical_expression` is `FALSE`."
              }
            ]
          },
          "OR": {
            "d": "Returns true if any of the provided arguments are logically true, and false if all of the provided arguments are logically false.",
            "a": "Logical `or` operator.",
            "p": [
              {
                "name": "logical_expression1",
                "detail": "An expression or reference to a cell containing an expression that represents some logical value, i.e. `TRUE` or `FALSE`, or an expression that can be coerced to a logical value."
              },
              {
                "name": "logical_expression2",
                "detail": "More expressions that evaluate to logical values."
              }
            ]
          },
          "NE": {
            "d": "Returns `TRUE` if two specified values are not equal and `FALSE` otherwise. Equivalent to the `!=` operator.",
            "a": "Not equal.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value."
              },
              {
                "name": "value2",
                "detail": "The value to test against `value1` for inequality."
              }
            ]
          },
          "EQ": {
            "d": "Returns `TRUE` if two specified values are equal and `FALSE` otherwise. Equivalent to the `==` operator.",
            "a": "Equal.",
            "p": [
              {
                "name": "value1",
                "detail": "The first value."
              },
              {
                "name": "value2",
                "detail": "The value to test against `value1` for equality."
              }
            ]
          },
          "GT": {
            "d": "Returns `TRUE` if the first argument is strictly greater than the second, and `FALSE` otherwise. Equivalent to the `>` operator.",
            "a": "Strictly greater than.",
            "p": [
              {
                "name": "value1",
                "detail": "The value to test as being greater than `value2`."
              },
              {
                "name": "value2",
                "detail": "The second value."
              }
            ]
          },
          "GTE": {
            "d": "Returns `TRUE` if the first argument is greater than or equal to the second, and `FALSE` otherwise. Equivalent to the `>=` operator.",
            "a": "Greater than or equal to.",
            "p": [
              {
                "name": "value1",
                "detail": "The value to test as being greater than or equal to `value2`."
              },
              {
                "name": "value2",
                "detail": "The second value."
              }
            ]
          },
          "LT": {
            "d": "Returns `TRUE` if the first argument is strictly less than the second, and `FALSE` otherwise. Equivalent to the `<` operator.",
            "a": "Less than.",
            "p": [
              {
                "name": "value1",
                "detail": "The value to test as being less than `value2`."
              },
              {
                "name": "value2",
                "detail": "The second value."
              }
            ]
          },
          "LTE": {
            "d": "Returns `TRUE` if the first argument is less than or equal to the second, and `FALSE` otherwise. Equivalent to the `<=` operator.",
            "a": "Less than or equal to.",
            "p": [
              {
                "name": "value1",
                "detail": "The value to test as being less than or equal to `value2`."
              },
              {
                "name": "value2",
                "detail": "The second value."
              }
            ]
          },
          "ADD": {
            "d": "Returns the sum of two numbers. Equivalent to the `+` operator.",
            "a": "Sum of two numbers",
            "p": [
              {
                "name": "value1",
                "detail": "The first addend."
              },
              {
                "name": "value2",
                "detail": "The second addend."
              }
            ]
          },
          "MINUS": {
            "d": "Returns the difference of two numbers. Equivalent to the `-` operator.",
            "a": "Difference of two numbers",
            "p": [
              {
                "name": "value1",
                "detail": "The minuend, or number to be subtracted from."
              },
              {
                "name": "value2",
                "detail": "The subtrahend, or number to subtract from `value1`."
              }
            ]
          },
          "MULTIPLY": {
            "d": "Returns the product of two numbers. Equivalent to the `*` operator.",
            "a": "Product of two numbers",
            "p": [
              {
                "name": "factor1",
                "detail": "The first multiplicand."
              },
              {
                "name": "factor2",
                "detail": "The second multiplicand."
              }
            ]
          },
          "DIVIDE": {
            "d": "Returns one number divided by another. Equivalent to the `/` operator.",
            "a": "One number divided by another",
            "p": [
              {
                "name": "dividend",
                "detail": "The number to be divided."
              },
              {
                "name": "divisor",
                "detail": "The number to divide by."
              }
            ]
          },
          "CONCAT": {
            "d": "Returns the concatenation of two values. Equivalent to the `&` operator.",
            "a": "Concatenation of two values",
            "p": [
              {
                "name": "value1",
                "detail": "The value to which `value2` will be appended."
              },
              {
                "name": "value2",
                "detail": "The value to append to `value1`."
              }
            ]
          },
          "UNARY_PERCENT": {
            "d": "Returns a value interpreted as a percentage; that is, `UNARY_PERCENT(100)` equals `1`.",
            "a": "Value interpreted as a percentage.",
            "p": [
              {
                "name": "percentage",
                "detail": "The value to interpret as a percentage."
              }
            ]
          },
          "CONCATENATE": {
            "d": "Appends strings to one another.",
            "a": "Appends strings to one another.",
            "p": [
              {
                "name": "string1",
                "detail": "The initial string."
              },
              {
                "name": "string2",
                "detail": "More strings to append in sequence."
              }
            ]
          },
          "CODE": {
            "d": "Returns the numeric Unicode map value of the first character in the string provided.",
            "a": "Numeric unicode map value of character.",
            "p": [
              {
                "name": "string",
                "detail": "The string whose first character's Unicode map value will be returned."
              }
            ]
          },
          "CHAR": {
            "d": "Convert a number into a character according to the current Unicode table.",
            "a": "Gets character associated with number.",
            "p": [
              {
                "name": "table_number",
                "detail": "The number of the character to look up from the current Unicode table in decimal format."
              }
            ]
          },
          "ARABIC": {
            "d": "Computes the value of a Roman numeral.",
            "a": "Computes the value of a roman numeral.",
            "p": [
              {
                "name": "roman_numeral",
                "detail": "The Roman numeral to format, whose value must be between 1 and 3999, inclusive."
              }
            ]
          },
          "ROMAN": {
            "d": "Formats a number in Roman numerals.",
            "a": "Formats a number in Roman numerals.",
            "p": [
              {
                "name": "number",
                "detail": "The number to format, between 1 and 3999, inclusive."
              }
            ]
          },
          "REGEXEXTRACT": {
            "d": "Extracts matching substrings according to a regular expression.",
            "a": "Extracts matching substrings with regular expression.",
            "p": [
              {
                "name": "text",
                "detail": "The input text."
              },
              {
                "name": "regular_expression",
                "detail": "The first part of `text` that matches this expression will be returned."
              }
            ]
          },
          "REGEXMATCH": {
            "d": "Whether a piece of text matches a regular expression.",
            "a": "Whether a piece of text matches regular expression.",
            "p": [
              {
                "name": "text",
                "detail": "The text to be tested against the regular expression."
              },
              {
                "name": "regular_expression",
                "detail": "The regular expression to test the text against."
              }
            ]
          },
          "REGEXREPLACE": {
            "d": "Replaces part of a text string with a different text string using regular expressions.",
            "a": "Replaces text with regular expressions.",
            "p": [
              {
                "name": "text",
                "detail": "The text, a part of which will be replaced."
              },
              {
                "name": "regular_expression",
                "detail": "The regular expression.  All matching instances in `text` will be replaced."
              },
              {
                "name": "replacement",
                "detail": "The text which will be inserted into the original text."
              }
            ]
          },
          "T": {
            "d": "Returns string arguments as text, or the empty string if the value is not text.",
            "a": "String arguments as text.",
            "p": [
              {
                "name": "value",
                "detail": "The argument to be converted to text."
              }
            ]
          },
          "FIXED": {
            "d": "Formats a number with a fixed number of decimal places.",
            "a": "Formats number with fixed number of decimal places.",
            "p": [
              {
                "name": "number",
                "detail": "The number to format."
              },
              {
                "name": "number_of_places",
                "detail": "The number of decimal places to display in the result."
              },
              {
                "name": "suppress_separator",
                "detail": "Whether or not to suppress the thousands separator used in some locales (e.g. `1,000` becomes `1000`). Separators will be present if this value is 0 or omitted, and absent otherwise."
              }
            ]
          },
          "FIND": {
            "d": "Returns the position at which a string is first found within text where the capitalization of letters matters. Returns `#VALUE!` if the string is not found.",
            "a": "First position of string found in text, case-sensitive.",
            "p": [
              {
                "name": "search_for",
                "detail": "The string to look for within `text_to_search`."
              },
              {
                "name": "text_to_search",
                "detail": "The text to search for the first occurrence of `search_for`."
              },
              {
                "name": "starting_at",
                "detail": "The character within `text_to_search` at which to start the search."
              }
            ]
          },
          "FINDB": {
            "d": "Returns the position at which a string is first found within text counting each double-character as 2.",
            "a": "Position at which a string is first found within text (binary).",
            "p": [
              {
                "name": "search_for",
                "detail": "The string to look for within `text_to_search`."
              },
              {
                "name": "text_to_search",
                "detail": "The text to search for the first occurrence of `search_for`."
              },
              {
                "name": "starting_at",
                "detail": "The character within `text_to_search` at which to start the search."
              }
            ]
          },
          "JOIN": {
            "d": "Concatenates the elements of one or more one-dimensional arrays using a specified delimiter.",
            "a": "Concatenates elements of arrays with delimiter.",
            "p": [
              {
                "name": "delimiter",
                "detail": "The character or string to place between each concatenated value."
              },
              {
                "name": "value_or_array1",
                "detail": "The value or values to be appended using `delimiter`."
              },
              {
                "name": "value_or_array2",
                "detail": "More values to be appended using `delimiter`."
              }
            ]
          },
          "LEFT": {
            "d": "Returns a substring from the beginning of a specified string.",
            "a": "Substring from beginning of specified string.",
            "p": [
              {
                "name": "string",
                "detail": "The string from which the left portion will be returned."
              },
              {
                "name": "number_of_characters",
                "detail": "The number of characters to return from the left side of `string`."
              }
            ]
          },
          "RIGHT": {
            "d": "Returns a substring from the end of a specified string.",
            "a": "A substring from the end of a specified string.",
            "p": [
              {
                "name": "string",
                "detail": "The string from which the right portion will be returned."
              },
              {
                "name": "number_of_characters",
                "detail": "The number of characters to return from the right side of `string`."
              }
            ]
          },
          "MID": {
            "d": "Returns a segment of a string.",
            "a": "A segment of a string.",
            "p": [
              {
                "name": "string",
                "detail": "The string to extract a segment from."
              },
              {
                "name": "starting_at",
                "detail": "The index from the left of `string` from which to begin extracting. The first character in `string` has the index 1."
              },
              {
                "name": "extract_length",
                "detail": "The length of the segment to extract."
              }
            ]
          },
          "LEN": {
            "d": "Returns the length of a string.",
            "a": "Length of a string.",
            "p": [
              {
                "name": "text",
                "detail": "The string whose length will be returned."
              }
            ]
          },
          "LENB": {
            "d": "Returns the length of a string in bytes.",
            "a": "Length of a string in bytes.",
            "p": [
              {
                "name": "text",
                "detail": "The string whose length will be returned."
              }
            ]
          },
          "LOWER": {
            "d": "Converts a specified string to lowercase.",
            "a": "Converts a specified string to lowercase.",
            "p": [
              {
                "name": "text",
                "detail": "The string to convert to lowercase."
              }
            ]
          },
          "UPPER": {
            "d": "Converts a specified string to uppercase.",
            "a": "Converts a specified string to uppercase.",
            "p": [
              {
                "name": "text",
                "detail": "The string to convert to uppercase."
              }
            ]
          },
          "EXACT": {
            "d": "Tests whether two strings are identical.",
            "a": "Tests whether two strings are identical.",
            "p": [
              {
                "name": "string1",
                "detail": "The first string to compare"
              },
              {
                "name": "string2",
                "detail": "The second string to compare"
              }
            ]
          },
          "REPLACE": {
            "d": "Replaces part of a text string with a different text string.",
            "a": "Replaces part of a text string with different text.",
            "p": [
              {
                "name": "text",
                "detail": "The text, a part of which will be replaced."
              },
              {
                "name": "position",
                "detail": "The position where the replacement will begin (starting from 1)."
              },
              {
                "name": "length",
                "detail": "The number of characters in the text to be replaced."
              },
              {
                "name": "new_text",
                "detail": "The text which will be inserted into the original text."
              }
            ]
          },
          "REPT": {
            "d": "Returns specified text repeated a number of times.",
            "a": "Specified text repeated a number of times.",
            "p": [
              {
                "name": "text_to_repeat",
                "detail": "The character or string to repeat."
              },
              {
                "name": "number_of_repetitions",
                "detail": "The number of times `text_to_repeat` should appear in the value returned."
              }
            ]
          },
          "SEARCH": {
            "d": "Returns the position at which a string is first found within text and ignores capitalization of letters. Returns `#VALUE!` if the string is not found.",
            "a": "First position of string found in text, ignoring case.",
            "p": [
              {
                "name": "search_for",
                "detail": "The string to look for within `text_to_search`."
              },
              {
                "name": "text_to_search",
                "detail": "The text to search for the first occurrence of `search_for`."
              },
              {
                "name": "starting_at",
                "detail": "The character within `text_to_search` at which to start the search."
              }
            ]
          },
          "SUBSTITUTE": {
            "d": "Replaces existing text with new text in a string.",
            "a": "Replaces existing text with new text in a string.",
            "p": [
              {
                "name": "text_to_search",
                "detail": "The text within which to search and replace."
              },
              {
                "name": "search_for",
                "detail": "The string to search for within `text_to_search`."
              },
              {
                "name": "replace_with",
                "detail": "The string that will replace `search_for`."
              },
              {
                "name": "occurrence_number",
                "detail": "The instance of `search_for` within `text_to_search` to replace with `replace_with`. By default, all occurrences of `search_for` are replaced; however, if `occurrence_number` is specified, only the indicated instance of `search_for` is replaced."
              }
            ]
          },
          "CLEAN": {
            "d": "Returns the text with the non-printable ASCII characters removed.",
            "a": "Removes non-printable characters from a piece of text.",
            "p": [
              {
                "name": "text",
                "detail": "The text whose non-printable characters are to be removed."
              }
            ]
          },
          "TEXT": {
            "d": "Converts a number into text according to a specified format.",
            "a": "Formats a number into text.",
            "p": [
              {
                "name": "number",
                "detail": "The number, date, or time to format."
              },
              {
                "name": "format",
                "detail": "The pattern by which to format the number, enclosed in quotation marks."
              }
            ]
          },
          "TRIM": {
            "d": "Removes leading, trailing, and repeated spaces in text.",
            "a": "Removes space characters.",
            "p": [
              {
                "name": "text",
                "detail": "The text or reference to a cell containing text to be trimmed."
              }
            ]
          },
          "VALUE": {
            "d": "Converts a string in any of the date, time or number formats that Google Sheets understands into a number.",
            "a": "Converts a date/time/number string into a number.",
            "p": [
              {
                "name": "text",
                "detail": "The string containing the value to be converted."
              }
            ]
          },
          "PROPER": {
            "d": "Capitalizes each word in a specified string.",
            "a": "Capitalizes each word in a specified string.",
            "p": [
              {
                "name": "text_to_capitalize",
                "detail": "The text which will be returned with the first letter of each word in uppercase and all other letters in lowercase."
              }
            ]
          },
          "CONVERT": {
            "d": "Converts a numeric value to a different unit of measure.",
            "a": "Unit conversion for numbers.",
            "p": [
              {
                "name": "value",
                "detail": "The numeric value in `start_unit` to convert to `end_unit`."
              },
              {
                "name": "start_unit",
                "detail": "The starting unit, the unit currently assigned to `value`."
              },
              {
                "name": "end_unit",
                "detail": "The unit of measure into which to convert the argument, `value`."
              }
            ]
          },
          "SUMX2MY2": {
            "d": "Calculates the sum of the differences of the squares of values in two arrays.",
            "a": "Sum of the differences of squares.",
            "p": [
              {
                "name": "array_x",
                "detail": "The array or range of values whose squares will be reduced by the squares of corresponding entries in `array_y` and added together."
              },
              {
                "name": "array_y",
                "detail": "The array or range of values whose squares will be subtracted from the squares of corresponding entries in `array_x` and added together."
              }
            ]
          },
          "SUMX2PY2": {
            "d": "Calculates the sum of the sums of the squares of values in two arrays.",
            "a": "Sum of the sums of squares.",
            "p": [
              {
                "name": "array_x",
                "detail": "The array or range of values whose squares will be added to the squares of corresponding entries in `array_y` and added together."
              },
              {
                "name": "array_y",
                "detail": "The array or range of values whose squares will be added to the squares of corresponding entries in `array_x` and added together."
              }
            ]
          },
          "SUMXMY2": {
            "d": "Calculates the sum of the squares of differences of values in two arrays.",
            "a": "Sum of the squares of differences.",
            "p": [
              {
                "name": "array_x",
                "detail": "The array or range of values that will be reduced by corresponding entries in `array_y`, squared, and added together."
              },
              {
                "name": "array_y",
                "detail": "The array or range of values that will be subtracted from corresponding entries in `array_x`, the result squared, and all such results added together."
              }
            ]
          },
          "TRANSPOSE": {
            "d": "Transposes the rows and columns of an array or range of cells.",
            "a": "Transposes the rows and columns of an array.",
            "p": [
              {
                "name": "array_or_range",
                "detail": "The array or range whose rows and columns will be swapped."
              }
            ]
          },
          "TREND": {
            "d": "Given partial data about a linear trend, fits an ideal linear trend using the least squares method and/or predicts further values.",
            "a": "Fits points to linear trend derived via least-squares.",
            "p": [
              {
                "name": "known_data_y",
                "detail": "The array or range containing dependent (y) values that are already known, used to curve fit an ideal linear trend."
              },
              {
                "name": "known_data_x",
                "detail": "The values of the independent variable(s) corresponding with `known_data_y`."
              },
              {
                "name": "new_data_x",
                "detail": "The data points to return the `y` values for on the ideal curve fit."
              },
              {
                "name": "b",
                "detail": "Given a general linear form of `y = m*x+b` for a curve fit, calculates `b` if `TRUE` or forces `b` to be `0` and only calculates the `m` values if `FALSE`, i.e. forces the curve fit to pass through the origin."
              }
            ]
          },
          "FREQUENCY": {
            "d": "Calculates the frequency distribution of a one-column array into specified classes.",
            "a": "The frequency distribution of array.",
            "p": [
              {
                "name": "data",
                "detail": "The array or range containing the values to be counted."
              },
              {
                "name": "classes",
                "detail": "The array or range containing the set of classes."
              }
            ]
          },
          "GROWTH": {
            "d": "Given partial data about an exponential growth trend, fits an ideal exponential growth trend and/or predicts further values.",
            "a": "Fits points to exponential growth trend.",
            "p": [
              {
                "name": "known_data_y",
                "detail": "The array or range containing dependent (y) values that are already known, used to curve fit an ideal exponential growth curve."
              },
              {
                "name": "known_data_x",
                "detail": "The values of the independent variable(s) corresponding with `known_data_y`."
              },
              {
                "name": "new_data_x",
                "detail": "The data points to return the `y` values for on the ideal curve fit."
              },
              {
                "name": "b",
                "detail": "Given a general exponential form of `y = b*m^x` for a curve fit, calculates `b` if `TRUE` or forces `b` to be `1` and only calculates the `m` values if `FALSE`."
              }
            ]
          },
          "LINEST": {
            "d": "Given partial data about a linear trend, calculates various parameters about the ideal linear trend using the least-squares method.",
            "a": "Best-fit linear trend via least-squares.",
            "p": [
              {
                "name": "known_data_y",
                "detail": "The array or range containing dependent (y) values that are already known, used to curve fit an ideal linear trend."
              },
              {
                "name": "known_data_x",
                "detail": "The values of the independent variable(s) corresponding with `known_data_y`."
              },
              {
                "name": "calculate_b",
                "detail": "Given a linear form of `y = m*x+b`, calculates the y-intercept (`b`) if `TRUE`. Otherwise, forces `b` to be `0` and only calculates the `m` values if `FALSE`, i.e. forces the curve fit to pass through the origin."
              },
              {
                "name": "verbose",
                "detail": "A flag specifying whether to return additional regression statistics or only the linear coefficients and the y-intercept (default)."
              }
            ]
          },
          "LOGEST": {
            "d": "Given partial data about an exponential growth curve, calculates various parameters about the best fit ideal exponential growth curve.",
            "a": "Best-fit exponential growth curve.",
            "p": [
              {
                "name": "known_data_y",
                "detail": "The array or range containing dependent (y) values that are already known, used to curve fit an ideal exponential growth curve."
              },
              {
                "name": "known_data_x",
                "detail": "The values of the independent variable(s) corresponding with `known_data_y`."
              },
              {
                "name": "b",
                "detail": "Given a general exponential form of `y = b*m^x` for a curve fit, calculates `b` if `TRUE` or forces `b` to be `1` and only calculates the `m` values if `FALSE`."
              },
              {
                "name": "verbose",
                "detail": "A flag specifying whether to return additional regression statistics or only the calculated coefficient and exponents."
              }
            ]
          },
          "MDETERM": {
            "d": "Returns the matrix determinant of a square matrix specified as an array or range.",
            "a": "Matrix determinant of a square matrix.",
            "p": [
              {
                "name": "square_matrix",
                "detail": "An array or range with an equal number of rows and columns representing a matrix whose determinant will be calculated."
              }
            ]
          },
          "MINVERSE": {
            "d": "Returns the multiplicative inverse of a square matrix specified as an array or range.",
            "a": "Multiplicative inverse of square matrix.",
            "p": [
              {
                "name": "square_matrix",
                "detail": "An array or range with an equal number of rows and columns representing a matrix whose multiplicative inverse will be calculated."
              }
            ]
          },
          "MMULT": {
            "d": "Calculates the matrix product of two matrices specified as arrays or ranges.",
            "a": "The matrix product of two matrices.",
            "p": [
              {
                "name": "matrix1",
                "detail": "The first matrix in the matrix multiplication operation, represented as an array or range."
              },
              {
                "name": "matrix2",
                "detail": "The second matrix in the matrix multiplication operation, represented as an array or range."
              }
            ]
          },
          "SUMPRODUCT": {
            "d": "Calculates the sum of the products of corresponding entries in two equal-sized arrays or ranges.",
            "a": "Sum of products of elements in two arrays.",
            "p": [
              {
                "name": "array1",
                "detail": "The first array or range whose entries will be multiplied with corresponding entries in the second such array or range."
              },
              {
                "name": "array2",
                "detail": "The second array or range whose entries will be multiplied with corresponding entries in the first such array or range."
              }
            ]
          },
          "ISFORMULA": {
            "d": "Checks whether a value is a formula.",
            "a": "Whether a value is a formula.",
            "p": [
              {
                "name": "cell",
                "detail": "The cell to be verified as containing a formula."
              }
            ]
          },
          "CELL": {
            "d": "Returns the requested information about the specified cell.",
            "a": "Gets information about a cell.",
            "p": [
              {
                "name": "info_type",
                "detail": "The type of information requested (see article for available types)"
              },
              {
                "name": "reference",
                "detail": "The reference to the cell."
              }
            ]
          },
          "NA": {
            "d": 'Returns the "value not available" error, `#N/A`.',
            "a": "The `#N/A` error.",
            "p": []
          },
          "ERROR_TYPE": {
            "d": "Returns a number corresponding to the error value in a different cell.",
            "a": "Error value of cell (as number).",
            "p": [
              {
                "name": "reference",
                "detail": "The cell to find the error number for although you can also provide the error value directly."
              }
            ]
          },
          "ISBLANK": {
            "d": "Checks whether the referenced cell is empty.",
            "a": "Whether the referenced cell is empty.",
            "p": [
              {
                "name": "value",
                "detail": "Reference to the cell that will be checked for emptiness."
              }
            ]
          },
          "ISERR": {
            "d": "Checks whether a value is an error other than `#N/A`.",
            "a": "Whether a value is an error other than `#n/a`.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as an error type other than `#N/A`."
              }
            ]
          },
          "ISERROR": {
            "d": "Checks whether a value is an error.",
            "a": "Whether a value is an error.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as an error type."
              }
            ]
          },
          "ISLOGICAL": {
            "d": "Checks whether a value is `TRUE` or `FALSE`.",
            "a": "Whether a value is `true` or `false`.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as a logical `TRUE` or `FALSE`."
              }
            ]
          },
          "ISNA": {
            "d": "Checks whether a value is the error `#N/A`.",
            "a": "Whether a value is the error `#n/a`.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be compared with the error value `#N/A`."
              }
            ]
          },
          "ISNONTEXT": {
            "d": "Checks whether a value is non-textual.",
            "a": "Whether a value is non-textual.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be checked."
              }
            ]
          },
          "ISNUMBER": {
            "d": "Checks whether a value is a number.",
            "a": "Whether a value is a number.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as a number."
              }
            ]
          },
          "ISREF": {
            "d": "Checks whether a value is a valid cell reference.",
            "a": "Whether a value is a valid cell reference.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as a cell reference."
              }
            ]
          },
          "ISTEXT": {
            "d": "Checks whether a value is text.",
            "a": "Whether a value is text.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as text."
              }
            ]
          },
          "TYPE": {
            "d": "Returns a number associated with the type of data passed into the function.",
            "a": "Get the type of a value.",
            "p": [
              {
                "name": "value",
                "detail": "The value whose type is to be determined."
              }
            ]
          },
          "N": {
            "d": "Returns the argument provided as a number. Text is converted to 0 and errors are returned as-is.",
            "a": "Argument provided as a number.",
            "p": [
              {
                "name": "value",
                "detail": "The argument to be converted to a number."
              }
            ]
          },
          "TO_DATE": {
            "d": "Converts a provided number to a date.",
            "a": "Converts a provided number to a date.",
            "p": [
              {
                "name": "value",
                "detail": "The argument or reference to a cell to be converted to a date."
              }
            ]
          },
          "TO_PURE_NUMBER": {
            "d": "Converts a provided date/time, percentage, currency or other formatted numeric value to a pure number without formatting.",
            "a": "Converts any numeric value to a pure number.",
            "p": [
              {
                "name": "value",
                "detail": "The argument or reference to a cell to be converted to a pure number."
              }
            ]
          },
          "TO_TEXT": {
            "d": "Converts a provided numeric value to a text value.",
            "a": "Converts a provided numeric value to a text value.",
            "p": [
              {
                "name": "value",
                "detail": "The argument or reference to a cell to be converted to text."
              }
            ]
          },
          "TO_DOLLARS": {
            "d": "Converts a provided number to a dollar value.",
            "a": "Converts a provided number to a dollar value.",
            "p": [
              {
                "name": "value",
                "detail": "The argument or reference to a cell to be converted to a dollar value."
              }
            ]
          },
          "TO_PERCENT": {
            "d": "Converts a provided number to a percentage.",
            "a": "Converts a provided number to a percentage.",
            "p": [
              {
                "name": "value",
                "detail": "The argument or reference to a cell to be converted to a percentage."
              }
            ]
          },
          "DGET": {
            "d": "Returns a single value from a database table-like array or range using a SQL-like query.",
            "a": "Single value from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DMAX": {
            "d": "Returns the maximum value selected from a database table-like array or range using a SQL-like query.",
            "a": "Maximum of values from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DMIN": {
            "d": "Returns the minimum value selected from a database table-like array or range using a SQL-like query.",
            "a": "Minimum of values from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DAVERAGE": {
            "d": "Returns the average of a set of values selected from a database table-like array or range using a SQL-like query.",
            "a": "Average of a set of values from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DCOUNT": {
            "d": "Counts numeric values selected from a database table-like array or range using a SQL-like query.",
            "a": "Counts values from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DCOUNTA": {
            "d": "Counts values, including text, selected from a database table-like array or range using a SQL-like query.",
            "a": "Counts values and text from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DPRODUCT": {
            "d": "Returns the product of values selected from a database table-like array or range using a SQL-like query.",
            "a": "Product of values from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DSTDEV": {
            "d": "Returns the standard deviation of a population sample selected from a database table-like array or range using a SQL-like query.",
            "a": "Standard deviation of population sample from table.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DSTDEVP": {
            "d": "Returns the standard deviation of an entire population selected from a database table-like array or range using a SQL-like query.",
            "a": "Standard deviation of entire population from table.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DSUM": {
            "d": "Returns the sum of values selected from a database table-like array or range using a SQL-like query.",
            "a": "Sum of values from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DVAR": {
            "d": "Returns the variance of a population sample selected from a database table-like array or range using a SQL-like query.",
            "a": "Variance of population sample from table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "DVARP": {
            "d": "Returns the variance of an entire population selected from a database table-like array or range using a SQL-like query.",
            "a": "Variance of a population from a table-like range.",
            "p": [
              {
                "name": "database",
                "detail": "The array or range containing the data to consider, structured in such a way that the first row contains the labels for each column's values."
              },
              {
                "name": "field",
                "detail": "Indicates which column in `database` contains the values to be extracted and operated on."
              },
              {
                "name": "criteria",
                "detail": "An array or range containing zero or more criteria to filter the `database` values by before operating."
              }
            ]
          },
          "AGE_BY_IDCARD": {
            "d": "Calculate the age based on the Chinese ID number. Support 15 or 18",
            "a": "Get age based on ID number.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              },
              {
                "name": "Deadline",
                "detail": "The deadline or range of age calculation. The default is the current day."
              }
            ]
          },
          "SEX_BY_IDCARD": {
            "d": "Calculate gender based on Chinese ID number. Support 15 or 18",
            "a": "Get gender based on ID number.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              }
            ]
          },
          "BIRTHDAY_BY_IDCARD": {
            "d": "Calculate the birthday based on the Chinese ID number. Support 15 or 18",
            "a": "Get the birthday based on the ID number.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              },
              {
                "name": "Birthday format",
                "detail": "Date type, default:0:[1900/01/01], 1:[1900-01-01], 2:[1900\u5E741\u67081\u65E5]"
              }
            ]
          },
          "PROVINCE_BY_IDCARD": {
            "d": "Calculate the province of birthplace based on the Chinese ID number. Support 15 or 18",
            "a": "Get the province of birthplace based on the ID number.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              }
            ]
          },
          "CITY_BY_IDCARD": {
            "d": "Calculate the city of birthplace based on the Chinese ID number. Support 15 or 18",
            "a": "Get the city of birthplace based on the ID number.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              }
            ]
          },
          "STAR_BY_IDCARD": {
            "d": "Calculate the constellation based on the Chinese ID number. Support 15 or 18",
            "a": "Get the constellation based on the ID number.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              }
            ]
          },
          "ANIMAL_BY_IDCARD": {
            "d": "Calculate the zodiac (rat, ox, tiger, rabbit...) based on the Chinese ID number. Support 15 or 18",
            "a": "Get the zodiac according to the ID number.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              }
            ]
          },
          "ISIDCARD": {
            "d": "Verify that the format of the ID card is correct. Support 15 or 18",
            "a": "Verify the correctness of the ID card format.",
            "p": [
              {
                "name": "ID number",
                "detail": "15-digit or 18-digit ID number or range."
              }
            ]
          },
          "DM_TEXT_CUTWORD": {
            "d": "Text segmentation. Split a series of words into a series of individual words",
            "a": "Chinese text segmentation.",
            "p": [
              {
                "name": "Text",
                "detail": "Any text that needs word segmentation."
              },
              {
                "name": "Word segmentation mode",
                "detail": "The default is 0[precision mode], 1[full mode], 2[search engine mode]."
              }
            ]
          },
          "DM_TEXT_TFIDF": {
            "d": "Use tf-idf algorithm for keyword extraction. Identify keywords from a series of text",
            "a": "tf-idf keyword recognition.",
            "p": [
              {
                "name": "Text",
                "detail": "Any text that needs word segmentation."
              },
              {
                "name": "Number of keywords",
                "detail": "The number of keywords returned by the algorithm, the default is 20"
              },
              {
                "name": "Corpus",
                "detail": "Select a corpus in a specific field, the default is 0[General], 1[Finance], 2[Medical]"
              }
            ]
          },
          "DM_TEXT_TEXTRANK": {
            "d": "Use TextRank algorithm to extract keywords. Identify keywords from a series of text",
            "a": "TextRank keyword recognition.",
            "p": [
              {
                "name": "Text",
                "detail": "Any text that needs word segmentation."
              },
              {
                "name": "Number of keywords",
                "detail": "The number of keywords returned by the algorithm, the default is 20"
              },
              {
                "name": "Corpus",
                "detail": "Select a corpus in a specific field, the default is 0[General], 1[Finance], 2[Medical]"
              }
            ]
          },
          "DATA_CN_STOCK_CLOSE": {
            "d": "According to the stock code and date, return the corresponding stock closing price of A shares.",
            "a": "Returns the closing price of stock.",
            "p": [
              {
                "name": "Stock code",
                "detail": "6-digit stock code, required."
              },
              {
                "name": "Date",
                "detail": "The trading day of the stock, the default is the latest trading day"
              },
              {
                "name": "Reversion and exclusion",
                "detail": "Select the ex right restoration type of the stock, default to 0 [former reversion], 1 [original price], 2 [post reversion]"
              }
            ]
          },
          "DATA_CN_STOCK_OPEN": {
            "d": "According to the stock code and date, return the opening price of stock.",
            "a": "Return the opening price of a shares.",
            "p": [
              {
                "name": "Stock code",
                "detail": "6-digit stock code, required."
              },
              {
                "name": "Date",
                "detail": "The trading day of the stock, the default is the latest trading day"
              },
              {
                "name": "Reversion and exclusion",
                "detail": "Select the ex right restoration type of the stock, default to 0 [former reversion], 1 [original price], 2 [post reversion]"
              }
            ]
          },
          "DATA_CN_STOCK_MAX": {
            "d": "According to the stock code and date, return the highest price of stock.",
            "a": "Return the highest price of stock.",
            "p": [
              {
                "name": "Stock code",
                "detail": "6-digit stock code, required."
              },
              {
                "name": "Date",
                "detail": "The trading day of the stock, the default is the latest trading day"
              },
              {
                "name": "Reversion and exclusion",
                "detail": "Select the ex right restoration type of the stock, default to 0 [former reversion], 1 [original price], 2 [post reversion]"
              }
            ]
          },
          "DATA_CN_STOCK_MIN": {
            "d": "According to the stock code and date, return the lowest price of stock.",
            "a": "Returns the lowest price of stock.",
            "p": [
              {
                "name": "Stock code",
                "detail": "6-digit stock code, required."
              },
              {
                "name": "Date",
                "detail": "The trading day of the stock, the default is the latest trading day"
              },
              {
                "name": "Reversion and exclusion",
                "detail": "Select the ex right restoration type of the stock, default to 0 [former reversion], 1 [original price], 2 [post reversion]"
              }
            ]
          },
          "DATA_CN_STOCK_VOLUMN": {
            "d": "According to the stock code and date, return the corresponding stock trading volume of A shares.",
            "a": "Returns the corresponding stock trading volume of A shares.",
            "p": [
              {
                "name": "Stock code",
                "detail": "6-digit stock code, required."
              },
              {
                "name": "Date",
                "detail": "The trading day of the stock, the default is the latest trading day"
              },
              {
                "name": "Reversion and exclusion",
                "detail": "Select the ex right restoration type of the stock, default to 0 [former reversion], 1 [original price], 2 [post reversion]"
              }
            ]
          },
          "DATA_CN_STOCK_AMOUNT": {
            "d": "According to the stock code and date, return the corresponding stock turnover of A shares.",
            "a": "Returns the corresponding stock turnover of A shares.",
            "p": [
              {
                "name": "Stock code",
                "detail": "6-digit stock code, required."
              },
              {
                "name": "Date",
                "detail": "The trading day of the stock, the default is the latest trading day"
              },
              {
                "name": "Reversion and exclusion",
                "detail": "Select the ex right restoration type of the stock, default to 0 [former reversion], 1 [original price], 2 [post reversion]"
              }
            ]
          },
          "ISDATE": {
            "d": "Returns whether a value is a date.",
            "a": "Whether a value is a date.",
            "p": [
              {
                "name": "value",
                "detail": "The value to be verified as a date."
              }
            ]
          },
          "LINESPLINES": {
            "d": "Generate sparklines embedded in the cell to describe the continuous trend of data",
            "a": "Generate sparklines line chart",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Line color",
                "detail": "The line color of the line graph can be range A1, color table index value or specific color value. Set it to 0 or false to not display it. It supports regx, rgb, rgba, etc. Default #2ec7c9"
              },
              {
                "name": "Line thickness",
                "detail": "Line thickness of the line graph, the default is 1px"
              },
              {
                "name": "Auxiliary line",
                "detail": "A horizontal line, which can be min, max, avg, median, range or custom value, default 0 none"
              },
              {
                "name": "Auxiliary line color",
                "detail": "Color setting of auxiliary line, same as line color configuration, default #000"
              },
              {
                "name": "Maximum mark",
                "detail": "Identifies the maximum value of the line graph, the same line color configuration, default 0 does not display"
              },
              {
                "name": "Minimum mark",
                "detail": "Identify the minimum value of the line graph, the same line color configuration, default 0 does not display"
              },
              {
                "name": "Mark size",
                "detail": "The maximum and minimum mark size settings, the default is 1.5"
              }
            ]
          },
          "AREASPLINES": {
            "d": "Generate sparklines embedded in the cell area chart, generally used to describe the continuous cumulative value trend of the data",
            "a": "Generate sparklines area chart",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Line color",
                "detail": "The line color of the line graph can be range A1, color table index value or specific color value. Set it to 0 or false to not display it. It supports regx, rgb, rgba, etc. Default #2ec7c9"
              },
              {
                "name": "Fill color",
                "detail": "Form an area chart, the same line color configuration, default 0 does not display"
              },
              {
                "name": "Line thickness",
                "detail": "Line thickness of the line graph, the default is 1px"
              },
              {
                "name": "Auxiliary line",
                "detail": "A horizontal line, which can be min, max, avg, median, range or custom value, default 0 none"
              },
              {
                "name": "Auxiliary line color",
                "detail": "Color setting of auxiliary line, same as line color configuration, default #000"
              }
            ]
          },
          "COLUMNSPLINES": {
            "d": "Generate sparklines embedded in the vertical histogram of cells, generally used to describe the size of discrete data",
            "a": "Generate sparklines vertical histogram",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Bar interval",
                "detail": "The distance between bars, the default is 1"
              },
              {
                "name": "Bar color",
                "detail": "The line color of the line graph can be range A1, color table index value or specific color value. Set it to 0 or false to not display it. It supports regx, rgb, rgba, etc. Default #fc5c5c"
              },
              {
                "name": "Negative bar color",
                "detail": "Negative bar color setting, representing the color of negative value, same as the bar color configuration, default #97b552"
              },
              {
                "name": "Max",
                "detail": "The maximum value of the bar chart, used to standardize the length of the bar chart, the default is to automatically calculate false, auto, null"
              },
              {
                "name": "Color palette",
                "detail": "The color palette can set the color of each bar individually, multiple settings can be set, and two formats are supported: 1 color such as #000, which means that the color of the first bar is black; 2 value range: color, such as -2:# 000 indicates that the bar with a value of -2 is black, 0:5:#000 indicates that the bar with a value of 0-5 is black, and the default is empty"
              }
            ]
          },
          "STACKCOLUMNSPLINES": {
            "d": "Generate sparklines, a cumulative vertical histogram embedded in a cell, generally used to describe the numerical size of multiple dimensions of discrete data",
            "a": "Generate sparklines cumulative vertical histogram",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Stack by column",
                "detail": "If you need to stack by row, set this item to false or 0, the default is 1"
              },
              {
                "name": "Bar interval",
                "detail": "The distance between bars, the default is 1"
              },
              {
                "name": "Max",
                "detail": "The maximum value of the cumulative bar, used to regulate the length of the bar, the default is to automatically calculate false, auto, null"
              },
              {
                "name": "Color palette",
                "detail": "The color palette can individually set the bar color of each dimension, which can be set to the range of A1:A10, etc. The default is #2ec7c9, #fc5c5c, #5ab1ef, #ffb980..."
              }
            ]
          },
          "BARSPLINES": {
            "d": "Generate sparklines embedded in the cell, generally used to describe the size of discrete data",
            "a": "Generate sparklines horizontal bar graph",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Bar interval",
                "detail": "The distance between bars, the default is 1"
              },
              {
                "name": "Bar color",
                "detail": "The line color of the line graph can be range A1, color table index value or specific color value. Set it to 0 or false to not display it. It supports regx, rgb, rgba, etc. Default #fc5c5c"
              },
              {
                "name": "Negative bar color",
                "detail": "Negative bar color setting, representing the color of negative value, same as the bar color configuration, default #97b552"
              },
              {
                "name": "Max",
                "detail": "The maximum value of the bar chart, used to standardize the length of the bar chart, the default is to automatically calculate false, auto, null"
              },
              {
                "name": "Color palette",
                "detail": "The color palette can set the color of each bar individually, multiple settings can be set, and two formats are supported: 1 color such as #000, which means that the color of the first bar is black; 2 value range: color, such as -2:# 000 indicates that the bar with a value of -2 is black, 0:5:#000 indicates that the bar with a value of 0-5 is black, and the default is empty"
              }
            ]
          },
          "STACKBARSPLINES": {
            "d": "Generate sparklines, a cumulative horizontal bar graph embedded in a cell, which is generally used to describe the numerical size of multiple dimensions of discrete data",
            "a": "Generate sparklines cumulative horizontal bar graph",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Stack by column",
                "detail": "If you need to stack by row, set this item to false or 0, the default is 1"
              },
              {
                "name": "Bar interval",
                "detail": "The distance between bars, the default is 1"
              },
              {
                "name": "Max",
                "detail": "The maximum value of the cumulative bar, used to regulate the length of the bar, the default is to automatically calculate false, auto, null"
              },
              {
                "name": "Color palette",
                "detail": "The color palette can individually set the bar color of each dimension, which can be set to the range of A1:A10, etc. The default is #2ec7c9, #fc5c5c, #5ab1ef, #ffb980..."
              }
            ]
          },
          "DISCRETESPLINES": {
            "d": "Generate sparklines embedded in the cell, generally used to describe the trend of discrete data",
            "a": "Generate sparklines discrete graph",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Segmentation threshold",
                "detail": "Discrete graph column color distinction, for example: if the value is 0, blue is greater than 0, red is less than 0, and the default is 0"
              },
              {
                "name": "Above threshold color",
                "detail": "The line color of the line graph can be range A1, color table index value or specific color value. Set it to 0 or false to not display it. It supports regx, rgb, rgba, etc. Default #2ec7c9"
              },
              {
                "name": "Below threshold color",
                "detail": "The color setting of the bar below the threshold, the same as the color above the threshold, default #fc5c5c"
              }
            ]
          },
          "TRISTATESPLINES": {
            "d": "Generate sparklines, a three-state graph embedded in the cell, which is generally used to describe the trend of three situations, such as winning, losing, or drawing.",
            "a": "Generate sparklines three-state graph",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Bar interval",
                "detail": "The distance between bars, the default is 1"
              },
              {
                "name": "Bar color",
                "detail": "The line color of the line graph can be range A1, color table index value or specific color value. Set it to 0 or false to not display it. It supports regx, rgb, rgba, etc. Default #fc5c5c"
              },
              {
                "name": "Negative bar color",
                "detail": "Negative bar color setting, representing the color of negative value, same as the bar color configuration, default #97b552"
              },
              {
                "name": "Zero value bar color",
                "detail": "Zero value bar color setting, representing 0 value color, the same color configuration of the bar, default #999"
              },
              {
                "name": "Color palette",
                "detail": "The color palette can set the color of each bar individually, multiple settings can be set, and two formats are supported: 1 color such as #000, which means that the color of the first bar is black; 2 value range: color, such as -2:# 000 indicates that the bar with a value of -2 is black, 0:5:#000 indicates that the bar with a value of 0-5 is black, and the default is empty"
              }
            ]
          },
          "PIESPLINES": {
            "d": "Generate sparklines pie chart embedded in the cell, generally used to describe the proportion of data",
            "a": "Generate sparklines pie chart",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Rotation angle",
                "detail": "The rotation angle of the pie chart, the default is 0"
              },
              {
                "name": "border",
                "detail": "Pie chart border size, default is none 0"
              },
              {
                "name": "Border color",
                "detail": "The border color of the pie chart, the default is #000"
              },
              {
                "name": "Color palette",
                "detail": "The color of the slice can be set in the palette, which can be set to the range of A1:A10, etc. The default is #2ec7c9, #fc5c5c, #5ab1ef, #ffb980..."
              }
            ]
          },
          "BOXSPLINES": {
            "d": "Generate sparklines embedded in the cell box plot, generally used to describe the statistical distribution of the data set",
            "a": "Generate sparklines box plot",
            "p": [
              {
                "name": "Range",
                "detail": "Range\uFF0CValues can be calculated effectively, such as A1:A20, {1,2,3,4,5}, etc."
              },
              {
                "name": "Outlier ratio",
                "detail": "The threshold range of outliers, if it is 0 or false, it will not be displayed, the default is 1.5 times"
              },
              {
                "name": "Target value",
                "detail": "The target value setting on the box plot, the default is false and does not display"
              },
              {
                "name": "Point size",
                "detail": "The radius of the target point and outlier is set, the default is 1.5"
              }
            ]
          },
          "BULLETSPLINES": {
            "d": "Generate sparklines embedded in the cell, generally used to describe the task achievement rate",
            "a": "Generating sparklines bullets",
            "p": [
              {
                "name": "Target",
                "detail": "The numerical value can be calculated effectively for the achieved target value, such as A1, 100, etc."
              },
              {
                "name": "achieved",
                "detail": "Only when the value is completed can the value be calculated effectively, such as A1, 100, etc."
              },
              {
                "name": "Contrast",
                "detail": "Comparative values, such as excess, minimum, and bottom line for awards, can be effectively calculated, such as A1, 100, etc. You can set up to 9 comparison values"
              }
            ]
          },
          "COMPOSESPLINES": {
            "d": "Support multiple types of pictures in the same cell, each parameter represents a sparklines diagram",
            "a": "Combine sparklines graphs into one cell",
            "p": [
              {
                "name": "config",
                "detail": "Sparklines chart settings, such as A1:A20, a completed pie chart, line chart settings, etc."
              }
            ]
          },
          "SORT": {
            "d": "Sorts the rows of a given array or range by the values in one or more columns.",
            "a": "Sorts rows of range by specified column.",
            "p": [
              {
                "name": "range",
                "detail": "The data to be sorted."
              },
              {
                "name": "sort_column",
                "detail": "The index of the column in `range` or a range outside of `range` containing the values by which to sort."
              },
              {
                "name": "is_ascending",
                "detail": "`TRUE` or `FALSE` indicating whether to sort `sort_column` in ascending order. `FALSE` sorts in descending order."
              },
              {
                "name": "sort_column2",
                "detail": "Additional columns."
              }
            ]
          },
          "FILTER": {
            "d": "Returns a filtered version of the source range, returning only rows or columns which meet the specified conditions.",
            "a": "Filters a range based off provided conditions.",
            "p": [
              {
                "name": "range",
                "detail": "The data to be filtered."
              },
              {
                "name": "condition1",
                "detail": "A column or row containing true or false values corresponding to the first column or row of `range`, or an array formula evaluating to true or false."
              },
              {
                "name": "condition2",
                "detail": "Additional rows or columns containing boolean values `TRUE` or `FALSE` indicating whether the corresponding row or column in `range` should pass through `FILTER`. Can also contain array formula expressions which evaluate to such rows or columns. All conditions must be of the same type (row or column). Mixing row conditions and column conditions is not permitted."
              }
            ]
          },
          "UNIQUE": {
            "d": "Returns unique rows in the provided source range, discarding duplicates. Rows are returned in the order in which they first appear in the source range.",
            "a": "Unique rows in the provided source range.",
            "p": [
              {
                "name": "range",
                "detail": "The data to filter by unique entries."
              },
              {
                "name": "by_col",
                "detail": "[Option] - Logical value, indicating how to compare; by row = FALSE() or omitted; by column = TRUE()."
              },
              {
                "name": "occurs_once",
                "detail": "[Option] - Logical value, only one occurrence in the unique value is returned = TRUE(); including all unique values = FALSE() or omitted."
              }
            ]
          },
          "RANDARRAY": {
            "d": "Returns a grid of random numbers between 0 inclusive and 1 exclusive. The grid size will match the provided rows and columns arguments. If neither rows nor columns are provided, then the grid will be size 1 x 1.",
            "a": "Returns a grid of random numbers.",
            "p": [
              {
                "name": "rows",
                "detail": "The number of rows to populate with a random number."
              },
              {
                "name": "columns",
                "detail": "The number of columns to populate with a random number."
              }
            ]
          },
          "SEQUENCE": {
            "d": "Returns a grid of sequential numbers starting at a specified start value and  increasing by a specified step size. By default, the sequence starts at and  increases by 1.",
            "a": "Returns a grid of sequential numbers.",
            "p": [
              {
                "name": "rows",
                "detail": "The number of rows in the function's resulting grid."
              },
              {
                "name": "columns",
                "detail": "The number of columns in the function's resulting grid. If omitted, the result grid will have 1 column."
              },
              {
                "name": "start",
                "detail": "The number, at which to start the sequence. If omitted, the sequence will start at 1."
              },
              {
                "name": "step",
                "detail": "The amount each value in the sequence will differ by. If omitted, each value will differ by 1."
              }
            ]
          },
          "EVALUATE": {
            "d": "Evaluate a formula or expression expressed in words and return the result",
            "a": "Evaluate according to literal formula or expression.",
            "p": [
              {
                "name": "expression",
                "detail": "Formula or expression"
              }
            ]
          },
          "REMOTE": {
            "d": "Calls a function on a remote server",
            "a": "Calls a function on a remote back end server/API.",
            "p": [
              {
                "name": "remote_expression",
                "detail": "Formula"
              }
            ]
          }
        },
        toolbar: {
          undo: "Deshacer",
          redo: "Rehacer",
          paintFormat: "Clonar formato",
          currencyFormat: "Formato de moneda",
          percentageFormat: "Formato de porcentaje",
          numberDecrease: "Menos decimales",
          numberIncrease: "M\xE1s decimales",
          moreFormats: "M\xE1s formatos",
          font: "Fuente",
          fontSize: "Tama\xF1o Fuente",
          bold: "Negrita (Ctrl+B)",
          italic: "It\xE1lica (Ctrl+I)",
          strikethrough: "Tachar (Alt+Shift+5)",
          underline: "Guion bajo",
          textColor: "Color texto",
          chooseColor: "elegir color",
          resetColor: "Reinicializar",
          customColor: "PERSONALIZADO",
          alternatingColors: "Colores alternos",
          confirmColor: "Vale",
          cancelColor: "Cancelar",
          collapse: "Recoger",
          fillColor: "Color de relleno",
          border: "Borde",
          borderStyle: "Estilo Borde",
          mergeCell: "Juntar celdas",
          chooseMergeType: "Elegir tipo de uni\xF3n",
          horizontalAlign: "Alineaci\xF3n Horizontal",
          verticalAlign: "Alineaci\xF3n Vertical",
          alignment: "Alineaci\xF3n",
          textWrap: "Ajuste de texto",
          textWrapMode: "Modo de ajuste de texto",
          textRotate: "Rotar texto",
          textRotateMode: "Modo de rotar texto",
          freezeTopRow: "Fijar fila superior",
          sortAndFilter: "Ordenar y filtrar",
          findAndReplace: "Buscar y reemplazar",
          sum: "SUMA",
          autoSum: "SUMA autom\xE1tica",
          moreFunction: "M\xE1s funciones",
          conditionalFormat: "Formato condicional",
          postil: "Comentario",
          pivotTable: "Tabla Din\xE1mica",
          chart: "Gr\xE1fica",
          screenshot: "Captura de pantalla",
          splitColumn: "Separar texto",
          insertImage: "Insertar imagen",
          dataVerification: "Verificaci\xF3n de datos",
          protection: "Proteger la hoja",
          clearText: "Limpiar color",
          noColorSelectedText: "Ning\xFAn color seleccionado",
          toolMore: "M\xE1s",
          toolLess: "Menos",
          toolClose: "Cerrar",
          toolMoreTip: "M\xE1s funcionalidades",
          moreOptions: "M\xE1s opciones",
          cellFormat: "Configuraci\xF3n formato de celda",
          print: "Imprimir"
        },
        alternatingColors: {
          applyRange: "Aplicar a rango",
          selectRange: "Seleccionar un rango de datos",
          header: "Cabecera",
          footer: "Pie",
          errorInfo: "No se puede realizar esta operaci\xF3n en varias \xE1reas de selecci\xF3n, selecciona una sola \xE1rea y vuelve a intentarlo",
          textTitle: "Estilo Formato",
          custom: "PERSONALIZADO",
          close: "cerrar",
          selectionTextColor: "Haz clic para seleccionar el color del texto",
          selectionCellColor: "Haz clic para seleccionar el color de la celda",
          removeColor: "Eliminar colores alternos",
          colorShow: "color",
          currentColor: "Actual",
          tipSelectRange: "Selecciona la gama de colores alternos",
          errorNoRange: "No hay ning\xFAn rango seleccionado",
          errorExistColors: "Los colores alternos ya existen y no se pueden editar"
        },
        button: {
          confirm: "Vale",
          cancel: "Cancelar",
          close: "Cerrar",
          update: "Actualizar",
          delete: "Eliminar",
          insert: "Insertar",
          prevPage: "Previous",
          nextPage: "Next",
          total: "total:"
        },
        paint: {
          start: "Inicio clonar formato",
          end: "ESC",
          tipSelectRange: "Selecciona el rango que quieres copiar",
          tipNotMulti: "No se puede realizar esta operaci\xF3n en un rango de selecci\xF3n m\xFAltiple"
        },
        format: {
          moreCurrency: "M\xE1s formatos de moneda",
          moreDateTime: "M\xE1s formatos de fecha y hora",
          moreNumber: "M\xE1s formatos de n\xFAmero",
          titleCurrency: "Formatos de moneda",
          decimalPlaces: "Decimales",
          titleDateTime: "Formatos de fecha y hora",
          titleNumber: "Formatos de n\xFAmeros"
        },
        info: {
          detailUpdate: "Nuevo abierto",
          detailSave: "Cache local restaurado",
          row: "",
          column: "",
          loading: "Cargando...",
          copy: "Copiar",
          return: "Salir",
          rename: "Renombrar",
          tips: "Renombrar Libro",
          noName: "Hoja sin t\xEDtulo",
          wait: "esperando actualizaci\xF3n",
          add: "A\xF1adir",
          addLast: "m\xE1s filas al final",
          backTop: "Volver arriba",
          pageInfo: "Total ${total}\uFF0Cp\xE1gina ${totalPage}\uFF0Cactual ${currentPage}",
          nextPage: "Siguiente",
          tipInputNumber: "Introduce el n\xFAmero",
          tipInputNumberLimit: "El rango de aumento est\xE1 limitado a 1-100",
          tipRowHeightLimit: "La altura de la fila debe estar entre 0 ~ 545",
          tipColumnWidthLimit: "El ancho de la columna debe estar entre 0 ~ 2038",
          pageInfoFull: "Total ${total}\uFF0Cp\xE1gina ${totalPage}\uFF0CSe muestran todos los datos"
        },
        currencyDetail: {
          RMB: "RMB",
          USdollar: "D\xF3lar US",
          EUR: "EUR",
          GBP: "GBP",
          HK: "HK",
          JPY: "JPY",
          AlbanianLek: "Albanian Lek",
          AlgerianDinar: "Algerian Dinar",
          Afghani: "Afghani",
          ArgentinePeso: "Argentine Peso",
          UnitedArabEmiratesDirham: "United Arab Emirates Dirham",
          ArubanFlorin: "Aruban Florin",
          OmaniRial: "Omani Rial",
          Azerbaijanimanat: "Azerbaijani manat",
          EgyptianPound: "Egyptian Pound",
          EthiopianBirr: "Ethiopian Birr",
          AngolaKwanza: "Angola Kwanza",
          AustralianDollar: "Australian Dollar",
          Patacas: "Patacas",
          BarbadosDollar: "Barbados Dollar",
          PapuaNewGuineaKina: "Papua New Guinea Kina",
          BahamianDollar: "Bahamian Dollar",
          PakistanRupee: "Pakistan Rupee",
          ParaguayanGuarani: "Paraguayan Guarani",
          BahrainiDinar: "Bahraini Dinar",
          PanamanianBalboa: "Panamanian Balboa",
          Brazilianreal: "Brazilian real",
          Belarusianruble: "Belarusian ruble",
          BermudianDollar: "Bermudian Dollar",
          BulgarianLev: "Bulgarian Lev",
          IcelandKrona: "Iceland Krona",
          BosniaHerzegovinaConvertibleMark: "Bosnia-Herzegovina Convertible Mark",
          PolishZloty: "Polish Zloty",
          Boliviano: "Boliviano",
          BelizeDollar: "Belize Dollar",
          BotswanaPula: "Botswana Pula",
          NotDannuzhamu: "Not Dannuzhamu",
          BurundiFranc: "Burundi Franc",
          NorthKoreanWon: "North Korean Won",
          DanishKrone: "Danish Krone",
          EastCaribbeanDollar: "East Caribbean Dollar",
          DominicaPeso: "Dominica Peso",
          RussianRuble: "Russian Ruble",
          EritreanNakfa: "Eritrean Nakfa",
          CFAfranc: "CFA franc",
          PhilippinePeso: "Philippine Peso",
          FijiDollar: "Fiji Dollar",
          CapeVerdeEscudo: "Cape Verde Escudo",
          FalklandIslandsPound: "Falkland Islands Pound",
          GambianDalasi: "Gambian Dalasi",
          Congolesefranc: "Congolese franc",
          ColombianPeso: "Colombian Peso",
          CostaRicanColon: "Costa Rican Colon",
          CubanPeso: "Cuban Peso",
          Cubanconvertiblepeso: "Cuban convertible peso",
          GuyanaDollar: "Guyana Dollar",
          KazakhstanTenge: "Kazakhstan Tenge",
          Haitiangourde: "Haitian gourde",
          won: "won",
          NetherlandsAntillesGuilder: "Netherlands Antilles Guilder",
          Honduraslempiras: "Honduras lempiras",
          DjiboutiFranc: "Djibouti Franc",
          KyrgyzstanSom: "Kyrgyzstan Som",
          GuineaFranc: "Guinea Franc",
          CanadianDollar: "Canadian Dollar",
          GhanaianCedi: "Ghanaian Cedi",
          Cambodianriel: "Cambodian riel",
          CzechKoruna: "Czech Koruna",
          ZimbabweDollar: "Zimbabwe Dollar",
          QatariRiyal: "Qatari Riyal",
          CaymanIslandsDollar: "Cayman Islands Dollar",
          Comorianfranc: "Comorian franc",
          KuwaitiDinar: "Kuwaiti Dinar",
          CroatianKuna: "Croatian Kuna",
          KenyanShilling: "Kenyan Shilling",
          LesothoLoti: "Lesotho Loti",
          LaoKip: "Lao Kip",
          LebanesePound: "Lebanese Pound",
          Lithuanianlitas: "Lithuanian litas",
          LibyanDinar: "Libyan Dinar",
          LiberianDollar: "Liberian Dollar",
          RwandaFranc: "Rwanda Franc",
          RomanianLeu: "Romanian Leu",
          MalagasyAriary: "Malagasy Ariary",
          MaldivianRufiyaa: "Maldivian Rufiyaa",
          MalawiKwacha: "Malawi Kwacha",
          MalaysianRinggit: "Malaysian Ringgit",
          MacedoniawearingDinar: "Macedonia wearing Dinar",
          MauritiusRupee: "Mauritius Rupee",
          MauritanianOuguiya: "Mauritanian Ouguiya",
          MongolianTugrik: "Mongolian Tugrik",
          BangladeshiTaka: "Bangladeshi Taka",
          PeruvianNuevoSol: "Peruvian Nuevo Sol",
          MyanmarKyat: "Myanmar Kyat",
          MoldovanLeu: "Moldovan Leu",
          MoroccanDirham: "Moroccan Dirham",
          MozambiqueMetical: "Mozambique Metical",
          MexicanPeso: "Mexican Peso",
          NamibianDollar: "Namibian Dollar",
          SouthAfricanRand: "South African Rand",
          SouthSudanesePound: "South Sudanese Pound",
          NicaraguaCordoba: "Nicaragua Cordoba",
          NepaleseRupee: "Nepalese Rupee",
          NigerianNaira: "Nigerian Naira",
          NorwegianKrone: "Norwegian Krone",
          GeorgianLari: "Georgian Lari",
          RMBOffshore: "RMB (Offshore)",
          SwedishKrona: "Swedish Krona",
          SwissFranc: "Swiss Franc",
          SerbianDinar: "Serbian Dinar",
          SierraLeone: "Sierra Leone",
          SeychellesRupee: "Seychelles Rupee",
          SaudiRiyal: "Saudi Riyal",
          SaoTomeDobra: "Sao Tome Dobra",
          SaintHelenapound: "Saint Helena pound",
          SriLankaRupee: "Sri Lanka Rupee",
          SwazilandLilangeni: "Swaziland Lilangeni",
          SudanesePound: "Sudanese Pound",
          Surinamesedollar: "Surinamese dollar",
          SolomonIslandsDollar: "Solomon Islands Dollar",
          SomaliShilling: "Somali Shilling",
          TajikistanSomoni: "Tajikistan Somoni",
          PacificFranc: "Pacific Franc",
          ThaiBaht: "Thai Baht",
          TanzanianShilling: "Tanzanian Shilling",
          TonganPaanga: "Tongan Pa'anga",
          TrinidadandTobagoDollar: "Trinidad and Tobago Dollar",
          TunisianDinar: "Tunisian Dinar",
          TurkishLira: "Turkish Lira",
          VanuatuVatu: "Vanuatu Vatu",
          GuatemalanQuetzal: "Guatemalan Quetzal",
          CommissionBolivar: "Commission Bolivar",
          BruneiDollar: "Brunei Dollar",
          UgandanShilling: "Ugandan Shilling",
          UkrainianHryvnia: "Ukrainian Hryvnia",
          UruguayanPeso: "Uruguayan Peso",
          Uzbekistansom: "Uzbekistan som",
          WesternSamoaTala: "Western Samoa Tala",
          SingaporeDollar: "Singapore Dollar",
          NT: "NT",
          NewZealandDollar: "New Zealand Dollar",
          HungarianForint: "Hungarian Forint",
          SyrianPound: "Syrian Pound",
          JamaicanDollar: "Jamaican Dollar",
          ArmenianDram: "Armenian Dram",
          YemeniRial: "Yemeni Rial",
          IraqiDinar: "Iraqi Dinar",
          IranianRial: "Iranian Rial",
          NewIsraeliShekel: "New Israeli Shekel",
          IndianRupee: "Indian Rupee",
          IndonesianRupiah: "Indonesian Rupiah",
          JordanianDinar: "Jordanian Dinar",
          VND: "VND",
          ZambianKwacha: "Zambian Kwacha",
          GibraltarPound: "Gibraltar Pound",
          ChileanPeso: "Chilean Peso",
          CFAFrancBEAC: "CFA Franc BEAC"
        },
        defaultFmt: [
          {"text": "Autom\xE1tico", "value": "General", "example": ""},
          {"text": "Texto", "value": "@", "example": ""},
          {"text": "", "value": "partir", "example": ""},
          {"text": "N\xFAmero", "value": "##0.00", "example": "1000.12"},
          {"text": "Porcentaje", "value": "#0.00%", "example": "12.21%"},
          {"text": "Cient\xEDfico", "value": "0.00E+00", "example": "1.01E+5"},
          {"text": "", "value": "split", "example": ""},
          {"text": "Contabilidad", "value": "\xA5(0.00)", "example": "\xA5(1200.09)"},
          {"text": "Moneda", "value": "\xA50.00", "example": "\xA51200.09"},
          {"text": "", "value": "partir", "example": ""},
          {"text": "Fecha", "value": "yyyy-MM-dd", "example": "2017-11-29"},
          {"text": "Hora", "value": "hh:mm AM/PM", "example": "3:00 PM"},
          {"text": "Hora 24H", "value": "hh:mm", "example": "15:00"},
          {"text": "Fecha Hora", "value": "yyyy-MM-dd hh:mm AM/PM", "example": "2017-11-29 3:00 PM"},
          {"text": "Fecha Hora 24 H", "value": "yyyy-MM-dd hh:mm", "example": "2017-11-29 15:00"},
          {"text": "", "value": "partir", "example": ""},
          {"text": "Formatos personalizados", "value": "fmtOtherSelf", "example": "m\xE1s"}
        ],
        dateFmtList: [
          {
            "name": "1930-08-05",
            "value": "yyyy-MM-dd"
          },
          {
            "name": "1930/8/5",
            "value": "yyyy/MM/dd"
          },
          {
            "name": "08-05",
            "value": "MM-dd"
          },
          {
            "name": "8-5",
            "value": "M-d"
          },
          {
            "name": "13:30:30",
            "value": "h:mm:ss"
          },
          {
            "name": "13:30",
            "value": "h:mm"
          },
          {
            "name": "PM 01:30",
            "value": "AM/PM hh:mm"
          },
          {
            "name": "PM 1:30",
            "value": "AM/PM h:mm"
          },
          {
            "name": "PM 1:30:30",
            "value": "AM/PM h:mm:ss"
          },
          {
            "name": "08-05 PM 01:30",
            "value": "MM-dd AM/PM hh:mm"
          }
        ],
        fontFamily: {
          MicrosoftYaHei: "YaHei"
        },
        fontarray: ["Times New Roman", "Arial", "Tahoma", "Verdana"],
        fontjson: {"times new roman": 0, "arial": 1, "tahoma": 2, "verdana": 3},
        border: {
          borderTop: "borderTop",
          borderBottom: "borderBottom",
          borderLeft: "borderLeft",
          borderRight: "borderRight",
          borderNone: "borderNone",
          borderAll: "borderAll",
          borderOutside: "borderOutside",
          borderInside: "borderInside",
          borderHorizontal: "borderHorizontal",
          borderVertical: "borderVertical",
          borderColor: "borderColor",
          borderSize: "borderSize"
        },
        merge: {
          mergeAll: "Unir todo",
          mergeV: "Verticalmente",
          mergeH: "Horizontalmente",
          mergeCancel: "Separar",
          overlappingError: "No se pueden fusionar \xE1reas superpuestas",
          partiallyError: "No se puede realizar esta operaci\xF3n en celdas parcialmente unidas"
        },
        align: {
          left: "izquierda",
          center: "centro",
          right: "derecha",
          top: "Arriba",
          middle: "Centro",
          bottom: "Abajo"
        },
        textWrap: {
          "overflow": "Desbordar",
          "wrap": "Ajustar",
          "clip": "Cortar"
        },
        rotation: {
          "none": "Ninguno",
          "angleup": "Ladear Arriba",
          "angledown": "Ladear Abajo",
          "vertical": "Apilar Verticalmente",
          "rotationUp": "Rotar Arriba",
          "rotationDown": "Rotar Abajo"
        },
        freezen: {
          default: "Fijar",
          freezenRow: "Primera Fila",
          freezenColumn: "Primera Columna",
          freezenRC: "Ambas",
          freezenRowRange: "Fijar rango filas",
          freezenColumnRange: "Fijar rango columnas",
          freezenRCRange: "Fijar ambos rangos",
          freezenCancel: "Cancelar",
          noSeletionError: "No hay rango para seleccionar",
          rangeRCOverErrorTitle: "Recordatorio de congelaci\xF3n",
          rangeRCOverError: "El panel de congelaci\xF3n excede el rango visible y puede causar que no funcione correctamente. Reinicie el \xE1rea de congelaci\xF3n."
        },
        sort: {
          "asc": "Ascendente ",
          "desc": "Descendente ",
          "custom": "Ordenaci\xF3n personalizada",
          "hasTitle": "Los datos tienen una fila de encabezado",
          "sortBy": "Ordenar por",
          "addOthers": "A\xF1adir otra columna de ordenaci\xF3n",
          "close": "cerrar",
          "confirm": "ordenar",
          "columnOperation": "Columna",
          "secondaryTitle": "y despu\xE9s por",
          "sortTitle": "Ordenar rango",
          "sortRangeTitle": "Ordenar rango de",
          "sortRangeTitleTo": "a",
          "noRangeError": "No se puede realizar esta operaci\xF3n en m\xFAltiples \xE1reas de selecci\xF3n, selecciona un solo rango e intenta nuevamente",
          "mergeError": "Hay celdas combinadas en la selecci\xF3n, \xA1esta operaci\xF3n no se puede realizar!",
          "columnSortMergeError": "La ordenaci\xF3n de las columnas se extiende a toda la selecci\xF3n de la tabla. Esta operaci\xF3n no puede realizarse si hay celdas fusionadas. Utilice la funci\xF3n de clasificaci\xF3n de la barra de herramientas."
        },
        filter: {
          filter: "crear filtro",
          sortByAsc: "Ordenar A-Z",
          sortByDesc: "Ordenar Z-A",
          filterByColor: "Filtrar por color",
          filterByCondition: "Filtrar por condici\xF3n",
          filterByValues: "Filtrar por valores",
          filiterInputNone: "Ninguno",
          filiterInputTip: "Introduce valor de filtro",
          filiterRangeStart: "",
          filiterRangeStartTip: "Valor para f\xF3rmula",
          filiterRangeEnd: "e",
          filiterRangeEndTip: "Valor para f\xF3rmula",
          filterValueByAllBtn: "Seleccionar todos",
          filterValueByClearBtn: "Limpiar",
          filterValueByInverseBtn: "Invertir",
          filterValueByTip: "filtrar por valores",
          filterConform: "Confirmar",
          filterCancel: "Cancelar",
          clearFilter: "Quitar filtro",
          conditionNone: "Ninguno",
          conditionCellIsNull: "Est\xE1 vac\xEDo",
          conditionCellNotNull: "No est\xE1 vac\xEDo",
          conditionCellTextContain: "El texto contiene",
          conditionCellTextNotContain: "El texto no contiene",
          conditionCellTextStart: "El texto empieza con",
          conditionCellTextEnd: "El texto termina con",
          conditionCellTextEqual: "El texto es exactamente",
          conditionCellDateEqual: "La fecha es",
          conditionCellDateBefore: "La fecha es anterior",
          conditionCellDateAfter: "La fecha es posterior",
          conditionCellGreater: "Mayor que",
          conditionCellGreaterEqual: "Mayor o igual que",
          conditionCellLess: "Menor que",
          conditionCellLessEqual: "Menor o igual que",
          conditionCellEqual: "Es igual a",
          conditionCellNotEqual: "No es igual a",
          conditionCellBetween: "Est\xE1 entre",
          conditionCellNotBetween: "No est\xE1 entre",
          filiterMoreDataTip: "\xA1Gran cantidad de datos! por favor espera",
          filiterMonthText: "Mes",
          filiterYearText: "A\xF1o",
          filiterByColorTip: "Filtrar por color de celda",
          filiterByTextColorTip: "Filtrar por color de fuente",
          filterContainerOneColorTip: "Esta columna contiene solo un color",
          filterDateFormatTip: "Format fecha",
          valueBlank: "(Nulo)",
          mergeError: "Hay celdas combinadas en la selecci\xF3n del filtro, \xA1esta operaci\xF3n no se puede realizar!"
        },
        rightclick: {
          copy: "Copiar",
          copyAs: "Copiar como",
          paste: "Pegar",
          insert: "Insertar",
          delete: "Eliminar",
          deleteCell: "Eliminar celda",
          deleteSelected: "Eliminar seleccionado ",
          hide: "Esconder",
          hideSelected: "Esconder seleccionado ",
          showHide: "Mostrar ocultos ",
          to: "Hacia",
          left: "Izquierda",
          right: "Derecha",
          top: "Arriba",
          bottom: "Abajo",
          moveLeft: "Mover izquierda",
          moveUp: "Mover arriba",
          add: "A\xF1adir",
          row: "Fila",
          column: "Columna",
          width: "Ancho",
          height: "Alto",
          number: "N\xFAmero",
          confirm: "Confirmar",
          orderAZ: "Ordenar A-Z",
          orderZA: "Ordenar Z-A",
          clearContent: "Limpiar contenido",
          matrix: "Operaci\xF3n de Matriz",
          sortSelection: "Ordenar",
          filterSelection: "Filtrar",
          chartGeneration: "Crear gr\xE1fico",
          firstLineTitle: "t\xEDtulo primera l\xEDnea",
          untitled: "sin t\xEDtulo",
          array1: "Matriz unidimensional",
          array2: "Matriz bidimensional",
          array3: "Matrices multidimensionales",
          diagonal: "Diagonal",
          antiDiagonal: "Anti-diagonal",
          diagonalOffset: "Desplazamiento Diagonal",
          offset: "Desplazamiento",
          boolean: "Booleana",
          flip: "Voltear",
          upAndDown: "Arriba y abajo",
          leftAndRight: "Izquierda y derecha",
          clockwise: "Sentido horario",
          counterclockwise: "Sentido anti-horario",
          transpose: "Transponer",
          matrixCalculation: "C\xE1lculo de matrices",
          plus: "Suma",
          minus: "Resta",
          multiply: "Multiplicaci\xF3n",
          divided: "Divisi\xF3n",
          power: "Exponenciaci\xF3n",
          root: "Ra\xEDz Cuadrada",
          log: "Logaritmo",
          delete0: "Eliminar valores nulos en ambos extremos",
          removeDuplicate: "Eliminar valores duplicados",
          byRow: "Por fila",
          byCol: "Por columna",
          generateNewMatrix: "Generar nueva matriz"
        },
        comment: {
          "insert": "Insertar",
          "edit": "Editar",
          "delete": "Elimiar",
          "showOne": "Mostrar/Ocular",
          "showAll": "Mostrar/Ocular Todo"
        },
        screenshot: {
          screenshotTipNoSelection: "Selecciona el alcance de la captura de pantalla",
          screenshotTipTitle: "\xA1Advertencia!",
          screenshotTipHasMerge: "Esta operaci\xF3n no se puede realizar en celdas combinadas",
          screenshotTipHasMulti: "Esta operaci\xF3n no se puede realizar en varios rangos de selecci\xF3n",
          screenshotTipSuccess: "Exitoso",
          screenshotImageName: "Captura de pantalla",
          downLoadClose: "Cerrar",
          downLoadCopy: "Copiar al portapapeles",
          downLoadBtn: "Descargar",
          browserNotTip: "no es compatible con el navegador IE.",
          rightclickTip: 'Haz clic con el bot\xF3n derecho en la imagen y selecciona "copiar"',
          successTip: 'Con \xE9xito (si falla el pegado, haz clic con el bot\xF3n derecho en la imagen para "copiar imagen")'
        },
        splitText: {
          splitDelimiters: "Delimitadores",
          splitOther: "Otros",
          splitContinueSymbol: "Los separadores consecutivos se tratan como uno solo",
          splitDataPreview: "Previsualizar",
          splitTextTitle: "Partir texto",
          splitConfirmToExe: "Ya hay datos aqu\xED, \xBFquieres reemplazarlos?",
          tipNoMulti: "No se puede realizar esta operaci\xF3n en varias \xE1reas de selecci\xF3n, selecciona una \xFAnica \xE1rea y vuelve a intentarlo",
          tipNoMultiColumn: "Solo se puede convertir una columna de datos a la vez. El \xE1rea seleccionado puede tener varias filas, pero no varias columnas. Vuelve a intentarlo despu\xE9s de seleccionar un solo rango de columnas"
        },
        imageText: {
          imageSetting: "Configuraci\xF3n de imagen",
          close: "Cerrar",
          conventional: "Convencional",
          moveCell1: "Mover y cambiar el tama\xF1o de las celdas",
          moveCell2: "Mover y no cambiar el tama\xF1o de la celda",
          moveCell3: "No mover ni cambiar el tama\xF1o de la celda",
          fixedPos: "Posici\xF3n fija",
          border: "Borde",
          width: "Ancho",
          radius: "Radio",
          style: "Estilo",
          solid: "S\xF3lido",
          dashed: "Discontinua",
          dotted: "Punteado",
          double: "Doble",
          color: "Color"
        },
        punctuation: {
          "tab": "Tabulaci\xF3n",
          "semicolon": "punto y coma",
          "comma": "coma",
          "space": "espacio"
        },
        findAndReplace: {
          find: "Encontrar",
          replace: "Reemplazar",
          goto: "Ir a",
          location: "Ubicaci\xF3n",
          formula: "F\xF3rmula",
          date: "Fecha",
          number: "N\xFAmero",
          string: "Texto",
          error: "Error",
          condition: "Condici\xF3n",
          rowSpan: "Intervalo de filas",
          columnSpan: "Intervalo de columnas",
          locationExample: "Ubicaci\xF3n",
          lessTwoRowTip: "Selecciona al menos dos filas",
          lessTwoColumnTip: "Selecciona al menos dos columnas",
          findTextbox: "Encontrar Contenido",
          replaceTextbox: "Reemplazar Contenido",
          regexTextbox: "Expresi\xF3n Regular",
          wholeTextbox: "Palabra entera",
          distinguishTextbox: "Distingue may\xFAsculas y min\xFAsculas",
          allReplaceBtn: "Reemplazar Todo",
          replaceBtn: "Reemplazar",
          allFindBtn: "Encontrar Todo",
          findBtn: "Encontrar siguiente",
          noFindTip: "No se encontr\xF3 el contenido",
          modeTip: "Esta operaci\xF3n no est\xE1 disponible en este modo",
          searchTargetSheet: "Hoja",
          searchTargetCell: "Celda",
          searchTargetValue: "Valor",
          searchInputTip: "Introduce el contenido de la b\xFAsqueda",
          noReplceTip: "No hay nada que reemplazar",
          noMatchTip: "No se encontraron coincidencias",
          successTip: "${xlength} elementos encontrados",
          locationConstant: "Constante",
          locationFormula: "F\xF3rmula",
          locationDate: "Fecha",
          locationDigital: "N\xFAmero",
          locationString: "Texto",
          locationBool: "L\xF3gicos",
          locationError: "Error",
          locationNull: "Nulo",
          locationCondition: "Formato condicional",
          locationRowSpan: "Intervalo fila",
          locationColumnSpan: "Intervalo columna",
          locationTiplessTwoRow: "Selecciona al menos dos filas",
          locationTiplessTwoColumn: "Selecciona al menos dos columnas",
          locationTipNotFindCell: "Celda no encontrada"
        },
        sheetconfig: {
          delete: "Eliminar",
          copy: "Copiar",
          rename: "Renombrar",
          changeColor: "Cambiar color",
          hide: "Ocultar",
          unhide: "Mostrar",
          moveLeft: "Mover izquierda",
          moveRight: "Mover derecja",
          resetColor: "Reiniciar color",
          cancelText: "Cancelar",
          chooseText: "Confirmar color",
          tipNameRepeat: "\xA1El nombre de la p\xE1gina de la pesta\xF1a no se puede repetir! Rev\xEDsalo",
          noMoreSheet: "El libro de trabajo contiene al menos una hoja de trabajo visual. Para eliminar la hoja de trabajo seleccionada, inserta una nueva hoja de trabajo o muestra una hoja de trabajo oculta",
          confirmDelete: "\xBFEst\xE1s seguro de eliminar",
          redoDelete: "Se puede deshacer con Ctrl+Z",
          noHide: "No se puede ocultar, al menos conserva una etiqueta de hoja",
          chartEditNoOpt: "\xA1Esta operaci\xF3n no est\xE1 permitida en el modo de edici\xF3n de gr\xE1ficos!",
          sheetNameSpecCharError: `El nombre no puede contener:[ ] :  ? * / ' "`,
          sheetNamecannotIsEmptyError: "El nombre de la hoja no puede estar vac\xEDo"
        },
        conditionformat: {
          conditionformat_greaterThan: "Conditionformat-GreaterThan",
          conditionformat_greaterThan_title: "Dar formato a celdas mayores que",
          conditionformat_lessThan: "Conditionformat-LessThan",
          conditionformat_lessThan_title: "Dar formato a celdas m\xE1s peque\xF1as que",
          conditionformat_betweenness: "Conditionformat-Betweenness",
          conditionformat_betweenness_title: "Dar formato a celdas con valores entre",
          conditionformat_equal: "Conditionformat-Equal",
          conditionformat_equal_title: "Dar formato a celdas iguales a",
          conditionformat_textContains: "Conditionformat-TextContains",
          conditionformat_textContains_title: "Dar formato a las celdas que contienen el siguiente texto",
          conditionformat_occurrenceDate: "Conditionformat-OccurrenceDate",
          conditionformat_occurrenceDate_title: "Dar formato a celdas que contienen las siguientes fechas",
          conditionformat_duplicateValue: "Conditionformat-DuplicateValue",
          conditionformat_duplicateValue_title: "Dar formato a celdas que contienen los siguientes tipos de valores",
          conditionformat_top10: "Conditionformat-Top10",
          conditionformat_top10_percent: "Conditionformat-Top10%",
          conditionformat_top10_title: "Formatea las celdas con el valor m\xE1s alto",
          conditionformat_last10: "Conditionformat-Last10",
          conditionformat_last10_percent: "Conditionformat-Last10%",
          conditionformat_last10_title: "Formatea las celdas con el valor m\xE1s peque\xF1o",
          conditionformat_AboveAverage: "Conditionformat-AboveAverage",
          conditionformat_AboveAverage_title: "Dar formato a celdas por encima del promedio",
          conditionformat_SubAverage: "Conditionformat-SubAverage",
          conditionformat_SubAverage_title: "Dar formato a celdas por debajo del promedio",
          rule: "Regla",
          newRule: "Nueva regla",
          editRule: "Editar regla",
          deleteRule: "Eliminar regla",
          deleteCellRule: "Eliminar regla de celda",
          deleteSheetRule: "Eliminar regla de hoja",
          manageRules: "Reglas administraci\xF3n",
          showRules: "Muestra sus reglas de formato",
          highlightCellRules: "Resaltar reglas de celda",
          itemSelectionRules: "Reglas de selecci\xF3n de elementos",
          conditionformatManageRules: "Administrador de reglas de formato condicional",
          format: "Formatear",
          setFormat: "Establecer formato",
          setAs: "Establecer como",
          setAsByArea: "Para el \xE1rea seleccionada, establecer",
          applyRange: "Aplicar rango",
          selectRange: "Seleccionar rango de aplicaci\xF3n",
          selectRange_percent: "Porcentaje del rango seleccionado",
          selectRange_average: "Valor promedio del rango seleccionado",
          selectRange_value: "Valor en el rango seleccionado",
          pleaseSelectRange: "Selecciona el rango de aplicaci\xF3n",
          selectDataRange: "Seleccionar rango de datos",
          selectCell: "seleccionar celda",
          pleaseSelectCell: "Selecciona una celda",
          pleaseSelectADate: "Selecciona una fecha",
          pleaseEnterInteger: "Introduzca un n\xFAmero entero entre 1 y 1000",
          onlySingleCell: "Solo se puede hacer referencia a una sola celda",
          conditionValueCanOnly: "El valor de la condici\xF3n solo puede ser un n\xFAmero o una sola celda",
          ruleTypeItem1: "Aplicar formato a todas las celdas seg\xFAn sus valores respectivos",
          ruleTypeItem2: "Solo formatear celdas que contengan",
          ruleTypeItem2_title: "Solo para celdas que cumplan las siguientes condiciones",
          ruleTypeItem3: "Aplicar formato solo a los n\xFAmeros superiores o inferiores",
          ruleTypeItem3_title: "Es el valor en la siguiente clasificaci\xF3n",
          ruleTypeItem4: "Aplicar formato solo a los valores superiores o inferiores al promedio",
          ruleTypeItem4_title: "Es un valor que cumple las siguientes condiciones",
          ruleTypeItem5: "Aplicar formato solo a valores \xFAnicos o repetidos",
          ruleTypeItem6: "Use f\xF3rmulas para determinar qu\xE9 celdas formatear",
          formula: "f\xF3rmula",
          textColor: "Color Texto",
          cellColor: "Color Celda",
          confirm: "Confirma",
          confirmColor: "Confirma color",
          cancel: "Cancela",
          close: "Cierra",
          clearColorSelect: "Limpiar selecci\xF3n de color",
          sheet: "Hoja",
          currentSheet: "Hoja actual",
          dataBar: "Barra de datos",
          dataBarColor: "Color barra de datos",
          gradientDataBar_1: "Barra de datos de degradado azul-blanco",
          gradientDataBar_2: "Barra de datos de degradado verde-blanco",
          gradientDataBar_3: "Barra de datos de degradado rojo-blanco",
          gradientDataBar_4: "Rayas de degradado de color naranja-blanco",
          gradientDataBar_5: "Rayas de degradado azul claro-blancas",
          gradientDataBar_6: "Barra de datos de degradado p\xFArpura-blanco",
          solidColorDataBar_1: "Barra de datos azul",
          solidColorDataBar_2: "Barra de datos verde",
          solidColorDataBar_3: "Barra de datos roja",
          solidColorDataBar_4: "Barra de datos naranja",
          solidColorDataBar_5: "Barra de datos azul claro",
          solidColorDataBar_6: "Barra de datos p\xFArpura",
          colorGradation: "Degradado de color",
          colorGradation_1: "Gradaci\xF3n de color verde-amarillo-rojo",
          colorGradation_2: "Gradaci\xF3n de color rojo-amarillo-verde",
          colorGradation_3: "Gradaci\xF3n de color verde-blanco-rojo",
          colorGradation_4: "Gradaci\xF3n de color rojo-blanco-verde",
          colorGradation_5: "Gradaci\xF3n de color azul-blanco-rojo",
          colorGradation_6: "Gradaci\xF3n de color rojo-blanco-azul",
          colorGradation_7: "Gradaci\xF3n de color blanco-rojo",
          colorGradation_8: "Gradaci\xF3n de color rojo-blanco",
          colorGradation_9: "Gradaci\xF3n de color verde-blanco",
          colorGradation_10: "Gradaci\xF3n de color blanco-verde",
          colorGradation_11: "Gradaci\xF3n de color verde-amarillo",
          colorGradation_12: "Gradaci\xF3n de color amarillo-verde",
          icons: "iconos",
          pleaseSelectIcon: "Haz clic para seleccionar un grupo de iconos:",
          cellValue: "Valor de celda",
          specificText: "Texto espec\xEDfico",
          occurrence: "Fecha",
          greaterThan: "Mayor que",
          lessThan: "Menor que",
          between: "Entre",
          equal: "Igual",
          in: "En",
          between2: "",
          contain: "Contiene",
          textContains: "Texto contiene",
          duplicateValue: "Valor duplicado",
          uniqueValue: "Valor Unico",
          top: "Mejor",
          top10: "10 mejores",
          top10_percent: "10% mejores",
          last: "Ultimo",
          last10: "Ultimos 10",
          last10_percent: "Ultimos 10%",
          oneself: "",
          above: "Encima",
          aboveAverage: "Encima media",
          below: "Debajo",
          belowAverage: "Debajo media",
          all: "Todos",
          yesterday: "A\xF1o a fecha",
          today: "Hoy",
          tomorrow: "Ma\xF1ana",
          lastWeek: "Ultima semana",
          thisWeek: "Esta semana",
          lastMonth: "Ultimo mes",
          thisMonth: "Este mes",
          lastYear: "Ultimo a\xF1o",
          thisYear: "Este a\xF1o",
          last7days: "Ultimos 7 d\xEDas",
          last30days: "Ultimos 30 d\xEDas",
          next7days: "Siguientes 7 d\xEDas",
          next30days: "Siguientes 30 d\xEDas",
          next60days: "Siguientes 60 d\xEDas",
          chooseRuleType: "Elige el tipo de regla",
          editRuleDescription: "Editar descripci\xF3n de regla",
          newFormatRule: "Nueva regla de formato",
          editFormatRule: "Editar regla de formato",
          formatStyle: "Estilo",
          fillType: "Rellenar",
          color: "Color",
          twocolor: "Dos colores",
          tricolor: "Tricolor",
          multicolor: "Multi color",
          grayColor: "Color gris",
          gradient: "Gradiente",
          solid: "S\xF3lido",
          maxValue: "Valor m\xE1ximo",
          medianValue: "Valor mediano",
          minValue: "Valor m\xEDnimo",
          direction: "Direcci\xF3n",
          threeWayArrow: "Flecha de tres direcciones",
          fourWayArrow: "Flecha de cuatro direcciones",
          fiveWayArrow: "Flecha de cinco direcciones",
          threeTriangles: "Tres tri\xE1ngulos",
          shape: "Forma",
          threeColorTrafficLight: "Sem\xE1foro de tres colores",
          fourColorTrafficLight: "Sem\xE1foro de cuatro colores",
          threeSigns: "Tres signos",
          greenRedBlackGradient: "Gradiente verde-rojo-negro",
          rimless: "Sin aros",
          bordered: "Bordeado",
          mark: "Marcar",
          threeSymbols: "Tres s\xEDmbolos",
          tricolorFlag: "Bandera tricolor",
          circled: "Rodeado",
          noCircle: "Sin c\xEDrculo",
          grade: "Grado",
          grade4: "4 Grado",
          grade5: "5 Grado",
          threeStars: "3 Estrellas",
          fiveQuadrantDiagram: "Diagrama de cinco cuadrantes",
          fiveBoxes: "5 Cajas"
        },
        dataVerification: {
          cellRange: "Rango celdas",
          selectCellRange: "Haz clic para seleccionar un rango de celdas",
          selectCellRange2: "Selecciona un rango de celdas",
          verificationCondition: "Condici\xF3n de verificaci\xF3n",
          allowMultiSelect: "Permitir selecci\xF3n m\xFAltiple",
          dropdown: "lista desplegable",
          checkbox: "Casilla de verificaci\xF3n",
          number: "N\xFAmero",
          number_integer: "N\xFAmero entero",
          number_decimal: "N\xFAmero decimal",
          text_content: "Contenido texto",
          text_length: "Longitud texto",
          date: "Fecha",
          validity: "Eficacia",
          placeholder1: "Introduce las opciones, separadas por comas, como 1,2,3,4,5",
          placeholder2: "Introduce contenido",
          placeholder3: "Valor num\xE9rico, como 10",
          placeholder4: "Introduce el texto especificado",
          placeholder5: "Introduce el mensaje que se muestra cuando se selecciona la celda",
          selected: "Seleccionado",
          notSelected: "No seleccionado",
          between: "Entre",
          notBetween: "No entre",
          equal: "Iqual",
          notEqualTo: "No iqual a",
          moreThanThe: "M\xE1s que el",
          lessThan: "Menos que",
          greaterOrEqualTo: "Mayor o igual a",
          lessThanOrEqualTo: "Menor o igual a",
          include: "Incluir",
          exclude: "Excluir",
          earlierThan: "Antes de",
          noEarlierThan: "No antes de",
          laterThan: "Despu\xE9s de",
          noLaterThan: "No despu\xE9s de",
          identificationNumber: "N\xFAmero de identificaci\xF3n",
          phoneNumber: "N\xFAmero de tel\xE9fono",
          remote: "Opci\xF3n de adquisici\xF3n remota autom\xE1tica",
          prohibitInput: "Prohibir la entrada cuando los datos de entrada no son v\xE1lidos",
          hintShow: "Mostrar mensaje cuando se selecciona la celda",
          deleteVerification: "Eliminar verificaci\xF3n",
          tooltipInfo1: "La opci\xF3n de la lista desplegable no puede estar vac\xEDa",
          tooltipInfo2: "El contenido de la casilla de verificaci\xF3n no puede estar vac\xEDo",
          tooltipInfo3: "El valor ingresado no es un tipo num\xE9rico",
          tooltipInfo4: "El segundo valor no puede ser menor que el primero",
          tooltipInfo5: "El contenido del texto no puede estar vac\xEDo",
          tooltipInfo6: "El valor ingresado no es una fecha",
          tooltipInfo7: "La segunda fecha no puede ser menor que la primera",
          textlengthInteger: "La longitud del texto debe ser un entero mayor o igual a 0"
        },
        formula: {
          sum: "Suma",
          average: "Media",
          count: "Contar",
          max: "M\xE1x",
          min: "M\xEDn",
          ifGenerate: "Generador de f\xF3rmula SI",
          find: "Aprender m\xE1s",
          tipNotBelongToIf: "\xA1Esta funci\xF3n de celda no pertenece a la f\xF3rmula SI!",
          tipSelectCell: "Selecciona la celda para insertar la funci\xF3n",
          ifGenCompareValueTitle: "Valor de comparaci\xF3n",
          ifGenSelectCellTitle: "Haz click para seleccionar una celda",
          ifGenRangeTitle: "Rango",
          ifGenRangeTo: "a",
          ifGenRangeEvaluate: "Evaluar rango",
          ifGenSelectRangeTitle: "Haz click para seleccionar rango",
          ifGenCutWay: "Forma particionado",
          ifGenCutSame: "Mismo valor de particionado",
          ifGenCutNpiece: "Particionar por N",
          ifGenCutCustom: "Personalizado",
          ifGenCutConfirm: "Confirma",
          ifGenTipSelectCell: "Selecciona celdas",
          ifGenTipSelectCellPlace: "Por favor selecciona celdas",
          ifGenTipSelectRange: "Selecciona rango",
          ifGenTipSelectRangePlace: "Por favor selecciona rango",
          ifGenTipNotNullValue: "El valor de comparaci\xF3n no puede ser vac\xEDo!",
          ifGenTipLableTitile: "Etiqueta",
          ifGenTipRangeNotforNull: "El rango no puede quedar vac\xEDo!",
          ifGenTipCutValueNotforNull: "El valor de partici\xF3n no puede ser vac\xEDo!",
          ifGenTipNotGenCondition: "No hay condiciones disponibles para la generaci\xF3n!"
        },
        formulaMore: {
          valueTitle: "Valor",
          tipSelectDataRange: "Selecciona rango de datos",
          tipDataRangeTile: "Rango de datos",
          findFunctionTitle: "Funci\xF3n de b\xFAsqueda",
          tipInputFunctionName: "Nombre o breve descripci\xF3n de la funci\xF3n",
          "Array": "Vector",
          "Database": "Base de datos",
          "Date": "Fecha",
          "Engineering": "Ingenier\xEDa",
          "Filter": "Filtro",
          "Financial": "Financiero",
          "luckysheet": "Luckysheet",
          "other": "Otro",
          "Logical": "L\xF3gica",
          "Lookup": "B\xFAsqueda",
          "Math": "Matem\xE1tico",
          "Operator": "Operadores",
          "Parser": "Compilador",
          "Statistical": "Estad\xEDstico",
          "Text": "Texto",
          "dataMining": "Miner\xEDa de datos",
          "selectFunctionTitle": "Selecciona una funci\xF3n",
          "calculationResult": "Resultado",
          tipSuccessText: "Exito",
          tipParamErrorText: "Par\xE1metro err\xF3neo",
          "helpClose": "Cerrar",
          "helpCollapse": "Recoger",
          "helpExample": "Ejemplo",
          "helpAbstract": "Resumen",
          "execfunctionError": "Error en la f\xF3rmula",
          "execfunctionSelfError": "La f\xF3rmula no puede hacer referencia a su propia celda",
          "execfunctionSelfErrorResult": "La f\xF3rmula no puede hacer referencia a su propia celda, lo que dar\xE1 lugar a resultados de c\xE1lculo inexactos",
          "allowRepeatText": "Repetir",
          "allowOptionText": "Opci\xF3n",
          "selectCategory": "O selecciona una categor\xEDa"
        },
        drag: {
          noMerge: "No se puede realizar esta operaci\xF3n en celdas combinadas",
          afectarPivot: "\xA1Este cambio no se puede realizar en la celda seleccionada porque afectar\xE1 a la tabla din\xE1mica!",
          noMulti: "No se puede realizar esta operaci\xF3n en varias \xE1reas de selecci\xF3n, selecciona una sola \xE1rea",
          noPaste: "No se puede pegar este contenido aqu\xED, selecciona una celda en el \xE1rea de pegado e intenta pegar nuevamente",
          noPartMerge: "No se puede realizar esta operaci\xF3n en celdas parcialmente fusionadas",
          inputCorrect: "Introduce el valor correcto",
          notLessOne: "El n\xFAmero de filas y columnas no puede ser inferior a 1",
          offsetColumnLessZero: "\xA1La columna de desplazamiento no puede ser negativa!",
          pasteMustKeybordAlert: "\u5728\u8868\u683C\u4E2D\u8FDB\u884C\u590D\u5236\u7C98\u8D34: Ctrl + C \u8FDB\u884C\u590D\u5236, Ctrl + V \u8FDB\u884C\u7C98\u8D34, Ctrl + X \u8FDB\u884C\u526A\u5207",
          pasteMustKeybordAlertHTMLTitle: "\u5728\u8868\u683C\u4E2D\u8FDB\u884C\u590D\u5236\u7C98\u8D34",
          pasteMustKeybordAlertHTML: "<span style='line-height: 1.0;font-size:36px;font-weight: bold;color:#666;'>Ctrl + C</span>&nbsp;&nbsp;\u8FDB\u884C\u590D\u5236<br/><span style='line-height: 1.0;font-size:36px;font-weight: bold;color:#666;'>Ctrl + V</span>&nbsp;&nbsp;\u8FDB\u884C\u7C98\u8D34<br/><span style='line-height: 1.0;font-size:36px;font-weight: bold;color:#666;'>Ctrl + X</span>&nbsp;&nbsp;\u8FDB\u884C\u526A\u5207"
        },
        paste: {
          warning: "Advertencia",
          errorNotAllowMulti: "No se puede realizar esta operaci\xF3n en varias \xE1reas de selecci\xF3n, selecciona un solo rango y vuelve a intentarlo",
          errorNotAllowMerged: "No se pueden realizar cambios parciales en las celdas fusionadas"
        },
        pivotTable: {
          title: "Tabla Din\xE1mica",
          closePannel: "Cerrar",
          editRange: "Rango",
          tipPivotFieldSelected: "Selecciona los campos",
          tipClearSelectedField: "Limpiar todos los campos",
          btnClearSelectedField: "Limpiar",
          btnFilter: "Filtrar",
          titleRow: "Fila",
          titleColumn: "Columna",
          titleValue: "Valor",
          tipShowColumn: "Los campos de estad\xEDsticas se muestran como columnas",
          tipShowRow: "Los campos de estad\xEDsticas se muestran como filas",
          titleSelectionDataRange: "Selecciona rango",
          titleDataRange: "Rango de datos",
          valueSum: "SUMA",
          valueStatisticsSUM: "Suma",
          valueStatisticsCOUNT: "Contar",
          valueStatisticsCOUNTA: "Contar A",
          valueStatisticsCOUNTUNIQUE: "Contar Distintos",
          valueStatisticsAVERAGE: "Media",
          valueStatisticsMAX: "M\xE1x",
          valueStatisticsMIN: "M\xEDn",
          valueStatisticsMEDIAN: "Mediana",
          valueStatisticsPRODUCT: "Producto",
          valueStatisticsSTDEV: "Desviaci\xF3n Est\xE1ndar",
          valueStatisticsSTDEVP: "Stdevp",
          valueStatisticslet: "Varianza",
          valueStatisticsVARP: "VarP",
          errorNotAllowEdit: "\xA1Esta operaci\xF3n est\xE1 prohibida en el modo sin edici\xF3n!",
          errorNotAllowMulti: "No se puede realizar esta operaci\xF3n en varias \xE1reas de selecci\xF3n, selecciona un solo rango y vuelve a intentarlo",
          errorSelectRange: "Seleccione el rango de la nueva tabla din\xE1mica",
          errorIsDamage: "\xA1Los datos de origen de esta tabla din\xE1mica est\xE1n da\xF1ados!",
          errorNotAllowPivotData: "\xA1No se puede seleccionar la tabla din\xE1mica como datos de origen!",
          errorSelectionRange: "\xA1La selecci\xF3n fall\xF3, rango de entrada incorrecto!",
          errorIncreaseRange: "\xA1Por favor, expande el rango seleccionado!",
          titleAddColumn: "A\xF1adir columna a la tabla din\xE1mica",
          titleMoveColumn: "Muever la columna a la celda en blanco de abajo",
          titleClearColumnFilter: "Quitar el filtro de esta columna",
          titleFilterColumn: "Filtro",
          titleSort: "Ordenar",
          titleNoSort: "No Ordenar",
          titleSortAsc: "ASC",
          titleSortDesc: "DESC",
          titleSortBy: "Ordenar por",
          titleShowSum: "Mostrar total",
          titleStasticTrue: "S\xED",
          titleStasticFalse: "No"
        },
        dropCell: {
          copyCell: "Copiar",
          sequence: "Secuencia",
          onlyFormat: "Solo formato",
          noFormat: "Sin formato",
          day: "D\xEDa",
          workDay: "D\xEDa Laborable",
          month: "Mes",
          year: "A\xF1o",
          chineseNumber: "N\xFAmeros Chinos"
        },
        imageCtrl: {
          borderTile: "Color de borde de imagen",
          borderCur: "Color"
        },
        protection: {
          protectiontTitle: "Protecci\xF3n",
          enterPassword: "Introduce una contrase\xF1a (opcional)",
          enterHintTitle: "Preguntar cuando la edici\xF3n est\xE1 prohibida (opcional)",
          enterHint: "La celda o el gr\xE1fico que est\xE1s intentando cambiar se encuentra en una hoja de trabajo protegida. Si quieres cambiarlo, desprotege la hoja de trabajo. Es posible que tengas que ingresar una contrase\xF1a",
          swichProtectionTip: "Protege la hoja y el contenido de las celdas bloqueadas",
          authorityTitle: "Permitir a los usuarios de esta hoja:",
          selectLockedCells: "Selecciona celdas bloqueadas",
          selectunLockedCells: "Selecciona celdas desbloqueadas",
          formatCells: "Formatear celdas",
          formatColumns: "Formatear columnas",
          formatRows: "Formatear filas",
          insertColumns: "Insertar columnas",
          insertRows: "Insertar filas",
          insertHyperlinks: "Insertar enlaces",
          deleteColumns: "Eliminar columnas",
          deleteRows: "Eliminar filas",
          sort: "Ordenar",
          filter: "Filtrar",
          usePivotTablereports: "Usar informes de tabla din\xE1mica",
          editObjects: "Editar objetos",
          editScenarios: "Editar escenarios",
          allowRangeTitle: "Permitir a los usuarios del rango:",
          allowRangeAdd: "Nuevo...",
          allowRangeAddTitle: "T\xEDtulo",
          allowRangeAddSqrf: "Referencia",
          selectCellRange: "Haz clic para seleccionar un rango de celdas",
          selectCellRangeHolder: "Rango de celdas",
          allowRangeAddTitlePassword: "Contrase\xF1a",
          allowRangeAddTitleHint: "Pregunta",
          allowRangeAddTitleHintTitle: "Preguntar cuando hay una contrase\xF1a (opcional)",
          allowRangeAddtitleDefault: "Nombre del rango de entrada",
          rangeItemDblclick: "Haz doble clic para editar",
          rangeItemHasPassword: "Tiene contrase\xF1a",
          rangeItemErrorTitleNull: "El t\xEDtulo es nulo",
          rangeItemErrorRangeNull: "La referencia es nula",
          rangeItemErrorRange: "La reference tiene un error",
          validationTitle: "Validaci\xF3n de contrase\xF1a",
          validationTips: "Hay que ingresar una contrase\xF1a para desbloquear la protecci\xF3n de la hoja de trabajo",
          validationInputHint: "Introduce una contrase\xF1a",
          checkPasswordNullalert: "Contrase\xF1a requerida!",
          checkPasswordWrongalert: "\xA1Contrase\xF1a incorrecta. Por favor, prueba de nuevo!",
          checkPasswordSucceedalert: "Desbloqueo conseguido!",
          defaultRangeHintText: "La celda est\xE1 protegida con contrase\xF1a.",
          defaultSheetHintText: "La celda o el gr\xE1fico est\xE1n en una hoja de trabajo protegida. Para realizar cambios, desprotege la hoja de trabajo. Es posible que tengas que ingresar una contrase\xF1a"
        },
        cellFormat: {
          cellFormatTitle: "Formatear celdas",
          protection: "Protecci\xF3n",
          locked: "Bloqueado",
          hidden: "Escondido",
          protectionTips: "Para bloquear celdas u ocultar f\xF3rmulas, protege la hoja de trabajo. En la barra de herramientas, haz clic en el bot\xF3n Proteger hoja",
          tipsPart: "Comprobado parcial",
          tipsAll: "Todo seleccionado",
          selectionIsNullAlert: "Se requiere una selecci\xF3n!",
          sheetDataIsNullAlert: "error, no hay datos!"
        },
        print: {
          normalBtn: "Normal",
          layoutBtn: "Disposici\xF3n de p\xE1gina",
          pageBtn: "Previsualizaci\xF3n de saltos de p\xE1gina",
          menuItemPrint: "Imprimir (Ctrl+P)",
          menuItemAreas: "Imprimir \xE1reas",
          menuItemRows: "Imprimir t\xEDtulos de filas",
          menuItemColumns: "Imprimir t\xEDtulos de columnas"
        },
        edit: {
          typing: "mecanograf\xEDa"
        },
        websocket: {
          success: "\xC9xito de la conexi\xF3n de WebSocket",
          refresh: "Se produjo un error en la conexi\xF3n de WebSocket, \xA1actualice la p\xE1gina!",
          wait: "Se produjo un error en la conexi\xF3n de WebSocket, \xA1tenga paciencia!",
          close: "Conexi\xF3n WebSocket cerrada",
          contact: "Ocurri\xF3 un error de comunicaci\xF3n con el servidor, actualice la p\xE1gina y vuelva a intentarlo; de lo contrario, comun\xEDquese con el administrador.",
          support: "El navegador actual no es compatible con WebSocket"
        }
      };
    }
  });

  // src/locale/zh_tw.js
  var zh_tw_default;
  var init_zh_tw = __esm({
    "src/locale/zh_tw.js"() {
      zh_tw_default = {
        functionlist: {
          "SUMIF": {
            "d": "\u5C0D\u7BC4\u570D\u4E2D\u7B26\u5408\u6307\u5B9A\u689D\u4EF6\u7684\u503C\u6C42\u548C\u3002",
            "a": "\u5C0D\u7BC4\u570D\u4E2D\u7B26\u5408\u6307\u5B9A\u689D\u4EF6\u7684\u503C\u6C42\u548C\u3002",
            "p": [
              {
                "name": "\u7BC4\u570D",
                "detail": "\u8981\u6839\u64DA\u689D\u4EF6\u9032\u884C\u6AA2\u6E2C\u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "\u689D\u4EF6",
                "detail": "\u8981\u61C9\u7528\u65BC\u7BC4\u570D\u7684\u6A21\u5F0F\u6216\u6E2C\u8A66\u689D\u4EF6\u3002\n\n\u5982\u679C\u7BC4\u570D\u5305\u542B\u7684\u662F\u8981\u6AA2\u6E2C\u7684\u6587\u5B57,\u5247\u689D\u4EF6\u5FC5\u9808\u70BA\u5B57\u4E32\u3002\u689D\u4EF6\u53EF\u4EE5\u5305\u542B\u842C\u7528\u5B57\u5143,\u5305\u62EC\u7528\u65BC\u5339\u914D\u55AE\u500B\u5B57\u5143\u7684\uFF1F\u6216\u7528\u65BC\u5339\u914D\u96F6\u500B\u6216\u9023\u7E8C\u591A\u500B\u5B57\u5143\u7684*\u3002\u8981\u5339\u914D\u554F\u865F\u661F\u865F\u672C\u8EAB,\u8ACB\u5728\u8A72\u5B57\u5143\u524D\u9762\u52A0\u4E0A\u6CE2\u6D6A\u865F\uFF08~\uFF09\u9996\u78BC\uFF08\u5373~\uFF1F\u548C~*\uFF09\u3002\u5B57\u4E32\u689D\u4EF6\u5FC5\u9808\u7528\u5F15\u865F\u62EC\u8D77\u4F86\u3002\u51FD\u6578\u6703\u6AA2\u67E5\u7BC4\u570D\u4E2D\u7684\u6BCF\u500B\u5132\u5B58\u683C\u8207\u689D\u4EF6\u662F\u5426\u76F8\u7B49\u6216\u5339\u914D\uFF08\u5982\u679C\u4F7F\u7528\u4E86\u842C\u7528\u5B57\u5143\uFF09\u3002\n\n\u5982\u679C\u7BC4\u570D\u5305\u542B\u7684\u662F\u8981\u6AA2\u6E2C\u7684\u6578\u4F4D,\u5247\u689D\u4EF6\u53EF\u4EE5\u662F\u5B57\u4E32\u4E5F\u53EF\u4EE5\u662F\u6578\u4F4D\u3002\u5982\u679C\u7D66\u5B9A\u7684\u689D\u4EF6\u662F\u4E00\u500B\u6578\u4F4D,\u5247\u6AA2\u67E5\u7BC4\u570D\u4E2D\u7684\u6BCF\u500B\u5132\u5B58\u683C\u662F\u5426\u7B49\u65BC\u689D\u4EF6\u3002\u53E6\u5916,\u689D\u4EF6\u4E5F\u53EF\u80FD\u662F\u5305\u542B\u6578\u4F4D\u7684\u5B57\u4E32\uFF08\u4E5F\u5C07\u5C0D\u5176\u9032\u884C\u76F8\u7B49\u6AA2\u6E2C\uFF09,\u6216\u8005\u5E36\u6709\u4EE5\u4E0B\u9996\u78BC\u7684\u6578\u4F4D:=\uFF08\u6AA2\u67E5\u662F\u5426\u76F8\u7B49\uFF09\u3001>\uFF08\u6AA2\u67E5\u7BC4\u570D\u5132\u5B58\u683C\u7684\u503C\u662F\u5426\u5927\u65BC\u689D\u4EF6\u503C\uFF09\u6216<\uFF08\u6AA2\u67E5\u7BC4\u570D\u5132\u5B58\u683C\u7684\u503C\u662F\u5426\u5C0F\u65BC\u689D\u4EF6\u503C\uFF09"
              },
              {
                "name": "\u6C42\u548C\u7BC4\u570D",
                "detail": "\u8981\u6C42\u548C\u7684\u7BC4\u570D\uFF08\u5982\u679C\u8207\u7BC4\u570D\u4E0D\u540C\uFF09\u3002"
              }
            ]
          },
          "TAN": {
            "d": "\u8FD4\u56DE\u5DF2\u77E5\u89D2\u5EA6\u7684\u6B63\u5207\u503C\u3002",
            "a": "\u8FD4\u56DE\u5DF2\u77E5\u89D2\u5EA6\u7684\u6B63\u5207\u503C\u3002",
            "p": [
              {
                "name": "\u89D2\u5EA6",
                "detail": "\u8981\u6C42\u5176\u6B63\u5207\u503C\u7684\u89D2\u5EA6,\u4EE5\u5F27\u5EA6\u8868\u793A\u3002"
              }
            ]
          },
          "TANH": {
            "d": "\u8FD4\u56DE\u7D66\u5B9A\u5BE6\u6578\u7684\u96D9\u66F2\u6B63\u5207\u503C\u3002",
            "a": "\u8FD4\u56DE\u7D66\u5B9A\u5BE6\u6578\u7684\u96D9\u66F2\u6B63\u5207\u503C\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8A08\u7B97\u5176\u96D9\u66F2\u6B63\u5207\u503C\u7684\u5BE6\u6578\u3002"
              }
            ]
          },
          "CEILING": {
            "d": "\u5C07\u6578\u503C\u5411\u4E0A\u53D6\u6574\u70BA\u6700\u63A5\u8FD1\u7684\u6307\u5B9A\u56E0\u6578\u7684\u500D\u6578\u3002",
            "a": "\u5C07\u6578\u503C\u5411\u4E0A\u53D6\u6574\u70BA\u6700\u63A5\u8FD1\u7684\u6307\u5B9A\u56E0\u6578\u7684\u500D\u6578\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u5411\u4E0A\u820D\u5165\u7684\u6578\u503C\u3002"
              },
              {
                "name": "\u56E0\u6578",
                "detail": "\u8981\u5C07\u503C\u820D\u5165\u5230\u6B64\u6578\u7684\u6574\u6578\u500D\u3002"
              }
            ]
          },
          "ATAN": {
            "d": "\u8FD4\u56DE\u6578\u503C\u7684\u53CD\u6B63\u5207\u503C,\u4EE5\u5F27\u5EA6\u8868\u793A\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u7684\u53CD\u6B63\u5207\u503C",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8A08\u7B97\u5176\u53CD\u6B63\u5207\u503C\u7684\u6578\u503C\u3002"
              }
            ]
          },
          "ASINH": {
            "d": "\u8FD4\u56DE\u6578\u503C\u7684\u53CD\u96D9\u66F2\u6B63\u5F26\u503C\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u7684\u53CD\u96D9\u66F2\u6B63\u5F26\u503C\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8A08\u7B97\u5176\u53CD\u96D9\u66F2\u6B63\u5F26\u503C\u7684\u6578\u503C\u3002"
              }
            ]
          },
          "ABS": {
            "d": "\u8FD4\u56DE\u6578\u503C\u7684\u7D55\u5C0D\u503C\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u7684\u7D55\u5C0D\u503C\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8FD4\u56DE\u5176\u7D55\u5C0D\u503C\u7684\u6578\u3002"
              }
            ]
          },
          "ACOS": {
            "d": "\u8FD4\u56DE\u6578\u503C\u7684\u53CD\u4F59\u5F26\u503C,\u4EE5\u5F27\u5EA6\u8868\u793A\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u7684\u53CD\u4F59\u5F26\u503C",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8A08\u7B97\u5176\u53CD\u4F59\u5F26\u503C\u7684\u6578\u503C\u3002\u5FC5\u9808\u4ECB\u65BC-1\u548C1\u4E4B\u9593,\u5305\u62EC\u5169\u7AEF\u503C\u3002"
              }
            ]
          },
          "ACOSH": {
            "d": "\u8FD4\u56DE\u6578\u503C\u7684\u53CD\u96D9\u66F2\u4F59\u5F26\u503C\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u7684\u53CD\u96D9\u66F2\u4F59\u5F26\u503C\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8A08\u7B97\u5176\u53CD\u96D9\u66F2\u4F59\u5F26\u503C\u7684\u6578\u503C\u3002\u5FC5\u9808\u5927\u65BC\u7B49\u65BC1\u3002"
              }
            ]
          },
          "MULTINOMIAL": {
            "d": "\u8FD4\u56DE\u53C3\u6578\u548C\u7684\u968E\u4E58\u9664\u4EE5\u5404\u53C3\u6578\u968E\u4E58\u7684\u4E58\u7A4D\u5F8C\u5F97\u5230\u7684\u503C\u3002",
            "a": "\u8FD4\u56DE\u53C3\u6578\u548C\u7684\u968E\u4E58\u9664\u4EE5\u5404\u53C3\u6578\u968E\u4E58\u7684\u4E58\u7A4D\u5F8C\u5F97\u5230\u7684\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u7528\u65BC\u8A08\u7B97\u7684\u7B2C\u4E00\u9805\u6578\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "\u7528\u65BC\u8A08\u7B97\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "ATANH": {
            "d": "\u8FD4\u56DE\u6578\u503C\u7684\u53CD\u96D9\u66F2\u6B63\u5207\u503C\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u7684\u53CD\u96D9\u66F2\u6B63\u5207\u503C\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8A08\u7B97\u5176\u53CD\u96D9\u66F2\u6B63\u5207\u503C\u7684\u6578\u503C\u3002\u5FC5\u9808\u4ECB\u65BC-1\u548C1\u4E4B\u9593\uFF08\u4E0D\u5305\u62EC-1\u548C1\uFF09\u3002"
              }
            ]
          },
          "ATAN2": {
            "d": "\u4EE5\u5F27\u5EA6\u70BA\u7D44\u7E54\u8FD4\u56DEx\u8EF8\u8207\u5F9E\u539F\u9EDE\uFF080,0\uFF09\u5230\u6307\u5B9A\u5EA7\u6A19\u9EDE\uFF08`x`,`y`\uFF09\u4E4B\u9593\u9023\u7DDA\u7684\u593E\u89D2\u3002",
            "a": "\u4EE5\u5F27\u5EA6\u70BA\u7D44\u7E54\u8FD4\u56DEx\u8EF8\u8207\u5F9E\u539F\u9EDE\uFF080,0\uFF09\u5230\u6307\u5B9A\u5EA7\u6A19\u9EDE\uFF08`x`,`y`\uFF09\u4E4B\u9593\u9023\u7DDA\u7684\u593E\u89D2\u3002",
            "p": [
              {
                "name": "x",
                "detail": "\u8981\u8A08\u7B97\u5176\u8207x\u8EF8\u593E\u89D2\u5927\u5C0F\u7684\u7DDA\u6BB5\u7684\u7D42\u9EDEx\u5EA7\u6A19\u3002"
              },
              {
                "name": "y",
                "detail": "\u8981\u8A08\u7B97\u5176\u8207x\u8EF8\u593E\u89D2\u5927\u5C0F\u7684\u7DDA\u6BB5\u7684\u7D42\u9EDEy\u5EA7\u6A19\u3002"
              }
            ]
          },
          "COUNTBLANK": {
            "d": "\u8FD4\u56DE\u7D66\u5B9A\u7BC4\u570D\u5167\u7684\u7A7A\u5132\u5B58\u683C\u6578\u3002",
            "a": "\u8FD4\u56DE\u7D66\u5B9A\u7BC4\u570D\u5167\u7684\u7A7A\u5132\u5B58\u683C\u6578\u3002",
            "p": [
              {
                "name": "\u7BC4\u570D",
                "detail": "\u8981\u7D71\u8A08\u7A7A\u767D\u5132\u5B58\u683C\u6578\u91CF\u7684\u7BC4\u570D\u3002"
              }
            ]
          },
          "COSH": {
            "d": "\u8FD4\u56DE\u7D66\u5B9A\u5BE6\u6578\u7684\u96D9\u66F2\u4F59\u5F26\u503C\u3002",
            "a": "\u8FD4\u56DE\u7D66\u5B9A\u5BE6\u6578\u7684\u96D9\u66F2\u4F59\u5F26\u503C\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8A08\u7B97\u5176\u96D9\u66F2\u4F59\u5F26\u503C\u7684\u5BE6\u6578\u503C\u3002"
              }
            ]
          },
          "INT": {
            "d": "\u6578\u503C\u5411\u4E0B\u53D6\u6574\u70BA\u5C0F\u65BC\u6216\u7B49\u65BC\u8A72\u6578\u7684\u6700\u63A5\u8FD1\u7684\u6574\u6578\u3002",
            "a": "\u6578\u503C\u5411\u4E0B\u53D6\u6574\u70BA\u5C0F\u65BC\u6216\u7B49\u65BC\u8A72\u6578\u7684\u6700\u63A5\u8FD1\u7684\u6574\u6578\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u5411\u4E0B\u53D6\u6574\u70BA\u6700\u63A5\u8FD1\u7684\u6574\u6578\u7684\u6578\u503C\u3002"
              }
            ]
          },
          "ISEVEN": {
            "d": "\u6AA2\u67E5\u6240\u63D0\u4F9B\u7684\u6578\u503C\u662F\u5426\u70BA\u5076\u6578\u3002",
            "a": "\u6AA2\u67E5\u6240\u63D0\u4F9B\u7684\u6578\u503C\u662F\u5426\u70BA\u5076\u6578\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u9A57\u8B49\u5176\u662F\u5426\u70BA\u5076\u6578\u7684\u6578\u503C\u3002\n\n\u5982\u679C\u503C\u70BA\u5076\u6578\u6216\u6307\u5411\u5305\u542B\u5076\u6578\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,ISEVEN\u5C07\u8FD4\u56DETRUE,\u5426\u5247\u8FD4\u56DEFALSE\u3002"
              }
            ]
          },
          "ISODD": {
            "d": "\u6AA2\u67E5\u6240\u63D0\u4F9B\u7684\u6578\u503C\u662F\u5426\u70BA\u5947\u6578\u3002",
            "a": "\u6AA2\u67E5\u6240\u63D0\u4F9B\u7684\u6578\u503C\u662F\u5426\u70BA\u5947\u6578\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u9A57\u8B49\u5176\u662F\u5426\u70BA\u5947\u6578\u7684\u6578\u503C\u3002\n\n\u5982\u679C\u503C\u70BA\u5947\u6578\u6216\u6307\u5411\u5305\u542B\u5947\u6578\u7684\u5132\u5B58\u683C,ISODD\u5C07\u8FD4\u56DETRUE,\u5426\u5247\u8FD4\u56DEFALSE\u3002"
              }
            ]
          },
          "LCM": {
            "d": "\u8FD4\u56DE\u4E00\u500B\u6216\u591A\u500B\u6574\u6578\u7684\u6700\u5C0F\u516C\u500D\u6578\u3002",
            "a": "\u8FD4\u56DE\u4E00\u500B\u6216\u591A\u500B\u6574\u6578\u7684\u6700\u5C0F\u516C\u500D\u6578\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8981\u5728\u6C42\u6700\u5C0F\u516C\u500D\u6578\u6578\u7684\u8A08\u7B97\u4E2D\u6AA2\u67E5\u5176\u56E0\u6578\u7684\u7B2C\u4E00\u9805\u6578\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9078] - \u5728\u6C42\u6700\u5C0F\u516C\u500D\u6578\u6642\u8981\u8003\u616E\u5176\u56E0\u6578\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "LN": {
            "d": "\u8FD4\u56DE\u6578\u503C\u4EE5e\uFF08\u6B50\u62C9\u6578\uFF09\u70BA\u5E95\u7684\u5C0D\u6578\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u4EE5e\uFF08\u6B50\u62C9\u6578\uFF09\u70BA\u5E95\u7684\u5C0D\u6578\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u4EE5e\u70BA\u5E95\u6578\u8A08\u7B97\u5176\u5C0D\u6578\u7684\u503C\u3002\n\n\u503C\u5FC5\u9808\u70BA\u6B63\u6578\u3002"
              }
            ]
          },
          "LOG": {
            "d": "\u6839\u64DA\u6307\u5B9A\u5E95\u6578\u8FD4\u56DE\u6578\u4F4D\u7684\u5C0D\u6578\u3002",
            "a": "\u6839\u64DA\u6307\u5B9A\u5E95\u6578\u8FD4\u56DE\u6578\u4F4D\u7684\u5C0D\u6578\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u60F3\u8981\u8A08\u7B97\u5176\u5C0D\u6578\u7684\u6B63\u5BE6\u6578\u3002"
              },
              {
                "name": "\u5E95\u6578",
                "detail": "[\u53EF\u9078] - \u5C0D\u6578\u7684\u5E95\u6578\u3002"
              }
            ]
          },
          "LOG10": {
            "d": "\u8FD4\u56DE\u6578\u503C\u4EE510\u70BA\u5E95\u7684\u5C0D\u6578\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u4EE510\u70BA\u5E95\u7684\u5C0D\u6578\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8A08\u7B97\u5176\u4EE510\u70BA\u5E95\u7684\u5C0D\u6578\u7684\u6578\u503C\u3002\n\n\u503C\u5FC5\u9808\u70BA\u6B63\u503C\u3002"
              }
            ]
          },
          "MOD": {
            "d": "\u8FD4\u56DE\u5169\u6578\u76F8\u9664\u7684\u9918\u6578,\u7D50\u679C\u7684\u7B26\u865F\u8207\u9664\u6578\u76F8\u540C\u3002",
            "a": "\u8FD4\u56DE\u5169\u6578\u76F8\u9664\u7684\u9918\u6578\u3002",
            "p": [
              {
                "name": "\u88AB\u9664\u6578",
                "detail": "\u8981\u5C07\u5176\u76F8\u9664\u4EE5\u5F97\u5230\u9918\u6578\u7684\u6578\u503C\u3002"
              },
              {
                "name": "\u9664\u6578",
                "detail": "\u7528\u65BC\u9664\u5176\u4ED6\u6578\u7684\u6578\u503C\u3002"
              }
            ]
          },
          "MROUND": {
            "d": "\u5C07\u6578\u503C\u53D6\u6574\u70BA\u53E6\u4E00\u6574\u6578\u6700\u63A5\u8FD1\u7684\u6574\u6578\u500D\u3002",
            "a": "\u5C07\u6578\u503C\u53D6\u6574\u70BA\u53E6\u4E00\u6574\u6578\u6700\u63A5\u8FD1\u7684\u6574\u6578\u500D\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u53D6\u6574\u70BA\u53E6\u4E00\u6574\u6578\u6700\u63A5\u8FD1\u7684\u6574\u6578\u500D\u7684\u6578\u503C\u3002"
              },
              {
                "name": "\u56E0\u6578",
                "detail": "\u503C\u5C07\u53D6\u6B64\u56E0\u6578\u7684\u6574\u6578\u500D\u3002"
              }
            ]
          },
          "ODD": {
            "d": "\u5C07\u6578\u503C\u5411\u4E0A\u53D6\u6574\u70BA\u6700\u63A5\u8FD1\u7684\u5947\u6574\u6578\u3002",
            "a": "\u5C07\u6578\u503C\u5411\u4E0A\u53D6\u6574\u70BA\u6700\u63A5\u8FD1\u7684\u5947\u6574\u6578\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u5411\u4E0A\u53D6\u6574\u7684\u6578\u503C,\u53D6\u6574\u503C\u70BA\u5927\u65BC\u6B64\u503C\u7684\u6700\u63A5\u8FD1\u7684\u5947\u6578\u3002\n\n\u5982\u679C\u503C\u70BA\u8CA0\u6578,\u5247\u5C07\u5176\u53D6\u6574\u70BA\u7D55\u5C0D\u503C\u5927\u65BC\u8A72\u503C\u7684\u76F8\u9130\u8CA0\u5947\u6578"
              }
            ]
          },
          "SUMSQ": {
            "d": "\u8FD4\u56DE\u4E00\u7D44\u6578\u503C\u548C/\u6216\u5132\u5B58\u683C\u7684\u5E73\u65B9\u7E3D\u548C\u3002",
            "a": "\u8FD4\u56DE\u4E00\u7D44\u6578\u503C\u548C/\u6216\u5132\u5B58\u683C\u7684\u5E73\u65B9\u7E3D\u548C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8981\u5C07\u5176\u5E73\u65B9\u76F8\u52A0\u7684\u7B2C\u4E00\u500B\u6578\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u8981\u5C07\u5176\u5E73\u65B9\u8207\u503C1\u7684\u5E73\u65B9\u76F8\u52A0\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "COMBIN": {
            "d": "\u7D66\u5B9A\u96C6\u5408\u4E2D\u7684\u5C0D\u8C61\u7E3D\u6578\u548C\u8981\u9078\u64C7\u7684\u5C0D\u8C61\u6578\u91CF,\u8FD4\u56DE\u5171\u6709\u591A\u5C11\u7A2E\u4E0D\u540C\u9078\u64C7\u7BA1\u9053\u3002",
            "a": "\u7D66\u5B9A\u96C6\u5408\u4E2D\u7684\u5C0D\u8C61\u7E3D\u6578\u548C\u8981\u9078\u64C7\u7684\u5C0D\u8C61\u6578\u91CF",
            "p": [
              {
                "name": "n",
                "detail": "\u8981\u5F9E\u4E2D\u9032\u884C\u9078\u64C7\u7684\u5C0D\u8C61\u96C6\u5408\u7684\u5927\u5C0F\u3002"
              },
              {
                "name": "k",
                "detail": "\u8981\u9078\u64C7\u7684\u5C0D\u8C61\u6578\u91CF\u3002"
              }
            ]
          },
          "SUM": {
            "d": "\u8FD4\u56DE\u4E00\u7D44\u6578\u503C\u548C/\u6216\u5132\u5B58\u683C\u7684\u7E3D\u548C\u3002",
            "a": "\u8FD4\u56DE\u4E00\u7D44\u6578\u503C\u548C/\u6216\u5132\u5B58\u683C\u7684\u7E3D\u548C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8981\u76F8\u52A0\u7684\u7B2C\u4E00\u500B\u6578\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9078] - \u8981\u76F8\u52A0\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "SUBTOTAL": {
            "d": "\u4F7F\u7528\u6307\u5B9A\u7684\u532F\u7E3D\u51FD\u6578,\u8FD4\u56DE\u4E00\u7CFB\u5217\u7E31\u5411\u5132\u5B58\u683C\u7684\u5206\u985E\u532F\u7E3D\u3002",
            "a": "\u4F7F\u7528\u6307\u5B9A\u7684\u532F\u7E3D\u51FD\u6578",
            "p": [
              {
                "name": "\u51FD\u6578\u7A0B\u5F0F\u78BC",
                "detail": "\u7528\u65BC\u8A08\u7B97\u5206\u985E\u532F\u7E3D\u7684\u51FD\u6578\u3002\n\n1\u4EE3\u8868AVERAGE\n\n2\u4EE3\u8868COUNT\n\n3\u4EE3\u8868COUNTA\n\n4\u4EE3\u8868MAX\n\n5\u4EE3\u8868MIN\n\n6\u4EE3\u8868PRODUCT\n\n7\u4EE3\u8868STDEV\n\n8\u4EE3\u8868STDEVP\n\n9\u4EE3\u8868SUM\n\n10\u4EE3\u8868VAR\n\n11\u4EE3\u8868VARP\n\n\u901A\u904E\u5728\u9019\u4E9B2\u4F4D\u7A0B\u5F0F\u78BC\u524D\u9644\u52A010\uFF08\u5C0D\u65BC1\u4F4D\u7A0B\u5F0F\u78BC\uFF09\u62161\uFF08\u5C0D\u65BC2\u4F4D\u7A0B\u5F0F\u78BC\uFF09,\u53EF\u4EE5\u5C07\u96B1\u85CF\u503C\u5FFD\u7565\u3002\u4F8B\u5982,102\u4EE3\u8868\u5FFD\u7565\u96B1\u85CF\u5132\u5B58\u683C\u7684COUNT,\u800C110\u5247\u4EE3\u8868\u5FFD\u7565\u96B1\u85CF\u503C\u7684VAR\u3002"
              },
              {
                "name": "\u7BC4\u570D1",
                "detail": "\u8981\u8A08\u7B97\u5206\u985E\u532F\u7E3D\u7684\u7B2C\u4E00\u500B\u7BC4\u570D\u3002"
              },
              {
                "name": "\u7BC4\u570D2",
                "detail": "[\u53EF\u9078] - \u8981\u8A08\u7B97\u5206\u985E\u532F\u7E3D\u7684\u5176\u4ED6\u7BC4\u570D\u3002"
              }
            ]
          },
          "ASIN": {
            "d": "\u8FD4\u56DE\u6578\u503C\u7684\u53CD\u6B63\u5F26\u503C,\u4EE5\u5F27\u5EA6\u8868\u793A\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u7684\u53CD\u6B63\u5F26\u503C",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8A08\u7B97\u5176\u53CD\u6B63\u5F26\u503C\u7684\u6578\u503C\u3002\u5FC5\u9808\u4ECB\u65BC-1\u548C1\u4E4B\u9593,\u5305\u62EC\u5169\u7AEF\u503C\u3002"
              }
            ]
          },
          "COUNTIF": {
            "d": "\u8FD4\u56DE\u7BC4\u570D\u5167\u6EFF\u8DB3\u67D0\u500B\u689D\u4EF6\u7684\u5132\u5B58\u683C\u7684\u6578\u91CF\u3002",
            "a": "\u8FD4\u56DE\u7BC4\u570D\u5167\u6EFF\u8DB3\u67D0\u500B\u689D\u4EF6\u7684\u5132\u5B58\u683C\u7684\u6578\u91CF\u3002",
            "p": [
              {
                "name": "\u7BC4\u570D",
                "detail": "\u8981\u6839\u64DA\u689D\u4EF6\u9032\u884C\u6AA2\u6E2C\u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "\u689D\u4EF6",
                "detail": "\u8981\u61C9\u7528\u65BC\u7BC4\u570D\u7684\u6A21\u5F0F\u6216\u6E2C\u8A66\u689D\u4EF6\u3002\n\n\u5982\u679C\u7BC4\u570D\u5305\u542B\u7684\u662F\u8981\u6AA2\u6E2C\u7684\u6587\u5B57,\u5247\u689D\u4EF6\u5FC5\u9808\u70BA\u5B57\u4E32\u3002\u689D\u4EF6\u53EF\u4EE5\u5305\u542B\u842C\u7528\u5B57\u5143,\u5305\u62EC\u7528\u65BC\u5339\u914D\u55AE\u500B\u5B57\u5143\u7684\uFF1F\u6216\u7528\u65BC\u5339\u914D\u96F6\u500B\u6216\u9023\u7E8C\u591A\u500B\u5B57\u5143\u7684*\u3002\u8981\u5339\u914D\u554F\u865F\u661F\u865F\u672C\u8EAB,\u8ACB\u5728\u8A72\u5B57\u5143\u524D\u9762\u52A0\u4E0A\u6CE2\u6D6A\u865F\uFF08~\uFF09\u9996\u78BC\uFF08\u5373~\uFF1F\u548C~*\uFF09\u3002\u5B57\u4E32\u689D\u4EF6\u5FC5\u9808\u7528\u5F15\u865F\u62EC\u8D77\u4F86\u3002\u51FD\u6578\u6703\u6AA2\u67E5\u7BC4\u570D\u4E2D\u7684\u6BCF\u500B\u5132\u5B58\u683C\u8207\u689D\u4EF6\u662F\u5426\u76F8\u7B49\u6216\u5339\u914D\uFF08\u5982\u679C\u4F7F\u7528\u4E86\u842C\u7528\u5B57\u5143\uFF09\u3002\n\n\u5982\u679C\u7BC4\u570D\u5305\u542B\u7684\u662F\u8981\u6AA2\u6E2C\u7684\u6578\u4F4D,\u5247\u689D\u4EF6\u53EF\u4EE5\u662F\u5B57\u4E32\u4E5F\u53EF\u4EE5\u662F\u6578\u4F4D\u3002\u5982\u679C\u7D66\u5B9A\u7684\u689D\u4EF6\u662F\u4E00\u500B\u6578\u4F4D,\u5247\u6AA2\u67E5\u7BC4\u570D\u4E2D\u7684\u6BCF\u500B\u5132\u5B58\u683C\u662F\u5426\u7B49\u65BC\u689D\u4EF6\u3002\u53E6\u5916,\u689D\u4EF6\u4E5F\u53EF\u80FD\u662F\u5305\u542B\u6578\u4F4D\u7684\u5B57\u4E32\uFF08\u4E5F\u5C07\u5C0D\u5176\u9032\u884C\u76F8\u7B49\u6AA2\u6E2C\uFF09,\u6216\u8005\u5E36\u6709\u4EE5\u4E0B\u9996\u78BC\u7684\u6578\u4F4D:=\u3001>\u3001>=\u3001<\u6216<=,\u9019\u4E9B\u689D\u4EF6\u5C07\u5206\u5225\u7528\u65BC\u6AA2\u67E5\u7BC4\u570D\u4E2D\u7684\u5132\u5B58\u683C\u662F\u5426\u7B49\u65BC\u3001\u5927\u65BC\u3001\u5927\u65BC\u7B49\u65BC\u3001\u5C0F\u65BC\u3001\u5C0F\u65BC\u7B49\u65BC\u689D\u4EF6\u503C\u3002"
              }
            ]
          },
          "RADIANS": {
            "d": "\u5C07\u4EE5\u5EA6\u8868\u793A\u7684\u89D2\u5EA6\u503C\u8F49\u63DB\u70BA\u5F27\u5EA6\u3002",
            "a": "\u5C07\u4EE5\u5EA6\u8868\u793A\u7684\u89D2\u5EA6\u503C\u8F49\u63DB\u70BA\u5F27\u5EA6\u3002",
            "p": [
              {
                "name": "\u89D2\u5EA6",
                "detail": "\u8981\u5F9E\u5EA6\u8F49\u63DB\u70BA\u5F27\u5EA6\u7684\u89D2\u5EA6\u3002"
              }
            ]
          },
          "RAND": {
            "d": "\u8FD4\u56DE\u4E00\u500B\u4ECB\u65BC0\u548C1\u4E4B\u9593\uFF08\u5305\u62EC0\u4F46\u4E0D\u5305\u62EC1\uFF09\u7684\u4E82\u6578\u3002",
            "a": "\u8FD4\u56DE\u4E00\u500B\u4ECB\u65BC0\u548C1\u4E4B\u9593\uFF08\u5305\u62EC0\u4F46\u4E0D\u5305\u62EC1\uFF09\u7684\u4E82\u6578\u3002",
            "p": []
          },
          "COUNTUNIQUE": {
            "d": "\u8A08\u7B97\u4E00\u5217\u6307\u5B9A\u503C\u548C\u7BC4\u570D\u4E2D\u4E0D\u91CD\u8907\u6578\u503C\u7684\u500B\u6578\u3002",
            "a": "\u8A08\u7B97\u4E00\u5217\u6307\u5B9A\u503C\u548C\u7BC4\u570D\u4E2D\u4E0D\u91CD\u8907\u6578\u503C\u7684\u500B\u6578\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8981\u6AA2\u67E5\u5176\u662F\u5426\u552F\u4E00\u7684\u7B2C\u4E00\u500B\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9078] - \u8981\u6AA2\u67E5\u662F\u5426\u552F\u4E00\u7684\u5176\u4ED6\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "DEGREES": {
            "d": "\u5C07\u4EE5\u5F27\u5EA6\u8868\u793A\u7684\u89D2\u5EA6\u503C\u8F49\u63DB\u70BA\u5EA6\u3002",
            "a": "\u5C07\u4EE5\u5F27\u5EA6\u8868\u793A\u7684\u89D2\u5EA6\u503C\u8F49\u63DB\u70BA\u5EA6\u3002",
            "p": [
              {
                "name": "\u89D2\u5EA6",
                "detail": "\u8981\u5F9E\u5F27\u5EA6\u8F49\u63DB\u70BA\u5EA6\u7684\u89D2\u5EA6\u3002"
              }
            ]
          },
          "ERFC": {
            "d": "\u8FD4\u56DE\u6578\u503C\u7684\u4E92\u88DC\u9AD8\u65AF\u8AA4\u5DEE\u51FD\u6578\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u7684\u4E92\u88DC\u9AD8\u65AF\u8AA4\u5DEE\u51FD\u6578\u3002",
            "p": [
              {
                "name": "z",
                "detail": "\u8981\u70BA\u5176\u8A08\u7B97\u4E92\u88DC\u9AD8\u65AF\u8AA4\u5DEE\u51FD\u6578\u7684\u6578\u503C\u3002"
              }
            ]
          },
          "EVEN": {
            "d": "\u5C07\u6578\u503C\u5411\u4E0A\u53D6\u6574\u70BA\u6700\u63A5\u8FD1\u7684\u5076\u6574\u6578\u3002",
            "a": "\u5C07\u6578\u503C\u5411\u4E0A\u53D6\u6574\u70BA\u6700\u63A5\u8FD1\u7684\u5076\u6574\u6578\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u5411\u4E0A\u53D6\u6574\u7684\u6578\u503C,\u53D6\u6574\u503C\u70BA\u5927\u65BC\u6B64\u503C\u7684\u6700\u63A5\u8FD1\u7684\u5076\u6578\u3002\n\n\u5982\u679C\u503C\u70BA\u8CA0\u6578,\u5247\u5C07\u5176\u53D6\u6574\u70BA\u7D55\u5C0D\u503C\u5927\u65BC\u8A72\u503C\u7684\u76F8\u9130\u8CA0\u5076\u6578\u3002"
              }
            ]
          },
          "EXP": {
            "d": "\u8FD4\u56DE\u6B50\u62C9\u6578e\uFF08~2.718\uFF09\u7684\u6307\u5B9A\u6B21\u5E42\u3002",
            "a": "\u8FD4\u56DE\u6B50\u62C9\u6578e\uFF08~2.718\uFF09\u7684\u6307\u5B9A\u6B21\u5E42\u3002",
            "p": [
              {
                "name": "\u6307\u6578",
                "detail": "\u6307\u5B9Ae\u7684\u81EA\u4E58\u5E42\u6B21\u503C\u3002"
              }
            ]
          },
          "FACT": {
            "d": "\u8FD4\u56DE\u6578\u503C\u7684\u968E\u4E58\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u7684\u968E\u4E58\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8A08\u7B97\u4E26\u8FD4\u56DE\u5176\u968E\u4E58\u7684\u6578\u4F4D\u6216\u5C0D\u6578\u4F4D\uFF08\u6240\u5728\u5132\u5B58\u683C\uFF09\u7684\u5F15\u7528\u3002"
              }
            ]
          },
          "FACTDOUBLE": {
            "d": '\u8FD4\u56DE\u6578\u503C\u7684"\u96D9\u968E\u4E58"\u3002',
            "a": '\u8FD4\u56DE\u6578\u503C\u7684"\u96D9\u968E\u4E58"\u3002',
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8A08\u7B97\u4E26\u8FD4\u56DE\u5176\u96D9\u968E\u4E58\u7684\u6578\u4F4D\u6216\u5C0D\u6578\u4F4D\uFF08\u6240\u5728\u5132\u5B58\u683C\uFF09\u7684\u5F15\u7528\u3002"
              }
            ]
          },
          "PI": {
            "d": "\u8FD4\u56DE\u5E36\u670914\u4F4D\u5C0F\u6578\u7684PI\u503C\u3002",
            "a": "\u8FD4\u56DE\u5E36\u670914\u4F4D\u5C0F\u6578\u7684PI\u503C\u3002",
            "p": []
          },
          "FLOOR": {
            "d": "\u5C07\u6578\u503C\u5411\u4E0B\u53D6\u6574\u70BA\u6307\u5B9A\u56E0\u6578\u7684\u6700\u63A5\u8FD1\u7684\u6574\u6578\u500D\u3002",
            "a": "\u5C07\u6578\u503C\u5411\u4E0B\u53D6\u6574\u70BA\u6307\u5B9A\u56E0\u6578\u7684\u6700\u63A5\u8FD1\u7684\u6574\u6578\u500D\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u5411\u4E0B\u820D\u5165\u70BA\u56E0\u6578\u7684\u6700\u63A5\u8FD1\u6574\u6578\u500D\u7684\u6578\u503C\u3002"
              },
              {
                "name": "\u56E0\u6578",
                "detail": "\u8981\u5C07\u503C\u820D\u5165\u5230\u6B64\u6578\u7684\u6574\u6578\u500D\u3002\n\n\u56E0\u6578\u4E0D\u5F97\u70BA0\u3002"
              }
            ]
          },
          "GCD": {
            "d": "\u8FD4\u56DE\u4E00\u500B\u6216\u591A\u500B\u6574\u6578\u7684\u6700\u5927\u516C\u7D04\u6578\u3002",
            "a": "\u8FD4\u56DE\u4E00\u500B\u6216\u591A\u500B\u6574\u6578\u7684\u6700\u5927\u516C\u7D04\u6578\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8981\u5728\u67E5\u627E\u6700\u5927\u516C\u7D04\u6578\u7684\u8A08\u7B97\u4E2D\u6AA2\u67E5\u5176\u56E0\u6578\u7684\u7B2C\u4E00\u9805\u6578\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9078] - \u5728\u6C42\u6700\u5927\u516C\u7D04\u6578\u6642\u8981\u8003\u616E\u5176\u56E0\u6578\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "RANDBETWEEN": {
            "d": "\u8FD4\u56DE\u4ECB\u65BC\u5169\u500B\u6574\u6578\u4E4B\u9593\uFF08\u5305\u62EC\u9019\u5169\u500B\u6574\u6578\uFF09\u7684\u4E82\u6578\u3002",
            "a": "\u8FD4\u56DE\u4ECB\u65BC\u5169\u500B\u6574\u6578\u4E4B\u9593\uFF08\u5305\u62EC\u9019\u5169\u500B\u6574\u6578\uFF09\u7684\u4E82\u6578\u3002",
            "p": [
              {
                "name": "\u4E0B\u754C",
                "detail": "\u96A8\u6A5F\u503C\u7BC4\u570D\u7684\u4E0B\u754C\u3002"
              },
              {
                "name": "\u4E0A\u754C",
                "detail": "\u96A8\u6A5F\u503C\u7BC4\u570D\u7684\u4E0A\u754C\u3002"
              }
            ]
          },
          "ROUND": {
            "d": "\u5C07\u6578\u4F4D\u56DB\u6368\u4E94\u5165\u5230\u6307\u5B9A\u7684\u4F4D\u6578\u3002",
            "a": "\u5C07\u6578\u4F4D\u56DB\u6368\u4E94\u5165\u5230\u6307\u5B9A\u7684\u4F4D\u6578\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u56DB\u6368\u4E94\u5165\u7684\u6578\u4F4D\u3002"
              },
              {
                "name": "\u4F4D\u6578",
                "detail": "\u8981\u9032\u884C\u56DB\u6368\u4E94\u5165\u904B\u7B97\u7684\u4F4D\u6578\u3002\n\n\u4F4D\u6578\u53EF\u4EE5\u53D6\u8CA0\u503C,\u5728\u9019\u7A2E\u60C5\u6CC1\u4E0B\u6703\u5C07\u503C\u7684\u5C0F\u6578\u9EDE\u5DE6\u5074\u90E8\u5206\u820D\u5165\u5230\u6307\u5B9A\u7684\u4F4D\u6578\u3002"
              }
            ]
          },
          "ROUNDDOWN": {
            "d": "\u671D\u8457\u96F6\u7684\u65B9\u5411\u5C07\u6578\u4F4D\u9032\u884C\u5411\u4E0B\u820D\u5165\u3002",
            "a": "\u671D\u8457\u96F6\u7684\u65B9\u5411\u5C07\u6578\u4F4D\u9032\u884C\u5411\u4E0B\u820D\u5165\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u9700\u8981\u5411\u4E0B\u820D\u5165\u7684\u4EFB\u610F\u5BE6\u6578\u3002"
              },
              {
                "name": "\u4F4D\u6578",
                "detail": "\u8981\u901A\u904E\u820D\u5165\u9054\u5230\u7684\u5C0F\u6578\u4F4D\u6578\u3002\n\n\u4F4D\u6578\u53EF\u4EE5\u53D6\u8CA0\u503C,\u5728\u9019\u7A2E\u60C5\u6CC1\u4E0B\u6703\u5C07\u503C\u7684\u5C0F\u6578\u9EDE\u5DE6\u5074\u90E8\u5206\u820D\u5165\u5230\u6307\u5B9A\u7684\u4F4D\u6578\u3002"
              }
            ]
          },
          "ROUNDUP": {
            "d": "\u671D\u8457\u9060\u96E20\uFF08\u96F6\uFF09\u7684\u65B9\u5411\u5C07\u6578\u4F4D\u9032\u884C\u5411\u4E0A\u820D\u5165\u3002",
            "a": "\u671D\u8457\u9060\u96E20\uFF08\u96F6\uFF09\u7684\u65B9\u5411\u5C07\u6578\u4F4D\u9032\u884C\u5411\u4E0A\u820D\u5165\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u5C07\u5176\u820D\u5165\u70BA\u4F4D\u6578\u4F4D\u6578\u4F4D\u7684\u503C,\u59CB\u7D42\u5411\u4E0A\u820D\u5165\u3002"
              },
              {
                "name": "\u4F4D\u6578",
                "detail": "\u8981\u901A\u904E\u820D\u5165\u9054\u5230\u7684\u5C0F\u6578\u4F4D\u6578\u3002\n\n\u4F4D\u6578\u53EF\u4EE5\u53D6\u8CA0\u503C,\u5728\u9019\u7A2E\u60C5\u6CC1\u4E0B\u6703\u5C07\u503C\u7684\u5C0F\u6578\u9EDE\u5DE6\u5074\u90E8\u5206\u820D\u5165\u5230\u6307\u5B9A\u7684\u4F4D\u6578\u3002"
              }
            ]
          },
          "SERIESSUM": {
            "d": "\u7D66\u5B9A\u53C3\u6578x\u3001n\u3001m\u548Ca,\u8FD4\u56DE\u5E42\u7D1A\u6578\u7684\u548Ca1xn + a2x\uFF08n+m\uFF09+\u2026+ aix\uFF08n+\uFF08i-1\uFF09m\uFF09,\u5176\u4E2Di\u70BA\u7BC4\u570Da\u4E2D\u7684\u9805\u6578\u3002",
            "a": "\u7D66\u5B9A\u53C3\u6578x\u3001n\u3001m\u548Ca",
            "p": [
              {
                "name": "x",
                "detail": "\u5E42\u7D1A\u6578\u7684\u8F38\u5165\u503C\u3002\u96A8\u76F8\u61C9\u7684\u8FD1\u4F3C\u985E\u578B\u800C\u8B8A,\u6709\u53EF\u80FD\u70BA\u89D2\u5EA6\u3001\u6307\u6578\u6216\u5176\u4ED6\u4E00\u4E9B\u503C\u3002"
              },
              {
                "name": "n",
                "detail": "\u5728\u5E42\u7D1A\u6578\u4E2Dx\u7684\u521D\u59CB\u81EA\u4E58\u5E42\u6B21\u3002"
              },
              {
                "name": "m",
                "detail": "x\u7684\u5E42\u6B21\u4E2D\u7684\u9644\u52A0\u589E\u91CF\u3002"
              },
              {
                "name": "a",
                "detail": "\u5305\u542B\u5E42\u7D1A\u6578\u4FC2\u6578\u7684\u6578\u7D44\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "SIGN": {
            "d": "\u7D66\u5B9A\u8F38\u5165\u6578\u503C,\u5982\u679C\u70BA\u8CA0\u8FD4\u56DE-1\uFF1B\u5982\u679C\u70BA\u6B63\u8FD4\u56DE1\uFF1B\u5982\u679C\u70BA\u96F6\u5247\u8FD4\u56DE0\u3002",
            "a": "\u7D66\u5B9A\u8F38\u5165\u6578\u503C",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8FD4\u56DE\u5176\u7B26\u865F\u7684\u6578\u503C\u3002"
              }
            ]
          },
          "SIN": {
            "d": "\u7D66\u5B9A\u89D2\u5EA6\uFF08\u4EE5\u5F27\u5EA6\u8868\u793A\uFF09,\u8FD4\u56DE\u5176\u6B63\u5F26\u503C\u3002",
            "a": "\u7D66\u5B9A\u89D2\u5EA6\uFF08\u4EE5\u5F27\u5EA6\u8868\u793A\uFF09",
            "p": [
              {
                "name": "\u89D2\u5EA6",
                "detail": "\u8981\u8FD4\u56DE\u5176\u6B63\u5F26\u503C\u7684\u89D2\u5EA6,\u4EE5\u5F27\u5EA6\u8868\u793A\u3002"
              }
            ]
          },
          "SINH": {
            "d": "\u8FD4\u56DE\u7D66\u5B9A\u5BE6\u6578\u7684\u96D9\u66F2\u6B63\u5F26\u503C\u3002",
            "a": "\u8FD4\u56DE\u7D66\u5B9A\u5BE6\u6578\u7684\u96D9\u66F2\u6B63\u5F26\u503C\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8A08\u7B97\u5176\u96D9\u66F2\u6B63\u5F26\u503C\u7684\u5BE6\u6578\u503C\u3002"
              }
            ]
          },
          "SQRT": {
            "d": "\u8FD4\u56DE\u4E00\u500B\u6B63\u6578\u7684\u6B63\u5E73\u65B9\u6839\u3002",
            "a": "\u8FD4\u56DE\u4E00\u500B\u6B63\u6578\u7684\u6B63\u5E73\u65B9\u6839\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u8A08\u7B97\u5176\u6B63\u5E73\u65B9\u6839\u7684\u6578\u503C\u3002\n\n\u503C\u5FC5\u9808\u70BA\u6B63\u6578\uFF1B\u5982\u679C\u70BA\u8CA0,SQRT\u5C07\u8FD4\u56DE#NUM\uFF01\u932F\u8AA4\u3002"
              }
            ]
          },
          "SQRTPI": {
            "d": "\u8FD4\u56DEPI\u8207\u7D66\u5B9A\u6B63\u6578\u4E58\u7A4D\u7684\u6B63\u5E73\u65B9\u6839\u3002",
            "a": "\u8FD4\u56DEPI\u8207\u7D66\u5B9A\u6B63\u6578\u4E58\u7A4D\u7684\u6B63\u5E73\u65B9\u6839\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u5C07\u5176\u8207PI\u76F8\u4E58\u4E26\u8FD4\u56DE\u8A72\u4E58\u7A4D\u7684\u5E73\u65B9\u6839\u7684\u6578\u503C\n\n\u503C\u5FC5\u9808\u70BA\u6B63\u6578\uFF1B\u5982\u679C\u70BA\u8CA0\u6578,SQRTPI\u5C07\u8FD4\u56DE#NUM\uFF01\u932F\u8AA4\u3002"
              }
            ]
          },
          "GAMMALN": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u4F3D\u746A\u51FD\u6578\u7684\u4EE5e\uFF08\u6B50\u62C9\u6578\uFF09\u70BA\u5E95\u7684\u5C0D\u6578\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u4F3D\u746A\u51FD\u6578\u7684\u4EE5e\uFF08\u6B50\u62C9\u6578\uFF09\u70BA\u5E95\u7684\u5C0D\u6578\u3002",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u4F3D\u746A\u51FD\u6578\u7684\u8F38\u5165\u503C\u3002\u8FD4\u56DE\u7684\u5C07\u662F\u4F3D\u746A\uFF08\u503C\uFF09\u7684\u81EA\u7136\u5C0D\u6578\u3002\n\n\u503C\u5FC5\u9808\u70BA\u6B63\u6578\u3002"
              }
            ]
          },
          "COS": {
            "d": "\u8FD4\u56DE\u7D66\u5B9A\u89D2\u5EA6\u7684\u4F59\u5F26\u503C\uFF08\u89D2\u5EA6\u4EE5\u5F27\u5EA6\u8868\u793A\uFF09\u3002",
            "a": "\u8FD4\u56DE\u7D66\u5B9A\u89D2\u5EA6\u7684\u4F59\u5F26\u503C\uFF08\u89D2\u5EA6\u4EE5\u5F27\u5EA6\u8868\u793A\uFF09\u3002",
            "p": [
              {
                "name": "\u89D2\u5EA6",
                "detail": "\u8981\u53D6\u5176\u4F59\u5F26\u503C\u7684\u89D2\u5EA6,\u4EE5\u5F27\u5EA6\u8868\u793A\u3002"
              }
            ]
          },
          "TRUNC": {
            "d": "\u9664\u6307\u5B9A\u6709\u6548\u4F4D\u4E4B\u5916\u7684\u90E8\u5206,\u53D6\u6578\u64DA\u7684\u6307\u5B9A\u6709\u6548\u4F4D\u3002",
            "a": "\u9664\u6307\u5B9A\u6709\u6548\u4F4D\u4E4B\u5916\u7684\u90E8\u5206",
            "p": [
              {
                "name": "\u503C",
                "detail": "\u8981\u622A\u53D6\u7684\u6578\u64DA\u3002"
              },
              {
                "name": "\u4F4D\u6578",
                "detail": '[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0] - \u5C0F\u6578\u9EDE\u53F3\u5074\u8981\u4FDD\u7559\u7684\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u4F4D\u6578\u5927\u65BC\u503C\u4E2D\u7684\u6709\u6548\u4F4D\u6578,\u5247\u5C07"\u503C"\u539F\u6A23\u8FD4\u56DE\u3002\n\n\u4F4D\u6578\u53EF\u4EE5\u53D6\u8CA0\u503C,\u5728\u9019\u7A2E\u60C5\u6CC1\u4E0B\u6703\u5C07\u5C0F\u6578\u9EDE\u5DE6\u5074\u6307\u5B9A\u4F4D\u6578\u7684\u503C\u66F4\u6539\u70BA\u96F6\u3002\u5C0F\u6578\u9EDE\u53F3\u5074\u7684\u6240\u6709\u4F4D\u6578\u90FD\u6703\u88AB\u6368\u68C4\u3002\u5982\u679C\u503C\u7684\u6240\u6709\u4F4D\u90FD\u88AB\u66F4\u6539\u70BA\u96F6,\u5247TRUNC\u6703\u8FD4\u56DE0\u3002'
              }
            ]
          },
          "QUOTIENT": {
            "d": "\u8FD4\u56DE\u4EE5\u4E00\u500B\u6578\u9664\u4EE5\u53E6\u4E00\u500B\u6578\u6240\u5F97\u7684\u7D50\u679C,\u4E0D\u5305\u542B\u9918\u6578\u3002",
            "a": "\u8FD4\u56DE\u4EE5\u4E00\u500B\u6578\u9664\u4EE5\u53E6\u4E00\u500B\u6578\u6240\u5F97\u7684\u7D50\u679C",
            "p": [
              {
                "name": "\u88AB\u9664\u6578",
                "detail": "\u8981\u88AB\u9664\u7684\u6578\u503C\u3002"
              },
              {
                "name": "\u9664\u6578",
                "detail": "\u7528\u65BC\u9664\u5176\u4ED6\u6578\u7684\u6578\u503C\u3002\n\n\u9664\u6578\u4E0D\u5F97\u70BA0"
              }
            ]
          },
          "POWER": {
            "d": "\u8FD4\u56DE\u6578\u503C\u7684\u6307\u5B9A\u6B21\u5E42\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u7684\u6307\u5B9A\u6B21\u5E42\u3002",
            "p": [
              {
                "name": "\u5E95\u6578",
                "detail": "\u8981\u8A08\u7B97\u5176\u6307\u6578\u6B21\u5E42\u7684\u6578\u503C\u3002\n\n\u5982\u679C\u5E95\u6578\u70BA\u8CA0,\u5247\u6307\u6578\u5FC5\u9808\u70BA\u6574\u6578\u3002"
              },
              {
                "name": "\u6307\u6578",
                "detail": "\u6307\u5B9A\u5E95\u6578\u7684\u81EA\u4E58\u5E42\u6B21\u503C\u3002"
              }
            ]
          },
          "SUMIFS": {
            "d": "\u6839\u64DA\u591A\u9805\u689D\u4EF6\u8FD4\u56DE\u7BC4\u570D\u4E4B\u548C\u3002",
            "a": "\u6839\u64DA\u591A\u9805\u689D\u4EF6\u8FD4\u56DE\u7BC4\u570D\u4E4B\u548C\u3002",
            "p": [
              {
                "name": "\u6C42\u548C\u7BC4\u570D",
                "detail": "\u8981\u5C0D\u5176\u6C42\u548C\u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "\u689D\u4EF6\u7BC4\u570D1",
                "detail": "\u8981\u5728\u54EA\u500B\u7BC4\u570D\u5167\u6AA2\u67E5\u689D\u4EF61\u3002"
              },
              {
                "name": "\u689D\u4EF61",
                "detail": "\u8981\u61C9\u7528\u65BC\u689D\u4EF6\u7BC4\u570D1\u7684\u6A21\u5F0F\u6216\u6E2C\u8A66\u689D\u4EF6\u3002"
              },
              {
                "name": "\u689D\u4EF6\u7BC4\u570D2,\u689D\u4EF62\u2026",
                "detail": "[ \u53EF\u9078 ] - \u8981\u6AA2\u67E5\u7684\u5176\u4ED6\u7BC4\u570D\u548C\u689D\u4EF6\u3002"
              }
            ]
          },
          "COUNTIFS": {
            "d": "\u6839\u64DA\u591A\u9805\u689D\u4EF6\u8FD4\u56DE\u7BC4\u570D\u4E2D\u7684\u5132\u5B58\u683C\u6578\u91CF\u3002",
            "a": "\u6839\u64DA\u591A\u9805\u689D\u4EF6\u8FD4\u56DE\u7BC4\u570D\u4E2D\u7684\u5132\u5B58\u683C\u6578\u91CF\u3002",
            "p": [
              {
                "name": "\u689D\u4EF6\u7BC4\u570D1",
                "detail": "\u8981\u5728\u54EA\u500B\u7BC4\u570D\u5167\u6AA2\u67E5\u689D\u4EF61\u3002"
              },
              {
                "name": "\u689D\u4EF61",
                "detail": "\u8981\u61C9\u7528\u65BC\u689D\u4EF6\u7BC4\u570D1\u7684\u6A21\u5F0F\u6216\u6E2C\u8A66\u689D\u4EF6\u3002"
              },
              {
                "name": "\u689D\u4EF6\u7BC4\u570D2,\u689D\u4EF62\u2026",
                "detail": "[ \u53EF\u9078 ] - \u8981\u6AA2\u67E5\u7684\u5176\u4ED6\u7BC4\u570D\u548C\u689D\u4EF6,\u53EF\u91CD\u8907\u3002"
              }
            ]
          },
          "PRODUCT": {
            "d": "\u8FD4\u56DE\u5C07\u4E00\u7D44\u6578\u76F8\u4E58\u6240\u5F97\u7684\u7D50\u679C\u3002",
            "a": "\u8FD4\u56DE\u5C07\u4E00\u7D44\u6578\u76F8\u4E58\u6240\u5F97\u7684\u7D50\u679C\u3002",
            "p": [
              {
                "name": "\u4E58\u65781",
                "detail": "\u7528\u65BC\u8A08\u7B97\u4E58\u7A4D\u7684\u7B2C\u4E00\u500B\u6578\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u4E58\u65782 ... \u4E58\u657830",
                "detail": "[\u53EF\u9078] - \u8981\u76F8\u4E58\u7684\u5176\u4ED6\u6578\u503C"
              }
            ]
          },
          "HARMEAN": {
            "d": "\u8A08\u7B97\u6578\u64DA\u96C6\u7684\u8ABF\u548C\u5E73\u5747\u503C\u3002",
            "a": "\u8A08\u7B97\u6578\u64DA\u96C6\u7684\u8ABF\u548C\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6A23\u672C\u4E2D\u7684\u7B2C\u4E00\u9805\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u6578\u64DA\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "HYPGEOMDIST": {
            "d": "\u8FD4\u56DE\u8D85\u5E7E\u4F55\u5206\u4F48\u3002\u5982\u679C\u5DF2\u77E5\u6A23\u672C\u91CF\u3001\u7E3D\u9AD4\u6210\u529F\u6B21\u6578\u548C\u7E3D\u9AD4\u5927\u5C0F,\u5247 HYPGEOM.DIST \u8FD4\u56DE\u6A23\u672C\u53D6\u5F97\u5DF2\u77E5\u6210\u529F\u6B21\u6578\u7684\u6982\u7387\u3002",
            "a": "\u8FD4\u56DE\u8D85\u5E7E\u4F55\u5206\u4F48\u3002",
            "p": [
              {
                "name": "Sample_s",
                "detail": "\u6A23\u672C\u4E2D\u6210\u529F\u7684\u6B21\u6578\u3002"
              },
              {
                "name": "Number_sample",
                "detail": "\u6A23\u672C\u91CF\u3002"
              },
              {
                "name": "Population_s",
                "detail": "\u7E3D\u9AD4\u4E2D\u6210\u529F\u7684\u6B21\u6578\u3002"
              },
              {
                "name": "Number_pop",
                "detail": "\u7E3D\u9AD4\u5927\u5C0F\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u51B3\u5B9A\u51FD\u6578\u5F62\u5F0F\u7684\u908F\u8F2F\u503C\u3002\n\n\u5982\u679Ccumulative\u70BATRUE\uFF08\uFF09,\u5247HYPGEOM.DIST\u8FD4\u56DE\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578\uFF1B\n\n\u5982\u679C\u70BAFALSE\uFF08\uFF09,\u5247\u8FD4\u56DE\u6982\u7387\u5BC6\u5EA6\u51FD\u6578\u3002"
              }
            ]
          },
          "INTERCEPT": {
            "d": "\u8A08\u7B97\u6578\u64DA\u96C6\u7684\u7DDA\u6027\u56DE\u6B78\u65B9\u7A0B\u76F4\u7DDA\u8207 Y \u8EF8\u7684\u76F8\u4EA4\u9EDE\uFF08x=0\uFF09\u7684y\u503C\u3002",
            "a": "\u8A08\u7B97\u6578\u64DA\u96C6\u7684\u7DDA\u6027\u56DE\u6B78\u65B9\u7A0B\u76F4\u7DDA\u8207 Y \u8EF8\u7684\u76F8\u4EA4\u9EDE\uFF08x=0\uFF09\u7684y\u503C\u3002",
            "p": [
              {
                "name": "\u6578\u64DA_y",
                "detail": "\u4EE3\u8868\u56E0\u8B8A\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "\u6578\u64DA_x",
                "detail": "\u4EE3\u8868\u5F15\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              }
            ]
          },
          "KURT": {
            "d": "\u8A08\u7B97\u6578\u64DA\u96C6\u7684\u5CED\u5EA6,\u8A72\u540D\u984D\u8A13\u793A\u6578\u64DA\u96C6\uFF08\u5206\u4F48\uFF09\u7684\u5F62\u614B,\u5C24\u5176\u662F\u8A72\u5F62\u614B\u7684\u9661\u5CED\u7A0B\u5EA6\u3002",
            "a": "\u8A08\u7B97\u6578\u64DA\u96C6\u7684\u5CED\u5EA6",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6578\u64DA\u96C6\u4E2D\u7684\u7B2C\u4E00\u500B\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u6578\u64DA\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "LARGE": {
            "d": "\u8FD4\u56DE\u6578\u64DA\u96C6\u4E2D\u7B2C n \u500B\u6700\u5927\u5143\u7D20,n \u7531\u7528\u6236\u6307\u5B9A\u3002",
            "a": "\u8FD4\u56DE\u6578\u64DA\u96C6\u4E2D\u7B2C n \u500B\u6700\u5927\u5143\u7D20",
            "p": [
              {
                "name": "\u6578\u64DA",
                "detail": "\u5305\u542B\u76F8\u95DC\u6578\u64DA\u96C6\u7684\u6578\u7D44\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "n",
                "detail": "\u8981\u8FD4\u56DE\u7684\u5143\u7D20\u7684\u6392\u884C\u4F4D\u7F6E\uFF08\u5F9E\u5927\u5230\u5C0F\u9806\u5E8F\uFF09\u3002\n\n\u4F8B\u5982,\u5C07n\u8A2D\u70BA4\u5C07\u4F7FLARGE\u8FD4\u56DE\u6578\u64DA\u4E2D\u6392\u540D\u7B2C4\u7684\u6700\u5927\u5143\u7D20\u3002"
              }
            ]
          },
          "STDEVA": {
            "d": "\u57FA\u65BC\u6A23\u672C\u8A08\u7B97\u6A19\u6E96\u5DEE,\u5C07\u6587\u5B57\u53D6\u503C\u70BA0\u3002",
            "a": "\u57FA\u65BC\u6A23\u672C\u8A08\u7B97\u6A19\u6E96\u5DEE",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6A23\u672C\u4E2D\u7684\u7B2C\u4E00\u9805\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2,\u2026",
                "detail": "[\u53EF\u9078] - \u6A23\u672C\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "STDEVP": {
            "d": "\u57FA\u65BC\u6A23\u672C\u7E3D\u9AD4\u8A08\u7B97\u6A19\u6E96\u5DEE\u3002",
            "a": "\u57FA\u65BC\u6A23\u672C\u7E3D\u9AD4\u8A08\u7B97\u6A19\u6E96\u5DEE\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6578\u64DA\u96C6\u4E2D\u7684\u7B2C\u4E00\u500B\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u6578\u64DA\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "GEOMEAN": {
            "d": "\u8A08\u7B97\u6578\u64DA\u96C6\u7684\u5E7E\u4F55\u5E73\u5747\u503C\u3002",
            "a": "\u8A08\u7B97\u6578\u64DA\u96C6\u7684\u5E7E\u4F55\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6A23\u672C\u4E2D\u7684\u7B2C\u4E00\u9805\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u6578\u64DA\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "RANK_EQ": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u6578\u64DA\u96C6\u4E2D\u7684\u6392\u540D\u3002\u5982\u679C\u76F8\u540C\u7684\u503C\u5728\u6578\u64DA\u96C6\u4E2D\u5B58\u5728\u591A\u9805,\u5247\u8FD4\u56DE\u5176\u4E2D\u7684\u6700\u9AD8\u6392\u540D\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u6578\u64DA\u96C6\u4E2D\u7684\u6392\u540D\u3002\u5982\u679C\u76F8\u540C\u7684\u503C\u5728\u6578\u64DA\u96C6\u4E2D\u5B58\u5728\u591A\u9805,\u5247\u8FD4\u56DE\u5176\u4E2D\u7684\u6700\u9AD8\u6392\u540D\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u8981\u78BA\u5B9A\u5176\u6392\u540D\u7684\u503C\u3002"
              },
              {
                "name": "ref",
                "detail": "\u5305\u542B\u76F8\u95DC\u6578\u64DA\u96C6\u7684\u6578\u7D44\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "order",
                "detail": '[\u53EF\u9078-\u9ED8\u8A8D\u70BA\u6309\u964D\u5E8F\uFF08FALSE\uFF08\uFF09\uFF09] - \u8981\u6309\u6607\u51AA\u9084\u662F\u6309\u964D\u5E8F\u8003\u616E"data"\u4E2D\u7684\u503C\u3002'
              }
            ]
          },
          "RANK_AVG": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u6578\u64DA\u96C6\u4E2D\u7684\u6392\u540D\u3002\u5982\u679C\u76F8\u540C\u7684\u503C\u5728\u6578\u64DA\u96C6\u4E2D\u5B58\u5728\u591A\u9805,\u5247\u8FD4\u56DE\u9019\u4E9B\u9805\u6392\u540D\u7684\u5E73\u5747\u503C\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u6578\u64DA\u96C6\u4E2D\u7684\u6392\u540D\u3002\u5982\u679C\u76F8\u540C\u7684\u503C\u5728\u6578\u64DA\u96C6\u4E2D\u5B58\u5728\u591A\u9805,\u5247\u8FD4\u56DE\u9019\u4E9B\u9805\u6392\u540D\u7684\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u8981\u78BA\u5B9A\u5176\u6392\u540D\u7684\u503C\u3002"
              },
              {
                "name": "ref",
                "detail": "\u5305\u542B\u76F8\u95DC\u6578\u64DA\u96C6\u7684\u6578\u7D44\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "order",
                "detail": '[\u53EF\u9078-\u9ED8\u8A8D\u70BA\u6309\u964D\u5E8F\uFF08FALSE\uFF08\uFF09\uFF09] - \u8981\u6309\u6607\u51AA\u9084\u662F\u6309\u964D\u5E8F\u8003\u616E"data"\u4E2D\u7684\u503C\u3002'
              }
            ]
          },
          "PERCENTRANK_EXC": {
            "d": "\u4EE5\u767E\u5206\u6578\u5F62\u5F0F\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u7D66\u5B9A\u6578\u64DA\u96C6\u4E2D\u7684\u767E\u5206\u6BD4\u6392\u540D\uFF08\u4ECB\u65BC0\u548C1\u4E4B\u9593,\u4E0D\u5305\u62EC\u5169\u7AEF\u503C\uFF09\u3002",
            "a": "\u4EE5\u767E\u5206\u6578\u5F62\u5F0F\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u7D66\u5B9A\u6578\u64DA\u96C6\u4E2D\u7684\u767E\u5206\u6BD4\u6392\u540D\uFF08\u4ECB\u65BC0\u548C1\u4E4B\u9593,\u4E0D\u5305\u62EC\u5169\u7AEF\u503C\uFF09\u3002",
            "p": [
              {
                "name": "data",
                "detail": "\u5305\u542B\u76F8\u95DC\u6578\u64DA\u96C6\u7684\u6578\u7D44\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "x",
                "detail": "\u8981\u78BA\u5B9A\u5176\u767E\u5206\u6BD4\u6392\u4F4D\u7684\u503C\u3002"
              },
              {
                "name": "significance",
                "detail": "[\u53EF\u9078-\u9810\u8A2D\u503C\u70BA3] - \u8981\u5728\u8A08\u7B97\u4E2D\u4F7F\u7528\u7684\u6709\u6548\u4F4D\u6578\u3002"
              }
            ]
          },
          "PERCENTRANK_INC": {
            "d": "\u4EE5\u767E\u5206\u6BD4\u5F62\u5F0F\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u7D66\u5B9A\u6578\u64DA\u96C6\u4E2D\u7684\u767E\u5206\u6BD4\u6392\u540D\uFF08\u4ECB\u65BC0\u548C1\u4E4B\u9593,\u5305\u62EC\u5169\u7AEF\u503C\uFF09\u3002",
            "a": "\u4EE5\u767E\u5206\u6BD4\u5F62\u5F0F\u8FD4\u56DE\u6307\u5B9A\u503C\u5728\u7D66\u5B9A\u6578\u64DA\u96C6\u4E2D\u7684\u767E\u5206\u6BD4\u6392\u540D\uFF08\u4ECB\u65BC0\u548C1\u4E4B\u9593,\u5305\u62EC\u5169\u7AEF\u503C\uFF09\u3002",
            "p": [
              {
                "name": "data",
                "detail": "\u5305\u542B\u76F8\u95DC\u6578\u64DA\u96C6\u7684\u6578\u7D44\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "x",
                "detail": "\u8981\u78BA\u5B9A\u5176\u767E\u5206\u6BD4\u6392\u4F4D\u7684\u503C\u3002"
              },
              {
                "name": "significance",
                "detail": "[\u53EF\u9078-\u9810\u8A2D\u503C\u70BA3] - \u8981\u5728\u8A08\u7B97\u4E2D\u4F7F\u7528\u7684\u6709\u6548\u4F4D\u6578\u3002"
              }
            ]
          },
          "FORECAST": {
            "d": "\u57FA\u65BC\u6578\u64DA\u96C6\u7684\u7DDA\u6027\u56DE\u6B78,\u8A08\u7B97\u6307\u5B9A x \u7684\u9810\u671F y \u503C\u3002",
            "a": "\u57FA\u65BC\u6578\u64DA\u96C6\u7684\u7DDA\u6027\u56DE\u6B78",
            "p": [
              {
                "name": "x",
                "detail": "x\u8EF8\u4E0A\u7528\u65BC\u9810\u6E2C\u7684\u503C\u3002"
              },
              {
                "name": "\u6578\u64DA_y",
                "detail": "\u4EE3\u8868\u56E0\u8B8A\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "\u6578\u64DA_x",
                "detail": "\u4EE3\u8868\u5F15\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              }
            ]
          },
          "FISHERINV": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u6578\u503C\u7684 Fisher \u9006\u8B8A\u63DB\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u6578\u503C\u7684 Fisher \u9006\u8B8A\u63DB\u3002",
            "p": [
              {
                "name": "y",
                "detail": "\u8981\u8A08\u7B97\u5176Fisher\u9006\u8B8A\u63DB\u7684\u6578\u503C\u3002"
              }
            ]
          },
          "FISHER": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u6578\u503C\u7684 Fisher \u8B8A\u63DB\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u6578\u503C\u7684 Fisher \u8B8A\u63DB\u3002",
            "p": [
              {
                "name": "x",
                "detail": "\u8981\u8A08\u7B97\u5176Fisher\u8B8A\u63DB\u7684\u6578\u503C\u3002"
              }
            ]
          },
          "MODE_SNGL": {
            "d": "\u8FD4\u56DE\u6578\u64DA\u96C6\u4E2D\u51FA\u73FE\u6B21\u6578\u6700\u591A\u7684\u503C\u3002",
            "a": "\u8FD4\u56DE\u6578\u64DA\u96C6\u4E2D\u51FA\u73FE\u6B21\u6578\u6700\u591A\u7684\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8A08\u7B97\u6A21\u5F0F\u6642\u8981\u6AA2\u67E5\u7684\u7B2C\u4E00\u500B\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u5728\u8A08\u7B97\u6A21\u5F0F\u6642\u8981\u8003\u616E\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "WEIBULL_DIST": {
            "d": "\u7D66\u5B9A\u5F62\u72C0\u548C\u5C3A\u5EA6,\u8FD4\u56DE\u97CB\u4F2F\u5206\u4F48\u51FD\u6578\uFF08\u6216\u97CB\u4F2F\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578\uFF09\u7684\u503C\u3002",
            "a": "\u7D66\u5B9A\u5F62\u72C0\u548C\u5C3A\u5EA6",
            "p": [
              {
                "name": "x",
                "detail": "WEIBULL \u5206\u4F48\u51FD\u6578\u7684\u8F38\u5165\u503C\u3002"
              },
              {
                "name": "alpha",
                "detail": "Weibull \u5206\u4F48\u51FD\u6578\u7684\u5F62\u72C0\u53C3\u6578\u3002\n\n alpha\u503C\u5FC5\u9808\u5927\u65BC0\u3002"
              },
              {
                "name": "beta",
                "detail": "Weibull \u5206\u4F48\u51FD\u6578\u7684\u5C3A\u5EA6\u53C3\u6578\u3002\n\n beta\u503C\u5FC5\u9808\u5927\u65BC0\u3002"
              },
              {
                "name": "cumulative",
                "detail": "TRUE\uFF08\uFF09\u8868\u793A\u4F7F\u7528\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578,FALSE\uFF08\uFF09\u5247\u8868\u793A\u4F7F\u7528\u6982\u7387\u5BC6\u5EA6\u51FD\u6578\u3002"
              }
            ]
          },
          "COUNT": {
            "d": "\u8FD4\u56DE\u6578\u64DA\u96C6\u4E2D\u6578\u503C\u7684\u500B\u6578\u3002",
            "a": "\u8FD4\u56DE\u6578\u64DA\u96C6\u4E2D\u6578\u503C\u7684\u500B\u6578\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8A08\u6578\u6642\u8981\u6AA2\u67E5\u7684\u7B2C\u4E00\u500B\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u5728\u8A08\u6578\u6642\u8981\u6AA2\u67E5\u7684\u5176\u4ED6\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "COUNTA": {
            "d": "\u8FD4\u56DE\u6578\u64DA\u96C6\u4E2D\u503C\u7684\u6578\u91CF\u3002",
            "a": "\u8FD4\u56DE\u6578\u64DA\u96C6\u4E2D\u503C\u7684\u6578\u91CF\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8A08\u6578\u6642\u8981\u6AA2\u67E5\u7684\u7B2C\u4E00\u500B\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u5728\u8A08\u6578\u6642\u8981\u6AA2\u67E5\u7684\u5176\u4ED6\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "AVEDEV": {
            "d": "\u8A08\u7B97\u6578\u64DA\u8207\u6578\u64DA\u96C6\u5E73\u5747\u503C\u4E4B\u9593\u7684\u504F\u5DEE\u5927\u5C0F\u7684\u5E73\u5747\u503C\u3002",
            "a": "\u8A08\u7B97\u6578\u64DA\u8207\u6578\u64DA\u96C6\u5E73\u5747\u503C\u4E4B\u9593\u7684\u504F\u5DEE\u5927\u5C0F\u7684\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6A23\u672C\u4E2D\u7684\u7B2C\u4E00\u9805\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u6A23\u672C\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "AVERAGE": {
            "d": "\u8FD4\u56DE\u6578\u64DA\u96C6\u7684\u7B97\u8853\u5E73\u5747\u503C,\u5C0D\u6587\u5B57\u5FFD\u7565\u4E0D\u8A08\u3002",
            "a": "\u8FD4\u56DE\u6578\u64DA\u96C6\u7684\u7B97\u8853\u5E73\u5747\u503C",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8A08\u7B97\u5E73\u5747\u503C\u6642\u7528\u5230\u7684\u7B2C\u4E00\u500B\u6578\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u5728\u8A08\u7B97\u5E73\u5747\u503C\u6642\u8981\u8003\u616E\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "AVERAGEA": {
            "d": "\u8FD4\u56DE\u6578\u64DA\u96C6\u7684\u7B97\u8853\u5E73\u5747\u503C\u3002",
            "a": "\u8FD4\u56DE\u6578\u64DA\u96C6\u7684\u7B97\u8853\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8A08\u7B97\u5E73\u5747\u503C\u6642\u7528\u5230\u7684\u7B2C\u4E00\u500B\u6578\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u5728\u8A08\u7B97\u5E73\u5747\u503C\u6642\u8981\u8003\u616E\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "BINOM_DIST": {
            "d": "\u8FD4\u56DE\u4E00\u5143\u4E8C\u9805\u5F0F\u5206\u4F48\u7684\u6982\u7387\u3002",
            "a": "\u8FD4\u56DE\u4E00\u5143\u4E8C\u9805\u5F0F\u5206\u4F48\u7684\u6982\u7387\u3002",
            "p": [
              {
                "name": "number_s",
                "detail": "\u8A66\u9A57\u7684\u6210\u529F\u6B21\u6578\u3002"
              },
              {
                "name": "trials",
                "detail": "\u7368\u7ACB\u6AA2\u9A57\u7684\u6B21\u6578\u3002"
              },
              {
                "name": "probability_s",
                "detail": "\u4EFB\u4E00\u7D66\u5B9A\u6AA2\u9A57\u7684\u6210\u529F\u6982\u7387\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u662F\u5426\u4F7F\u7528\u4E8C\u9805\u5F0F\u7D2F\u7A4D\u5206\u4F48\u3002"
              }
            ]
          },
          "BINOM_INV": {
            "d": "\u8A08\u7B97\u7D2F\u7A4D\u4E8C\u9805\u5F0F\u5206\u4F48\u5927\u65BC\u6216\u7B49\u65BC\u6307\u5B9A\u689D\u4EF6\u7684\u6700\u5C0F\u503C\u3002",
            "a": "\u8A08\u7B97\u7D2F\u7A4D\u4E8C\u9805\u5F0F\u5206\u4F48\u5927\u65BC\u6216\u7B49\u65BC\u6307\u5B9A\u689D\u4EF6\u7684\u6700\u5C0F\u503C\u3002",
            "p": [
              {
                "name": "trials",
                "detail": "\u8C9D\u52AA\u5229\u8A66\u9A57\u6B21\u6578\u3002"
              },
              {
                "name": "probability_s",
                "detail": "\u4EFB\u4E00\u6B21\u7D66\u5B9A\u6AA2\u9A57\u7684\u6210\u529F\u6982\u7387\u3002"
              },
              {
                "name": "alpha",
                "detail": "\u671F\u671B\u7684\u81E8\u754C\u6982\u7387\u3002"
              }
            ]
          },
          "CONFIDENCE_NORM": {
            "d": "\u8A08\u7B97\u5E38\u6001\u5206\u914D\u7684\u7F6E\u4FE1\u5340\u9593\u7684\u4E00\u534A\u5BEC\u5EA6\u3002",
            "a": "\u8A08\u7B97\u5E38\u6001\u5206\u914D\u7684\u7F6E\u4FE1\u5340\u9593\u7684\u4E00\u534A\u5BEC\u5EA6\u3002",
            "p": [
              {
                "name": "alpha",
                "detail": "\u7528\u4F86\u8A08\u7B97\u7F6E\u4FE1\u6C34\u51C6\u7684\u986F\u8457\u6027\u6C34\u51C6\u3002\n\n\u7F6E\u4FE1\u6C34\u51C6\u7B49\u65BC100*\uFF081 - alpha\uFF09%,\u4EA6\u5373,\u5982\u679C alpha \u70BA0.05,\u5247\u7F6E\u4FE1\u6C34\u51C6\u70BA 95%\u3002"
              },
              {
                "name": "standard_dev",
                "detail": "\u6578\u64DA\u5340\u57DF\u7684\u7E3D\u9AD4\u6A19\u6E96\u5DEE\u3002"
              },
              {
                "name": "size",
                "detail": "\u6A23\u672C\u7E3D\u91CF\u7684\u5927\u5C0F\u3002"
              }
            ]
          },
          "CORREL": {
            "d": "\u8A08\u7B97\u7D66\u5B9A\u6578\u64DA\u96C6\u7684\u76AE\u723E\u905C\u7A4D\u77E9\u76F8\u95DC\u4FC2\u6578 r\u3002",
            "a": "\u8A08\u7B97\u7D66\u5B9A\u6578\u64DA\u96C6\u7684\u76AE\u723E\u905C\u7A4D\u77E9\u76F8\u95DC\u4FC2\u6578 r\u3002",
            "p": [
              {
                "name": "\u6578\u64DA_y",
                "detail": "\u4EE3\u8868\u56E0\u8B8A\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "\u6578\u64DA_x",
                "detail": "\u4EE3\u8868\u5F15\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              }
            ]
          },
          "COVARIANCE_P": {
            "d": "\u8A08\u7B97\u6578\u64DA\u96C6\u7684\u7E3D\u9AD4\u5354\u65B9\u5DEE\u3002",
            "a": "\u8A08\u7B97\u6578\u64DA\u96C6\u7684\u7E3D\u9AD4\u5354\u65B9\u5DEE\u3002",
            "p": [
              {
                "name": "\u6578\u64DA_x",
                "detail": "\u4EE3\u8868\u5F15\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "\u6578\u64DA_y",
                "detail": "\u4EE3\u8868\u56E0\u8B8A\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              }
            ]
          },
          "COVARIANCE_S": {
            "d": "\u8A08\u7B97\u6578\u64DA\u96C6\u7684\u6A23\u672C\u5354\u65B9\u5DEE\u3002",
            "a": "\u8A08\u7B97\u6578\u64DA\u96C6\u7684\u6A23\u672C\u5354\u65B9\u5DEE\u3002",
            "p": [
              {
                "name": "\u6578\u64DA_x",
                "detail": "\u4EE3\u8868\u5F15\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "\u6578\u64DA_y",
                "detail": "\u4EE3\u8868\u56E0\u8B8A\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              }
            ]
          },
          "DEVSQ": {
            "d": "\u57FA\u65BC\u6A23\u672C\u8A08\u7B97\u5176\u504F\u5DEE\u7684\u5E73\u65B9\u548C\u3002",
            "a": "\u57FA\u65BC\u6A23\u672C\u8A08\u7B97\u5176\u504F\u5DEE\u7684\u5E73\u65B9\u548C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6A23\u672C\u4E2D\u7684\u7B2C\u4E00\u9805\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u6A23\u672C\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "EXPON_DIST": {
            "d": "\u8FD4\u56DE\u5E36\u6709\u6307\u5B9A Lambda \u548C\u6307\u5B9A\u503C\u7684\u6307\u6578\u5206\u4F48\u51FD\u6578\u7684\u503C\u3002",
            "a": "\u8FD4\u56DE\u5E36\u6709\u6307\u5B9A Lambda \u548C\u6307\u5B9A\u503C\u7684\u6307\u6578\u5206\u4F48\u51FD\u6578\u7684\u503C\u3002",
            "p": [
              {
                "name": "x",
                "detail": "\u6307\u6578\u5206\u4F48\u51FD\u6578\u7684\u8F38\u5165\u503C\u3002"
              },
              {
                "name": "lambda",
                "detail": "\u7528\u65BC\u6307\u5B9A\u6307\u6578\u5206\u4F48\u51FD\u6578\u7684 lambda \u503C\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u662F\u5426\u4F7F\u7528\u6307\u6578\u7D2F\u7A4D\u5206\u4F48\u3002"
              }
            ]
          },
          "AVERAGEIF": {
            "d": "\u6839\u64DA\u689D\u4EF6\u8FD4\u56DE\u7BC4\u570D\u7684\u5E73\u5747\u503C\u3002",
            "a": "\u6839\u64DA\u689D\u4EF6\u8FD4\u56DE\u7BC4\u570D\u7684\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "criteria_range",
                "detail": "\u8981\u5C0D\u5176\u6AA2\u67E5 criterion \u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "criterion",
                "detail": '\u8981\u61C9\u7528\u65BCcriteria_range\u7684\u6A21\u5F0F\u6216\u6E2C\u8A66\u689D\u4EF6\u3002\n\n\u7B49\u65BC:"\u6587\u5B57" \u6216 1 \u6216 "=\u6587\u5B57" \u6216 "=1"\n\n\u5927\u65BC:">1"\n\n\u5927\u65BC\u7B49\u65BC:">=1"\n\n\u5C0F\u65BC:"<1"\n\n\u5C0F\u65BC\u7B49\u65BC:"<=1"\n\n\u4E0D\u7B49\u65BC:"<>1"\u6216"<>\u6587\u5B57"'
              },
              {
                "name": "average_range",
                "detail": "[\u53EF\u9078] - \u8981\u8A08\u7B97\u5E73\u5747\u503C\u7684\u7BC4\u570D\u3002\u5982\u679C\u672A\u63D0\u4F9B\u6B64\u53C3\u6578,\u5247\u6539\u7528criteria_range\u4F86\u8A08\u7B97\u5E73\u5747\u503C\u3002"
              }
            ]
          },
          "AVERAGEIFS": {
            "d": "\u6839\u64DA\u591A\u9805\u689D\u4EF6\u8FD4\u56DE\u7BC4\u570D\u7684\u5E73\u5747\u503C\u3002",
            "a": "\u6839\u64DA\u591A\u9805\u689D\u4EF6\u8FD4\u56DE\u7BC4\u570D\u7684\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "average_range",
                "detail": "\u8981\u8A08\u7B97\u5E73\u5747\u503C\u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "criteria_range1",
                "detail": "\u8981\u5C0D\u5176\u6AA2\u67E5 criterion1 \u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "criterion1",
                "detail": "\u8981\u61C9\u7528\u65BCcriteria_range1\u7684\u6A21\u5F0F\u6216\u6E2C\u8A66\u689D\u4EF6\u3002"
              },
              {
                "name": "criteria_range2, criterion2, ...",
                "detail": "[\u53EF\u9078] - \u8981\u6AA2\u67E5\u7684\u5176\u4ED6\u7BC4\u570D\u548C\u689D\u4EF6\u3002"
              }
            ]
          },
          "PERMUT": {
            "d": "\u8FD4\u56DE\u53EF\u5F9E\u6578\u4F4D\u5C0D\u8C61\u4E2D\u9078\u64C7\u7684\u7D66\u5B9A\u6578\u76EE\u5C0D\u8C61\u7684\u6392\u5217\u6578\u3002",
            "a": "\u8FD4\u56DE\u53EF\u5F9E\u6578\u4F4D\u5C0D\u8C61\u4E2D\u9078\u64C7\u7684\u7D66\u5B9A\u6578\u76EE\u5C0D\u8C61\u7684\u6392\u5217\u6578\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u8868\u793A\u5C0D\u8C61\u500B\u6578\u7684\u6574\u6578\u3002"
              },
              {
                "name": "number_chosen",
                "detail": "\u8868\u793A\u6BCF\u500B\u6392\u5217\u4E2D\u5C0D\u8C61\u500B\u6578\u7684\u6574\u6578\u3002"
              }
            ]
          },
          "TRIMMEAN": {
            "d": "\u5728\u6392\u9664\u6578\u64DA\u96C6\u9AD8\u4F4E\u5169\u7AEF\u7684\u90E8\u5206\u6578\u64DA\u4E4B\u5F8C\u8A08\u7B97\u6240\u5F97\u7684\u5E73\u5747\u503C\u3002",
            "a": "\u5728\u6392\u9664\u6578\u64DA\u96C6\u9AD8\u4F4E\u5169\u7AEF\u7684\u90E8\u5206\u6578\u64DA\u4E4B\u5F8C\u8A08\u7B97\u6240\u5F97\u7684\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "\u6578\u64DA",
                "detail": "\u5305\u542B\u76F8\u95DC\u6578\u64DA\u96C6\u7684\u6578\u7D44\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u6392\u9664\u6BD4\u4F8B",
                "detail": "\u8981\u5F9E\u6578\u64DA\u96C6\u7684\u6975\u503C\u90E8\u5206\u6392\u9664\u7684\u6578\u64DA\u5360\u6578\u64DA\u96C6\u7684\u6BD4\u4F8B\u3002\n\n\u6392\u9664\u6BD4\u4F8B\u5FC5\u9808\u5927\u65BC\u7B49\u65BC0\u4E14\u5C0F\u65BC1\u3002"
              }
            ]
          },
          "PERCENTILE_EXC": {
            "d": "\u8FD4\u56DE\u6578\u7D44\u7684 K \u767E\u5206\u9EDE\u503C,K \u4ECB\u65BC0\u52301\u4E4B\u9593,\u4E0D\u542B0\u82071\u3002",
            "a": "\u8FD4\u56DE\u6578\u7D44\u7684 K \u767E\u5206\u9EDE\u503C,K \u4ECB\u65BC0\u52301\u4E4B\u9593,\u4E0D\u542B0\u82071\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u5B9A\u7FA9\u76F8\u5C0D\u4F4D\u7F6E\u7684\u6578\u7D44\u6216\u6578\u64DA\u5340\u57DF\u3002"
              },
              {
                "name": "k",
                "detail": "0 \u5230 1 \u4E4B\u9593\u7684\u767E\u5206\u9EDE\u503C,\u4E0D\u5305\u542B 0 \u548C 1\u3002"
              }
            ]
          },
          "PERCENTILE_INC": {
            "d": "\u8FD4\u56DE\u6578\u7D44\u7684 K \u767E\u5206\u9EDE\u503C,K \u4ECB\u65BC 0 \u5230 1 \u4E4B\u9593,\u5305\u542B 0 \u8207 1\u3002",
            "a": "\u8FD4\u56DE\u6578\u7D44\u7684 K \u767E\u5206\u9EDE\u503C,K \u4ECB\u65BC 0 \u5230 1 \u4E4B\u9593,\u5305\u542B 0 \u8207 1\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u5B9A\u7FA9\u76F8\u5C0D\u4F4D\u7F6E\u7684\u6578\u7D44\u6216\u6578\u64DA\u5340\u57DF\u3002"
              },
              {
                "name": "k",
                "detail": "0 \u5230 1 \u4E4B\u9593\u7684\u767E\u5206\u9EDE\u503C,\u5305\u542B 0 \u548C 1\u3002"
              }
            ]
          },
          "PEARSON": {
            "d": "\u56DE\u76AE\u723E\u751F\uFF08Pearson\uFF09\u4E58\u7A4D\u77E9\u76F8\u95DC\u4FC2\u6578 r\u3002",
            "a": "\u56DE\u76AE\u723E\u751F\uFF08Pearson\uFF09\u4E58\u7A4D\u77E9\u76F8\u95DC\u4FC2\u6578 r\u3002",
            "p": [
              {
                "name": "\u6578\u64DA_x",
                "detail": "\u4EE3\u8868\u5F15\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "\u6578\u64DA_y",
                "detail": "\u4EE3\u8868\u56E0\u8B8A\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              }
            ]
          },
          "NORM_S_INV": {
            "d": "\u8FD4\u56DE\u6A19\u6E96\u6B63\u614B\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578\u7684\u53CD\u51FD\u6578\u503C\u3002\u8A72\u5206\u4F48\u7684\u5E73\u5747\u503C\u70BA0,\u6A19\u6E96\u5DEE\u70BA1\u3002",
            "a": "\u8FD4\u56DE\u6A19\u6E96\u6B63\u614B\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578\u7684\u53CD\u51FD\u6578\u503C\u3002\u8A72\u5206\u4F48\u7684\u5E73\u5747\u503C\u70BA0,\u6A19\u6E96\u5DEE\u70BA1\u3002",
            "p": [
              {
                "name": "probability",
                "detail": "\u5C0D\u61C9\u65BC\u5E38\u6001\u5206\u914D\u7684\u6982\u7387\u3002"
              }
            ]
          },
          "NORM_S_DIST": {
            "d": "\u8FD4\u56DE\u6A19\u6E96\u5E38\u6001\u5206\u914D\u51FD\u6578\uFF08\u8A72\u5206\u4F48\u7684\u5E73\u5747\u503C\u70BA0,\u6A19\u6E96\u5DEE\u70BA1\uFF09\u3002",
            "a": "\u8FD4\u56DE\u6A19\u6E96\u5E38\u6001\u5206\u914D\u51FD\u6578\uFF08\u8A72\u5206\u4F48\u7684\u5E73\u5747\u503C\u70BA0,\u6A19\u6E96\u5DEE\u70BA1\uFF09\u3002",
            "p": [
              {
                "name": "z",
                "detail": "\u9700\u8981\u8A08\u7B97\u5176\u5206\u4F48\u7684\u6578\u503C\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u51B3\u5B9A\u51FD\u6578\u5F62\u5F0F\u7684\u908F\u8F2F\u503C\u3002\n\n\u5982\u679C\u70BATRUE\uFF08\uFF09,\u5247\u8FD4\u56DE\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578\uFF1B\n\n\u5982\u679C\u70BAFALSE\uFF08\uFF09,\u5247\u8FD4\u56DE\u6982\u7387\u5BC6\u5EA6\u51FD\u6578\u3002"
              }
            ]
          },
          "NORM_INV": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u5E73\u5747\u503C\u548C\u6A19\u6E96\u5DEE\u7684\u6B63\u614B\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578\u7684\u53CD\u51FD\u6578\u503C\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u5E73\u5747\u503C\u548C\u6A19\u6E96\u5DEE\u7684\u6B63\u614B\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578\u7684\u53CD\u51FD\u6578\u503C\u3002",
            "p": [
              {
                "name": "probability",
                "detail": "\u5C0D\u61C9\u65BC\u5E38\u6001\u5206\u914D\u7684\u6982\u7387\u3002"
              },
              {
                "name": "mean",
                "detail": "\u5206\u4F48\u7684\u7B97\u8853\u5E73\u5747\u503C\u3002"
              },
              {
                "name": "standard_dev",
                "detail": "\u5206\u4F48\u7684\u6A19\u6E96\u5DEE\u3002"
              }
            ]
          },
          "NORM_DIST": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u5E73\u5747\u503C\u548C\u6A19\u6E96\u5DEE\u7684\u5E38\u6001\u5206\u914D\u51FD\u6578\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u5E73\u5747\u503C\u548C\u6A19\u6E96\u5DEE\u7684\u5E38\u6001\u5206\u914D\u51FD\u6578\u3002",
            "p": [
              {
                "name": "x",
                "detail": "\u9700\u8981\u8A08\u7B97\u5176\u5206\u4F48\u7684\u6578\u503C\u3002"
              },
              {
                "name": "mean",
                "detail": "\u5206\u4F48\u7684\u7B97\u8853\u5E73\u5747\u503C\u3002"
              },
              {
                "name": "standard_dev",
                "detail": "\u5206\u4F48\u7684\u6A19\u6E96\u5DEE\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u51B3\u5B9A\u51FD\u6578\u5F62\u5F0F\u7684\u908F\u8F2F\u503C\u3002\n\n\u5982\u679C\u70BATRUE\uFF08\uFF09,\u5247\u8FD4\u56DE\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578\uFF1B\n\n\u5982\u679C\u70BAFALSE\uFF08\uFF09,\u5247\u8FD4\u56DE\u6982\u7387\u5BC6\u5EA6\u51FD\u6578\u3002"
              }
            ]
          },
          "NEGBINOM_DIST": {
            "d": "\u8FD4\u56DE\u8CA0\u4E8C\u9805\u5F0F\u5206\u4F48\u3002",
            "a": "\u8FD4\u56DE\u8CA0\u4E8C\u9805\u5F0F\u5206\u4F48\u3002",
            "p": [
              {
                "name": "number_f",
                "detail": "\u8981\u985E\u6BD4\u7684\u5931\u6557\u6B21\u6578\u3002"
              },
              {
                "name": "number_s",
                "detail": "\u8981\u985E\u6BD4\u7684\u6210\u529F\u6B21\u6578\u3002"
              },
              {
                "name": "probability_s",
                "detail": "\u4EFB\u4E00\u6B21\u7D66\u5B9A\u6AA2\u9A57\u7684\u6210\u529F\u6982\u7387\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u51B3\u5B9A\u51FD\u6578\u5F62\u5F0F\u7684\u908F\u8F2F\u503C\u3002\n\n\u5982\u679C\u70BATRUE\uFF08\uFF09,\u5247\u8FD4\u56DE\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578\uFF1B\n\n\u5982\u679C\u70BAFALSE\uFF08\uFF09,\u5247\u8FD4\u56DE\u6982\u7387\u5BC6\u5EA6\u51FD\u6578\u3002"
              }
            ]
          },
          "MINA": {
            "d": "\u8FD4\u56DE\u6578\u64DA\u96C6\u4E2D\u7684\u6700\u5C0F\u6578\u503C\u3002",
            "a": "\u8FD4\u56DE\u6578\u64DA\u96C6\u4E2D\u7684\u6700\u5C0F\u6578\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8A08\u7B97\u6700\u5C0F\u503C\u6642\u6240\u7528\u7684\u7B2C\u4E00\u500B\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9078] - \u5728\u8A08\u7B97\u6700\u5C0F\u503C\u6642\u8981\u8003\u616E\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "MIN": {
            "d": "\u8FD4\u56DE\u6578\u503C\u6578\u64DA\u96C6\u4E2D\u7684\u6700\u5C0F\u503C\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u6578\u64DA\u96C6\u4E2D\u7684\u6700\u5C0F\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8A08\u7B97\u6700\u5C0F\u503C\u6642\u6240\u7528\u7684\u7B2C\u4E00\u500B\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9078] - \u5728\u8A08\u7B97\u6700\u5C0F\u503C\u6642\u8981\u8003\u616E\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "MEDIAN": {
            "d": "\u8FD4\u56DE\u6578\u503C\u6578\u64DA\u96C6\u4E2D\u7684\u4E2D\u503C\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u6578\u64DA\u96C6\u4E2D\u7684\u4E2D\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8A08\u7B97\u4E2D\u503C\u6642\u6240\u7528\u7684\u7B2C\u4E00\u500B\u6578\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9078] - \u5728\u8A08\u7B97\u4E2D\u503C\u6642\u8981\u8003\u616E\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "MAXA": {
            "d": "\u8FD4\u56DE\u6578\u64DA\u96C6\u4E2D\u7684\u6700\u5927\u6578\u503C\u3002",
            "a": "\u8FD4\u56DE\u6578\u64DA\u96C6\u4E2D\u7684\u6700\u5927\u6578\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8A08\u7B97\u6700\u5927\u503C\u6642\u6240\u7528\u7684\u7B2C\u4E00\u500B\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u5728\u8A08\u7B97\u6700\u5927\u503C\u6642\u8981\u8003\u616E\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "MAX": {
            "d": "\u8FD4\u56DE\u6578\u503C\u6578\u64DA\u96C6\u4E2D\u7684\u6700\u5927\u503C\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u6578\u64DA\u96C6\u4E2D\u7684\u6700\u5927\u503C\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u8A08\u7B97\u6700\u5927\u503C\u6642\u6240\u7528\u7684\u7B2C\u4E00\u500B\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2",
                "detail": "[\u53EF\u9078] - \u5728\u8A08\u7B97\u6700\u5927\u503C\u6642\u8981\u8003\u616E\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "LOGNORM_INV": {
            "d": "\u8FD4\u56DE x \u7684\u5C0D\u6578\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578\u7684\u53CD\u51FD\u6578\u503C\u3002",
            "a": "\u8FD4\u56DE x \u7684\u5C0D\u6578\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578\u7684\u53CD\u51FD\u6578\u503C\u3002",
            "p": [
              {
                "name": "probability",
                "detail": "\u8207\u5C0D\u6578\u5206\u4F48\u76F8\u95DC\u7684\u6982\u7387,\u4ECB\u65BC0\u82071\u4E4B\u9593\uFF08\u4E0D\u542B0\u82071\uFF09\u3002"
              },
              {
                "name": "mean",
                "detail": "ln(x) \u7684\u5E73\u5747\u503C\u3002"
              },
              {
                "name": "standard_dev",
                "detail": "ln(x) \u7684\u6A19\u6E96\u5DEE,\u6B63\u6578\u3002"
              }
            ]
          },
          "LOGNORM_DIST": {
            "d": "\u8FD4\u56DE x \u7684\u5C0D\u6578\u5206\u4F48\u51FD\u6578\u3002",
            "a": "\u8FD4\u56DE x \u7684\u5C0D\u6578\u5206\u4F48\u51FD\u6578\u3002",
            "p": [
              {
                "name": "x",
                "detail": "\u7528\u4F86\u8A08\u7B97\u51FD\u6578\u7684\u503C\u3002"
              },
              {
                "name": "mean",
                "detail": "ln(x) \u7684\u5E73\u5747\u503C\u3002"
              },
              {
                "name": "standard_dev",
                "detail": "ln(x) \u7684\u6A19\u6E96\u5DEE,\u6B63\u6578\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u51B3\u5B9A\u51FD\u6578\u5F62\u5F0F\u7684\u908F\u8F2F\u503C\u3002\n\n\u5982\u679C\u70BATRUE\uFF08\uFF09,\u5247\u8FD4\u56DE\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578\uFF1B\n\n\u5982\u679C\u70BAFALSE\uFF08\uFF09,\u5247\u8FD4\u56DE\u6982\u7387\u5BC6\u5EA6\u51FD\u6578\u3002"
              }
            ]
          },
          "Z_TEST": {
            "d": "\u8FD4\u56DE z \u6AA2\u9A57\u7684\u55AE\u5C3E P \u503C\u3002",
            "a": "\u8FD4\u56DE z \u6AA2\u9A57\u7684\u55AE\u5C3E P \u503C\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u7528\u4F86\u6AA2\u9A57 x \u7684\u6578\u7D44\u6216\u6578\u64DA\u5340\u57DF\u3002"
              },
              {
                "name": "x",
                "detail": "\u8981\u6E2C\u8A66\u7684\u503C\u3002"
              },
              {
                "name": "sigma",
                "detail": "[\u53EF\u9078] - \u7E3D\u9AD4\uFF08\u5DF2\u77E5\uFF09\u6A19\u6E96\u5DEE\u3002\u5982\u679C\u7701\u7565,\u5247\u4F7F\u7528\u6A23\u672C\u6A19\u6E96\u5DEE\u3002"
              }
            ]
          },
          "PROB": {
            "d": "\u8FD4\u56DE\u5340\u57DF\u4E2D\u7684\u6578\u503C\u843D\u5728\u6307\u5B9A\u5340\u9593\u5167\u7684\u6982\u7387\u3002",
            "a": "\u8FD4\u56DE\u5340\u57DF\u4E2D\u7684\u6578\u503C\u843D\u5728\u6307\u5B9A\u5340\u9593\u5167\u7684\u6982\u7387\u3002",
            "p": [
              {
                "name": "x_range",
                "detail": "\u5177\u6709\u5404\u81EA\u76F8\u61C9\u6982\u7387\u503C\u7684 x \u6578\u503C\u5340\u57DF\u3002"
              },
              {
                "name": "prob_range",
                "detail": "\u8207 x_range \u4E2D\u7684\u503C\u76F8\u95DC\u806F\u7684\u4E00\u7D44\u6982\u7387\u503C\u3002"
              },
              {
                "name": "lower_limit",
                "detail": "\u8981\u8A08\u7B97\u5176\u6982\u7387\u7684\u6578\u503C\u4E0B\u754C\u3002"
              },
              {
                "name": "upper_limit",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA\u4E0B\u754C] - \u8981\u8A08\u7B97\u5176\u6982\u7387\u7684\u53EF\u9078\u6578\u503C\u4E0A\u754C\u3002\n\n\u5982\u679C\u7701\u7565\u4E0A\u754C,PROB\u5247\u8A08\u7B97\u96A8\u6A5F\u9078\u53D6\u76F8\u61C9\u503C\u7684\u6B21\u6578\u6070\u597D\u7B49\u65BC\u4E0B\u754C\u7684\u6982\u7387\u3002"
              }
            ]
          },
          "QUARTILE_EXC": {
            "d": "\u57FA\u65BC 0 \u5230 1 \u4E4B\u9593\uFF08\u4E0D\u5305\u62EC 0 \u548C 1\uFF09\u7684\u767E\u5206\u9EDE\u503C\u8FD4\u56DE\u6578\u64DA\u96C6\u7684\u56DB\u5206\u4F4D\u6578\u3002",
            "a": "\u57FA\u65BC 0 \u5230 1 \u4E4B\u9593\uFF08\u4E0D\u5305\u62EC 0 \u548C 1\uFF09\u7684\u767E\u5206\u9EDE\u503C\u8FD4\u56DE\u6578\u64DA\u96C6\u7684\u56DB\u5206\u4F4D\u6578\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u8981\u6C42\u5F97\u56DB\u5206\u4F4D\u6578\u503C\u7684\u6578\u7D44\u6216\u6578\u5B57\u578B\u5132\u5B58\u683C\u5340\u57DF\u3002"
              },
              {
                "name": "quart",
                "detail": "\u8981\u8FD4\u56DE\u7B2C\u5E7E\u500B\u56DB\u5206\u4F4D\u503C\u3002\n\n1\u8FD4\u56DE\u6578\u64DA\u4E2D\u6700\u9760\u8FD1\u7B2C\u4E00\u500B\u56DB\u5206\u4F4D\u503C\u7684\u503C\uFF0825%\u6A19\u8A18\uFF09\u3002\n\n2\u8FD4\u56DE\u6578\u64DA\u4E2D\u6700\u63A5\u8FD1\u4E2D\u503C\u7684\u503C\uFF0850%\u6A19\u8A18\uFF09\u3002\n\n3\u8FD4\u56DE\u6578\u64DA\u4E2D\u6700\u63A5\u8FD1\u7B2C\u4E09\u500B\u56DB\u5206\u4F4D\u503C\u7684\u503C\uFF0875%\u6A19\u8A18\uFF09\u3002"
              }
            ]
          },
          "QUARTILE_INC": {
            "d": "\u6839\u64DA 0 \u5230 1 \u4E4B\u9593\u7684\u767E\u5206\u9EDE\u503C\uFF08\u5305\u542B 0 \u548C 1\uFF09\u8FD4\u56DE\u6578\u64DA\u96C6\u7684\u56DB\u5206\u4F4D\u6578\u3002",
            "a": "\u6839\u64DA 0 \u5230 1 \u4E4B\u9593\u7684\u767E\u5206\u9EDE\u503C\uFF08\u5305\u542B 0 \u548C 1\uFF09\u8FD4\u56DE\u6578\u64DA\u96C6\u7684\u56DB\u5206\u4F4D\u6578\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u8981\u6C42\u5F97\u56DB\u5206\u4F4D\u6578\u503C\u7684\u6578\u7D44\u6216\u6578\u5B57\u578B\u5132\u5B58\u683C\u5340\u57DF\u3002"
              },
              {
                "name": "quart",
                "detail": "\u8981\u8FD4\u56DE\u7B2C\u5E7E\u500B\u56DB\u5206\u4F4D\u503C\u3002\n\n0\u8FD4\u56DE\u6578\u64DA\u4E2D\u7684\u6700\u5C0F\u503C\uFF080%\u6A19\u8A18\uFF09\u3002\n\n1\u8FD4\u56DE\u6578\u64DA\u4E2D\u6700\u9760\u8FD1\u7B2C\u4E00\u500B\u56DB\u5206\u4F4D\u503C\u7684\u503C\uFF0825%\u6A19\u8A18\uFF09\u3002\n\n2\u8FD4\u56DE\u6578\u64DA\u4E2D\u6700\u63A5\u8FD1\u4E2D\u503C\u7684\u503C\uFF0850%\u6A19\u8A18\uFF09\u3002\n\n3\u8FD4\u56DE\u6578\u64DA\u4E2D\u6700\u63A5\u8FD1\u7B2C\u4E09\u500B\u56DB\u5206\u4F4D\u503C\u7684\u503C\uFF0875%\u6A19\u8A18\uFF09\u3002\n\n4\u8FD4\u56DE\u6578\u64DA\u4E2D\u7684\u6700\u5927\u503C\uFF08100%\u6A19\u8A18\uFF09\u3002"
              }
            ]
          },
          "POISSON_DIST": {
            "d": "\u8FD4\u56DE\u6CCA\u677E\u5206\u5E03\u3002",
            "a": "\u8FD4\u56DE\u6CCA\u677E\u5206\u5E03\u3002",
            "p": [
              {
                "name": "x",
                "detail": "\u4E8B\u4EF6\u6578\u3002"
              },
              {
                "name": "mean",
                "detail": "\u671F\u671B\u503C\u3002\u975E\u8CA0\u6578"
              },
              {
                "name": "cumulative",
                "detail": "\u4E00 \u908F\u8F2F\u503C,\u78BA\u5B9A\u6240\u8FD4\u56DE\u7684\u6982\u7387\u5206\u4F48\u7684\u5F62\u5F0F\u3002\n\n\u5982\u679C\u70BATRUE\uFF08\uFF09,\u5247\u8FD4\u56DE\u767C\u751F\u7684\u96A8\u6A5F\u4E8B\u4EF6\u6578\u5728\u96F6\uFF08\u542B\u96F6\uFF09\u548Cx\uFF08\u542Bx\uFF09\u4E4B\u9593\u7684\u7D2F\u7A4D\u6CCA\u677E\u6982\u7387\uFF1B\n\n\u5982\u679C\u70BAFALSE\uFF08\uFF09,\u5247\u8FD4\u56DE\u767C\u751F\u7684\u4E8B\u4EF6\u6578\u6B63\u597D\u662Fx\u7684\u6CCA\u677E\u6982\u7387\u5BC6\u5EA6\u51FD\u6578\u3002"
              }
            ]
          },
          "RSQ": {
            "d": "\u8FD4\u56DE\u76AE\u723E\u751F(Pearson)\u4E58\u7A4D\u77E9\u76F8\u95DC\u4FC2\u6578r\u7684\u5E73\u65B9\u3002",
            "a": "\u8FD4\u56DE\u76AE\u723E\u751F(Pearson)\u4E58\u7A4D\u77E9\u76F8\u95DC\u4FC2\u6578r\u7684\u5E73\u65B9\u3002",
            "p": [
              {
                "name": "\u6578\u64DA_y",
                "detail": "\u4EE3\u8868\u56E0\u8B8A\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "\u6578\u64DA_x",
                "detail": "\u4EE3\u8868\u5F15\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              }
            ]
          },
          "T_DIST": {
            "d": "\u8FD4\u56DE\u5B78\u751F\u7684\u5DE6\u5C3E t \u5206\u4F48\u3002",
            "a": "\u8FD4\u56DE\u5B78\u751F\u7684\u5DE6\u5C3E t \u5206\u4F48\u3002",
            "p": [
              {
                "name": "x",
                "detail": "T-\u5206\u4F48\u51FD\u6578\u7684\u8F38\u5165\u3002"
              },
              {
                "name": "degrees_freedom",
                "detail": "\u81EA\u7531\u5EA6\u6578\u503C\u3002"
              },
              {
                "name": "tails",
                "detail": "\u51B3\u5B9A\u51FD\u6578\u5F62\u5F0F\u7684\u908F\u8F2F\u503C\u3002\n\n\u5982\u679Ccumulative\u70BATRUE\uFF08\uFF09,\u5247HYPGEOM.DIST\u8FD4\u56DE\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578\uFF1B\n\n\u5982\u679C\u70BAFALSE\uFF08\uFF09,\u5247\u8FD4\u56DE\u6982\u7387\u5BC6\u5EA6\u51FD\u6578\u3002"
              }
            ]
          },
          "T_DIST_2T": {
            "d": "\u8FD4\u56DE\u5B78\u751F\u7684\u96D9\u5C3E t \u5206\u4F48\u3002",
            "a": "\u8FD4\u56DE\u5B78\u751F\u7684\u96D9\u5C3E t \u5206\u4F48\u3002",
            "p": [
              {
                "name": "x",
                "detail": "T-\u5206\u4F48\u51FD\u6578\u7684\u8F38\u5165\u3002"
              },
              {
                "name": "degrees_freedom",
                "detail": "\u81EA\u7531\u5EA6\u6578\u503C\u3002"
              }
            ]
          },
          "T_DIST_RT": {
            "d": "\u8FD4\u56DE\u5B78\u751F\u7684\u53F3\u5C3E t \u5206\u4F48\u3002",
            "a": "\u8FD4\u56DE\u5B78\u751F\u7684\u53F3\u5C3E t \u5206\u4F48\u3002",
            "p": [
              {
                "name": "x",
                "detail": "T-\u5206\u4F48\u51FD\u6578\u7684\u8F38\u5165\u3002"
              },
              {
                "name": "degrees_freedom",
                "detail": "\u81EA\u7531\u5EA6\u6578\u503C\u3002"
              }
            ]
          },
          "T_INV": {
            "d": "\u8FD4\u56DE\u5B78\u751F\u7684 t \u5206\u4F48\u7684\u5DE6\u5C3E\u53CD\u51FD\u6578\u3002",
            "a": "\u8FD4\u56DE\u5B78\u751F\u7684 t \u5206\u4F48\u7684\u5DE6\u5C3E\u53CD\u51FD\u6578\u3002",
            "p": [
              {
                "name": "probability",
                "detail": "\u8207\u5B78\u751F\u7684 t \u5206\u4F48\u76F8\u95DC\u7684\u6982\u7387\u3002\n\n\u5FC5\u9808\u5927\u65BC 0 \u4E14\u5C0F\u65BC 1\u3002"
              },
              {
                "name": "deg_freedom",
                "detail": "\u81EA\u7531\u5EA6\u6578\u503C\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u53C3\u6578\u4E0D\u662F\u6574\u6578,\u5C07\u622A\u53D6\u5176\u6574\u6578\u90E8\u5206\u3002\n\n\u5FC5\u9808\u5927\u65BC\u7B49\u65BC1\u3002"
              }
            ]
          },
          "T_INV_2T": {
            "d": "\u8FD4\u56DE\u5B78\u751F t \u5206\u4F48\u7684\u96D9\u5C3E\u53CD\u51FD\u6578\u3002",
            "a": "\u8FD4\u56DE\u5B78\u751F t \u5206\u4F48\u7684\u96D9\u5C3E\u53CD\u51FD\u6578\u3002",
            "p": [
              {
                "name": "probability",
                "detail": "\u8207\u5B78\u751F\u7684t\u5206\u4F48\u76F8\u95DC\u7684\u6982\u7387\u3002\n\n\u5FC5\u9808\u5927\u65BC 0 \u4E14\u5C0F\u65BC 1\u3002"
              },
              {
                "name": "deg_freedom",
                "detail": "\u81EA\u7531\u5EA6\u6578\u503C\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u53C3\u6578\u4E0D\u662F\u6574\u6578,\u5C07\u622A\u53D6\u5176\u6574\u6578\u90E8\u5206\u3002\n\n\u5FC5\u9808\u5927\u65BC\u7B49\u65BC1\u3002"
              }
            ]
          },
          "T_TEST": {
            "d": "\u8FD4\u56DE\u8207t-\u6AA2\u9A57\u76F8\u95DC\u7684\u6982\u7387\u3002\u7528\u65BC\u5224\u65B7\u5169\u500B\u6A23\u672C\u662F\u5426\u53EF\u80FD\u662F\u51FA\u81EA\u5E73\u5747\u503C\u76F8\u540C\u7684\u5169\u500B\u6A23\u672C\u7E3D\u9AD4\u3002",
            "a": "\u8FD4\u56DE\u8207t-\u6AA2\u9A57\u76F8\u95DC\u7684\u6982\u7387\u3002\u7528\u65BC\u5224\u65B7\u5169\u500B\u6A23\u672C\u662F\u5426\u53EF\u80FD\u662F\u51FA\u81EA\u5E73\u5747\u503C\u76F8\u540C\u7684\u5169\u500B\u6A23\u672C\u7E3D\u9AD4\u3002",
            "p": [
              {
                "name": "array1",
                "detail": "\u5C07\u7528\u65BCt\u6AA2\u9A57\u7684\u7B2C\u4E00\u500B\u6578\u64DA\u6A23\u672C\u6216\u7B2C\u4E00\u7D44\u5132\u5B58\u683C\u3002"
              },
              {
                "name": "array2",
                "detail": "\u5C07\u7528\u65BCt\u6AA2\u9A57\u7684\u7B2C\u4E8C\u500B\u6578\u64DA\u6A23\u672C\u6216\u7B2C\u4E8C\u7D44\u5132\u5B58\u683C\u3002"
              },
              {
                "name": "tails",
                "detail": "\u6307\u5B9A\u5206\u4F48\u7684\u5C3E\u6578\u3002\n\n\u5982\u679C\u70BA 1:\u4F7F\u7528\u55AE\u5C3E\u5206\u4F48\u3002\n\n\u5982\u679C\u70BA 2:\u4F7F\u7528\u96D9\u5C3E\u5206\u4F48\u3002"
              },
              {
                "name": "type",
                "detail": "\u6307\u5B9At\u6AA2\u9A57\u7684\u985E\u578B\u3002\n\n\u5982\u679C\u70BA 1:\u57F7\u884C\u914D\u5C0D\u6AA2\u9A57\u3002\n\n\u5982\u679C\u70BA 2:\u57F7\u884C\u96D9\u6A23\u672C\u7B49\u65B9\u5DEE\uFF08\u540C\u65B9\u5DEE\uFF09\u6AA2\u9A57\u3002\n\n\u5982\u679C\u70BA 3:\u57F7\u884C\u96D9\u6A23\u672C\u4E0D\u7B49\u65B9\u5DEE\uFF08\u5F02\u65B9\u5DEE\uFF09\u6AA2\u9A57\u3002"
              }
            ]
          },
          "F_DIST": {
            "d": "\u7D66\u5B9A\u8F38\u5165\u503C x,\u8A08\u7B97\u5169\u500B\u6578\u64DA\u96C6\u7684\u5DE6\u5C3E F \u6982\u7387\u5206\u4F48\uFF08\u5DEE\u5F02\u7A0B\u5EA6\uFF09\u3002\u6B64\u5206\u4F48\u4E5F\u7A31\u70BA Fisher-Snedecor \u5206\u4F48\u6216Snedecor F \u5206\u4F48\u3002",
            "a": "\u7D66\u5B9A\u8F38\u5165\u503C x",
            "p": [
              {
                "name": "x",
                "detail": "\u7528\u4F86\u8A08\u7B97\u51FD\u6578\u7684\u503C\u3002"
              },
              {
                "name": "degrees_freedom1",
                "detail": "\u5206\u5B50\u81EA\u7531\u5EA6\u3002"
              },
              {
                "name": "degrees_freedom2",
                "detail": "\u5206\u6BCD\u81EA\u7531\u5EA6\u3002"
              },
              {
                "name": "cumulative",
                "detail": "\u7528\u65BC\u78BA\u5B9A\u51FD\u6578\u5F62\u5F0F\u7684\u908F\u8F2F\u503C\u3002\u9810\u8A2D\u503C\u70BA FALSE\u3002\n\n\u5982\u679C\u70BA TRUE\uFF08\uFF09:F.DIST\u5C07\u8FD4\u56DE\u7D2F\u7A4D\u5206\u4F48\u51FD\u6578\u503C\u3002\n\n\u5982\u679C\u70BAFALSE\uFF08\uFF09:F.DIST\u5C07\u8FD4\u56DE\u6982\u7387\u5BC6\u5EA6\u51FD\u6578\u503C\u3002"
              }
            ]
          },
          "F_DIST_RT": {
            "d": "\u7D66\u5B9A\u8F38\u5165x,\u8A08\u7B97\u5169\u500B\u6578\u64DA\u96C6\u7684\u53F3\u5C3EF\u6982\u7387\u5206\u4F48\uFF08\u5DEE\u5F02\u7A0B\u5EA6\uFF09\u3002\u6B64\u5206\u4F48\u4E5F\u7A31\u70BAFisher-Snedecor\u5206\u4F48\u6216Snedecor F\u5206\u4F48\u3002",
            "a": "\u7D66\u5B9A\u8F38\u5165 x",
            "p": [
              {
                "name": "x",
                "detail": "\u7528\u4F86\u8A08\u7B97\u51FD\u6578\u7684\u503C\u3002"
              },
              {
                "name": "degrees_freedom1",
                "detail": "\u5206\u5B50\u81EA\u7531\u5EA6\u3002"
              },
              {
                "name": "degrees_freedom2",
                "detail": "\u5206\u6BCD\u81EA\u7531\u5EA6\u3002"
              }
            ]
          },
          "VAR_P": {
            "d": "\u57FA\u65BC\u6A23\u672C\u7E3D\u9AD4\u8A08\u7B97\u65B9\u5DEE\u3002",
            "a": "\u57FA\u65BC\u6A23\u672C\u7E3D\u9AD4\u8A08\u7B97\u65B9\u5DEE\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6578\u64DA\u96C6\u4E2D\u7684\u7B2C\u4E00\u500B\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, \u2026",
                "detail": "[\u53EF\u9078] - \u6578\u64DA\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "VAR_S": {
            "d": "\u57FA\u65BC\u6A23\u672C\u8A08\u7B97\u65B9\u5DEE\u3002",
            "a": "\u57FA\u65BC\u6A23\u672C\u8A08\u7B97\u65B9\u5DEE\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6A23\u672C\u4E2D\u7684\u7B2C\u4E00\u9805\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, \u2026",
                "detail": "[\u53EF\u9078] - \u6A23\u672C\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "VARA": {
            "d": "\u57FA\u4E8E\u6837\u672C\u8BA1\u7B97\u65B9\u5DEE,\u5C06\u6587\u672C\u53D6\u503C\u4E3A0\u3002",
            "a": "\u57FA\u4E8E\u6837\u672C\u8BA1\u7B97\u65B9\u5DEE",
            "p": [
              {
                "name": "value1",
                "detail": "\u6A23\u672C\u4E2D\u7684\u7B2C\u4E00\u9805\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "value2, ...",
                "detail": "[\u53EF\u9078] - \u6A23\u672C\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "VARPA": {
            "d": "\u57FA\u65BC\u6A23\u672C\u7E3D\u9AD4\u8A08\u7B97\u65B9\u5DEE,\u5C07\u6587\u5B57\u53D6\u503C\u70BA0\u3002",
            "a": "\u57FA\u65BC\u6A23\u672C\u7E3D\u9AD4\u8A08\u7B97\u65B9\u5DEE",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6A23\u672C\u4E2D\u7684\u7B2C\u4E00\u9805\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u6578\u64DA\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u6578\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "STEYX": {
            "d": "\u8FD4\u56DE\u901A\u904E\u7DDA\u6027\u56DE\u6B78\u6CD5\u9810\u6E2C\u6BCF\u500B x \u7684 y \u503C\u6642\u6240\u7522\u751F\u7684\u6A19\u6E96\u8AA4\u5DEE\u3002",
            "a": "\u8FD4\u56DE\u901A\u904E\u7DDA\u6027\u56DE\u6B78\u6CD5\u9810\u6E2C\u6BCF\u500B x \u7684 y \u503C\u6642\u6240\u7522\u751F\u7684\u6A19\u6E96\u8AA4\u5DEE\u3002",
            "p": [
              {
                "name": "\u6578\u64DA_y",
                "detail": "\u4EE3\u8868\u56E0\u8B8A\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "\u6578\u64DA_x",
                "detail": "\u4EE3\u8868\u5F15\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              }
            ]
          },
          "STANDARDIZE": {
            "d": "\u7D66\u5B9A\u5206\u4F48\u7684\u5E73\u5747\u503C\u548C\u6A19\u6E96\u5DEE,\u8A08\u7B97\u4E00\u500B\u96A8\u6A5F\u8B8A\u6578\u6B63\u614B\u5316\u7684\u76F8\u61C9\u503C\u3002",
            "a": "\u7D66\u5B9A\u5206\u4F48\u7684\u5E73\u5747\u503C\u548C\u6A19\u6E96\u5DEE,\u8A08\u7B97\u4E00\u500B\u96A8\u6A5F\u8B8A\u6578\u6B63\u614B\u5316\u7684\u76F8\u61C9\u503C\u3002",
            "p": [
              {
                "name": "x",
                "detail": "\u8981\u6B63\u614B\u5316\u7684\u96A8\u6A5F\u8B8A\u6578\u503C\u3002"
              },
              {
                "name": "mean",
                "detail": "\u5206\u4F48\u7684\u5E73\u5747\u503C\u3002"
              },
              {
                "name": "standard_dev",
                "detail": "\u5206\u4F48\u7684\u6A19\u6E96\u5DEE\u3002"
              }
            ]
          },
          "SMALL": {
            "d": "\u8FD4\u56DE\u6578\u64DA\u96C6\u4E2D\u7684\u7B2Ck\u500B\u6700\u5C0F\u503C\u3002",
            "a": "\u8FD4\u56DE\u6578\u64DA\u96C6\u4E2D\u7684\u7B2Ck\u500B\u6700\u5C0F\u503C\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u9700\u8981\u627E\u5230\u7B2Ck\u500B\u6700\u5C0F\u503C\u7684\u6578\u7D44\u6216\u6578\u503C\u6578\u64DA\u5340\u57DF\u3002"
              },
              {
                "name": "k",
                "detail": "\u8981\u8FD4\u56DE\u7684\u6578\u64DA\u5728\u6578\u7D44\u6216\u6578\u64DA\u5340\u57DF\u88CF\u7684\u4F4D\u7F6E\uFF08\u5F9E\u5C0F\u5230\u5927\uFF09\u3002"
              }
            ]
          },
          "SLOPE": {
            "d": "\u8A08\u7B97\u901A\u904E\u6578\u64DA\u96C6\u7684\u7DDA\u6027\u56DE\u6B78\u5F97\u5230\u7684\u76F4\u7DDA\u7684\u659C\u7387\u3002",
            "a": "\u8A08\u7B97\u901A\u904E\u6578\u64DA\u96C6\u7684\u7DDA\u6027\u56DE\u6B78\u5F97\u5230\u7684\u76F4\u7DDA\u7684\u659C\u7387\u3002",
            "p": [
              {
                "name": "\u6578\u64DA_y",
                "detail": "\u4EE3\u8868\u56E0\u8B8A\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              },
              {
                "name": "\u6578\u64DA_x",
                "detail": "\u4EE3\u8868\u5F15\u6578\u6578\u64DA\u6578\u7D44\u6216\u77E9\u9663\u7684\u7BC4\u570D\u3002"
              }
            ]
          },
          "SKEW": {
            "d": "\u8FD4\u56DE\u5206\u4F48\u7684\u504F\u659C\u5EA6\u3002\u504F\u659C\u5EA6\u8868\u660E\u5206\u4F48\u76F8\u5C0D\u65BC\u5E73\u5747\u503C\u7684\u4E0D\u5C0D\u7A31\u7A0B\u5EA6\u3002\u6B63\u504F\u659C\u5EA6\u8868\u660E\u5206\u4F48\u7684\u4E0D\u5C0D\u7A31\u5C3E\u90E8\u8DA8\u5411\u65BC\u66F4\u591A\u6B63\u503C\u3002\u8CA0\u504F\u659C\u5EA6\u8868\u660E\u5206\u4F48\u7684\u4E0D\u5C0D\u7A31\u5C3E\u90E8\u8DA8\u5411\u65BC\u66F4\u591A\u8CA0\u503C\u3002",
            "a": "\u8FD4\u56DE\u5206\u4F48\u7684\u504F\u659C\u5EA6\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6578\u64DA\u96C6\u4E2D\u7684\u7B2C\u4E00\u500B\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u6578\u64DA\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "SKEW_P": {
            "d": "\u8FD4\u56DE\u57FA\u65BC\u6A23\u672C\u7E3D\u9AD4\u7684\u5206\u4F48\u4E0D\u5C0D\u7A31\u5EA6:\u8868\u660E\u5206\u4F48\u76F8\u5C0D\u65BC\u5E73\u5747\u503C\u7684\u4E0D\u5C0D\u7A31\u7A0B\u5EA6\u3002",
            "a": "\u8FD4\u56DE\u57FA\u65BC\u6A23\u672C\u7E3D\u9AD4\u7684\u5206\u4F48\u4E0D\u5C0D\u7A31\u5EA6:\u8868\u660E\u5206\u4F48\u76F8\u5C0D\u65BC\u5E73\u5747\u503C\u7684\u4E0D\u5C0D\u7A31\u7A0B\u5EA6\u3002",
            "p": [
              {
                "name": "\u503C1",
                "detail": "\u6578\u64DA\u96C6\u4E2D\u7684\u7B2C\u4E00\u500B\u503C\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u503C2, ...",
                "detail": "[\u53EF\u9078] - \u6578\u64DA\u96C6\u4E2D\u5305\u542B\u7684\u5176\u4ED6\u503C\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "VLOOKUP": {
            "d": "\u7E31\u5411\u67E5\u627E\u3002\u5728\u7BC4\u570D\u7684\u7B2C\u4E00\u5217\u4E2D\u81EA\u4E0A\u800C\u4E0B\u8490\u7D22\u67D0\u500B\u9375\u503C,\u4E26\u8FD4\u56DE\u6240\u627E\u5230\u7684\u884C\u4E2D\u6307\u5B9A\u5132\u5B58\u683C\u7684\u503C\u3002",
            "a": "\u7E31\u5411\u67E5\u627E\u3002\u5728\u7BC4\u570D\u7684\u7B2C\u4E00\u5217\u4E2D\u81EA\u4E0A\u800C\u4E0B\u8490\u7D22\u67D0\u500B\u9375\u503C",
            "p": [
              {
                "name": "\u8490\u7D22\u9375\u503C",
                "detail": '\u8981\u8490\u7D22\u7684\u503C,\u5982 42\u3001"Cats" \u6216 I24\u3002'
              },
              {
                "name": "\u7BC4\u570D",
                "detail": "\u8981\u9032\u884C\u8490\u7D22\u7684\u7BC4\u570D\u3002VLOOKUP \u5C07\u5728\u8A72\u7BC4\u570D\u7684\u7B2C\u4E00\u5217\u4E2D\u8490\u7D22\u8490\u7D22\u9375\u503C\u4E2D\u6307\u5B9A\u7684\u9375\u503C\u3002"
              },
              {
                "name": "\u7D22\u5F15",
                "detail": "\u8981\u8FD4\u56DE\u7684\u503C\u7684\u5217\u7D22\u5F15,\u7BC4\u570D\u4E2D\u7684\u7B2C\u4E00\u5217\u7DE8\u865F\u70BA1\u3002\n\n\u5982\u679C\u7D22\u5F15\u4E0D\u662F\u4ECB\u65BC1\u548C\u7BC4\u570D\u4E2D\u7684\u5217\u6578\u4E4B\u9593,\u5C07\u8FD4\u56DE#VALUE\uFF01\u3002"
              },
              {
                "name": "\u5DF2\u6392\u5E8F",
                "detail": "[\u9810\u8A2D\u503C\u70BATRUE()] -\u8A13\u793A\u8981\u8490\u7D22\u7684\u5217\uFF08\u6307\u5B9A\u7BC4\u570D\u7684\u7B2C\u4E00\u5217\uFF09\u662F\u5426\u5DF2\u6392\u5E8F\u3002\u5927\u591A\u6578\u60C5\u51B5\u4E0B,\u5EFA\u8B70\u8A2D\u70BAFALSE\uFF08\uFF09\u3002\n\n\u5EFA\u8B70\u5C07\u5DF2\u6392\u5E8F\u8A2D\u70BAFALSE\u3002\u5982\u679C\u8A2D\u70BAFALSE,\u5C07\u8FD4\u56DE\u5B8C\u5168\u5339\u914D\u9805\u3002\u5982\u679C\u5B58\u5728\u591A\u500B\u5339\u914D\u503C,\u5C07\u8FD4\u56DE\u627E\u5230\u7684\u7B2C\u4E00\u500B\u503C\u5C0D\u61C9\u7684\u5132\u5B58\u683C\u7684\u5167\u5BB9,\u5982\u679C\u627E\u4E0D\u5230\u5339\u914D\u503C,\u5247\u8FD4\u56DE#N/A\u3002\n\n\u5982\u679C\u5C07\u5DF2\u6392\u5E8F\u8A2D\u70BATRUE\u6216\u7701\u7565,\u5C07\u8FD4\u56DE\uFF08\u5C0F\u65BC\u6216\u7B49\u65BC\u8490\u7D22\u9375\u503C\u7684\uFF09\u6700\u63A5\u8FD1\u7684\u5339\u914D\u9805\u3002\u5982\u679C\u8490\u7D22\u7684\u5217\u4E2D\u6240\u6709\u7684\u503C\u5747\u5927\u65BC\u8490\u7D22\u9375\u503C,\u5247\u8FD4\u56DE#N/A\u3002"
              }
            ]
          },
          "HLOOKUP": {
            "d": "\u6A6B\u5411\u67E5\u627E\u3002\u5728\u7BC4\u570D\u7684\u7B2C\u4E00\u884C\u4E2D\u8490\u7D22\u67D0\u500B\u9375\u503C,\u4E26\u8FD4\u56DE\u6240\u627E\u5230\u7684\u5217\u4E2D\u6307\u5B9A\u5132\u5B58\u683C\u7684\u503C\u3002",
            "a": "\u6A6B\u5411\u67E5\u627E\u3002\u5728\u7BC4\u570D\u7684\u7B2C\u4E00\u884C\u4E2D\u8490\u7D22\u67D0\u500B\u9375\u503C",
            "p": [
              {
                "name": "\u8490\u7D22\u9375\u503C",
                "detail": '\u8981\u8490\u7D22\u7684\u503C\u3002\u4F8B\u5982,42\u3001"Cats"\u6216I24\u3002'
              },
              {
                "name": "\u7BC4\u570D",
                "detail": "\u8981\u9032\u884C\u8490\u7D22\u7684\u7BC4\u570D\u3002\u5C07\u5728\u8A72\u7BC4\u570D\u7684\u7B2C\u4E00\u884C\u4E2D\u8490\u7D22\u5728\u8490\u7D22\u9375\u503C\u4E2D\u6307\u5B9A\u7684\u9375\u503C\u3002"
              },
              {
                "name": "\u7D22\u5F15",
                "detail": "\u8981\u8FD4\u56DE\u7684\u503C\u7684\u884C\u7D22\u5F15,\u7BC4\u570D\u4E2D\u7684\u7B2C\u4E00\u884C\u7DE8\u865F\u70BA1\u3002\n\n\u5982\u679C\u7D22\u5F15\u4E0D\u662F\u4ECB\u65BC1\u548C\u7BC4\u570D\u4E2D\u7684\u884C\u6578\u4E4B\u9593,\u5C07\u8FD4\u56DE#VALUE\uFF01\u3002"
              },
              {
                "name": "\u5DF2\u6392\u5E8F",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BATRUE()] - \u8A13\u793A\u8981\u8490\u7D22\u7684\u884C\uFF08\u6307\u5B9A\u7BC4\u570D\u7684\u7B2C\u4E00\u884C\uFF09\u662F\u5426\u5DF2\u6392\u5E8F\u3002\n\n\u5982\u679C\u5C07\u5DF2\u6392\u5E8F\u8A2D\u70BATRUE\u6216\u7701\u7565,\u5C07\u8FD4\u56DE\u6700\u63A5\u8FD1\u7684\u5339\u914D\u503C\uFF08\u5C0F\u65BC\u6216\u7B49\u65BC\u8490\u7D22\u9375\u503C\uFF09\u3002\u5982\u679C\u5728\u8490\u7D22\u7684\u884C\u4E2D\u6240\u6709\u7684\u503C\u5747\u5927\u65BC\u8490\u7D22\u9375\u503C,\u5247\u8FD4\u56DE#N/A\u3002\n\n\u5982\u679C\u5C07\u5DF2\u6392\u5E8F\u8A2D\u70BATRUE\u6216\u5C07\u5176\u7701\u7565,\u800C\u7BC4\u570D\u7684\u9996\u884C\u4E26\u975E\u8655\u65BC\u5DF2\u6392\u5E8F\u72C0\u614B,\u5247\u8FD4\u56DE\u503C\u53EF\u80FD\u6703\u662F\u932F\u8AA4\u7684\u3002\n\n\u5982\u679C\u5C07\u5DF2\u6392\u5E8F\u8A2D\u70BAFALSE,\u5247\u50C5\u8FD4\u56DE\u5B8C\u5168\u5339\u914D\u3002\u5982\u679C\u5B58\u5728\u591A\u500B\u5339\u914D\u503C,\u5C07\u8FD4\u56DE\u8207\u627E\u5230\u7684\u7B2C\u4E00\u500B\u503C\u5C0D\u61C9\u7684\u5132\u5B58\u683C\u7684\u5167\u5BB9,\u5982\u679C\u627E\u4E0D\u5230\u5339\u914D\u503C\u5247\u8FD4\u56DE#N/A\u3002"
              }
            ]
          },
          "LOOKUP": {
            "d": "\u5728\u884C\u6216\u5217\u4E2D\u67E5\u627E\u76F8\u61C9\u9375,\u4E26\u5C07\u76F8\u61C9\u5132\u5B58\u683C\u7684\u503C\u8FD4\u56DE\u5230\u8207\u8490\u7D22\u884C\u6216\u5217\u6240\u5728\u4F4D\u7F6E\u76F8\u540C\u7684\u7D50\u679C\u7BC4\u570D\u4E2D\u3002",
            "a": "\u5728\u884C\u6216\u5217\u4E2D\u67E5\u627E\u76F8\u61C9\u9375",
            "p": [
              {
                "name": "\u8490\u7D22\u9375\u503C",
                "detail": '\u8981\u5728\u884C\u6216\u5217\u4E2D\u8490\u7D22\u7684\u503C\u3002\u4F8B\u5982,42\u3001"Cats" \u6216 I24\u3002'
              },
              {
                "name": "\u641C\u7D22\u7BC4\u570D | \u641C\u7D22\u7D50\u679C\u6578\u7D44",
                "detail": "\u4F7F\u7528LOOKUP\u7684\u4E00\u7A2E\u65B9\u6CD5\u662F\u7D66\u5B9A\u55AE\u884C\u6216\u55AE\u5217\u5F62\u5F0F\u7684\u641C\u7D22\u7BC4\u570D\u9032\u884C\u8490\u7D22\u67E5\u627E,\u9019\u7A2E\u7BA1\u9053\u8981\u7528\u5230\u53E6\u4E00\u500B\u53C3\u6578\u7D50\u679C\u7BC4\u570D\u3002\u53E6\u4E00\u7A2E\u7BA1\u9053\u662F\u5C07\u9019\u5169\u500B\u53C3\u6578\u5408\u4F75\u70BA\u4E00\u500B\u641C\u7D22\u7D50\u679C\u6578\u7D44,\u5176\u4E2D\u7B2C\u4E00\u884C\u6216\u7B2C\u4E00\u5217\u7528\u65BC\u8490\u7D22,\u4E26\u5C07\u8FD4\u56DE\u503C\u653E\u5728\u8A72\u6578\u7D44\u7684\u6700\u5F8C\u4E00\u884C\u6216\u6700\u5F8C\u4E00\u5217\u4E2D\u3002"
              },
              {
                "name": "\u7D50\u679C\u7BC4\u570D",
                "detail": "[ \u53EF\u9078 ] - \u7528\u65BC\u5B58\u653E\u8FD4\u56DE\u7D50\u679C\u7684\u7BC4\u570D\u3002\u8FD4\u56DE\u503C\u5C0D\u61C9\u65BC\u5728\u641C\u7D22\u7BC4\u570D\u4E2D\u627E\u5230\u8490\u7D22\u9375\u503C\u7684\u4F4D\u7F6E\u3002\u6B64\u7BC4\u570D\u5FC5\u9808\u50C5\u70BA\u55AE\u884C\u6216\u55AE\u5217,\u800C\u5982\u679C\u60A8\u4F7F\u7528\u7684\u662F\u641C\u7D22\u7D50\u679C\u6578\u7D44\u7BA1\u9053,\u5247\u4E0D\u61C9\u63D0\u4F9B\u6B64\u53C3\u6578\u3002"
              }
            ]
          },
          "ADDRESS": {
            "d": "\u8FD4\u56DE\u5B57\u4E32\u5F62\u5F0F\u7684\u5132\u5B58\u683C\u5F15\u7528\u3002",
            "a": "\u8FD4\u56DE\u5B57\u4E32\u5F62\u5F0F\u7684\u5132\u5B58\u683C\u5F15\u7528\u3002",
            "p": [
              {
                "name": "row_num",
                "detail": "\u4E00\u500B\u6578\u503C,\u6307\u5B9A\u8981\u5728\u5132\u5B58\u683C\u5F15\u7528\u4E2D\u4F7F\u7528\u7684\u884C\u865F\u3002"
              },
              {
                "name": "column_num",
                "detail": "\u4E00\u500B\u6578\u503C,\u6307\u5B9A\u8981\u5728\u5132\u5B58\u683C\u5F15\u7528\u4E2D\u4F7F\u7528\u7684\u5217\u865F\uFF08\u800C\u975E\u540D\u7A31\uFF09\u3002A\u5217\u7684\u7DE8\u865F\u70BA1\u3002"
              },
              {
                "name": "abs_num",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA1] - \u4E00\u500B\u6578\u503C,\u6307\u5B9A\u8981\u8FD4\u56DE\u7684\u53C3\u8003\u985E\u578B\u3002\n\n1\u8868\u793A\u884C\u5217\u5747\u63A1\u7528\u7D55\u5C0D\u503C\uFF08\u4F8B\u5982$A$1\uFF09\uFF1B\n\n2\u8868\u793A\u63A1\u7528\u7D55\u5C0D\u884C\u865F,\u76F8\u5C0D\u5217\u6A19\uFF08\u4F8B\u5982A$1\uFF09\uFF1B\n\n3\u8868\u793A\u63A1\u7528\u76F8\u5C0D\u884C\u865F,\u7D55\u5C0D\u5217\u6A19\uFF08\u4F8B\u5982$A1\uFF09\uFF1B\n\n4\u8868\u793A\u884C\u5217\u5747\u63A1\u7528\u76F8\u5C0D\u503C\uFF08\u4F8B\u5982A1\uFF09\u3002"
              },
              {
                "name": "A1",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BATRUE\uFF08\uFF09] - \u4E00\u500B\u5E03\u6797\u503C,\u8A13\u793A\u63A1\u7528A1\u6A19\u8A18\u5F62\u5F0F\uFF08TRUE\uFF09\u9084\u662FR1C1\u6A19\u8A18\u5F62\u5F0F\uFF08FALSE\uFF09\u3002"
              },
              {
                "name": "sheet_text",
                "detail": "[\u53EF\u9078 - \u9ED8\u8A8D\u9810\u8A2D] - \u7528\u65BC\u6307\u5B9A\u5730\u5740\u6240\u6307\u5411\u7684\u5DE5\u4F5C\u8868\u540D\u7A31\u3002"
              }
            ]
          },
          "INDIRECT": {
            "d": "\u8FD4\u56DE\u4EE5\u5B57\u4E32\u6307\u5B9A\u7684\u5132\u5B58\u683C\u5F15\u7528\u3002",
            "a": "\u8FD4\u56DE\u4EE5\u5B57\u4E32\u6307\u5B9A\u7684\u5132\u5B58\u683C\u5F15\u7528\u3002",
            "p": [
              {
                "name": "ref_text",
                "detail": "\u4EE5\u5E36\u5F15\u865F\u7684\u5B57\u4E32\u5F62\u5F0F\u63D0\u4F9B\u7684\u5132\u5B58\u683C\u5F15\u7528\u3002"
              },
              {
                "name": "A1",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BATRUE\uFF08\uFF09] - \u4E00\u500B\u5E03\u6797\u503C,\u8A13\u793A\u63A1\u7528A1\u6A19\u8A18\u5F62\u5F0F\uFF08TRUE\uFF09\u9084\u662FR1C1\u6A19\u8A18\u5F62\u5F0F\uFF08FALSE\uFF09\u3002"
              }
            ]
          },
          "ROW": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u5132\u5B58\u683C\u7684\u884C\u865F",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u5132\u5B58\u683C\u7684\u884C\u865F",
            "p": [
              {
                "name": "reference",
                "detail": "[\u53EF\u9078 - \u9ED8\u8A8D\u70BA\u6B64\u516C\u5F0F\u6240\u5728\u7684\u5132\u5B58\u683C] - \u8981\u8FD4\u56DE\u5176\u884C\u865F\u7684\u5132\u5B58\u683C\u3002\n\n\u5982\u679C\u5132\u5B58\u683C\u5F15\u7528\u6307\u5411\u7684\u7BC4\u570D\u5176\u5BEC\u5EA6\u5927\u65BC\u4E00\u500B\u5132\u5B58\u683C,\u800C\u6B64\u516C\u5F0F\u4E0D\u662F\u7528\u4F5C\u6578\u7D44\u516C\u5F0F\u7684,\u9019\u6642\u6703\u50C5\u8FD4\u56DE\u5132\u5B58\u683C\u5F15\u7528\u4E2D\u9996\u884C\u7684\u7DE8\u865F\u503C\u3002"
              }
            ]
          },
          "ROWS": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u6578\u7D44\u6216\u7BC4\u570D\u4E2D\u7684\u884C\u6578\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u6578\u7D44\u6216\u7BC4\u570D\u4E2D\u7684\u884C\u6578\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u8981\u8FD4\u56DE\u5176\u884C\u6578\u7684\u7BC4\u570D\u3002"
              }
            ]
          },
          "COLUMN": {
            "d": "\u6309\u7167 `A=1` \u7684\u898F\u5247\u8FD4\u56DE\u6307\u5B9A\u5132\u5B58\u683C\u7684\u5217\u865F\u3002",
            "a": "\u6309\u7167 `A=1` \u7684\u898F\u5247\u8FD4\u56DE\u6307\u5B9A\u5132\u5B58\u683C\u7684\u5217\u865F\u3002",
            "p": [
              {
                "name": "reference",
                "detail": "[\u53EF\u9078 - \u9ED8\u8A8D\u70BA\u5305\u542B\u6B64\u516C\u5F0F\u7684\u5132\u5B58\u683C] - \u8981\u8FD4\u56DE\u5176\u5217\u865F\u7684\u5132\u5B58\u683C\u3002A\u5217\u5C0D\u61C9\u7684\u7DE8\u865F\u70BA1\u3002\n\n\u5982\u679C\u5132\u5B58\u683C\u5F15\u7528\u662F\u5BEC\u5EA6\u8D85\u904E\u4E00\u500B\u5132\u5B58\u683C\u7684\u7BC4\u570D,\u800C\u6B64\u516C\u5F0F\u4E0D\u662F\u4F5C\u70BA\u6578\u7D44\u516C\u5F0F\u4F86\u4F7F\u7528\u7684,\u56D9\u6B64\u5C07\u8FD4\u56DE\u5132\u5B58\u683C\u5F15\u7528\u4E2D\u7684\u7B2C\u4E00\u5217\u7684\u4F4D\u7F6E\u3002"
              }
            ]
          },
          "COLUMNS": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u6578\u7D44\u6216\u7BC4\u570D\u4E2D\u7684\u5217\u6578\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u6578\u7D44\u6216\u7BC4\u570D\u4E2D\u7684\u5217\u6578\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u8981\u8FD4\u56DE\u5176\u5217\u6578\u7684\u7BC4\u570D\u3002"
              }
            ]
          },
          "OFFSET": {
            "d": "\u7D66\u5B9A\u67D0\u7BC4\u570D\u7684\u8D77\u59CB\u5132\u5B58\u683C\u5F15\u7528\u4EE5\u53CA\u8A72\u7BC4\u570D\u6DB5\u84CB\u7684\u884C\u5217\u6578\u91CF,\u8FD4\u56DE\u8A72\u7BC4\u570D\u7684\u5F15\u7528\u3002",
            "a": "\u7D66\u5B9A\u67D0\u7BC4\u570D\u7684\u8D77\u59CB\u5132\u5B58\u683C\u5F15\u7528\u4EE5\u53CA\u8A72\u7BC4\u570D\u6DB5\u84CB\u7684\u884C\u5217\u6578\u91CF,\u8FD4\u56DE\u8A72\u7BC4\u570D\u7684\u5F15\u7528\u3002",
            "p": [
              {
                "name": "reference",
                "detail": "\u7528\u65BC\u8A08\u7B97\u884C\u5217\u504F\u79FB\u91CF\u7684\u8D77\u9EDE\u3002"
              },
              {
                "name": "rows",
                "detail": "\u8981\u504F\u79FB\u7684\u884C\u6578\u3002\n\n\u884C\u504F\u79FB\u91CF\u5FC5\u9808\u662F\u6574\u6578,\u4F46\u4E5F\u53EF\u4EE5\u662F\u8CA0\u6578\u3002\u5982\u679C\u63D0\u4F9B\u7684\u53C3\u6578\u5E36\u6709\u5C0F\u6578,\u5C0F\u6578\u90E8\u5206\u5C07\u88AB\u622A\u53BB\u3002"
              },
              {
                "name": "cols",
                "detail": "\u8981\u504F\u79FB\u7684\u5217\u6578\u3002\n\n\u5217\u504F\u79FB\u91CF\u5FC5\u9808\u662F\u6574\u6578,\u4F46\u4E5F\u53EF\u4EE5\u662F\u8CA0\u6578\u3002\u5982\u679C\u63D0\u4F9B\u7684\u53C3\u6578\u5E36\u6709\u5C0F\u6578,\u5C0F\u6578\u90E8\u5206\u5C07\u88AB\u622A\u53BB\u3002"
              },
              {
                "name": "height",
                "detail": "[\u53EF\u9078] - \u8981\u5F9E\u504F\u79FB\u76EE\u6A19\u958B\u59CB\u8FD4\u56DE\u7684\u7BC4\u570D\u7684\u9AD8\u5EA6\u3002"
              },
              {
                "name": "width",
                "detail": "[\u53EF\u9078] - \u8981\u5F9E\u504F\u79FB\u76EE\u6A19\u958B\u59CB\u8FD4\u56DE\u7684\u7BC4\u570D\u7684\u5BEC\u5EA6\u3002"
              }
            ]
          },
          "MATCH": {
            "d": "\u5728\u5132\u5B58\u683C\u4E2D\u8490\u7D22\u6307\u5B9A\u9805,\u7136\u5F8C\u8FD4\u56DE\u8A72\u9805\u5728\u5132\u5B58\u683C\u5340\u57DF\u4E2D\u7684\u76F8\u5C0D\u4F4D\u7F6E\u3002",
            "a": "\u5728\u5132\u5B58\u683C\u4E2D\u8490\u7D22\u6307\u5B9A\u9805,\u7136\u5F8C\u8FD4\u56DE\u8A72\u9805\u5728\u5132\u5B58\u683C\u5340\u57DF\u4E2D\u7684\u76F8\u5C0D\u4F4D\u7F6E\u3002",
            "p": [
              {
                "name": "lookup_value",
                "detail": "\u8981\u5728 lookup_array \u4E2D\u5339\u914D\u7684\u503C\u3002"
              },
              {
                "name": "lookup_array",
                "detail": "\u8981\u8490\u7D22\u7684\u5132\u5B58\u683C\u5340\u57DF\u3002\n\n\u5982\u679C\u6240\u7528\u7684\u7BC4\u570D\u7684\u9AD8\u5EA6\u548C\u5BEC\u5EA6\u5747\u5927\u65BC1,MATCH\u5C07\u8FD4\u56DE#N/A\uFF01\u3002"
              },
              {
                "name": "match_type",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA1] - \u8981\u63A1\u7528\u7684\u8490\u7D22\u7BA1\u9053\u3002\n\n1\u70BA\u9ED8\u8A8D\u985E\u578B,\u6B64\u6642MATCH\u6703\u5047\u8A2D\u7BC4\u570D\u5DF2\u6309\u6607\u51AA\u6392\u5E8F,\u4E26\u8FD4\u56DE\u5C0F\u65BC\u7B49\u65BC\u8490\u7D22\u9375\u503C\u7684\u6700\u5927\u503C\u3002\n\n0\u8868\u793A\u5B8C\u5168\u5339\u914D,\u5728\u7BC4\u570D\u672A\u6392\u5E8F\u7684\u60C5\u51B5\u4E0B\u9700\u8981\u4F7F\u7528\u6B64\u7BA1\u9053\u3002\n\n-1\u8B93MATCH\u5047\u8A2D\u7BC4\u570D\u662F\u6309\u964D\u5E8F\u6392\u5E8F\u7684,\u4E26\u8FD4\u56DE\u5927\u65BC\u7B49\u65BC\u8490\u7D22\u9375\u503C\u7684\u6700\u5C0F\u503C\u3002"
              }
            ]
          },
          "INDEX": {
            "d": "\u8FD4\u56DE\u8868\u683C\u6216\u4E2D\u7684\u5143\u7D20\u503C,\u6B64\u5143\u7D20\u7531\u884C\u865F\u548C\u5217\u865F\u7684\u7D22\u5F15\u503C\u7D66\u5B9A\u3002",
            "a": "\u8FD4\u56DE\u8868\u683C\u6216\u4E2D\u7684\u5143\u7D20\u503C,\u6B64\u5143\u7D20\u7531\u884C\u865F\u548C\u5217\u865F\u7684\u7D22\u5F15\u503C\u7D66\u5B9A\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u5132\u5B58\u683C\u5340\u57DF\u6216\u6578\u7D44\u5E38\u6578\u3002"
              },
              {
                "name": "row_num",
                "detail": "\u9078\u64C7\u6578\u7D44\u4E2D\u7684\u67D0\u884C,\u51FD\u6578\u5F9E\u8A72\u884C\u8FD4\u56DE\u6578\u503C\u3002"
              },
              {
                "name": "column_num",
                "detail": "\u9078\u64C7\u6578\u7D44\u4E2D\u7684\u67D0\u5217,\u51FD\u6578\u5F9E\u8A72\u5217\u8FD4\u56DE\u6578\u503C\u3002"
              }
            ]
          },
          "GETPIVOTDATA": {
            "d": "\u5F9E\u8207\u6307\u5B9A\u884C\u548C\u5217\u6A19\u984C\u5C0D\u61C9\u7684\u6578\u64DA\u900F\u8996\u9336\u4E2D\u9078\u53D6\u532F\u7E3D\u503C\u3002",
            "a": "\u5F9E\u8207\u6307\u5B9A\u884C\u548C\u5217\u6A19\u984C\u5C0D\u61C9\u7684\u6578\u64DA\u900F\u8996\u9336\u4E2D\u9078\u53D6\u532F\u7E3D\u503C\u3002",
            "p": [
              {
                "name": "data_field",
                "detail": '\u60A8\u60F3\u5F9E\u6578\u64DA\u900F\u8996\u9336\u4E2D\u7372\u53D6\u5176\u6578\u64DA\u7684\u503C\u540D\u7A31\u3002\n\u503C\u540D\u7A31\u5FC5\u9808\u62EC\u5728\u5F15\u865F\u4E2D\u6216\u662F\u6307\u5411\u5305\u542B\u76F8\u95DC\u6587\u5B57\u7684\u4EFB\u4F55\u5132\u5B58\u683C\u7684\u5F15\u7528\u3002\n\u5982\u679C\u6709\u591A\u500B\u503C\u6B04\u4F4D,\u5247\u5FC5\u9808\u4F7F\u7528\u6578\u64DA\u900F\u8996\u9336\u4E2D\u986F\u793A\u7684\u78BA\u5207\u540D\u7A31\uFF08\u5982"\u92B7\u552E\u7E3D\u984D"\uFF09\u3002'
              },
              {
                "name": "pivot_table",
                "detail": "\u76EE\u6A19\u6578\u64DA\u900F\u8996\u9336\u4E2D\u7684\u4EFB\u4F55\u5132\u5B58\u683C\u7684\u5F15\u7528\uFF08\u63A8\u85A6\u4F4D\u65BC\u9802\u89D2\u7684\u5132\u5B58\u683C\uFF09\u3002"
              },
              {
                "name": "field1",
                "detail": "[\u53EF\u9078] - \u6E90\u6578\u64DA\u96C6\uFF08\u4E0D\u662F\u6578\u64DA\u900F\u8996\u9336\uFF09\u4E2D\u5217\u7684\u540D\u7A31\u3002"
              },
              {
                "name": "item1",
                "detail": "[\u53EF\u9078] - \u6578\u64DA\u900F\u8996\u9336\u4E2D\u986F\u793A\u7684\u8207\u60A8\u8981\u6AA2\u7D22\u7684\u6B04\u4F4D\u540D\u7A311\u76F8\u5C0D\u61C9\u7684\u884C\u6216\u5217\u7684\u540D\u7A31\u3002"
              }
            ]
          },
          "CHOOSE": {
            "d": "\u57FA\u65BC\u7D22\u5F15\u8FD4\u56DE\u9078\u9805\u6E05\u55AE\u4E2D\u7684\u5143\u7D20\u3002",
            "a": "\u57FA\u65BC\u7D22\u5F15\u8FD4\u56DE\u9078\u9805\u6E05\u55AE\u4E2D\u7684\u5143\u7D20\u3002",
            "p": [
              {
                "name": "index_num",
                "detail": "\u6307\u5B9A\u8981\u8FD4\u56DE\u54EA\u4E00\u9805\u3002\n\n\u5982\u679C\u7D22\u5F15\u70BA\u96F6\u3001\u8CA0\u503C\u6216\u5927\u65BC\u63D0\u4F9B\u7684\u9078\u64C7\u6578\u91CF,\u5C07\u8FD4\u56DE#VALUE\uFF01\u932F\u8AA4\u3002"
              },
              {
                "name": "value1",
                "detail": "\u4E00\u9805\u53EF\u80FD\u7684\u8FD4\u56DE\u503C\u3002\u5FC5\u9808\u63D0\u4F9B\u3002\u53EF\u4EE5\u662F\u5132\u5B58\u683C\u5F15\u7528\u6216\u55AE\u7368\u7684\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "[\u53EF\u9078] - \u5176\u4ED6\u53EF\u4EE5\u9078\u64C7\u7684\u503C\u3002\u9078\u64C7"
              }
            ]
          },
          "HYPERLINK": {
            "d": "\u5728\u5132\u5B58\u683C\u5167\u5275\u5EFA\u4E00\u500B\u8D85\u9023\u7D50\u3002",
            "a": "\u5728\u5132\u5B58\u683C\u5167\u5275\u5EFA\u4E00\u500B\u8D85\u9023\u7D50\u3002",
            "p": [
              {
                "name": "\u7DB2\u5740",
                "detail": "\u4EE5\u5F15\u865F\u62EC\u4F4F\u7684\u9023\u7D50\u4F4D\u7F6E\u7684\u5B8C\u6574\u7DB2\u5740,\u6216\u5C0D\u5305\u542B\u9019\u7A2E\u7DB2\u5740\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3002\n\n\u50C5\u5141\u8A31\u67D0\u4E9B\u9023\u7D50\u985E\u578B\u3002\u5176\u4E2D\u5305\u62EC:http://\u3001https://\u3001mailto:\u3001aim:\u3001ftp://\u3001gopher://\u3001telnet://\u548Cnews://,\u660E\u78BA\u7981\u7528\u4F7F\u7528\u5176\u4ED6\u5354\u5B9A\u3002\u5982\u679C\u6307\u5B9A\u7684\u662F\u5176\u4ED6\u5354\u5B9A,\u5C07\u6703\u5728\u5132\u5B58\u683C\u4E2D\u986F\u793A\u9023\u7D50\u6A19\u7C64,\u4F46\u8A72\u6A19\u7C64\u4E0D\u6703\u4EE5\u9023\u7D50\u5F62\u5F0F\u5448\u73FE\u3002\n\n\u5982\u679C\u672A\u6307\u5B9A\u5354\u5B9A,\u5247\u5047\u8A2D\u4F7F\u7528http://,\u4E26\u5C07\u5176\u4F5C\u70BA\u7DB2\u5740\u7684\u9996\u78BC\u3002"
              },
              {
                "name": "\u9023\u7D50\u6A19\u7C64",
                "detail": '[\u53EF\u9078-\u9ED8\u8A8D\u70BA\u7DB2\u5740] - \u8981\u5728\u5132\u5B58\u683C\u4E2D\u4F5C\u70BA\u9023\u7D50\u986F\u793A\u7684\u6587\u5B57\uFF08\u7528\u5F15\u865F\u62EC\u8D77\u4F86\u7684\uFF09,\u6216\u8005\u6307\u5411\u5305\u542B\u9019\u7A2E\u6A19\u7C64\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3002\n\n\u5982\u679C\u9023\u7D50\u6A19\u7C64\u662F\u6307\u5411\u67D0\u500B\u7A7A\u5132\u5B58\u683C\u7684\u5F15\u7528,\u5982\u679C\u7DB2\u5740\u6709\u6548,\u5C31\u5C07\u5176\u4F5C\u70BA\u9023\u7D50\u986F\u793A,\u5426\u5247\u4F5C\u70BA\u7D14\u6587\u5B57\u986F\u793A\u3002\n\n\u5982\u679C\u9023\u7D50\u6A19\u7C64\u70BA\u7A7A\u5B57\u4E32\u5E38\u6578\uFF08""\uFF09,\u6240\u5728\u5132\u5B58\u683C\u986F\u793A\u7684\u5167\u5BB9\u5C07\u70BA\u7A7A\u767D,\u4F46\u901A\u904E\u9EDE\u64CA\u8A72\u5132\u5B58\u683C\u6216\u8F49\u5165\u8A72\u5132\u5B58\u683C\u4ECD\u7136\u53EF\u4EE5\u8A2A\u554F\u9023\u7D50\u3002'
              }
            ]
          },
          "TIME": {
            "d": "\u5C07\u7D66\u5B9A\u7684\u5C0F\u6642\u3001\u5206\u9418\u548C\u79D2\u8F49\u63DB\u70BA\u6642\u9593\u3002",
            "a": "\u5C07\u7D66\u5B9A\u7684\u5C0F\u6642\u3001\u5206\u9418\u548C\u79D2\u8F49\u63DB\u70BA\u6642\u9593\u3002",
            "p": [
              {
                "name": "\u5C0F\u6642",
                "detail": "0\uFF08\u96F6\uFF09\u5230 32767 \u4E4B\u9593\u7684\u6578\u4F4D,\u4EE3\u8868\u5C0F\u6642\u3002\n\n\u4EFB\u4F55\u5927\u65BC 23 \u7684\u503C\u90FD\u6703\u9664\u4EE524,\u9918\u6578\u5C07\u4F5C\u70BA\u5C0F\u6642\u503C\u3002"
              },
              {
                "name": "\u5206\u9418",
                "detail": "0\uFF08\u96F6\uFF09\u5230 32767 \u4E4B\u9593\u7684\u6578\u4F4D,\u4EE3\u8868\u5206\u9418\u3002\n\n\u4EFB\u4F55\u5927\u65BC 59 \u7684\u503C\u5C07\u8F49\u63DB\u70BA\u5C0F\u6642\u548C\u5206\u9418\u3002"
              },
              {
                "name": "\u79D2",
                "detail": "0\uFF08\u96F6\uFF09\u5230 32767 \u4E4B\u9593\u7684\u6578\u4F4D,\u4EE3\u8868\u79D2\u3002\n\n\u4EFB\u4F55\u5927\u65BC 59 \u7684\u503C\u5C07\u8F49\u63DB\u70BA\u5C0F\u6642\u3001\u5206\u9418\u548C\u79D2\u3002"
              }
            ]
          },
          "TIMEVALUE": {
            "d": "\u6309\u4E00\u592924\u5C0F\u6642\u8FD4\u56DE\u8A72\u6642\u9593\u7684\u5206\u6578\u8868\u793A\u3002",
            "a": "\u6309\u4E00\u592924\u5C0F\u6642\u8FD4\u56DE\u8A72\u6642\u9593\u7684\u5206\u6578\u8868\u793A\u3002",
            "p": [
              {
                "name": "time_text",
                "detail": "\u7528\u65BC\u8868\u793A\u6642\u9593\u7684\u5B57\u4E32\u3002"
              }
            ]
          },
          "EOMONTH": {
            "d": "\u8FD4\u56DE\u67D0\u500B\u6708\u4EFD\u6700\u5F8C\u4E00\u5929\u7684\u5E8F\u865F,\u8A72\u6708\u4EFD\u5728\u53E6\u4E00\u500B\u65E5\u671F\u4E4B\u524D\u6216\u4E4B\u5F8C\u7684\u6578\u500B\u6708\uFF08\u6708\u6578\u7531\u53C3\u6578\u6307\u5B9A\uFF09\u3002",
            "a": "\u8FD4\u56DE\u67D0\u500B\u6708\u4EFD\u6700\u5F8C\u4E00\u5929\u7684\u5E8F\u865F",
            "p": [
              {
                "name": "start_date",
                "detail": "\u7528\u65BC\u8A08\u7B97\u7D50\u679C\u7684\u53C3\u7167\u65E5\u671F\u3002"
              },
              {
                "name": "months",
                "detail": "\u7528\u65BC\u8A08\u7B97\u7684\u8D77\u59CB\u65E5\u671F\u4E4B\u524D\uFF08\u8CA0\uFF09\u6216\u4E4B\u5F8C\uFF08\u6B63\uFF09\u7684\u6708\u6578\u3002\u8FD4\u56DE\u7684\u662F\u8A08\u7B97\u6240\u5F97\u6708\u4EFD\u7684\u6700\u5F8C\u90A3\u5929\u3002"
              }
            ]
          },
          "EDATE": {
            "d": "\u8FD4\u56DE\u8868\u793A\u67D0\u500B\u65E5\u671F\u7684\u5E8F\u865F,\u8A72\u65E5\u671F\u5728\u53E6\u4E00\u500B\u65E5\u671F\u7684\u6578\u6708\u4E4B\u524D/\u4E4B\u5F8C\u3002",
            "a": "\u8FD4\u56DE\u8868\u793A\u67D0\u500B\u65E5\u671F\u7684\u5E8F\u865F",
            "p": [
              {
                "name": "start_date",
                "detail": "\u7528\u65BC\u8A08\u7B97\u7D50\u679C\u7684\u53C3\u7167\u65E5\u671F\u3002"
              },
              {
                "name": "months",
                "detail": "\u7528\u65BC\u8A08\u7B97\u7684\u8D77\u59CB\u65E5\u671F\u4E4B\u524D\uFF08\u8CA0\uFF09\u6216\u4E4B\u5F8C\uFF08\u6B63\uFF09\u7684\u6708\u6578\u3002"
              }
            ]
          },
          "SECOND": {
            "d": "\u8FD4\u56DE\u6642\u9593\u503C\u7684\u79D2\u6578\u3002\u79D2\u6578\u662F0\uFF08\u96F6\uFF09\u523059\u7BC4\u570D\u5167\u7684\u6574\u6578\u3002",
            "a": "\u8FD4\u56DE\u6642\u9593\u503C\u7684\u79D2\u6578\u3002\u79D2\u6578\u662F0\uFF08\u96F6\uFF09\u523059\u7BC4\u570D\u5167\u7684\u6574\u6578\u3002",
            "p": [
              {
                "name": "\u6642\u9593",
                "detail": "\u7528\u65BC\u8A08\u7B97\u79D2\u9418\u90E8\u5206\u7684\u6642\u9593\u3002\u5FC5\u9808\u70BA\u4EE5\u4E0B\u503C\u4E4B\u4E00:\u6307\u5411\u5305\u542B\u65E5\u671F/\u6642\u9593\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F/\u6642\u9593\u7684\u51FD\u6578\u6216\u8005\u6578\u4F4D\u3002"
              }
            ]
          },
          "MINUTE": {
            "d": "\u4EE5\u6578\u4F4D\u683C\u5F0F\u8FD4\u56DE\u7279\u5B9A\u6642\u9593\u7684\u5206\u9418\u90E8\u5206\u3002",
            "a": "\u4EE5\u6578\u4F4D\u683C\u5F0F\u8FD4\u56DE\u7279\u5B9A\u6642\u9593\u7684\u5206\u9418\u90E8\u5206\u3002",
            "p": [
              {
                "name": "\u6642\u9593",
                "detail": "\u7528\u65BC\u8A08\u7B97\u5206\u9418\u90E8\u5206\u7684\u6642\u9593\u3002\u5FC5\u9808\u70BA\u4EE5\u4E0B\u503C\u4E4B\u4E00:\u6307\u5411\u5305\u542B\u65E5\u671F/\u6642\u9593\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F/\u6642\u9593\u7684\u51FD\u6578\u6216\u8005\u6578\u4F4D\u3002"
              }
            ]
          },
          "HOUR": {
            "d": "\u4EE5\u6578\u4F4D\u683C\u5F0F\u8FD4\u56DE\u7279\u5B9A\u6642\u9593\u7684\u5C0F\u6642\u90E8\u5206\u3002",
            "a": "\u4EE5\u6578\u4F4D\u683C\u5F0F\u8FD4\u56DE\u7279\u5B9A\u6642\u9593\u7684\u5C0F\u6642\u90E8\u5206\u3002",
            "p": [
              {
                "name": "\u6642\u9593",
                "detail": "\u7528\u65BC\u8A08\u7B97\u5C0F\u6642\u90E8\u5206\u7684\u6642\u9593\u3002\u5FC5\u9808\u70BA\u4EE5\u4E0B\u503C\u4E4B\u4E00:\u6307\u5411\u5305\u542B\u65E5\u671F/\u6642\u9593\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F/\u6642\u9593\u7684\u51FD\u6578\u6216\u8005\u6578\u4F4D\u3002"
              }
            ]
          },
          "NOW": {
            "d": "\u4EE5\u65E5\u671F\u503C\u683C\u5F0F\u8FD4\u56DE\u7576\u524D\u65E5\u671F\u548C\u6642\u9593\u3002",
            "a": "\u4EE5\u65E5\u671F\u503C\u683C\u5F0F\u8FD4\u56DE\u7576\u524D\u65E5\u671F\u548C\u6642\u9593\u3002",
            "p": []
          },
          "NETWORKDAYS": {
            "d": "\u8FD4\u56DE\u6240\u63D0\u4F9B\u7684\u5169\u500B\u65E5\u671F\u4E4B\u9593\u7684\u6DE8\u5DE5\u4F5C\u65E5\u5929\u6578\u3002",
            "a": "\u8FD4\u56DE\u6240\u63D0\u4F9B\u7684\u5169\u500B\u65E5\u671F\u4E4B\u9593\u7684\u6DE8\u5DE5\u4F5C\u65E5\u5929\u6578\u3002",
            "p": [
              {
                "name": "start_date",
                "detail": "\u7528\u65BC\u8A08\u7B97\u6DE8\u5DE5\u4F5C\u65E5\u5929\u6578\u7684\u6642\u9593\u6BB5\u958B\u59CB\u65E5\u671F\u3002"
              },
              {
                "name": "end_date",
                "detail": "\u7528\u65BC\u8A08\u7B97\u6DE8\u5DE5\u4F5C\u65E5\u5929\u6578\u7684\u6642\u9593\u6BB5\u7D50\u675F\u65E5\u671F\u3002"
              },
              {
                "name": "holidays",
                "detail": "[\u53EF\u9078] - \u4E00\u500B\u7BC4\u570D\u6216\u6578\u7D44\u5E38\u6578,\u5176\u4E2D\u5305\u542B\u4F5C\u70BA\u7BC0\u5047\u65E5\u7684\u65E5\u671F\u5E8F\u865F\u3002\n\n\u5728\u7BC0\u5047\u65E5\u6578\u7D44\u4E2D\u63D0\u4F9B\u7684\u503C\u5FC5\u9808\u662F\u65E5\u671F\u5E8F\u865F\u503C\uFF08\u4F8B\u5982\u7531N\u6240\u8FD4\u56DE\u7684\u503C\uFF09\u6216\u65E5\u671F\u503C\uFF08\u4F8B\u5982\u7531DATE\u3001DATEVALUE\u6216TO_DATE\u8FD4\u56DE\u7684\u503C\uFF09\u3002\u7531\u7BC4\u570D\u6307\u5B9A\u7684\u503C\u61C9\u8A72\u662F\u6A19\u6E96\u7684\u65E5\u671F\u503C\u6216\u65E5\u671F\u5E8F\u6578\u503C\u3002"
              }
            ]
          },
          "NETWORKDAYS_INTL": {
            "d": "\u8FD4\u56DE\u7D66\u5B9A\u7684\u5169\u500B\u65E5\u671F\u4E4B\u9593\u7684\u6DE8\u5DE5\u4F5C\u65E5\u5929\u6578\uFF08\u6392\u9664\u6307\u5B9A\u7684\u9031\u672B\u548C\u7BC0\u5047\u65E5\uFF09\u3002",
            "a": "\u8FD4\u56DE\u7D66\u5B9A\u7684\u5169\u500B\u65E5\u671F\u4E4B\u9593\u7684\u6DE8\u5DE5\u4F5C\u65E5\u5929\u6578\uFF08\u6392\u9664\u6307\u5B9A\u7684\u9031\u672B\u548C\u7BC0\u5047\u65E5\uFF09\u3002",
            "p": [
              {
                "name": "start_date",
                "detail": "\u7528\u65BC\u8A08\u7B97\u6DE8\u5DE5\u4F5C\u65E5\u5929\u6578\u7684\u6642\u9593\u6BB5\u958B\u59CB\u65E5\u671F\u3002"
              },
              {
                "name": "end_date",
                "detail": "\u7528\u65BC\u8A08\u7B97\u6DE8\u5DE5\u4F5C\u65E5\u5929\u6578\u7684\u6642\u9593\u6BB5\u7D50\u675F\u65E5\u671F\u3002"
              },
              {
                "name": "weekend",
                "detail": '[\u53EF\u9078-\u9810\u8A2D\u503C\u70BA1] - \u7528\u65BC\u8868\u793A\u54EA\u4E9B\u5929\u70BA\u9031\u672B\u7684\u6578\u4F4D\u6216\u5B57\u4E32\u3002\n\u5B57\u4E32\u7BA1\u9053:\u53EF\u4EE5\u4F7F\u7528\u75310\u548C1\u7D44\u6210\u7684\u5B57\u4E32\u4F86\u6307\u5B9A\u9031\u672B,\u4E32\u4E2D\u7684\u7B2C\u4E00\u500B\u6578\u4F4D\u5B57\u5143\u4EE3\u8868\u9031\u4E00,\u6700\u5F8C\u4E00\u500B\u5247\u4EE3\u8868\u5468\u65E5\u3002\u96F6\u8868\u793A\u9019\u4E00\u5929\u662F\u5DE5\u4F5C\u65E5,1 \u8868\u793A\u9019\u4E00\u5929\u70BA\u9031\u672B\u3002\u4F8B\u5982,"0000011"\u8868\u793A\u5C07\u9031\u516D\u548C\u5468\u65E5\u4F5C\u70BA\u9031\u672B\u3002\n\u6578\u4F4D\u7BA1\u9053:\u9019\u7A2E\u7BA1\u9053\u4E0D\u4F7F\u7528\u4E0A\u8FF0\u5B57\u4E32\u5F62\u5F0F,\u800C\u662F\u4F7F\u7528\u4E00\u500B\u6578\u4F4D\u30021 =\u9031\u516D/\u5468\u65E5\u70BA\u9031\u672B,2 =\u5468\u65E5/\u9031\u4E00\u70BA\u9031\u672B,\u4F9D\u6B64\u985E\u63A8\u52477 =\u9031\u4E94/\u9031\u516D\u300211 =\u5468\u65E5\u70BA\u552F\u4E00\u9031\u672B,12 =\u9031\u4E00\u70BA\u552F\u4E00\u9031\u672B,\u4F9D\u6B64\u985E\u63A8\u524717 =\u9031\u516D\u70BA\u552F\u4E00\u9031\u672B\u3002'
              },
              {
                "name": "holidays",
                "detail": "[\u53EF\u9078] - \u9019\u662F\u4E00\u500B\u7BC4\u570D\u6216\u6578\u7D44\u5E38\u6578,\u5176\u4E2D\u5305\u542B\u4F5C\u70BA\u7BC0\u5047\u65E5\u7684\u65E5\u671F\u3002\n\u5728\u7BC0\u5047\u65E5\u6578\u7D44\u5167\u63D0\u4F9B\u7684\u503C\u5FC5\u9808\u70BA\u65E5\u671F\u5E8F\u6578\u503C\uFF08\u4F8B\u5982N\u7684\u8FD4\u56DE\u503C\uFF09\u6216\u65E5\u671F\u503C\uFF08\u4F8B\u5982DATE\u3001DATEVALUE\u6216TO_DATE\u7684\u8FD4\u56DE\u503C\uFF09\u3002\u7531\u7BC4\u570D\u6307\u5B9A\u7684\u503C\u61C9\u8A72\u662F\u6A19\u6E96\u7684\u65E5\u671F\u503C\u6216\u65E5\u671F\u5E8F\u6578\u503C\u3002"
              }
            ]
          },
          "ISOWEEKNUM": {
            "d": "\u8FD4\u56DE\u7D66\u5B9A\u65E5\u671F\u5728\u5168\u5E74\u4E2D\u7684 ISO \u5468\u6578\u3002",
            "a": "\u8FD4\u56DE\u7D66\u5B9A\u65E5\u671F\u5728\u5168\u5E74\u4E2D\u7684 ISO \u5468\u6578\u3002",
            "p": [
              {
                "name": "date",
                "detail": "\u7528\u65BC\u65E5\u671F\u548C\u6642\u9593\u8A08\u7B97\u7684\u65E5\u671F-\u6642\u9593\u7A0B\u5F0F\u78BC\u3002"
              }
            ]
          },
          "WEEKNUM": {
            "d": "\u8FD4\u56DE\u7279\u5B9A\u65E5\u671F\u7684\u5468\u6578\u3002",
            "a": "\u8FD4\u56DE\u7279\u5B9A\u65E5\u671F\u7684\u5468\u6578\u3002",
            "p": [
              {
                "name": "serial_number",
                "detail": "\u8981\u78BA\u5B9A\u5176\u4F4D\u65BC\u7B2C\u5E7E\u5468\u7684\u65E5\u671F,\u5FC5\u9808\u662F\u5C0D\u5305\u542B\u65E5\u671F\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u985E\u578B\u7684\u51FD\u6578\u6216\u8005\u6578\u4F4D\u3002"
              },
              {
                "name": "return_type",
                "detail": "[\u53EF\u9078-\u9810\u8A2D\u503C\u70BA1 ] - \u4EE3\u8868\u4E00\u5468\u8D77\u59CB\u65E5\u7684\u6578\u4F4D,\u7CFB\u7D71\u4E5F\u4F7F\u7528\u8A72\u6578\u4F4D\u4F86\u78BA\u5B9A\u4E00\u5E74\u7684\u7B2C\u4E00\u5468\uFF081=\u5468\u65E5,2=\u9031\u4E00\uFF09\u3002"
              }
            ]
          },
          "WEEKDAY": {
            "d": "\u8FD4\u56DE\u4E00\u500B\u6578\u4F4D,\u5C0D\u61C9\u65BC\u7D66\u5B9A\u65E5\u671F\u6240\u5728\u7684\u661F\u671F\u5E7E\u3002",
            "a": "\u8FD4\u56DE\u4E00\u500B\u6578\u4F4D,\u5C0D\u61C9\u65BC\u7D66\u5B9A\u65E5\u671F\u6240\u5728\u7684\u661F\u671F\u5E7E\u3002",
            "p": [
              {
                "name": "serial_number",
                "detail": "\u8981\u70BA\u5176\u78BA\u5B9A\u661F\u671F\u5E7E\u7684\u65E5\u671F\u3002\u5FC5\u9808\u662F\u5C0D\u5305\u542B\u65E5\u671F\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u985E\u578B\u7684\u51FD\u6578\u6216\u8005\u6578\u4F4D\u3002"
              },
              {
                "name": "return_type",
                "detail": "[\u53EF\u9078-\u9810\u8A2D\u503C\u70BA1] -\u4EE5\u6578\u4F4D\u8A13\u793A\u4F7F\u7528\u54EA\u7A2E\u7DE8\u865F\u9806\u5E8F\u4F86\u8868\u793A\u661F\u671F\u5E7E\u3002\u9ED8\u8A8D\u60C5\u51B5\u4E0B,\u6309\u661F\u671F\u65E5\uFF08= 1\uFF09\u958B\u59CB\u8A08\u7B97\u3002\n\n\u5982\u679C\u985E\u578B\u70BA1,\u5247\u661F\u671F\u503C\u5C07\u5F9E\u661F\u671F\u65E5\u958B\u59CB\u7B97\u8D77,\u4E26\u4E14\u661F\u671F\u65E5\u7684\u503C\u70BA1,\u56D9\u6B64\u661F\u671F\u516D\u7684\u503C\u5C31\u662F7\u3002\n\n\u5982\u679C\u985E\u578B\u70BA2,\u5247\u661F\u671F\u503C\u5C07\u5F9E\u661F\u671F\u4E00\u958B\u59CB\u7B97\u8D77,\u4E26\u4E14\u661F\u671F\u4E00\u7684\u503C\u70BA1,\u56D9\u6B64\u661F\u671F\u65E5\u7684\u503C\u5C31\u662F7\u3002\n\n\u5982\u679C\u985E\u578B\u70BA3,\u5247\u661F\u671F\u503C\u5C07\u5F9E\u661F\u671F\u4E00\u7B97\u8D77,\u4E26\u4E14\u661F\u671F\u4E00\u7684\u503C\u70BA0,\u56D9\u6B64\u661F\u671F\u65E5\u7684\u503C\u5C31\u662F6\u3002"
              }
            ]
          },
          "DAY": {
            "d": "\u4EE5\u6578\u4F4D\u683C\u5F0F\u8FD4\u56DE\u7279\u5B9A\u65E5\u671F\u6240\u5728\u7684\u7576\u6708\u5E7E\u865F\u3002",
            "a": "\u4EE5\u6578\u4F4D\u683C\u5F0F\u8FD4\u56DE\u7279\u5B9A\u65E5\u671F\u6240\u5728\u7684\u7576\u6708\u5E7E\u865F\u3002",
            "p": [
              {
                "name": "serial_number",
                "detail": "\u8981\u5F9E\u4E2D\u9078\u53D6\u5177\u9AD4\u5E7E\u865F\u7684\u65E5\u671F\u3002\u5FC5\u9808\u662F\u4EE5\u4E0B\u4E00\u7A2E:\u5C0D\u5305\u542B\u65E5\u671F\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u985E\u578B\u7684\u51FD\u6578\u6216\u8005\u6578\u4F4D\u3002"
              }
            ]
          },
          "DAYS": {
            "d": "\u8FD4\u56DE\u5169\u500B\u65E5\u671F\u4E4B\u9593\u7684\u5929\u6578\u3002",
            "a": "\u8FD4\u56DE\u5169\u500B\u65E5\u671F\u4E4B\u9593\u7684\u5929\u6578\u3002",
            "p": [
              {
                "name": "end_date",
                "detail": "\u8A08\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u7D50\u675F\u65E5\u671F\u3002\u5FC5\u9808\u662F\u4EE5\u4E0B\u4E00\u7A2E:\u5C0D\u5305\u542B\u65E5\u671F\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u985E\u578B\u7684\u51FD\u6578\u6216\u8005\u6578\u4F4D\u3002"
              },
              {
                "name": "start_date",
                "detail": "\u8A08\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u958B\u59CB\u65E5\u671F\u3002\u5FC5\u9808\u662F\u4EE5\u4E0B\u4E00\u7A2E:\u5C0D\u5305\u542B\u65E5\u671F\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u985E\u578B\u7684\u51FD\u6578\u6216\u8005\u6578\u4F4D\u3002"
              }
            ]
          },
          "DAYS360": {
            "d": "\u6309\u7167\u6BCF\u5E74360\u5929,\u8FD4\u56DE\u5169\u500B\u65E5\u671F\u4E4B\u9593\u7684\u5DEE\uFF08\u7528\u65BC\u8A08\u7B97\u5229\u606F\uFF09\u3002",
            "a": "\u6309\u7167\u6BCF\u5E74360\u5929,\u8FD4\u56DE\u5169\u500B\u65E5\u671F\u4E4B\u9593\u7684\u5DEE\uFF08\u7528\u65BC\u8A08\u7B97\u5229\u606F\uFF09\u3002",
            "p": [
              {
                "name": "start_date",
                "detail": "\u8A08\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u958B\u59CB\u65E5\u671F\u3002\u5FC5\u9808\u662F\u4EE5\u4E0B\u4E00\u7A2E:\u5C0D\u5305\u542B\u65E5\u671F\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u985E\u578B\u7684\u51FD\u6578\u6216\u8005\u6578\u4F4D\u3002"
              },
              {
                "name": "end_date",
                "detail": "\u8A08\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u7D50\u675F\u65E5\u671F\u3002\u5FC5\u9808\u662F\u4EE5\u4E0B\u4E00\u7A2E:\u5C0D\u5305\u542B\u65E5\u671F\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u985E\u578B\u7684\u51FD\u6578\u6216\u8005\u6578\u4F4D\u3002"
              },
              {
                "name": "method",
                "detail": "[\u53EF\u9078 - \u9ED8\u8A8D\u70BAFALSE\uFF08\uFF09] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\nFALSE -\u63A1\u7528\u7F8E\u570B\uFF08NASD\uFF09\u65B9\u6CD5\u6642,\u5982\u679C\u8D77\u59CB\u65E5\u671F\u70BA\u67D0\u6708\u7684\u6700\u5F8C\u4E00\u5929,\u70BA\u4FBF\u65BC\u8A08\u7B97,\u6703\u5C07\u8D77\u59CB\u65E5\u671F\u7684\u7576\u6708\u5E7E\u865F\u66F4\u6539\u70BA30\u3002\u6B64\u5916,\u5982\u679C\u7D50\u675F\u65E5\u671F\u662F\u6240\u5728\u6708\u4EFD\u7684\u6700\u5F8C\u4E00\u5929,\u800C\u4E14\u8D77\u59CB\u65E5\u671F\u5728\u5176\u6240\u5728\u6708\u768430\u865F\u4E4B\u524D,\u5247\u5C07\u7D50\u675F\u65E5\u671F\u66F4\u6539\u70BA\u7D50\u675F\u65E5\u671F\u4E4B\u5F8C\u90A3\u500B\u6708\u7684\u7B2C\u4E00\u5929,\u5426\u5247\u5C07\u7D50\u675F\u65E5\u671F\u66F4\u6539\u70BA\u8A72\u6708\u768430\u865F\u3002\n\nTRUE -\u63A1\u7528\u6B50\u6D32\u65B9\u6CD5\u6642,\u6703\u5C07\u6240\u6709\u65E5\u671F\u572831\u865F\u7684\u8D77\u59CB\u65E5\u671F\u6216\u7D50\u675F\u65E5\u671F\u66F4\u6539\u70BA\u7576\u6708\u768430\u865F\u3002"
              }
            ]
          },
          "DATE": {
            "d": "\u5C07\u63D0\u4F9B\u7684\u5E74\u3001\u6708\u3001\u65E5\u8F49\u63DB\u70BA\u65E5\u671F\u3002",
            "a": "\u5C07\u63D0\u4F9B\u7684\u5E74\u3001\u6708\u3001\u65E5\u8F49\u63DB\u70BA\u65E5\u671F\u3002",
            "p": [
              {
                "name": "year",
                "detail": "\u65E5\u671F\u7684\u5E74\u4EFD\u90E8\u5206,\u5305\u542B\u4E00\u5230\u56DB\u4F4D\u6578\u4F4D\u3002\n\n\u4ECB\u65BC0\uFF08\u96F6\uFF09\u5230 1899 \u4E4B\u9593,\u6703\u5C07\u8A72\u503C\u8207 1900 \u76F8\u52A0\u4F86\u8A08\u7B97\u5E74\u4EFD\uFF1B\n\n\u4ECB\u65BC 1900 \u5230 9999 \u4E4B\u9593,\u5C07\u4F7F\u7528\u8A72\u6578\u503C\u4F5C\u70BA\u5E74\u4EFD\uFF1B\n\n\u5C0F\u65BC0\u6216\u5927\u65BC\u7B49\u65BC 10000,\u8FD4\u56DE\u932F\u8AA4\u503C#NUM\uFF01\u3002"
              },
              {
                "name": "month",
                "detail": "\u65E5\u671F\u7684\u6708\u4EFD\u90E8\u5206,\u4E00\u500B\u6B63\u6574\u6578\u6216\u8CA0\u6574\u6578\u3002\n\n\u5982\u679C month \u5927\u65BC 12,\u5247 month \u6703\u5C07\u8A72\u6708\u4EFD\u6578\u8207\u6307\u5B9A\u5E74\u4E2D\u7684\u7B2C\u4E00\u500B\u6708\u76F8\u52A0\u3002\n\n\u5982\u679C month \u5C0F\u65BC 1,month \u5247\u5F9E\u6307\u5B9A\u5E74\u4EFD\u7684\u4E00\u6708\u4EFD\u958B\u59CB\u905E\u6E1B\u8A72\u6708\u4EFD\u6578,\u7136\u5F8C\u518D\u52A0\u4E0A 1 \u500B\u6708\u3002"
              },
              {
                "name": "day",
                "detail": "\u65E5\u671F\u7684\u65E5\u90E8\u5206,\u4E00\u500B\u6B63\u6574\u6578\u6216\u8CA0\u6574\u6578\u3002\n\n\u5982\u679C day \u5927\u65BC\u6708\u4E2D\u6307\u5B9A\u7684\u5929\u6578,\u5247 day \u6703\u5C07\u5929\u6578\u8207\u8A72\u6708\u4E2D\u7684\u7B2C\u4E00\u5929\u76F8\u52A0\u3002\n\n\u5982\u679C day \u5C0F\u65BC1,\u5247 day \u5F9E\u6307\u5B9A\u6708\u4EFD\u7684\u7B2C\u4E00\u5929\u958B\u59CB\u905E\u6E1B\u8A72\u5929\u6578,\u7136\u5F8C\u518D\u52A0\u4E0A 1 \u5929\u3002"
              }
            ]
          },
          "DATEVALUE": {
            "d": "\u5C07\u63D0\u4F9B\u7684\u65E5\u671F\u5B57\u4E32\u8F49\u63DB\u70BA\u65E5\u671F\u7684\u5E8F\u865F\u3002",
            "a": "\u5C07\u63D0\u4F9B\u7684\u65E5\u671F\u5B57\u4E32\u8F49\u63DB\u70BA\u65E5\u671F\u7684\u5E8F\u865F\u3002",
            "p": [
              {
                "name": "date_text",
                "detail": "\u8868\u793A\u65E5\u671F\u7684\u5B57\u4E32\u3002"
              }
            ]
          },
          "DATEDIF": {
            "d": "\u8A08\u7B97\u5169\u500B\u65E5\u671F\u4E4B\u9593\u7684\u5929\u6578\u3001\u6708\u6578\u6216\u5E74\u6578\u3002",
            "a": "\u8A08\u7B97\u5169\u500B\u65E5\u671F\u4E4B\u9593\u7684\u5929\u6578\u3001\u6708\u6578\u6216\u5E74\u6578\u3002",
            "p": [
              {
                "name": "\u8D77\u59CB\u65E5\u671F",
                "detail": "\u8A08\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u958B\u59CB\u65E5\u671F\u3002\u5FC5\u9808\u662F\u5C0D\u5305\u542BDATE\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DEDATE\u985E\u578B\u7684\u51FD\u6578\u6216\u6578\u4F4D\u3002"
              },
              {
                "name": "\u7D50\u675F\u65E5\u671F",
                "detail": "\u8A08\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u7D50\u675F\u65E5\u671F\u3002\u5FC5\u9808\u662F\u5C0D\u5305\u542BDATE\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DEDATE\u985E\u578B\u7684\u51FD\u6578\u6216\u6578\u4F4D\u3002"
              },
              {
                "name": "\u7D44\u7E54",
                "detail": '\u6642\u9593\u7D44\u7E54\u7684\u7E2E\u5BEB\u6587\u5B57\u3002\u4F8B\u5982"M"\u4EE3\u8868\u6708\u3002\u6709\u6548\u503C\u5305\u62EC:"Y"\u3001"M"\u3001"D"\u3001"MD"\u3001"YM"\u548C"YD"\u3002\n\n"Y":\u8FD4\u56DE\u8D77\u59CB\u65E5\u671F\u548C\u7D50\u675F\u65E5\u671F\u4E4B\u9593\u7684\u6574\u5E74\u6578\u3002\n\n"M":\u8FD4\u56DE\u8D77\u59CB\u65E5\u671F\u548C\u7D50\u675F\u65E5\u671F\u4E4B\u9593\u7684\u6574\u6708\u6578\u3002\n\n"D":\u8FD4\u56DE\u8D77\u59CB\u65E5\u671F\u548C\u7D50\u675F\u65E5\u671F\u4E4B\u9593\u7684\u5929\u6578\u3002\n\n"MD":\u8FD4\u56DE\u8D77\u59CB\u65E5\u671F\u548C\u7D50\u675F\u65E5\u671F\u4E4B\u9593\u7684\u5929\u6578\uFF08\u4E0D\u8A08\u6574\u6708\u6578\uFF09\u3002\n\n"YM":\u8FD4\u56DE\u8D77\u59CB\u65E5\u671F\u548C\u7D50\u675F\u65E5\u671F\u4E4B\u9593\u7684\u6574\u6708\u6578\uFF08\u4E0D\u8A08\u6574\u5E74\u6578\uFF09\u3002\n\n"YD":\u8FD4\u56DE\u8D77\u59CB\u65E5\u671F\u548C\u7D50\u675F\u65E5\u671F\u4E4B\u9593\u7684\u5929\u6578\uFF08\u5047\u8A2D\u8D77\u59CB\u65E5\u671F\u548C\u7D50\u675F\u65E5\u671F\u7684\u9593\u9694\u4E0D\u8D85\u904E\u4E00\u5E74\uFF09\u3002'
              }
            ]
          },
          "WORKDAY": {
            "d": "\u6307\u5B9A\u5DE5\u4F5C\u65E5\u5929\u6578,\u8A08\u7B97\u7D50\u675F\u65E5\u671F\u3002",
            "a": "\u6307\u5B9A\u5DE5\u4F5C\u65E5\u5929\u6578,\u8A08\u7B97\u7D50\u675F\u65E5\u671F\u3002",
            "p": [
              {
                "name": "start_date",
                "detail": "\u8A08\u7B97\u7684\u958B\u59CB\u65E5\u671F\u3002"
              },
              {
                "name": "days",
                "detail": "start_date\u4E4B\u524D\u6216\u4E4B\u5F8C\u4E0D\u542B\u9031\u672B\u53CA\u7BC0\u5047\u65E5\u7684\u5929\u6578\u3002\n\n\u70BA\u6B63\u503C\u5C07\u751F\u6210\u672A\u4F86\u65E5\u671F\uFF1B\n\n\u70BA\u8CA0\u503C\u751F\u6210\u904E\u53BB\u65E5\u671F\u3002"
              },
              {
                "name": "holidays",
                "detail": "[\u53EF\u9078] - \u4E00\u500B\u7BC4\u570D\u6216\u6578\u7D44\u5E38\u6578,\u5176\u4E2D\u5305\u542B\u4F5C\u70BA\u7BC0\u5047\u65E5\u7684\u65E5\u671F\u5E8F\u865F\u3002\n\n\u5728\u7BC0\u5047\u65E5\u6578\u7D44\u4E2D\u63D0\u4F9B\u7684\u503C\u5FC5\u9808\u662F\u65E5\u671F\u5E8F\u865F\u503C\uFF08\u4F8B\u5982\u7531N\u6240\u8FD4\u56DE\u7684\u503C\uFF09\u6216\u65E5\u671F\u503C\uFF08\u4F8B\u5982\u7531DATE\u3001DATEVALUE\u6216TO_DATE\u8FD4\u56DE\u7684\u503C\uFF09\u3002\u7531\u7BC4\u570D\u6307\u5B9A\u7684\u503C\u61C9\u8A72\u662F\u6A19\u6E96\u7684\u65E5\u671F\u503C\u6216\u65E5\u671F\u5E8F\u6578\u503C\u3002"
              }
            ]
          },
          "WORKDAY_INTL": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u7684\u82E5\u5E72\u500B\u5DE5\u4F5C\u65E5\u4E4B\u524D\u6216\u4E4B\u5F8C\u7684\u65E5\u671F\u7684\u5E8F\u865F\uFF08\u4F7F\u7528\u81EA\u5B9A\u7FA9\u9031\u672B\u53C3\u6578\uFF09\u3002 ",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u7684\u82E5\u5E72\u500B\u5DE5\u4F5C\u65E5\u4E4B\u524D\u6216\u4E4B\u5F8C\u7684\u65E5\u671F\u7684\u5E8F\u865F\uFF08\u4F7F\u7528\u81EA\u5B9A\u7FA9\u9031\u672B\u53C3\u6578\uFF09\u3002 ",
            "p": [
              {
                "name": "start_date",
                "detail": "\u958B\u59CB\u65E5\u671F\uFF08\u5C07\u88AB\u622A\u5C3E\u53D6\u6574\uFF09\u3002"
              },
              {
                "name": "days",
                "detail": "start_date\u4E4B\u524D\u6216\u4E4B\u5F8C\u7684\u5DE5\u4F5C\u65E5\u7684\u5929\u6578\u3002\n\n\u6B63\u503C\u8868\u793A\u672A\u4F86\u65E5\u671F\uFF1B\n\n\u8CA0\u503C\u8868\u793A\u904E\u53BB\u65E5\u671F\uFF1B\n\n\u96F6\u503C\u8868\u793A\u958B\u59CB\u65E5\u671F\u3002"
              },
              {
                "name": "weekend",
                "detail": '[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA1] - \u7528\u65BC\u8868\u793A\u54EA\u4E9B\u5929\u70BA\u9031\u672B\u7684\u6578\u4F4D\u6216\u5B57\u4E32\u3002\n\u5B57\u4E32\u7BA1\u9053:\u53EF\u4EE5\u4F7F\u7528\u75310\u548C1\u7D44\u6210\u7684\u5B57\u4E32\u4F86\u6307\u5B9A\u9031\u672B,\u4E32\u4E2D\u7684\u7B2C\u4E00\u500B\u6578\u4F4D\u5B57\u5143\u4EE3\u8868\u9031\u4E00,\u6700\u5F8C\u4E00\u500B\u5247\u4EE3\u8868\u5468\u65E5\u3002\u96F6\u8868\u793A\u9019\u4E00\u5929\u662F\u5DE5\u4F5C\u65E5,1\u8868\u793A\u9019\u4E00\u5929\u70BA\u9031\u672B\u3002\u4F8B\u5982,"0000011"\u8868\u793A\u5C07\u9031\u516D\u548C\u5468\u65E5\u4F5C\u70BA\u9031\u672B\u3002\n\u6578\u4F4D\u7BA1\u9053:\u9019\u7A2E\u7BA1\u9053\u4E0D\u4F7F\u7528\u4E0A\u8FF0\u5B57\u4E32\u5F62\u5F0F,\u800C\u662F\u4F7F\u7528\u4E00\u500B\u6578\u4F4D\u30021 =\u9031\u516D/\u5468\u65E5\u70BA\u9031\u672B,2 =\u5468\u65E5/\u9031\u4E00\u70BA\u9031\u672B,\u4F9D\u6B64\u985E\u63A8\u52477 =\u9031\u4E94/\u9031\u516D\u300211 =\u5468\u65E5\u70BA\u552F\u4E00\u9031\u672B,12 =\u9031\u4E00\u70BA\u552F\u4E00\u9031\u672B,\u4F9D\u6B64\u985E\u63A8\u524717 =\u9031\u516D\u70BA\u552F\u4E00\u9031\u672B\u3002'
              },
              {
                "name": "holidays",
                "detail": "[\u53EF\u9078] - \u9019\u662F\u4E00\u500B\u7BC4\u570D\u6216\u6578\u7D44\u5E38\u6578,\u5176\u4E2D\u5305\u542B\u4F5C\u70BA\u7BC0\u5047\u65E5\u7684\u65E5\u671F\u3002\n\u5728\u7BC0\u5047\u65E5\u6578\u7D44\u5167\u63D0\u4F9B\u7684\u503C\u5FC5\u9808\u70BA\u65E5\u671F\u5E8F\u6578\u503C\uFF08\u4F8B\u5982N\u7684\u8FD4\u56DE\u503C\uFF09\u6216\u65E5\u671F\u503C\uFF08\u4F8B\u5982DATE\u3001DATEVALUE\u6216TO_DATE\u7684\u8FD4\u56DE\u503C\uFF09\u3002\u7531\u7BC4\u570D\u6307\u5B9A\u7684\u503C\u61C9\u8A72\u662F\u6A19\u6E96\u7684\u65E5\u671F\u503C\u6216\u65E5\u671F\u5E8F\u6578\u503C\u3002"
              }
            ]
          },
          "YEAR": {
            "d": "\u8FD4\u56DE\u5C0D\u61C9\u65BC\u67D0\u500B\u65E5\u671F\u7684\u5E74\u4EFD\u3002Year\u4F5C\u70BA 1900 - 9999 \u4E4B\u9593\u7684\u6574\u6578\u8FD4\u56DE\u3002",
            "a": "\u8FD4\u56DE\u5C0D\u61C9\u65BC\u67D0\u500B\u65E5\u671F\u7684\u5E74\u4EFD\u3002Year\u4F5C\u70BA 1900 - 9999 \u4E4B\u9593\u7684\u6574\u6578\u8FD4\u56DE\u3002",
            "p": [
              {
                "name": "serial_number",
                "detail": "\u7528\u65BC\u8A08\u7B97\u5E74\u4EFD\u7684\u65E5\u671F\u3002\u5FC5\u9808\u662F\u4EE5\u4E0B\u4E00\u7A2E:\u5C0D\u5305\u542B\u65E5\u671F\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u985E\u578B\u7684\u51FD\u6578\u6216\u8005\u6578\u4F4D\u3002"
              }
            ]
          },
          "YEARFRAC": {
            "d": "\u8FD4\u56DE start_date \u548C end_date \u4E4B\u9593\u7684\u5929\u6578\u5360\u5168\u5E74\u5929\u6578\u7684\u767E\u5206\u6BD4\u3002",
            "a": "\u8FD4\u56DE start_date \u548C end_date \u4E4B\u9593\u7684\u5929\u6578\u5360\u5168\u5E74\u5929\u6578\u7684\u767E\u5206\u6BD4\u3002",
            "p": [
              {
                "name": "start_date",
                "detail": "\u8A08\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u958B\u59CB\u65E5\u671F\u3002\u5FC5\u9808\u662F\u4EE5\u4E0B\u4E00\u7A2E:\u5C0D\u5305\u542B\u65E5\u671F\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u985E\u578B\u7684\u51FD\u6578\u6216\u8005\u6578\u4F4D\u3002"
              },
              {
                "name": "end_date",
                "detail": "\u8A08\u7B97\u4E2D\u8981\u4F7F\u7528\u7684\u7D50\u675F\u65E5\u671F\u3002\u5FC5\u9808\u662F\u4EE5\u4E0B\u4E00\u7A2E:\u5C0D\u5305\u542B\u65E5\u671F\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u985E\u578B\u7684\u51FD\u6578\u6216\u8005\u6578\u4F4D\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8981\u4F7F\u7528\u7684\u65E5\u8A08\u6578\u57FA\u6E96\u985E\u578B\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "TODAY": {
            "d": "\u4EE5\u65E5\u671F\u503C\u683C\u5F0F\u8FD4\u56DE\u7576\u524D\u65E5\u671F\u3002",
            "a": "\u4EE5\u65E5\u671F\u503C\u683C\u5F0F\u8FD4\u56DE\u7576\u524D\u65E5\u671F\u3002",
            "p": []
          },
          "MONTH": {
            "d": "\u8FD4\u56DE\u65E5\u671F\uFF08\u4EE5\u5E8F\u5217\u6578\u8868\u793A\uFF09\u4E2D\u7684\u6708\u4EFD\u3002\u6708\u4EFD\u662F\u4ECB\u65BC1\uFF08\u4E00\u6708\uFF09\u523012\uFF08\u5341\u4E8C\u6708\uFF09\u4E4B\u9593\u7684\u6574\u6578\u3002",
            "a": "\u8FD4\u56DE\u65E5\u671F\uFF08\u4EE5\u5E8F\u5217\u6578\u8868\u793A\uFF09\u4E2D\u7684\u6708\u4EFD\u3002\u6708\u4EFD\u662F\u4ECB\u65BC1\uFF08\u4E00\u6708\uFF09\u523012\uFF08\u5341\u4E8C\u6708\uFF09\u4E4B\u9593\u7684\u6574\u6578\u3002",
            "p": [
              {
                "name": "serial_number",
                "detail": "\u8981\u5F9E\u4E2D\u9078\u53D6\u6708\u4EFD\u7684\u65E5\u671F\u3002\u5FC5\u9808\u662F\u4EE5\u4E0B\u4E00\u7A2E:\u5C0D\u5305\u542B\u65E5\u671F\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3001\u8FD4\u56DE\u65E5\u671F\u985E\u578B\u7684\u51FD\u6578\u6216\u8005\u6578\u4F4D\u3002"
              }
            ]
          },
          "EFFECT": {
            "d": "\u6839\u64DA\u540D\u7FA9\u5229\u7387\u53CA\u6BCF\u5E74\u7684\u8907\u5229\u8A08\u606F\u671F\u6578\u4F86\u8A08\u7B97\u5BE6\u969B\u5E74\u5229\u7387\u3002",
            "a": "\u6839\u64DA\u540D\u7FA9\u5229\u7387\u53CA\u6BCF\u5E74\u7684\u8907\u5229\u8A08\u606F\u671F\u6578\u4F86\u8A08\u7B97\u5BE6\u969B\u5E74\u5229\u7387\u3002",
            "p": [
              {
                "name": "nominal_rate",
                "detail": "\u6BCF\u5E74\u7684\u540D\u7FA9\u5229\u7387\u3002"
              },
              {
                "name": "npery",
                "detail": "\u6BCF\u5E74\u7684\u8907\u5229\u8A08\u7B97\u671F\u6578\u3002"
              }
            ]
          },
          "DOLLAR": {
            "d": "\u5C07\u6578\u4F4D\u683C\u5F0F\u8A2D\u5B9A\u70BA\u8207\u8A9E\u8A00\u5340\u57DF\u76F8\u5C0D\u61C9\u7684\u8CA8\u5E63\u683C\u5F0F\u3002",
            "a": "\u5C07\u6578\u4F4D\u683C\u5F0F\u8A2D\u5B9A\u70BA\u8207\u8A9E\u8A00\u5340\u57DF\u76F8\u5C0D\u61C9\u7684\u8CA8\u5E63\u683C\u5F0F\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u8981\u8A2D\u5B9A\u683C\u5F0F\u7684\u503C\u3002"
              },
              {
                "name": "decimals",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA2] - \u8981\u986F\u793A\u7684\u5C0F\u6578\u4F4D\u6578\u3002\n\n\u5982\u679C\u9019\u662F\u8CA0\u6578,\u5247\u5C07\u6578\u4F4D\u56DB\u6368\u4E94\u5165\u5230\u5C0F\u6578\u9EDE\u5DE6\u5074\u3002"
              }
            ]
          },
          "DOLLARDE": {
            "d": "\u5C07\u4EE5\u6574\u6578\u90E8\u5206\u548C\u5206\u6578\u90E8\u5206\u8F49\u63DB\u70BA\u4EE5\u5C0F\u6578\u90E8\u5206\u8868\u793A\u7684\u91D1\u984D\u6578\u4F4D",
            "a": "\u5C07\u4EE5\u6574\u6578\u90E8\u5206\u548C\u5206\u6578\u90E8\u5206\u8F49\u63DB\u70BA\u4EE5\u5C0F\u6578\u90E8\u5206\u8868\u793A\u7684\u91D1\u984D\u6578\u4F4D",
            "p": [
              {
                "name": "fractional_dollar",
                "detail": "\u4EE5\u6574\u6578\u90E8\u4EFD\u548C\u5206\u6578\u90E8\u5206\u8868\u793A\u7684\u6578\u4F4D,\u7528\u5C0F\u6578\u9EDE\u9694\u958B\u3002"
              },
              {
                "name": "fraction",
                "detail": "\u7528\u4F5C\u5206\u6578\u4E2D\u7684\u5206\u6BCD\u7684\u6574\u6578\u3002"
              }
            ]
          },
          "DOLLARFR": {
            "d": "\u5C07\u5C0F\u6578\u8F49\u63DB\u70BA\u5206\u6578\u8868\u793A\u7684\u91D1\u984D\u6578\u4F4D\u3002",
            "a": "\u5C07\u5C0F\u6578\u8F49\u63DB\u70BA\u5206\u6578\u8868\u793A\u7684\u91D1\u984D\u6578\u4F4D\u3002",
            "p": [
              {
                "name": "decimal_dollar",
                "detail": "\u5C0F\u6578\u3002"
              },
              {
                "name": "fraction",
                "detail": "\u7528\u4F5C\u5206\u6578\u4E2D\u7684\u5206\u6BCD\u7684\u6574\u6578\u3002"
              }
            ]
          },
          "DB": {
            "d": "\u4F7F\u7528\u56FA\u5B9A\u9918\u984D\u905E\u6E1B\u6CD5,\u8FD4\u56DE\u6307\u5B9A\u671F\u9593\u5167\u67D0\u9805\u56FA\u5B9A\u8CC7\u7522\u7684\u6298\u820A\u503C\u3002",
            "a": "\u4F7F\u7528\u56FA\u5B9A\u9918\u984D\u905E\u6E1B\u6CD5,\u8FD4\u56DE\u6307\u5B9A\u671F\u9593\u5167\u67D0\u9805\u56FA\u5B9A\u8CC7\u7522\u7684\u6298\u820A\u503C\u3002",
            "p": [
              {
                "name": "cost",
                "detail": "\u8CC7\u7522\u539F\u503C\u3002"
              },
              {
                "name": "salvage",
                "detail": "\u6298\u820A\u672B\u5C3E\u6642\u7684\u503C\uFF08\u6709\u6642\u4E5F\u7A31\u70BA\u8CC7\u7522\u6B98\u503C\uFF09\u3002"
              },
              {
                "name": "life",
                "detail": "\u8CC7\u7522\u7684\u6298\u820A\u671F\u6578\uFF08\u6709\u6642\u4E5F\u7A31\u4F5C\u8CC7\u7522\u7684\u4F7F\u7528\u58FD\u547D\uFF09\u3002"
              },
              {
                "name": "period",
                "detail": "\u5728\u4F7F\u7528\u671F\u9650\u5167\u8981\u8A08\u7B97\u6298\u820A\u7684\u6298\u820A\u671F\u3002"
              },
              {
                "name": "month",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA12] - \u6298\u820A\u7B2C\u4E00\u5E74\u4E2D\u7684\u6708\u6578\u3002"
              }
            ]
          },
          "DDB": {
            "d": "\u7528\u96D9\u500D\u9918\u984D\u905E\u6E1B\u6CD5,\u8FD4\u56DE\u6307\u5B9A\u671F\u9593\u5167\u67D0\u9805\u56FA\u5B9A\u8CC7\u7522\u7684\u6298\u820A\u503C\u3002",
            "a": "\u7528\u96D9\u500D\u9918\u984D\u905E\u6E1B\u6CD5,\u8FD4\u56DE\u6307\u5B9A\u671F\u9593\u5167\u67D0\u9805\u56FA\u5B9A\u8CC7\u7522\u7684\u6298\u820A\u503C\u3002",
            "p": [
              {
                "name": "cost",
                "detail": "\u8D44\u4EA7\u539F\u503C\u3002"
              },
              {
                "name": "salvage",
                "detail": "\u6298\u820A\u672B\u5C3E\u6642\u7684\u503C\uFF08\u6709\u6642\u4E5F\u7A31\u70BA\u8CC7\u7522\u6B98\u503C\uFF09\u3002"
              },
              {
                "name": "life",
                "detail": "\u8CC7\u7522\u7684\u6298\u820A\u671F\u6578\uFF08\u6709\u6642\u4E5F\u7A31\u4F5C\u8CC7\u7522\u7684\u4F7F\u7528\u58FD\u547D\uFF09\u3002"
              },
              {
                "name": "period",
                "detail": "\u5728\u4F7F\u7528\u671F\u9650\u5167\u8981\u8A08\u7B97\u6298\u820A\u7684\u6298\u820A\u671F\u3002"
              },
              {
                "name": "factor",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA2] - \u6298\u820A\u7684\u905E\u6E1B\u4FC2\u6578\u3002"
              }
            ]
          },
          "RATE": {
            "d": "\u8FD4\u56DE\u5E74\u91D1\u6BCF\u671F\u7684\u5229\u7387\u3002",
            "a": "\u8FD4\u56DE\u5E74\u91D1\u6BCF\u671F\u7684\u5229\u7387\u3002",
            "p": [
              {
                "name": "nper",
                "detail": "\u5E74\u91D1\u7684\u4ED8\u6B3E\u7E3D\u671F\u6578\u3002"
              },
              {
                "name": "pmt",
                "detail": "\u6BCF\u671F\u7684\u4ED8\u6B3E\u91D1\u984D,\u5728\u5E74\u91D1\u9031\u671F\u5167\u4E0D\u80FD\u66F4\u6539\u3002"
              },
              {
                "name": "pv",
                "detail": "\u73FE\u503C\u5373\u4E00\u7CFB\u5217\u672A\u4F86\u4ED8\u6B3E\u7576\u524D\u503C\u7684\u7E3D\u548C\u3002"
              },
              {
                "name": "fv",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0] - \u672A\u4F86\u503C,\u6216\u5728\u6700\u5F8C\u4E00\u6B21\u4ED8\u6B3E\u5F8C\u5E0C\u671B\u5F97\u5230\u7684\u73FE\u91D1\u9918\u984D\u3002"
              },
              {
                "name": "type",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0] - \u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u6642\u9593\u662F\u5728\u671F\u521D\u9084\u662F\u671F\u672B\u3002\n\n0\u8868\u793A\u671F\u672B\uFF1B\n\n1\u8868\u793A\u671F\u521D\u3002"
              },
              {
                "name": "guess",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0.1] - \u9810\u671F\u5229\u7387\u3002"
              }
            ]
          },
          "CUMPRINC": {
            "d": "\u57FA\u65BC\u7B49\u984D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387,\u8A08\u7B97\u6295\u8CC7\u5728\u591A\u500B\u4ED8\u6B3E\u671F\u5167\u7684\u7D2F\u8A08\u672C\u91D1\u511F\u9084\u984D\u3002",
            "a": "\u57FA\u65BC\u7B49\u984D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387,\u8A08\u7B97\u6295\u8CC7\u5728\u591A\u500B\u4ED8\u6B3E\u671F\u5167\u7684\u7D2F\u8A08\u672C\u91D1\u511F\u9084\u984D\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5229\u7387\u3002"
              },
              {
                "name": "nper",
                "detail": "\u7E3D\u4ED8\u6B3E\u671F\u6578\u3002"
              },
              {
                "name": "pv",
                "detail": "\u5E74\u91D1\u7684\u73FE\u503C\u3002"
              },
              {
                "name": "start_period",
                "detail": "\u958B\u59CB\u7D2F\u8A08\u8A08\u7B97\u7684\u4ED8\u6B3E\u671F\u5E8F\u865F\u3002\n\n\u9996\u671F\u5FC5\u9808\u5927\u65BC\u7B49\u65BC1\u3002"
              },
              {
                "name": "end_period",
                "detail": "\u7D50\u675F\u7D2F\u8A08\u8A08\u7B97\u7684\u4ED8\u6B3E\u671F\u5E8F\u865F\u3002\n\n\u672B\u671F\u5FC5\u9808\u5927\u65BC\u9996\u671F\u3002"
              },
              {
                "name": "type",
                "detail": "\u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u6642\u9593\u662F\u5728\u671F\u521D\u9084\u662F\u671F\u672B\u3002\n\n0\u8868\u793A\u671F\u672B\uFF1B\n\n1\u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "COUPNUM": {
            "d": "\u8FD4\u56DE\u5728\u7D50\u7B97\u65E5\u548C\u5230\u671F\u65E5\u4E4B\u9593\u7684\u4ED8\u606F\u6B21\u6578\uFF0C\u5411\u4E0A\u820D\u5165\u5230\u6700\u8FD1\u7684\u6574\u6578",
            "a": "\u8FD4\u56DE\u5728\u7D50\u7B97\u65E5\u548C\u5230\u671F\u65E5\u4E4B\u9593\u7684\u4ED8\u606F\u6B21\u6578\uFF0C\u5411\u4E0A\u820D\u5165\u5230\u6700\u8FD1\u7684\u6574\u6578",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6578\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8,frequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8,frequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8,frequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "SYD": {
            "d": "\u8FD4\u56DE\u5728\u6307\u5B9A\u671F\u9593\u5167\u8CC7\u7522\u6309\u5E74\u9650\u7E3D\u548C\u6298\u820A\u6CD5\u8A08\u7B97\u7684\u6298\u820A\u3002",
            "a": "\u8FD4\u56DE\u5728\u6307\u5B9A\u671F\u9593\u5167\u8CC7\u7522\u6309\u5E74\u9650\u7E3D\u548C\u6298\u820A\u6CD5\u8A08\u7B97\u7684\u6298\u820A\u3002",
            "p": [
              {
                "name": "cost",
                "detail": "\u8CC7\u7522\u539F\u503C\u3002"
              },
              {
                "name": "salvage",
                "detail": "\u6298\u820A\u672B\u5C3E\u6642\u7684\u503C\uFF08\u6709\u6642\u4E5F\u7A31\u70BA\u8CC7\u7522\u6B98\u503C\uFF09\u3002"
              },
              {
                "name": "life",
                "detail": "\u8CC7\u7522\u7684\u6298\u820A\u671F\u6578\uFF08\u6709\u6642\u4E5F\u7A31\u4F5C\u8CC7\u7522\u7684\u4F7F\u7528\u58FD\u547D\uFF09\u3002"
              },
              {
                "name": "period",
                "detail": "\u5728\u4F7F\u7528\u671F\u9650\u5167\u8981\u8A08\u7B97\u6298\u820A\u7684\u6298\u820A\u671F\u3002"
              }
            ]
          },
          "TBILLEQ": {
            "d": "\u57FA\u65BC\u8CBC\u73FE\u7387\u8A08\u7B97\u7F8E\u570B\u653F\u5E9C\u77ED\u671F\u50B5\u5238\u7684\u7B49\u6548\u5E74\u5316\u6536\u76CA\u7387\u3002",
            "a": "\u57FA\u65BC\u8CBC\u73FE\u7387\u8A08\u7B97\u7F8E\u570B\u653F\u5E9C\u77ED\u671F\u50B5\u5238\u7684\u7B49\u6548\u5E74\u5316\u6536\u76CA\u7387\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u50B5\u5238\u7684\u7D50\u7B97\u65E5\u671F,\u6B64\u65E5\u671F\u70BA\u50B5\u5238\u767C\u884C\u5F8C\u4EA4\u4ED8\u7D66\u8CB7\u5BB6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u50B5\u5238\u7684\u5230\u671F\u6216\u7D50\u675F\u65E5\u671F,\u5C4A\u6642\u53EF\u5C07\u5176\u4EE5\u9762\u503C\u6216\u7968\u9762\u50F9\u503C\u8D16\u56DE\u3002"
              },
              {
                "name": "discount",
                "detail": "\u50B5\u5238\u8CFC\u8CB7\u6642\u7684\u8CBC\u73FE\u7387\u3002"
              }
            ]
          },
          "TBILLYIELD": {
            "d": "\u57FA\u65BC\u50F9\u683C\u8A08\u7B97\u7F8E\u570B\u653F\u5E9C\u77ED\u671F\u50B5\u5238\u7684\u6536\u76CA\u7387\u3002",
            "a": "\u57FA\u65BC\u50F9\u683C\u8A08\u7B97\u7F8E\u570B\u653F\u5E9C\u77ED\u671F\u50B5\u5238\u7684\u6536\u76CA\u7387\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u50B5\u5238\u7684\u7D50\u7B97\u65E5\u671F,\u6B64\u65E5\u671F\u70BA\u50B5\u5238\u767C\u884C\u5F8C\u4EA4\u4ED8\u7D66\u8CB7\u5BB6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u50B5\u5238\u7684\u5230\u671F\u6216\u7D50\u675F\u65E5\u671F,\u5C4A\u6642\u53EF\u5C07\u5176\u4EE5\u9762\u503C\u6216\u7968\u9762\u50F9\u503C\u8D16\u56DE\u3002"
              },
              {
                "name": "pr",
                "detail": "\u50B5\u5238\u7684\u8CFC\u8CB7\u50F9\u683C\u3002"
              }
            ]
          },
          "TBILLPRICE": {
            "d": "\u57FA\u65BC\u8CBC\u73FE\u7387\u8A08\u7B97\u7F8E\u570B\u653F\u5E9C\u77ED\u671F\u50B5\u5238\u7684\u50F9\u683C\u3002",
            "a": "\u57FA\u65BC\u8CBC\u73FE\u7387\u8A08\u7B97\u7F8E\u570B\u653F\u5E9C\u77ED\u671F\u50B5\u5238\u7684\u50F9\u683C\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u50B5\u5238\u7684\u7D50\u7B97\u65E5\u671F,\u6B64\u65E5\u671F\u70BA\u50B5\u5238\u767C\u884C\u5F8C\u4EA4\u4ED8\u7D66\u8CB7\u5BB6\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u50B5\u5238\u7684\u5230\u671F\u6216\u7D50\u675F\u65E5\u671F,\u5C4A\u6642\u53EF\u5C07\u5176\u4EE5\u9762\u503C\u6216\u7968\u9762\u50F9\u503C\u8D16\u56DE\u3002"
              },
              {
                "name": "discount",
                "detail": "\u50B5\u5238\u8CFC\u8CB7\u6642\u7684\u8CBC\u73FE\u7387\u3002"
              }
            ]
          },
          "PV": {
            "d": "\u57FA\u65BC\u7B49\u984D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387,\u8A08\u7B97\u5E74\u91D1\u6295\u8CC7\u7684\u73FE\u503C\u3002",
            "a": "\u57FA\u65BC\u7B49\u984D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387,\u8A08\u7B97\u5E74\u91D1\u6295\u8CC7\u7684\u73FE\u503C\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5404\u671F\u5229\u7387\u3002"
              },
              {
                "name": "nper",
                "detail": "\u5E74\u91D1\u7684\u4ED8\u6B3E\u7E3D\u671F\u6578\u3002"
              },
              {
                "name": "pmt",
                "detail": "\u6BCF\u671F\u7684\u4ED8\u6B3E\u91D1\u984D,\u5728\u5E74\u91D1\u9031\u671F\u5167\u4E0D\u80FD\u66F4\u6539\u3002"
              },
              {
                "name": "fv",
                "detail": "[\u53EF\u9078] - \u672A\u4F86\u503C,\u6216\u5728\u6700\u5F8C\u4E00\u6B21\u4ED8\u6B3E\u5F8C\u5E0C\u671B\u5F97\u5230\u7684\u73FE\u91D1\u9918\u984D\u3002"
              },
              {
                "name": "type",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0] - \u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u6642\u9593\u662F\u5728\u671F\u521D\u9084\u662F\u671F\u672B\u3002\n\n0\u8868\u793A\u671F\u672B\uFF1B\n\n1\u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "ACCRINT": {
            "d": "\u8FD4\u56DE\u5B9A\u671F\u4ED8\u606F\u8B49\u5238\u7684\u61C9\u8A08\u5229\u606F\u3002",
            "a": "\u8FD4\u56DE\u5B9A\u671F\u4ED8\u606F\u8B49\u5238\u7684\u61C9\u8A08\u5229\u606F\u3002",
            "p": [
              {
                "name": "issue",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u767C\u884C\u65E5\u3002"
              },
              {
                "name": "first_interest",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u9996\u6B21\u8A08\u606F\u65E5\u3002"
              },
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "rate",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5E74\u606F\u7968\u5229\u7387\u3002"
              },
              {
                "name": "par",
                "detail": "\u8B49\u5238\u7684\u7968\u9762\u503C\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6578\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8,frequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8,frequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8,frequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A""\u6B50\u6D3230/360"\u65B9\u6CD5"-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              },
              {
                "name": "calc_method",
                "detail": "[\u53EF\u9078 - \u9ED8\u8A8D\u70BATRUE\uFF08\uFF09] - \u4E00\u500B\u908F\u8F2F\u503C,\u6307\u5B9A\u7576\u7D50\u7B97\u65E5\u671F\u665A\u65BC\u9996\u6B21\u8A08\u606F\u65E5\u671F\u6642\u7528\u65BC\u8A08\u7B97\u7E3D\u61C9\u8A08\u5229\u606F\u7684\u65B9\u6CD5\u3002\n\n\u5982\u679C\u503C\u70BATRUE,\u5247\u8FD4\u56DE\u5F9E\u767C\u884C\u65E5\u5230\u7D50\u7B97\u65E5\u7684\u7E3D\u61C9\u8A08\u5229\u606F\u3002\n\n\u5982\u679C\u503C\u70BAFALSE,\u5247\u8FD4\u56DE\u5F9E\u9996\u6B21\u8A08\u606F\u65E5\u5230\u7D50\u7B97\u65E5\u7684\u61C9\u8A08\u5229\u606F\u3002"
              }
            ]
          },
          "ACCRINTM": {
            "d": "\u8FD4\u56DE\u5728\u5230\u671F\u65E5\u652F\u4ED8\u5229\u606F\u7684\u6709\u50F9\u8B49\u5238\u7684\u61C9\u8A08\u5229\u606F\u3002",
            "a": "\u8FD4\u56DE\u5728\u5230\u671F\u65E5\u652F\u4ED8\u5229\u606F\u7684\u6709\u50F9\u8B49\u5238\u7684\u61C9\u8A08\u5229\u606F\u3002",
            "p": [
              {
                "name": "issue",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u767C\u884C\u65E5\u3002"
              },
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002"
              },
              {
                "name": "rate",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5E74\u606F\u7968\u5229\u7387\u3002"
              },
              {
                "name": "par",
                "detail": "\u8B49\u5238\u7684\u7968\u9762\u503C\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "COUPDAYBS": {
            "d": "\u8FD4\u56DE\u5F9E\u4ED8\u606F\u671F\u958B\u59CB\u5230\u7D50\u7B97\u65E5\u7684\u5929\u6578\u3002",
            "a": "\u8FD4\u56DE\u5F9E\u4ED8\u606F\u671F\u958B\u59CB\u5230\u7D50\u7B97\u65E5\u7684\u5929\u6578\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6578\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8,frequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8,frequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8,frequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "COUPDAYS": {
            "d": "\u8FD4\u56DE\u7D50\u7B97\u65E5\u6240\u5728\u7684\u4ED8\u606F\u671F\u7684\u5929\u6578\u3002",
            "a": "\u8FD4\u56DE\u7D50\u7B97\u65E5\u6240\u5728\u7684\u4ED8\u606F\u671F\u7684\u5929\u6578\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6578\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8,frequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8,frequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8,frequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] -\u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "COUPDAYSNC": {
            "d": "\u8FD4\u56DE\u5F9E\u7D50\u7B97\u65E5\u5230\u4E0B\u4E00\u7968\u606F\u652F\u4ED8\u65E5\u4E4B\u9593\u7684\u5929\u6578\u3002",
            "a": "\u8FD4\u56DE\u5F9E\u7D50\u7B97\u65E5\u5230\u4E0B\u4E00\u7968\u606F\u652F\u4ED8\u65E5\u4E4B\u9593\u7684\u5929\u6578\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6578\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8,frequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8,frequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8,frequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5  - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "COUPNCD": {
            "d": "\u8A08\u7B97\u7D50\u7B97\u65E5\u4E4B\u5F8C\u7684\u4E0B\u4E00\u7968\u606F\u6216\u5229\u606F\u6D3E\u767C\u65E5\u671F\u3002",
            "a": "\u8A08\u7B97\u7D50\u7B97\u65E5\u4E4B\u5F8C\u7684\u4E0B\u4E00\u7968\u606F\u6216\u5229\u606F\u6D3E\u767C\u65E5\u671F\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6578\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8,frequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8,frequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8,frequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "COUPPCD": {
            "d": "\u8A08\u7B97\u7D50\u7B97\u65E5\u4E4B\u524D\u7684\u6700\u5F8C\u4E00\u500B\u7968\u606F\u6216\u5229\u606F\u652F\u4ED8\u65E5\u3002",
            "a": "\u8A08\u7B97\u7D50\u7B97\u65E5\u4E4B\u524D\u7684\u6700\u5F8C\u4E00\u500B\u7968\u606F\u6216\u5229\u606F\u652F\u4ED8\u65E5\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6578\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8,frequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8,frequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8,frequency = 4 \u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "FV": {
            "d": "\u57FA\u65BC\u7B49\u984D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387,\u8A08\u7B97\u5E74\u91D1\u6295\u8CC7\u7684\u672A\u4F86\u50F9\u503C\u3002",
            "a": "\u57FA\u65BC\u7B49\u984D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387,\u8A08\u7B97\u5E74\u91D1\u6295\u8CC7\u7684\u672A\u4F86\u50F9\u503C\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5404\u671F\u5229\u7387\u3002"
              },
              {
                "name": "nper",
                "detail": "\u5E74\u91D1\u7684\u4ED8\u6B3E\u7E3D\u671F\u6578\u3002"
              },
              {
                "name": "pmt",
                "detail": "\u5404\u671F\u6240\u61C9\u652F\u4ED8\u7684\u91D1\u984D,\u5728\u6574\u500B\u5E74\u91D1\u671F\u9593\u4FDD\u6301\u4E0D\u8B8A\u3002"
              },
              {
                "name": "pv",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0 ] - \u73FE\u503C,\u6216\u4E00\u7CFB\u5217\u672A\u4F86\u4ED8\u6B3E\u7684\u7576\u524D\u503C\u7684\u7D2F\u7A4D\u548C\u3002"
              },
              {
                "name": "type",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0 ] - \u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u6642\u9593\u662F\u5728\u671F\u521D\u9084\u662F\u671F\u672B\u3002\n\n0\u8868\u793A\u671F\u672B\uFF1B\n\n1\u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "FVSCHEDULE": {
            "d": "\u8FD4\u56DE\u61C9\u7528\u4E00\u7CFB\u5217\u8907\u5229\u7387\u8A08\u7B97\u7684\u521D\u59CB\u672C\u91D1\u7684\u672A\u4F86\u503C\u3002",
            "a": "\u8FD4\u56DE\u61C9\u7528\u4E00\u7CFB\u5217\u8907\u5229\u7387\u8A08\u7B97\u7684\u521D\u59CB\u672C\u91D1\u7684\u672A\u4F86\u503C\u3002",
            "p": [
              {
                "name": "principal",
                "detail": "\u73FE\u503C\u3002"
              },
              {
                "name": "schedule",
                "detail": "\u7528\u65BC\u8A08\u7B97\u672C\u91D1\u8907\u5229\u7684\u4E00\u7D44\u5229\u7387\u3002\n\n\u5229\u7387\u9336\u5FC5\u9808\u662F\u7BC4\u570D\u6216\u6578\u7D44,\u5176\u4E2D\u5305\u542B\u8981\u7528\u65BC\u8A08\u7B97\u8907\u5229\u7684\u4E00\u7D44\u5229\u7387\u3002\u9019\u4E9B\u5229\u7387\u503C\u61C9\u8A72\u4EE5\u5341\u9032\u4F4D\u5C0F\u6578\u5F62\u5F0F\u8868\u793A,\u6216\u8005\u4F7F\u7528UNARY_PERCENT\u4EE5\u767E\u5206\u6BD4\u5F62\u5F0F\u8868\u793A,\u5373\u8868\u793A\u70BA0.09\u6216UNARY_PERCENT\uFF089\uFF09,\u800C\u4E0D\u8981\u8868\u793A\u70BA9\u3002"
              }
            ]
          },
          "YIELD": {
            "d": "\u8FD4\u56DE\u5B9A\u671F\u652F\u4ED8\u5229\u606F\u7684\u50B5\u5238\u7684\u6536\u76CA\u7387\u3002",
            "a": "\u8FD4\u56DE\u5B9A\u671F\u652F\u4ED8\u5229\u606F\u7684\u50B5\u5238\u7684\u6536\u76CA\u7387\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "rate",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5E74\u606F\u7968\u5229\u7387\u3002"
              },
              {
                "name": "pr",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u50F9\u683C\u3002"
              },
              {
                "name": "redemption",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u6E05\u511F\u50F9\u503C\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6578\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8,frequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8,frequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8,frequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "YIELDDISC": {
            "d": "\u57FA\u65BC\u50F9\u683C\u8A08\u7B97\u6298\u50F9\u767C\u884C\u7684\uFF08\u4E0D\u5E36\u606F\uFF09\u50B5\u5238\u7684\u5E74\u6536\u76CA\u7387\u3002",
            "a": "\u57FA\u65BC\u50F9\u683C\u8A08\u7B97\u6298\u50F9\u767C\u884C\u7684\uFF08\u4E0D\u5E36\u606F\uFF09\u50B5\u5238\u7684\u5E74\u6536\u76CA\u7387\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "pr",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u50F9\u683C\u3002"
              },
              {
                "name": "redemption",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u6E05\u511F\u50F9\u503C\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "NOMINAL": {
            "d": "\u57FA\u65BC\u7D66\u5B9A\u7684\u5BE6\u969B\u5229\u7387\u548C\u5E74\u8907\u5229\u671F\u6578,\u8FD4\u56DE\u540D\u7FA9\u5E74\u5229\u7387\u3002",
            "a": "\u57FA\u65BC\u7D66\u5B9A\u7684\u5BE6\u969B\u5229\u7387\u548C\u5E74\u8907\u5229\u671F\u6578,\u8FD4\u56DE\u540D\u7FA9\u5E74\u5229\u7387\u3002",
            "p": [
              {
                "name": "effect_rate",
                "detail": "\u6BCF\u5E74\u7684\u5BE6\u969B\u5229\u7387\u3002"
              },
              {
                "name": "npery",
                "detail": "\u6BCF\u5E74\u7684\u8907\u5229\u671F\u6578\u3002"
              }
            ]
          },
          "XIRR": {
            "d": "\u8FD4\u56DE\u4E00\u7D44\u4E0D\u4E00\u5B9A\u5B9A\u671F\u767C\u751F\u7684\u73FE\u91D1\u6D41\u7684\u5167\u90E8\u6536\u76CA\u7387\u3002",
            "a": "\u8FD4\u56DE\u4E00\u7D44\u4E0D\u4E00\u5B9A\u5B9A\u671F\u767C\u751F\u7684\u73FE\u91D1\u6D41\u7684\u5167\u90E8\u6536\u76CA\u7387\u3002",
            "p": [
              {
                "name": "values",
                "detail": "\u5176\u4E2D\u542B\u6709\u6295\u8CC7\u76F8\u95DC\u6536\u76CA\u6216\u652F\u51FA\u7684\u6578\u7D44\u6216\u7BC4\u570D\u3002\n\n\u73FE\u91D1\u6D41\u6578\u984D\u4E2D\u5FC5\u9808\u81F3\u5C11\u5305\u542B\u4E00\u9805\u8CA0\u7684\u548C\u4E00\u9805\u6B63\u7684\u73FE\u91D1\u6D41\u91D1\u984D\u624D\u80FD\u8A08\u7B97\u56DE\u5831\u7387\u3002"
              },
              {
                "name": "dates",
                "detail": "\u8207\u73FE\u91D1\u6D41\u6578\u984D\u53C3\u6578\u4E2D\u7684\u73FE\u91D1\u6D41\u5C0D\u61C9\u7684\u65E5\u671F\u6578\u7D44\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "guess",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0.1] - \u5C0D\u5167\u90E8\u56DE\u5831\u7387\u7684\u4F30\u7B97\u503C\u3002"
              }
            ]
          },
          "MIRR": {
            "d": "\u8FD4\u56DE\u4E00\u7CFB\u5217\u5B9A\u671F\u73FE\u91D1\u6D41\u7684\u4FEE\u6539\u5F8C\u5167\u90E8\u6536\u76CA\u7387\u3002",
            "a": "\u8FD4\u56DE\u4E00\u7CFB\u5217\u5B9A\u671F\u73FE\u91D1\u6D41\u7684\u4FEE\u6539\u5F8C\u5167\u90E8\u6536\u76CA\u7387\u3002",
            "p": [
              {
                "name": "values",
                "detail": "\u5176\u4E2D\u542B\u6709\u6295\u8CC7\u76F8\u95DC\u6536\u76CA\u6216\u652F\u51FA\u7684\u6578\u7D44\u6216\u7BC4\u570D\u3002\n\n\u73FE\u91D1\u6D41\u6578\u984D\u4E2D\u5FC5\u9808\u81F3\u5C11\u5305\u542B\u4E00\u9805\u8CA0\u7684\u548C\u4E00\u9805\u6B63\u7684\u73FE\u91D1\u6D41\u91D1\u984D\u624D\u80FD\u8A08\u7B97\u56DE\u5831\u7387\u3002"
              },
              {
                "name": "finance_rate",
                "detail": "\u73FE\u91D1\u6D41\u4E2D\u4F7F\u7528\u7684\u8CC7\u91D1\u652F\u4ED8\u7684\u5229\u7387\u3002"
              },
              {
                "name": "reinvest_rate",
                "detail": "\u5C07\u73FE\u91D1\u6D41\u518D\u6295\u8CC7\u7684\u6536\u76CA\u7387\u3002"
              }
            ]
          },
          "IRR": {
            "d": "\u8FD4\u56DE\u7531\u503C\u4E2D\u7684\u6578\u4F4D\u8868\u793A\u7684\u4E00\u7CFB\u5217\u73FE\u91D1\u6D41\u7684\u5167\u90E8\u6536\u76CA\u7387\u3002 ",
            "a": "\u8FD4\u56DE\u7531\u503C\u4E2D\u7684\u6578\u4F4D\u8868\u793A\u7684\u4E00\u7CFB\u5217\u73FE\u91D1\u6D41\u7684\u5167\u90E8\u6536\u76CA\u7387\u3002 ",
            "p": [
              {
                "name": "values",
                "detail": "\u5176\u4E2D\u542B\u6709\u6295\u8CC7\u76F8\u95DC\u6536\u76CA\u6216\u652F\u51FA\u7684\u6578\u7D44\u6216\u7BC4\u570D\u3002\n\n\u73FE\u91D1\u6D41\u6578\u984D\u4E2D\u5FC5\u9808\u81F3\u5C11\u5305\u542B\u4E00\u9805\u8CA0\u7684\u548C\u4E00\u9805\u6B63\u7684\u73FE\u91D1\u6D41\u91D1\u984D\u624D\u80FD\u8A08\u7B97\u56DE\u5831\u7387\u3002"
              },
              {
                "name": "guess",
                "detail": "[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0.1] - \u5167\u90E8\u6536\u76CA\u7387\u7684\u4F30\u503C\u3002"
              }
            ]
          },
          "NPV": {
            "d": "\u4F7F\u7528\u8CBC\u73FE\u7387\u548C\u4E00\u7CFB\u5217\u672A\u4F86\u652F\u51FA\uFF08\u8CA0\u503C\uFF09\u548C\u6536\u76CA\uFF08\u6B63\u503C\uFF09\u4F86\u8A08\u7B97\u4E00\u9805\u6295\u8CC7\u7684\u6DE8\u73FE\u503C\u3002",
            "a": "\u4F7F\u7528\u8CBC\u73FE\u7387\u548C\u4E00\u7CFB\u5217\u672A\u4F86\u652F\u51FA\uFF08\u8CA0\u503C\uFF09\u548C\u6536\u76CA\uFF08\u6B63\u503C\uFF09\u4F86\u8A08\u7B97\u4E00\u9805\u6295\u8CC7\u7684\u6DE8\u73FE\u503C\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u67D0\u4E00\u671F\u9593\u7684\u8CBC\u73FE\u7387\u3002"
              },
              {
                "name": "value1",
                "detail": "\u7B2C\u4E00\u7B46\u652F\u51FA\uFF08\u8CA0\u503C\uFF09\u548C\u6536\u76CA\uFF08\u6B63\u503C\uFF09\u3002"
              },
              {
                "name": "value2, ...",
                "detail": "[\u53EF\u9078] - \u5176\u4ED6\u652F\u51FA\uFF08\u8CA0\u503C\uFF09\u548C\u6536\u76CA\uFF08\u6B63\u503C\uFF09\u3002"
              }
            ]
          },
          "XNPV": {
            "d": "\u8FD4\u56DE\u4E00\u7D44\u73FE\u91D1\u6D41\u7684\u6DE8\u73FE\u503C,\u9019\u4E9B\u73FE\u91D1\u6D41\u4E0D\u4E00\u5B9A\u5B9A\u671F\u767C\u751F\u3002",
            "a": "\u8FD4\u56DE\u4E00\u7D44\u73FE\u91D1\u6D41\u7684\u6DE8\u73FE\u503C,\u9019\u4E9B\u73FE\u91D1\u6D41\u4E0D\u4E00\u5B9A\u5B9A\u671F\u767C\u751F\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u61C9\u7528\u65BC\u73FE\u91D1\u6D41\u7684\u8CBC\u73FE\u7387\u3002"
              },
              {
                "name": "values",
                "detail": "\u8207dates\u4E2D\u7684\u652F\u4ED8\u6642\u9593\u76F8\u5C0D\u61C9\u7684\u4E00\u7CFB\u5217\u73FE\u91D1\u6D41\u3002"
              },
              {
                "name": "dates",
                "detail": "\u8207\u73FE\u91D1\u6D41\u652F\u4ED8\u76F8\u5C0D\u61C9\u7684\u652F\u4ED8\u65E5\u671F\u9336\u3002"
              }
            ]
          },
          "CUMIPMT": {
            "d": "\u57FA\u65BC\u7B49\u984D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387,\u8A08\u7B97\u6295\u8CC7\u5728\u4E00\u7CFB\u5217\u4ED8\u6B3E\u671F\u5167\u7684\u7D2F\u8A08\u5229\u606F\u3002",
            "a": "\u57FA\u65BC\u7B49\u984D\u5206\u671F\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387,\u8A08\u7B97\u6295\u8CC7\u5728\u4E00\u7CFB\u5217\u4ED8\u6B3E\u671F\u5167\u7684\u7D2F\u8A08\u5229\u606F\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5229\u606F\u7387\u3002"
              },
              {
                "name": "nper",
                "detail": "\u7E3D\u4ED8\u6B3E\u671F\u6578\u3002"
              },
              {
                "name": "pv",
                "detail": "\u73FE\u503C\u3002"
              },
              {
                "name": "start_period",
                "detail": "\u958B\u59CB\u7D2F\u8A08\u8A08\u7B97\u7684\u4ED8\u6B3E\u671F\u5E8F\u865F\u3002\n\n\u9996\u671F\u5FC5\u9808\u5927\u65BC\u7B49\u65BC1\u3002"
              },
              {
                "name": "end_period",
                "detail": "\u7D50\u675F\u7D2F\u8A08\u8A08\u7B97\u7684\u4ED8\u6B3E\u671F\u5E8F\u865F\u3002\n\n\u672B\u671F\u5FC5\u9808\u5927\u65BC\u9996\u671F\u3002"
              },
              {
                "name": "type",
                "detail": "\u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u6642\u9593\u662F\u5728\u671F\u521D\u9084\u662F\u671F\u672B\u3002\n\n0\u8868\u793A\u671F\u672B\uFF1B\n\n1\u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "PMT": {
            "d": "\u7528\u65BC\u6839\u64DA\u56FA\u5B9A\u4ED8\u6B3E\u984D\u548C\u56FA\u5B9A\u5229\u7387\u8A08\u7B97\u8CB8\u6B3E\u7684\u4ED8\u6B3E\u984D\u3002",
            "a": "\u7528\u65BC\u6839\u64DA\u56FA\u5B9A\u4ED8\u6B3E\u984D\u548C\u56FA\u5B9A\u5229\u7387\u8A08\u7B97\u8CB8\u6B3E\u7684\u4ED8\u6B3E\u984D\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u8CB8\u6B3E\u5229\u7387\u3002"
              },
              {
                "name": "nper",
                "detail": "\u8A72\u9805\u8CB8\u6B3E\u7684\u4ED8\u6B3E\u7E3D\u6578\u3002"
              },
              {
                "name": "pv",
                "detail": "\u73FE\u503C,\u6216\u4E00\u7CFB\u5217\u672A\u4F86\u4ED8\u6B3E\u984D\u73FE\u5728\u6240\u503C\u7684\u7E3D\u984D,\u4E5F\u53EB\u672C\u91D1\u3002"
              },
              {
                "name": "fv",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0] - \u672A\u4F86\u503C,\u6216\u5728\u6700\u5F8C\u4E00\u6B21\u4ED8\u6B3E\u5F8C\u5E0C\u671B\u5F97\u5230\u7684\u73FE\u91D1\u9918\u984D\u3002"
              },
              {
                "name": "type",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0] - \u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u6642\u9593\u662F\u5728\u671F\u521D\u9084\u662F\u671F\u672B\u3002\n\n0\u8868\u793A\u671F\u672B\uFF1B\n\n1\u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "IPMT": {
            "d": "\u57FA\u65BC\u56FA\u5B9A\u5229\u7387\u53CA\u7B49\u984D\u5206\u671F\u4ED8\u6B3E\u7BA1\u9053,\u8FD4\u56DE\u7D66\u5B9A\u671F\u6578\u5167\u5C0D\u6295\u8CC7\u7684\u5229\u606F\u511F\u9084\u984D\u3002",
            "a": "\u57FA\u65BC\u56FA\u5B9A\u5229\u7387\u53CA\u7B49\u984D\u5206\u671F\u4ED8\u6B3E\u7BA1\u9053,\u8FD4\u56DE\u7D66\u5B9A\u671F\u6578\u5167\u5C0D\u6295\u8CC7\u7684\u5229\u606F\u511F\u9084\u984D\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5404\u671F\u5229\u7387\u3002"
              },
              {
                "name": "per",
                "detail": "\u7528\u65BC\u8A08\u7B97\u5176\u5229\u606F\u6578\u984D\u7684\u671F\u6578,\u5FC5\u9808\u57281\u5230nper\u4E4B\u9593\u3002"
              },
              {
                "name": "nper",
                "detail": "\u5E74\u91D1\u7684\u4ED8\u6B3E\u7E3D\u671F\u6578\u3002"
              },
              {
                "name": "pv",
                "detail": "\u73FE\u503C,\u6216\u4E00\u7CFB\u5217\u672A\u4F86\u4ED8\u6B3E\u7684\u7576\u524D\u503C\u7684\u7D2F\u7A4D\u548C\u3002"
              },
              {
                "name": "fv",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0] - \u672A\u4F86\u503C,\u6216\u5728\u6700\u5F8C\u4E00\u6B21\u4ED8\u6B3E\u5F8C\u5E0C\u671B\u5F97\u5230\u7684\u73FE\u91D1\u9918\u984D\u3002"
              },
              {
                "name": "type",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0] - \u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u6642\u9593\u662F\u5728\u671F\u521D\u9084\u662F\u671F\u672B\u3002\n\n0\u8868\u793A\u671F\u672B\uFF1B\n\n1\u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "PPMT": {
            "d": "\u8FD4\u56DE\u6839\u64DA\u5B9A\u671F\u56FA\u5B9A\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387\u800C\u5B9A\u7684\u6295\u8CC7\u5728\u5DF2\u77E5\u671F\u9593\u5167\u7684\u672C\u91D1\u511F\u4ED8\u984D\u3002",
            "a": "\u8FD4\u56DE\u6839\u64DA\u5B9A\u671F\u56FA\u5B9A\u4ED8\u6B3E\u548C\u56FA\u5B9A\u5229\u7387\u800C\u5B9A\u7684\u6295\u8CC7\u5728\u5DF2\u77E5\u671F\u9593\u5167\u7684\u672C\u91D1\u511F\u4ED8\u984D\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5404\u671F\u5229\u7387\u3002"
              },
              {
                "name": "per",
                "detail": "\u6307\u5B9A\u671F\u6578,\u8A72\u503C\u5FC5\u9808\u5728 1 \u5230 nper \u7BC4\u570D\u5167\u3002"
              },
              {
                "name": "nper",
                "detail": "\u5E74\u91D1\u7684\u4ED8\u6B3E\u7E3D\u671F\u6578\u3002"
              },
              {
                "name": "pv",
                "detail": "\u73FE\u503C\u5373\u4E00\u7CFB\u5217\u672A\u4F86\u4ED8\u6B3E\u7576\u524D\u503C\u7684\u7E3D\u548C\u3002"
              },
              {
                "name": "fv",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0] - \u672A\u4F86\u503C,\u6216\u5728\u6700\u5F8C\u4E00\u6B21\u4ED8\u6B3E\u5F8C\u5E0C\u671B\u5F97\u5230\u7684\u73FE\u91D1\u9918\u984D\u3002"
              },
              {
                "name": "type",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0] - \u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u6642\u9593\u662F\u5728\u671F\u521D\u9084\u662F\u671F\u672B\u3002\n\n0\u8868\u793A\u671F\u672B\uFF1B\n\n1\u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "INTRATE": {
            "d": "\u8FD4\u56DE\u5B8C\u5168\u6295\u8CC7\u578B\u8B49\u5238\u7684\u5229\u7387\u3002",
            "a": "\u8FD4\u56DE\u5B8C\u5168\u6295\u8CC7\u578B\u8B49\u5238\u7684\u5229\u7387\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "investment",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u6295\u8CC7\u984D\u3002"
              },
              {
                "name": "redemption",
                "detail": "\u6709\u50F9\u8B49\u5238\u5230\u671F\u6642\u7684\u514C\u63DB\u503C\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "PRICE": {
            "d": "\u8FD4\u56DE\u5B9A\u671F\u4ED8\u606F\u7684\u9762\u503C\uFFE5100\u7684\u6709\u50F9\u8B49\u5238\u7684\u50F9\u683C\u3002",
            "a": "\u8FD4\u56DE\u5B9A\u671F\u4ED8\u606F\u7684\u9762\u503C\uFFE5100\u7684\u6709\u50F9\u8B49\u5238\u7684\u50F9\u683C\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "rate",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5E74\u606F\u7968\u5229\u7387\u3002"
              },
              {
                "name": "yld",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5E74\u6536\u76CA\u7387\u3002"
              },
              {
                "name": "redemption",
                "detail": "\u9762\u503C\uFFE5100\u7684\u6709\u50F9\u8B49\u5238\u7684\u6E05\u511F\u50F9\u503C\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6578\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8,frequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8,frequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8,frequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "PRICEDISC": {
            "d": "\u8FD4\u56DE\u6298\u50F9\u767C\u884C\u7684\u9762\u503C\uFFE5100\u7684\u6709\u50F9\u8B49\u5238\u7684\u50F9\u683C\u3002",
            "a": "\u8FD4\u56DE\u6298\u50F9\u767C\u884C\u7684\u9762\u503C\uFFE5100\u7684\u6709\u50F9\u8B49\u5238\u7684\u50F9\u683C\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "discount",
                "detail": "\u6709\u4EF7\u8BC1\u5238\u7684\u8D34\u73B0\u7387\u3002"
              },
              {
                "name": "redemption",
                "detail": "\u9762\u503C\uFFE5100\u7684\u6709\u50F9\u8B49\u5238\u7684\u6E05\u511F\u50F9\u503C\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "PRICEMAT": {
            "d": "\u8FD4\u56DE\u5230\u671F\u4ED8\u606F\u7684\u9762\u503C\uFFE5100\u7684\u6709\u50F9\u8B49\u5238\u7684\u50F9\u683C\u3002",
            "a": "\u8FD4\u56DE\u5230\u671F\u4ED8\u606F\u7684\u9762\u503C\uFFE5100\u7684\u6709\u50F9\u8B49\u5238\u7684\u50F9\u683C\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "issue",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u767C\u884C\u65E5\u3002"
              },
              {
                "name": "rate",
                "detail": "\u6709\u50F9\u8B49\u5238\u5728\u767C\u884C\u65E5\u7684\u5229\u7387\u3002"
              },
              {
                "name": "yld",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5E74\u6536\u76CA\u7387\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "RECEIVED": {
            "d": "\u8FD4\u56DE\u4E00\u6B21\u6027\u4ED8\u606F\u7684\u6709\u50F9\u8B49\u5238\u5230\u671F\u6536\u56DE\u7684\u91D1\u984D\u3002",
            "a": "\u8FD4\u56DE\u4E00\u6B21\u6027\u4ED8\u606F\u7684\u6709\u50F9\u8B49\u5238\u5230\u671F\u6536\u56DE\u7684\u91D1\u984D\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "investment",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u6295\u8CC7\u984D\u3002"
              },
              {
                "name": "discount",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u8CBC\u73FE\u7387\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "DISC": {
            "d": "\u8FD4\u56DE\u6709\u50F9\u8B49\u5238\u7684\u8CBC\u73FE\u7387\u3002",
            "a": "\u8FD4\u56DE\u6709\u50F9\u8B49\u5238\u7684\u8CBC\u73FE\u7387\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "pr",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u50F9\u683C\uFF08\u6309\u9762\u503C\u70BA\uFFE5100\u8A08\u7B97\uFF09\u3002"
              },
              {
                "name": "redemption",
                "detail": "\u9762\u503C\uFFE5100\u7684\u6709\u50F9\u8B49\u5238\u7684\u6E05\u511F\u50F9\u503C\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "NPER": {
            "d": "\u57FA\u65BC\u56FA\u5B9A\u5229\u7387\u53CA\u7B49\u984D\u5206\u671F\u4ED8\u6B3E\u7BA1\u9053,\u8FD4\u56DE\u67D0\u9805\u6295\u8CC7\u7684\u7E3D\u671F\u6578\u3002",
            "a": "\u57FA\u65BC\u56FA\u5B9A\u5229\u7387\u53CA\u7B49\u984D\u5206\u671F\u4ED8\u6B3E\u7BA1\u9053,\u8FD4\u56DE\u67D0\u9805\u6295\u8CC7\u7684\u7E3D\u671F\u6578\u3002",
            "p": [
              {
                "name": "rate",
                "detail": "\u5404\u671F\u5229\u7387\u3002"
              },
              {
                "name": "pmt",
                "detail": "\u5404\u671F\u6240\u61C9\u652F\u4ED8\u7684\u91D1\u984D,\u5728\u6574\u500B\u5E74\u91D1\u671F\u9593\u4FDD\u6301\u4E0D\u8B8A\u3002"
              },
              {
                "name": "pv",
                "detail": "\u73FE\u503C,\u6216\u4E00\u7CFB\u5217\u672A\u4F86\u4ED8\u6B3E\u7684\u7576\u524D\u503C\u7684\u7D2F\u7A4D\u548C\u3002"
              },
              {
                "name": "fv",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0] - \u672A\u4F86\u503C,\u6216\u5728\u6700\u5F8C\u4E00\u6B21\u4ED8\u6B3E\u5F8C\u5E0C\u671B\u5F97\u5230\u7684\u73FE\u91D1\u9918\u984D\u3002"
              },
              {
                "name": "type",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BA0] - \u6307\u5B9A\u5404\u671F\u7684\u4ED8\u6B3E\u6642\u9593\u662F\u5728\u671F\u521D\u9084\u662F\u671F\u672B\u3002\n\n0\u8868\u793A\u671F\u672B\uFF1B\n\n1\u8868\u793A\u671F\u521D\u3002"
              }
            ]
          },
          "SLN": {
            "d": "\u8FD4\u56DE\u4E00\u500B\u671F\u9593\u5167\u7684\u8CC7\u7522\u7684\u76F4\u7DDA\u6298\u820A\u3002",
            "a": "\u8FD4\u56DE\u4E00\u500B\u671F\u9593\u5167\u7684\u8CC7\u7522\u7684\u76F4\u7DDA\u6298\u820A\u3002",
            "p": [
              {
                "name": "cost",
                "detail": "\u8CC7\u7522\u539F\u503C\u3002"
              },
              {
                "name": "salvage",
                "detail": "\u6298\u820A\u672B\u5C3E\u6642\u7684\u503C\uFF08\u6709\u6642\u4E5F\u7A31\u70BA\u8CC7\u7522\u6B98\u503C\uFF09\u3002"
              },
              {
                "name": "life",
                "detail": "\u8CC7\u7522\u7684\u6298\u820A\u671F\u6578\uFF08\u6709\u6642\u4E5F\u7A31\u4F5C\u8CC7\u7522\u7684\u4F7F\u7528\u58FD\u547D\uFF09\u3002"
              }
            ]
          },
          "DURATION": {
            "d": "\u8FD4\u56DE\u5047\u8A2D\u9762\u503C\uFFE5100\u7684\u5B9A\u671F\u4ED8\u606F\u6709\u50F9\u8B49\u5238\u7684\u4FEE\u6B63\u671F\u9650\u3002",
            "a": "\u8FD4\u56DE\u5047\u8A2D\u9762\u503C\uFFE5100\u7684\u5B9A\u671F\u4ED8\u606F\u6709\u50F9\u8B49\u5238\u7684\u4FEE\u6B63\u671F\u9650\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "coupon",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5E74\u606F\u7968\u5229\u7387\u3002"
              },
              {
                "name": "yld",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5E74\u6536\u76CA\u7387\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6578\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8,frequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8,frequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8,frequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "MDURATION": {
            "d": "\u8FD4\u56DE\u5047\u8A2D\u9762\u503C\uFFE5100\u7684\u6709\u50F9\u8B49\u5238\u7684Macauley\u4FEE\u6B63\u671F\u9650\u3002",
            "a": "\u8FD4\u56DE\u5047\u8A2D\u9762\u503C\uFFE5100\u7684\u6709\u50F9\u8B49\u5238\u7684Macauley\u4FEE\u6B63\u671F\u9650\u3002",
            "p": [
              {
                "name": "settlement",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u7D50\u7B97\u65E5\u3002\u6709\u50F9\u8B49\u5238\u7D50\u7B97\u65E5\u662F\u5728\u767C\u884C\u65E5\u4E4B\u5F8C,\u6709\u50F9\u8B49\u5238\u8CE3\u7D66\u8CFC\u8CB7\u8005\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "maturity",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5230\u671F\u65E5\u3002\u5230\u671F\u65E5\u662F\u6709\u50F9\u8B49\u5238\u6709\u6548\u671F\u622A\u6B62\u6642\u7684\u65E5\u671F\u3002"
              },
              {
                "name": "coupon",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5E74\u606F\u7968\u5229\u7387\u3002"
              },
              {
                "name": "yld",
                "detail": "\u6709\u50F9\u8B49\u5238\u7684\u5E74\u6536\u76CA\u7387\u3002"
              },
              {
                "name": "frequency",
                "detail": "\u5E74\u4ED8\u606F\u6B21\u6578\u3002\n\n\u5982\u679C\u6309\u5E74\u652F\u4ED8,frequency = 1\uFF1B\n\n\u6309\u534A\u5E74\u671F\u652F\u4ED8,frequency = 2\uFF1B\n\n\u6309\u5B63\u652F\u4ED8,frequency = 4\u3002"
              },
              {
                "name": "basis",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u8A13\u793A\u8981\u4F7F\u7528\u54EA\u7A2E\u5929\u6578\u8A08\u7B97\u65B9\u6CD5\u3002\n\n0\u8868\u793A"\u7F8E\u570B\uFF08NASD\uFF0930/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u6309\u7167\u7F8E\u570B\u5168\u570B\u8B49\u5238\u4EA4\u6613\u5546\u5354\u6703\u6A19\u6E96,\u5047\u8A2D\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929,\u4E26\u5C0D\u6240\u8F38\u5165\u7684\u6708\u672B\u65E5\u671F\u9032\u884C\u5177\u9AD4\u8ABF\u6574\u3002\n\n1\u8868\u793A"\u5BE6\u969B/\u5BE6\u969B"\u65B9\u6CD5-\u6B64\u65B9\u6CD5\u8A08\u7B97\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u548C\u6240\u6D89\u53CA\u7684\u5E74\u4EFD\u4E2D\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97\u3002\u6B64\u65B9\u6CD5\u7528\u65BC\u7F8E\u570B\u9577\u671F\u50B5\u5238,\u4E5F\u662F\u5728\u975E\u8CA1\u7D93\u7528\u9014\u65B9\u9762\u4F7F\u7528\u6700\u591A\u7684\u65B9\u6CD5\u3002\n\n2\u8868\u793A"\u5BE6\u969B/360"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97, \u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA360\u5929\u3002\n\n3\u8868\u793A"\u5BE6\u969B/365"\u65B9\u6CD5 - \u6B64\u65B9\u6CD5\u57FA\u65BC\u6307\u5B9A\u65E5\u671F\u4E4B\u9593\u7684\u5BE6\u969B\u5929\u6578\u9032\u884C\u8A08\u7B97,\u4F46\u5047\u5B9A\u6BCF\u5E74\u70BA365\u5929\u3002\n\n4\u8868\u793A"\u6B50\u6D3230 / 360"\u65B9\u6CD5-\u985E\u4F3C\u65BC0,\u6B64\u65B9\u6CD5\u57FA\u65BC\u6BCF\u670830\u5929\u3001\u6BCF\u5E74360\u5929\u9032\u884C\u8A08\u7B97,\u4F46\u6309\u7167\u6B50\u6D32\u91D1\u878D\u6163\u4F8B\u5C0D\u6708\u672B\u65E5\u671F\u9032\u884C\u8ABF\u6574\u3002'
              }
            ]
          },
          "BIN2DEC": {
            "d": "\u5C07\u4E8C\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u5341\u9032\u4F4D\u6578\u3002",
            "a": "\u5C07\u4E8C\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u5341\u9032\u4F4D\u6578\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F49\u63DB\u70BA\u5341\u9032\u4F4D\u6578\u7684\u5E36\u7B26\u865F\u768410\u4F4D\u4E8C\u9032\u4F4D\u6578\u503C\uFF08\u4EE5\u5B57\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E36\u7B26\u865F\u7684\u4E8C\u9032\u4F4D\u6578\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u865F\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8AAA,\u8CA0\u6578\u662F\u4EE5\u4E8C\u7684\u88DC\u6578\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u5C0D\u65BC\u6B64\u51FD\u6578,\u6700\u5927\u7684\u6B63\u6578\u8F38\u5165\u503C\u70BA0111111111,\u6700\u5C0F\u7684\u8CA0\u6578\u8F38\u5165\u503C\u70BA1000000000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E36\u7B26\u865F\u7684\u4E8C\u9032\u4F4D\u6578\u662F\u6709\u6548\u7684\u4E8C\u9032\u4F4D\u6578,\u6703\u81EA\u52D5\u5C07\u5176\u8F49\u63DB\u70BA\u76F8\u61C9\u7684\u5B57\u4E32\u8F38\u5165\u3002\u4F8B\u5982,BIN2DEC\uFF08100\uFF09\u548CBIN2DEC\uFF08"100"\uFF09\u5F97\u51FA\u7684\u7D50\u679C\u76F8\u540C,\u5747\u70BA4\u3002'
              }
            ]
          },
          "BIN2HEX": {
            "d": "\u5C07\u4E8C\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u5341\u516D\u9032\u4F4D\u6578\u3002",
            "a": "\u5C07\u4E8C\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u5341\u516D\u9032\u4F4D\u6578\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F49\u63DB\u70BA\u5E36\u7B26\u865F\u7684\u5341\u516D\u9032\u4F4D\u6578\u7684\u5E36\u7B26\u865F\u768410\u4F4D\u4E8C\u9032\u4F4D\u6578\u503C\uFF08\u4EE5\u5B57\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E36\u7B26\u865F\u7684\u4E8C\u9032\u4F4D\u6578\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u865F\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8AAA,\u8CA0\u6578\u662F\u4EE5\u4E8C\u7684\u88DC\u6578\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u5C0D\u65BC\u6B64\u51FD\u6578,\u6700\u5927\u7684\u6B63\u6578\u8F38\u5165\u503C\u70BA0111111111,\u6700\u5C0F\u7684\u8CA0\u6578\u8F38\u5165\u503C\u70BA1000000000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E36\u7B26\u865F\u7684\u4E8C\u9032\u4F4D\u6578\u662F\u6709\u6548\u7684\u4E8C\u9032\u4F4D\u6578,\u6703\u81EA\u52D5\u5C07\u5176\u8F49\u63DB\u70BA\u76F8\u61C9\u7684\u5B57\u4E32\u8F38\u5165\u3002\u4F8B\u5982,BIN2HEX\uFF0811111\uFF09\u548CBIN2HEX\uFF08"11111"\uFF09\u5F97\u51FA\u7684\u7D50\u679C\u76F8\u540C,\u5747\u70BA1F\u3002'
              },
              {
                "name": "places",
                "detail": '[ \u53EF\u9078 ] -\u7D50\u679C\u4E2D\u8981\u78BA\u4FDD\u7684\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u8A2D\u5B9A\u7684\u6709\u6548\u4F4D\u6578\u5927\u65BC\u7D50\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6578,\u5247\u5728\u7D50\u679C\u7684\u5DE6\u5074\u586B\u51450,\u4F7F\u7E3D\u6709\u6548\u4F4D\u6578\u9054\u5230\u6709\u6548\u4F4D\u6578\u3002\u4F8B\u5982,BIN2HEX\uFF08"11111",8\uFF09\u6240\u5F97\u7684\u7D50\u679C\u503C\u70BA0000001F\u3002\n\n\u5982\u679C\u5E36\u7B26\u865F\u7684\u4E8C\u9032\u4F4D\u6578\u7684\u6700\u9AD8\u4F4D\u70BA1,\u5247\u5FFD\u7565\u6B64\u503C\uFF1B\u5373\u7576\u63D0\u4F9B\u7684\u5E36\u7B26\u865F\u7684\u4E8C\u9032\u4F4D\u6578\u5927\u65BC\u7B49\u65BC1000000000\u6642\u5FFD\u7565\u6B64\u503C\u3002'
              }
            ]
          },
          "BIN2OCT": {
            "d": "\u4E8C\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u516B\u9032\u5236\u6578\u3002",
            "a": "\u4E8C\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u516B\u9032\u5236\u6578\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F49\u63DB\u70BA\u5E36\u7B26\u865F\u7684\u516B\u9032\u5236\u6578\u7684\u5E36\u7B26\u865F\u768410\u4F4D\u4E8C\u9032\u4F4D\u6578\u503C\uFF08\u4EE5\u5B57\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E36\u7B26\u865F\u7684\u4E8C\u9032\u4F4D\u6578\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u865F\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8AAA,\u8CA0\u6578\u662F\u4EE5\u4E8C\u7684\u88DC\u6578\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u5C0D\u65BC\u6B64\u51FD\u6578,\u6700\u5927\u7684\u6B63\u6578\u8F38\u5165\u503C\u70BA0111111111,\u6700\u5C0F\u7684\u8CA0\u6578\u8F38\u5165\u503C\u70BA1000000000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E36\u7B26\u865F\u7684\u4E8C\u9032\u4F4D\u6578\u662F\u6709\u6548\u7684\u4E8C\u9032\u4F4D\u6578,\u6703\u81EA\u52D5\u5C07\u5176\u8F49\u63DB\u70BA\u76F8\u61C9\u7684\u5B57\u4E32\u8F38\u5165\u3002\u4F8B\u5982,BIN2OCT\uFF0811111\uFF09\u548CBIN2OCT\uFF08"11111"\uFF09\u5F97\u51FA\u7684\u7D50\u679C\u76F8\u540C,\u5747\u70BA37\u3002'
              },
              {
                "name": "places",
                "detail": '[ \u53EF\u9078 ] - \u7D50\u679C\u4E2D\u8981\u78BA\u4FDD\u7684\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u8A2D\u5B9A\u7684\u6709\u6548\u4F4D\u6578\u5927\u65BC\u7D50\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6578,\u5247\u5728\u7D50\u679C\u7684\u5DE6\u5074\u586B\u51450,\u4F7F\u7E3D\u6709\u6548\u4F4D\u6578\u9054\u5230\u6709\u6548\u4F4D\u6578\u3002\u4F8B\u5982,BIN2OCT\uFF08"11111"\uFF09\u5F97\u5230\u7684\u7D50\u679C\u503C\u70BA00000037\u3002\n\n\u5982\u679C\u5E36\u7B26\u865F\u7684\u4E8C\u9032\u4F4D\u6578\u7684\u6700\u9AD8\u4F4D\u70BA1,\u5247\u5FFD\u7565\u6B64\u503C\uFF1B\u5373\u7576\u63D0\u4F9B\u7684\u5E36\u7B26\u865F\u7684\u4E8C\u9032\u4F4D\u6578\u5927\u65BC\u7B49\u65BC1000000000\u6642\u5FFD\u7565\u6B64\u503C\u3002'
              }
            ]
          },
          "DEC2BIN": {
            "d": "\u5C07\u5341\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u4E8C\u9032\u4F4D\u6578\u3002",
            "a": "\u5C07\u5341\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u4E8C\u9032\u4F4D\u6578\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F49\u63DB\u70BA\u5E36\u7B26\u865F\u7684\u4E8C\u9032\u4F4D\u6578\u7684\u5341\u9032\u4F4D\u6578\u503C\uFF08\u4EE5\u5B57\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5C0D\u65BC\u6B64\u51FD\u6578,\u6700\u5927\u7684\u6B63\u6578\u8F38\u5165\u503C\u70BA511,\u6700\u5C0F\u7684\u8CA0\u6578\u8F38\u5165\u503C\u70BA-512\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5341\u9032\u4F4D\u6578\u662F\u6709\u6548\u7684\u5341\u9032\u4F4D\u6578,\u6703\u81EA\u52D5\u5C07\u5176\u8F49\u63DB\u70BA\u76F8\u61C9\u7684\u5B57\u4E32\u8F38\u5165\u3002\u4F8B\u5982,DEC2BIN\uFF08199\uFF09\u548CDEC2BIN\uFF08"199"\uFF09\u5F97\u51FA\u7684\u7D50\u679C\u76F8\u540C,\u5747\u70BA11000111\u3002'
              },
              {
                "name": "places",
                "detail": "[ \u53EF\u9078 ] - \u7D50\u679C\u4E2D\u8981\u78BA\u4FDD\u7684\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u8A2D\u5B9A\u7684\u6709\u6548\u4F4D\u6578\u5927\u65BC\u7D50\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6578,\u5247\u5728\u7D50\u679C\u7684\u5DE6\u5074\u586B\u51450,\u4F7F\u7E3D\u6709\u6548\u4F4D\u6578\u9054\u5230\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u5341\u9032\u4F4D\u6578\u70BA\u8CA0\u6578,\u5247\u5FFD\u7565\u6B64\u503C\u3002"
              }
            ]
          },
          "DEC2HEX": {
            "d": "\u5C07\u5341\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u5341\u516D\u9032\u4F4D\u6578\u3002",
            "a": "\u5C07\u5341\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u5341\u516D\u9032\u4F4D\u6578\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F49\u63DB\u70BA\u5E36\u7B26\u865F\u7684\u5341\u516D\u9032\u4F4D\u6578\u7684\u5341\u9032\u4F4D\u6578\u503C\uFF08\u4EE5\u5B57\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u6B64\u51FD\u6578\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6578\u503C\u70BA549755813887,\u6700\u5C0F\u8CA0\u6578\u503C\u70BA-549755814888\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5341\u9032\u4F4D\u6578\u662F\u6709\u6548\u7684\u5341\u9032\u4F4D\u6578,\u6703\u81EA\u52D5\u5C07\u5176\u8F49\u63DB\u70BA\u76F8\u61C9\u7684\u5B57\u4E32\u8F38\u5165\u3002\u4F8B\u5982,DEC2HEX\uFF08100\uFF09\u548CDEC2HEX\uFF08"100"\uFF09\u5F97\u51FA\u7684\u7D50\u679C\u76F8\u540C,\u5747\u70BA64\u3002'
              },
              {
                "name": "places",
                "detail": "[ \u53EF\u9078 ] - \u7D50\u679C\u4E2D\u8981\u78BA\u4FDD\u7684\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u8A2D\u5B9A\u7684\u6709\u6548\u4F4D\u6578\u5927\u65BC\u7D50\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6578,\u5247\u5728\u7D50\u679C\u7684\u5DE6\u5074\u586B\u51450,\u4F7F\u7E3D\u6709\u6548\u4F4D\u6578\u9054\u5230\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u5341\u9032\u4F4D\u6578\u70BA\u8CA0\u6578,\u5247\u5FFD\u7565\u6B64\u503C\u3002"
              }
            ]
          },
          "DEC2OCT": {
            "d": "\u5C07\u5341\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u516B\u9032\u5236\u6578\u3002",
            "a": "\u5C07\u5341\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u516B\u9032\u5236\u6578\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F49\u63DB\u70BA\u5E36\u7B26\u865F\u7684\u516B\u9032\u5236\u6578\u7684\u5341\u9032\u4F4D\u6578\u503C\uFF08\u4EE5\u5B57\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u6B64\u51FD\u6578\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6578\u503C\u70BA536870911,\u6700\u5C0F\u8CA0\u6578\u503C\u70BA-53687092\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5341\u9032\u4F4D\u6578\u662F\u6709\u6548\u7684\u5341\u9032\u4F4D\u6578,\u6703\u81EA\u52D5\u5C07\u5176\u8F49\u63DB\u70BA\u76F8\u61C9\u7684\u5B57\u4E32\u8F38\u5165\u3002\u4F8B\u5982,DEC2OCT\uFF08199\uFF09\u548CDEC2OCT\uFF08"199"\uFF09\u5F97\u51FA\u7684\u7D50\u679C\u76F8\u540C,\u5747\u70BA307\u3002'
              },
              {
                "name": "places",
                "detail": "[ \u53EF\u9078 ] -\u7D50\u679C\u4E2D\u8981\u78BA\u4FDD\u7684\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u8A2D\u5B9A\u7684\u6709\u6548\u4F4D\u6578\u5927\u65BC\u7D50\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6578,\u5247\u5728\u7D50\u679C\u7684\u5DE6\u5074\u586B\u51450,\u4F7F\u7E3D\u6709\u6548\u4F4D\u6578\u9054\u5230\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u5341\u9032\u4F4D\u6578\u70BA\u8CA0\u6578,\u5247\u5FFD\u7565\u6B64\u503C \u3002"
              }
            ]
          },
          "HEX2BIN": {
            "d": "\u5C07\u5341\u516D\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u4E8C\u9032\u4F4D\u6578\u3002",
            "a": "\u5C07\u5341\u516D\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u4E8C\u9032\u4F4D\u6578\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F49\u63DB\u70BA\u5E36\u7B26\u865F\u7684\u4E8C\u9032\u4F4D\u6578\u7684\u5E36\u7B26\u865F\u768440\u4F4D\u5341\u516D\u9032\u4F4D\u6578\u503C\uFF08\u4EE5\u5B57\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E36\u7B26\u865F\u7684\u5341\u516D\u9032\u4F4D\u6578\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u865F\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8AAA,\u8CA0\u6578\u662F\u4EE5\u4E8C\u7684\u88DC\u6578\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u6B64\u51FD\u6578\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6578\u503C\u70BA1FF,\u6700\u5C0F\u8CA0\u6578\u503C\u70BAFFFFFFFE00\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E36\u7B26\u865F\u7684\u5341\u516D\u9032\u4F4D\u6578\u662F\u6709\u6548\u7684\u5341\u516D\u9032\u4F4D\u6578,\u51FD\u6578\u6703\u81EA\u52D5\u5C07\u5176\u8F49\u63DB\u70BA\u76F8\u61C9\u7684\u5B57\u4E32\u8F38\u5165\u3002\u4F8B\u5982,HEX2BIN\uFF08199\uFF09\u548CHEX2BIN\uFF08"199"\uFF09\u5F97\u51FA\u7684\u7D50\u679C\u76F8\u540C,\u5747\u70BA110011001\u3002'
              },
              {
                "name": "places",
                "detail": "[ \u53EF\u9078 ] - \u7D50\u679C\u4E2D\u8981\u78BA\u4FDD\u7684\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u8A2D\u5B9A\u7684\u6709\u6548\u4F4D\u6578\u5927\u65BC\u7D50\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6578,\u5247\u5728\u7D50\u679C\u7684\u5DE6\u5074\u586B\u51450,\u4F7F\u7E3D\u6709\u6548\u4F4D\u6578\u9054\u5230\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u5E36\u7B26\u865F\u7684\u5341\u516D\u9032\u4F4D\u6578\u7684\u6700\u9AD8\u4F4D\u70BA1,\u5247\u5FFD\u7565\u6B64\u503C\uFF1B\u5373\u7576\u63D0\u4F9B\u7684\u5E36\u7B26\u865F\u7684\u5341\u516D\u9032\u4F4D\u6578\u5927\u65BC\u7B49\u65BC8000000000\u6642\u5FFD\u7565\u6B64\u503C\u3002"
              }
            ]
          },
          "HEX2DEC": {
            "d": "\u5C07\u5341\u516D\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u5341\u9032\u4F4D\u6578\u3002",
            "a": "\u5C07\u5341\u516D\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u5341\u9032\u4F4D\u6578\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F49\u63DB\u70BA\u5341\u9032\u4F4D\u6578\u7684\u5E36\u7B26\u865F\u768440\u4F4D\u5341\u516D\u9032\u4F4D\u6578\u503C\uFF08\u4EE5\u5B57\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E36\u7B26\u865F\u7684\u5341\u516D\u9032\u4F4D\u6578\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u865F\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8AAA,\u8CA0\u6578\u662F\u4EE5\u4E8C\u7684\u88DC\u6578\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u6B64\u51FD\u6578\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6578\u503C\u70BA7fffffffff,\u6700\u5C0F\u8CA0\u6578\u503C\u70BA8000000000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E36\u7B26\u865F\u7684\u5341\u516D\u9032\u4F4D\u6578\u662F\u6709\u6548\u7684\u5341\u516D\u9032\u4F4D\u6578,\u51FD\u6578\u6703\u81EA\u52D5\u5C07\u5176\u8F49\u63DB\u70BA\u76F8\u61C9\u7684\u5B57\u4E32\u8F38\u5165\u3002\u4F8B\u5982,HEX2DEC\uFF08199\uFF09\u548CHEX2DEC\uFF08"199"\uFF09\u5F97\u51FA\u7684\u7D50\u679C\u76F8\u540C,\u5747\u70BA409 \u3002'
              }
            ]
          },
          "HEX2OCT": {
            "d": "\u5C07\u5341\u516D\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u516B\u9032\u5236\u6578\u3002",
            "a": "\u5C07\u5341\u516D\u9032\u4F4D\u6578\u8F49\u63DB\u70BA\u516B\u9032\u5236\u6578\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F49\u63DB\u70BA\u5E36\u7B26\u865F\u7684\u516B\u9032\u5236\u6578\u7684\u5E36\u7B26\u865F\u768440\u4F4D\u5341\u516D\u9032\u4F4D\u6578\u503C\uFF08\u4EE5\u5B57\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E36\u7B26\u865F\u7684\u5341\u516D\u9032\u4F4D\u6578\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u865F\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8AAA,\u8CA0\u6578\u662F\u4EE5\u4E8C\u7684\u88DC\u6578\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u6B64\u51FD\u6578\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6578\u503C\u70BA1FFFFFFF,\u6700\u5C0F\u8CA0\u6578\u503C\u70BAFFE0000000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E36\u7B26\u865F\u7684\u5341\u516D\u9032\u4F4D\u6578\u662F\u6709\u6548\u7684\u5341\u516D\u9032\u4F4D\u6578,\u51FD\u6578\u6703\u81EA\u52D5\u5C07\u5176\u8F49\u63DB\u70BA\u76F8\u61C9\u7684\u5B57\u4E32\u8F38\u5165\u3002\u4F8B\u5982,HEX2OCT\uFF08199\uFF09\u548CHEX2OCT\uFF08"199"\uFF09\u5F97\u51FA\u7684\u7D50\u679C\u76F8\u540C,\u5747\u70BA631\u3002'
              },
              {
                "name": "places",
                "detail": "[ \u53EF\u9078 ] - \u7D50\u679C\u4E2D\u8981\u78BA\u4FDD\u7684\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u8A2D\u5B9A\u7684\u6709\u6548\u4F4D\u6578\u5927\u65BC\u7D50\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6578,\u5247\u5728\u7D50\u679C\u7684\u5DE6\u5074\u586B\u51450,\u4F7F\u7E3D\u6709\u6548\u4F4D\u6578\u9054\u5230\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u5E36\u7B26\u865F\u7684\u5341\u516D\u9032\u4F4D\u6578\u7684\u6700\u9AD8\u4F4D\u70BA1,\u5247\u5FFD\u7565\u6B64\u503C\uFF1B\u5373\u7576\u7D66\u5B9A\u7684\u5E36\u7B26\u865F\u7684\u5341\u516D\u9032\u4F4D\u6578\u5927\u65BC\u7B49\u65BC8000000000\u6642\u5FFD\u7565\u6B64\u503C\u3002"
              }
            ]
          },
          "OCT2BIN": {
            "d": "\u5C07\u516B\u9032\u5236\u6578\u8F49\u63DB\u70BA\u4E8C\u9032\u4F4D\u6578\u3002",
            "a": "\u5C07\u516B\u9032\u5236\u6578\u8F49\u63DB\u70BA\u4E8C\u9032\u4F4D\u6578\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F49\u63DB\u70BA\u5E36\u7B26\u865F\u7684\u4E8C\u9032\u4F4D\u6578\u7684\u5E36\u7B26\u865F\u768430\u4F4D\u516B\u9032\u5236\u6578\u503C\uFF08\u4EE5\u5B57\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E36\u7B26\u865F\u7684\u516B\u9032\u5236\u6578\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u865F\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8AAA,\u8CA0\u6578\u662F\u4EE5\u4E8C\u7684\u88DC\u6578\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u6B64\u51FD\u6578\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6578\u503C\u70BA777,\u6700\u5C0F\u8CA0\u6578\u503C\u70BA7777777000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E36\u7B26\u865F\u7684\u516B\u9032\u5236\u6578\u662F\u6709\u6548\u7684\u516B\u9032\u5236\u6578,\u51FD\u6578\u6703\u81EA\u52D5\u5C07\u5176\u8F49\u63DB\u70BA\u76F8\u61C9\u7684\u5B57\u4E32\u8F38\u5165\u3002\u4F8B\u5982,OCT2BIN\uFF08177\uFF09\u548COCT2BIN\uFF08"177"\uFF09\u5F97\u51FA\u7684\u7D50\u679C\u76F8\u540C,\u5747\u70BA1111111\u3002'
              },
              {
                "name": "places",
                "detail": "[ \u53EF\u9078 ] - \u7D50\u679C\u4E2D\u8981\u78BA\u4FDD\u7684\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u8A2D\u5B9A\u7684\u6709\u6548\u4F4D\u6578\u5927\u65BC\u7D50\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6578,\u5247\u5728\u7D50\u679C\u7684\u5DE6\u5074\u586B\u51450,\u4F7F\u7E3D\u6709\u6548\u4F4D\u6578\u9054\u5230\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u5E36\u7B26\u865F\u7684\u516B\u9032\u5236\u6578\u7684\u6700\u9AD8\u4F4D\u70BA1,\u5247\u5FFD\u7565\u6B64\u503C\uFF1B\u5373\u7576\u7D66\u5B9A\u7684\u5E36\u7B26\u865F\u7684\u516B\u9032\u5236\u6578\u5927\u65BC\u7B49\u65BC4000000000\u6642\u5FFD\u7565\u6B64\u503C\u3002"
              }
            ]
          },
          "OCT2DEC": {
            "d": "\u5C07\u516B\u9032\u5236\u6578\u8F49\u63DB\u70BA\u5341\u9032\u4F4D\u6578\u3002",
            "a": "\u5C07\u516B\u9032\u5236\u6578\u8F49\u63DB\u70BA\u5341\u9032\u4F4D\u6578\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F49\u63DB\u70BA\u5341\u9032\u4F4D\u6578\u7684\u5E36\u7B26\u865F\u768430\u4F4D\u516B\u9032\u5236\u6578\u503C\uFF08\u4EE5\u5B57\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E36\u7B26\u865F\u7684ba\u9032\u5236\u6578\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u865F\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8AAA,\u8CA0\u6578\u662F\u4EE5\u4E8C\u7684\u88DC\u6578\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u6B64\u51FD\u6578\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6578\u503C\u70BA3777777777,\u6700\u5C0F\u8CA0\u6578\u503C\u70BA4000000000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E36\u7B26\u865F\u7684\u516B\u9032\u5236\u6578\u662F\u6709\u6548\u7684\u516B\u9032\u5236\u6578,\u51FD\u6578\u6703\u81EA\u52D5\u5C07\u5176\u8F49\u63DB\u70BA\u76F8\u61C9\u7684\u5B57\u4E32\u8F38\u5165\u3002\u4F8B\u5982,OCT2DEC\uFF08177\uFF09\u548COCT2DEC\uFF08"177"\uFF09\u5F97\u51FA\u7684\u7D50\u679C\u76F8\u540C,\u5747\u70BA127\u3002'
              }
            ]
          },
          "OCT2HEX": {
            "d": "\u5C07\u516B\u9032\u5236\u6578\u8F49\u63DB\u70BA\u5341\u516D\u9032\u4F4D\u6578\u3002",
            "a": "\u5C07\u516B\u9032\u5236\u6578\u8F49\u63DB\u70BA\u5341\u516D\u9032\u4F4D\u6578\u3002",
            "p": [
              {
                "name": "number",
                "detail": '\u8981\u8F49\u63DB\u70BA\u5E36\u7B26\u865F\u7684\u5341\u516D\u9032\u4F4D\u6578\u7684\u5E36\u7B26\u865F\u768430\u4F4D\u516B\u9032\u5236\u6578\u503C\uFF08\u4EE5\u5B57\u4E32\u5F62\u5F0F\u63D0\u4F9B\uFF09\u3002\n\n\u5E36\u7B26\u865F\u7684ba\u9032\u5236\u6578\u7684\u6700\u9AD8\u4F4D\u662F\u7B26\u865F\u4F4D\uFF1B\u4E5F\u5C31\u662F\u8AAA,\u8CA0\u6578\u662F\u4EE5\u4E8C\u7684\u88DC\u6578\u5F62\u5F0F\u8868\u793A\u7684\u3002\n\n\u6B64\u51FD\u6578\u53EF\u63A5\u53D7\u7684\u6700\u5927\u6B63\u6578\u503C\u70BA3777777777,\u6700\u5C0F\u8CA0\u6578\u503C\u70BA4000000000\u3002\n\n\u5982\u679C\u6240\u63D0\u4F9B\u7684\u5E36\u7B26\u865F\u7684\u516B\u9032\u5236\u6578\u662F\u6709\u6548\u7684\u516B\u9032\u5236\u6578,\u51FD\u6578\u6703\u81EA\u52D5\u5C07\u5176\u8F49\u63DB\u70BA\u76F8\u61C9\u7684\u5B57\u4E32\u8F38\u5165\u3002\u4F8B\u5982,OCT2HEX\uFF08177\uFF09\u548COCT2HEX\uFF08"177"\uFF09\u5F97\u51FA\u7684\u7D50\u679C\u76F8\u540C,\u5747\u70BA7F\u3002'
              },
              {
                "name": "places",
                "detail": "[ \u53EF\u9078 ] - \u7D50\u679C\u4E2D\u8981\u78BA\u4FDD\u7684\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u8A2D\u5B9A\u7684\u6709\u6548\u4F4D\u6578\u5927\u65BC\u7D50\u679C\u4E2D\u7684\u6709\u6548\u4F4D\u6578,\u5247\u5728\u7D50\u679C\u7684\u5DE6\u5074\u586B\u51450,\u4F7F\u7E3D\u6709\u6548\u4F4D\u6578\u9054\u5230\u6709\u6548\u4F4D\u6578\u3002\n\n\u5982\u679C\u5E36\u7B26\u865F\u7684\u516B\u9032\u5236\u6578\u7684\u6700\u9AD8\u4F4D\u70BA1,\u5247\u5FFD\u7565\u6B64\u503C\uFF1B\u5373\u7576\u7D66\u5B9A\u7684\u5E36\u7B26\u865F\u7684\u516B\u9032\u5236\u6578\u5927\u65BC\u7B49\u65BC4000000000\u6642\u5FFD\u7565\u6B64\u503C\u3002"
              }
            ]
          },
          "COMPLEX": {
            "d": "\u5C07\u5BE6\u4FC2\u6578\u53CA\u865B\u4FC2\u6578\u8F49\u63DB\u70BA x+yi \u6216 x+yj \u5F62\u5F0F\u7684\u8907\u6578\u3002",
            "a": "\u5C07\u5BE6\u4FC2\u6578\u53CA\u865B\u4FC2\u6578\u8F49\u63DB\u70BA x+yi \u6216 x+yj \u5F62\u5F0F\u7684\u8907\u6578\u3002",
            "p": [
              {
                "name": "real_num",
                "detail": "\u8907\u6578\u7684\u5BE6\u4FC2\u6578\u3002"
              },
              {
                "name": "i_num",
                "detail": "\u8907\u6578\u7684\u865B\u4FC2\u6578\u3002"
              },
              {
                "name": "suffix",
                "detail": '[\u53EF\u9078 - \u9ED8\u8A8D\u70BA"i"] - \u8907\u6578\u4E2D\u865B\u4FC2\u6578\u7684\u5C3E\u78BC\u3002'
              }
            ]
          },
          "IMREAL": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u8907\u6578\u7684\u5BE6\u4FC2\u6578\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u8907\u6578\u7684\u5BE6\u4FC2\u6578\u3002",
            "p": [
              {
                "name": "inumber",
                "detail": "\u9700\u8981\u8A08\u7B97\u5176\u5BE6\u4FC2\u6578\u7684\u8907\u6578\u3002"
              }
            ]
          },
          "IMAGINARY": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u8907\u6578\u7684\u865B\u4FC2\u6578\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u8907\u6578\u7684\u865B\u4FC2\u6578\u3002",
            "p": [
              {
                "name": "inumber",
                "detail": "\u9700\u8981\u8A08\u7B97\u5176\u865B\u4FC2\u6578\u7684\u8907\u6578\u3002"
              }
            ]
          },
          "IMCONJUGATE": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u8907\u6578\u7684\u5171\u8EDB\u8907\u6578\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u8907\u6578\u7684\u5171\u8EDB\u8907\u6578\u3002",
            "p": [
              {
                "name": "inumber",
                "detail": "\u9700\u8981\u8A08\u7B97\u5176\u5171\u8EDB\u6578\u7684\u8907\u6578\u3002"
              }
            ]
          },
          "IMABS": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u8907\u6578\u7684\u7D55\u5C0D\u503C\uFF08\u6A21\uFF09\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u8907\u6578\u7684\u7D55\u5C0D\u503C\uFF08\u6A21\uFF09\u3002",
            "p": [
              {
                "name": "inumber",
                "detail": "\u8981\u8A08\u7B97\u5176\u7D55\u5C0D\u503C\u7684\u8907\u6578\u3002"
              }
            ]
          },
          "DELTA": {
            "d": "\u6AA2\u9A57\u5169\u500B\u503C\u662F\u5426\u76F8\u7B49\u3002\u5982\u679C number1=number2,\u5247\u8FD4\u56DE1\uFF1B\u5426\u5247\u8FD4\u56DE0\u3002",
            "a": "\u6AA2\u9A57\u5169\u500B\u503C\u662F\u5426\u76F8\u7B49\u3002\u5982\u679C number1=number2,\u5247\u8FD4\u56DE1\uFF1B\u5426\u5247\u8FD4\u56DE0\u3002",
            "p": [
              {
                "name": "number1",
                "detail": "\u7B2C\u4E00\u500B\u6578\u4F4D\u3002"
              },
              {
                "name": "number2",
                "detail": "[\u53EF\u9078 - \u9ED8\u8A8D\u70BA0] - \u7B2C\u4E8C\u500B\u6578\u4F4D\u3002"
              }
            ]
          },
          "IMSUM": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684 1 \u81F3 255 \u500B\u8907\u6578\u7684\u548C\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684 1 \u81F3 255 \u500B\u8907\u6578\u7684\u548C\u3002",
            "p": [
              {
                "name": "inumber1",
                "detail": "\u8981\u76F8\u52A0\u7684\u7B2C\u4E00\u500B\u8907\u6578"
              },
              {
                "name": "inumber2, \u2026",
                "detail": "[\u53EF\u9078] -\u8981\u8207\u503C1\u76F8\u52A0\u7684\u5176\u4ED6\u8907\u6578"
              }
            ]
          },
          "IMSUB": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u5169\u500B\u8907\u6578\u7684\u5DEE\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u5169\u500B\u8907\u6578\u7684\u5DEE\u3002",
            "p": [
              {
                "name": "inumber1",
                "detail": "\u5F9E\uFF08\u8907\uFF09\u6578\u4E2D\u51CF\u53BB inumber2\u3002"
              },
              {
                "name": "inumber2",
                "detail": "\u5F9E inumber1 \u4E2D\u51CF\uFF08\u8907\uFF09\u6578\u3002"
              }
            ]
          },
          "IMPRODUCT": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684 1 \u81F3 255 \u500B\u8907\u6578\u7684\u4E58\u7A4D\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684 1 \u81F3 255 \u500B\u8907\u6578\u7684\u4E58\u7A4D\u3002",
            "p": [
              {
                "name": "inumber1",
                "detail": "\u7528\u65BC\u8A08\u7B97\u4E58\u7A4D\u7684\u7B2C\u4E00\u500B\u8907\u6578"
              },
              {
                "name": "inumber2, \u2026",
                "detail": "[\u53EF\u9078] -\u8981\u76F8\u4E58\u7684\u5176\u4ED6\u8907\u6578\u3002"
              }
            ]
          },
          "IMDIV": {
            "d": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u5169\u500B\u8907\u6578\u7684\u5546\u3002",
            "a": "\u8FD4\u56DE\u4EE5 x+yi \u6216 x+yj \u6587\u672C\u683C\u5F0F\u8868\u793A\u7684\u5169\u500B\u8907\u6578\u7684\u5546\u3002",
            "p": [
              {
                "name": "inumber1",
                "detail": "\u8907\u6578\u5206\u5B50\u6216\u88AB\u9664\u6578\u3002"
              },
              {
                "name": "inumber2",
                "detail": "\u8907\u6578\u5206\u6BCD\u6216\u9664\u6578\u3002"
              }
            ]
          },
          "NOT": {
            "d": '\u8FD4\u56DE\u67D0\u500B\u908F\u8F2F\u503C\u7684\u76F8\u53CD\u503C-"NOT\uFF08TRUE\uFF08\uFF09\uFF09"\u5C07\u8FD4\u56DEFALSE\uFF1B"NOT\uFF08FALSE\uFF08\uFF09\uFF09"\u5C07\u8FD4\u56DETRUE\u3002',
            "a": '\u8FD4\u56DE\u67D0\u500B\u908F\u8F2F\u503C\u7684\u76F8\u53CD\u503C-"NOT\uFF08TRUE\uFF08\uFF09\uFF09"\u5C07\u8FD4\u56DEFALSE\uFF1B"NOT\uFF08FALSE\uFF08\uFF09\uFF09"\u5C07\u8FD4\u56DETRUE\u3002',
            "p": [
              {
                "name": "logical",
                "detail": "\u8A08\u7B97\u7D50\u679C\u70BATRUE\u6216FALSE\u7684\u4EFB\u4F55\u503C\u6216\u904B\u7B97\u5F0F\u3002"
              }
            ]
          },
          "TRUE": {
            "d": "\u8FD4\u56DE\u908F\u8F2F\u503C TRUE\u3002",
            "a": "\u8FD4\u56DE\u908F\u8F2F\u503C TRUE\u3002",
            "p": []
          },
          "FALSE": {
            "d": "\u8FD4\u56DE\u908F\u8F2F\u503C FALSE\u3002",
            "a": "\u8FD4\u56DE\u908F\u8F2F\u503C FALSE\u3002",
            "p": []
          },
          "AND": {
            "d": "\u6240\u6709\u53C3\u6578\u7684\u8A08\u7B97\u7D50\u679C\u70BATRUE\u6642,\u8FD4\u56DETRUE\uFF1B\u53EA\u8981\u6709\u4E00\u500B\u53C3\u6578\u7684\u8A08\u7B97\u7D50\u679C\u70BAFALSE,\u5373\u8FD4\u56DEFALSE\u3002",
            "a": "\u6240\u6709\u53C3\u6578\u7684\u8A08\u7B97\u7D50\u679C\u70BATRUE\u6642,\u8FD4\u56DETRUE\uFF1B\u53EA\u8981\u6709\u4E00\u500B\u53C3\u6578\u7684\u8A08\u7B97\u7D50\u679C\u70BAFALSE,\u5373\u8FD4\u56DEFALSE\u3002",
            "p": [
              {
                "name": "logical1",
                "detail": "\u8981\u6E2C\u8A66\u7684\u7B2C\u4E00\u500B\u689D\u4EF6,\u5176\u8A08\u7B97\u7D50\u679C\u53EF\u4EE5\u70BATRUE\u6216FALSE\u3002"
              },
              {
                "name": "logical2,...",
                "detail": "[\u53EF\u9078] - \u8981\u6E2C\u8A66\u7684\u5176\u4ED6\u689D\u4EF6,\u5176\u8A08\u7B97\u7D50\u679C\u53EF\u4EE5\u70BATRUE\u6216FALSE,\u6700\u591A\u53EF\u5305\u542B255\u500B\u689D\u4EF6\u3002"
              }
            ]
          },
          "IFERROR": {
            "d": "\u5982\u679C\u7B2C\u4E00\u500B\u53C3\u6578\u4E0D\u662F\u932F\u8AA4\u503C,\u5C31\u8FD4\u56DE\u7B2C\u4E00\u500B\u53C3\u6578\uFF1B\u5426\u5247,\u8FD4\u56DE\u7B2C\u4E8C\u500B\u53C3\u6578\u3002",
            "a": "\u5982\u679C\u7B2C\u4E00\u500B\u53C3\u6578\u4E0D\u662F\u932F\u8AA4\u503C",
            "p": [
              {
                "name": "value",
                "detail": "\u6AA2\u67E5\u662F\u5426\u5B58\u5728\u932F\u8AA4\u7684\u53C3\u6578\u3002"
              },
              {
                "name": "value_if_error",
                "detail": "\u516C\u5F0F\u7684\u8A08\u7B97\u7D50\u679C\u932F\u8AA4\u6642\u8FD4\u56DE\u7684\u503C\u3002\u8A08\u7B97\u4EE5\u4E0B\u932F\u8AA4\u985E\u578B:#N/A\u3001#VALUE\uFF01\u3001#REF\uFF01\u3001#DIV/0\uFF01\u3001#NUM\uFF01\u3001#NAME\uFF1F\u6216#NULL\uFF01\u3002"
              }
            ]
          },
          "IF": {
            "d": "\u7576\u908F\u8F2F\u904B\u7B97\u5F0F\u7684\u503C\u70BATRUE\u6642\u8FD4\u56DE\u4E00\u500B\u503C,\u800C\u7576\u5176\u70BAFALSE\u6642\u8FD4\u56DE\u53E6\u4E00\u500B\u503C\u3002",
            "a": "\u7576\u908F\u8F2F\u904B\u7B97\u5F0F\u7684\u503C\u70BATRUE\u6642\u8FD4\u56DE\u4E00\u500B\u503C,\u800C\u7576\u5176\u70BAFALSE\u6642\u8FD4\u56DE\u53E6\u4E00\u500B\u503C\u3002",
            "p": [
              {
                "name": "logical_test",
                "detail": "\u4E00\u500B\u904B\u7B97\u5F0F\u6216\u5C0D\u5305\u542B\u904B\u7B97\u5F0F\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,\u8A72\u904B\u7B97\u5F0F\u4EE3\u8868\u67D0\u7A2E\u908F\u8F2F\u503C\uFF08\u5373TRUE\u6216FALSE\uFF09\u3002"
              },
              {
                "name": "value_if_true",
                "detail": "\u7576\u908F\u8F2F\u904B\u7B97\u5F0F\u70BATRUE\u6642\u7684\u8FD4\u56DE\u503C\u3002"
              },
              {
                "name": "value_if_false",
                "detail": "[\u53EF\u9078 - \u9ED8\u8A8D\u70BA\u7A7A\u767D] - \u7576\u908F\u8F2F\u904B\u7B97\u5F0F\u7B49\u65BCFALSE\u6642\u7684\u51FD\u6578\u8FD4\u56DE\u503C\u3002"
              }
            ]
          },
          "OR": {
            "d": "\u53EA\u8981\u6709\u4E00\u500B\u53C3\u6578\u7684\u8A08\u7B97\u7D50\u679C\u70BATRUE\u6642,\u8FD4\u56DETRUE\uFF1B\u6240\u6709\u53C3\u6578\u7684\u8A08\u7B97\u7D50\u679C\u70BAFALSE,\u5373\u8FD4\u56DEFALSE\u3002",
            "a": "\u53EA\u8981\u6709\u4E00\u500B\u53C3\u6578\u7684\u8A08\u7B97\u7D50\u679C\u70BATRUE\u6642,\u8FD4\u56DETRUE\uFF1B\u6240\u6709\u53C3\u6578\u7684\u8A08\u7B97\u7D50\u679C\u70BAFALSE,\u5373\u8FD4\u56DEFALSE\u3002",
            "p": [
              {
                "name": "logical1",
                "detail": "\u8981\u6E2C\u8A66\u7684\u7B2C\u4E00\u500B\u689D\u4EF6,\u5176\u8A08\u7B97\u7D50\u679C\u53EF\u4EE5\u70BATRUE\u6216FALSE\u3002"
              },
              {
                "name": "\u908F\u8F2F\u904B\u7B97\u5F0F2",
                "detail": "[\u53EF\u9078] - \u5176\u4ED6\u904B\u7B97\u5F0F\u6216\u5C0D\u5305\u542B\u904B\u7B97\u5F0F\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,\u9019\u4E9B\u904B\u7B97\u5F0F\u4EE3\u8868\u67D0\u7A2E\u908F\u8F2F\u503C\uFF08\u5373TRUE\u6216FALSE\uFF09\u6216\u8005\u53EF\u4EE5\u5F37\u5236\u8F49\u63DB\u70BA\u908F\u8F2F\u503C\u3002"
              }
            ]
          },
          "NE": {
            "d": '\u5982\u679C\u6307\u5B9A\u7684\u503C\u4E0D\u76F8\u7B49,\u5247\u8FD4\u56DE"TRUE"\uFF1B\u5426\u5247\u8FD4\u56DE"FALSE"\u3002\u76F8\u7576\u65BC"<>"\u904B\u7B97\u5B50\u3002',
            "a": '\u5982\u679C\u6307\u5B9A\u7684\u503C\u4E0D\u76F8\u7B49,\u5247\u8FD4\u56DE"TRUE"\uFF1B\u5426\u5247\u8FD4\u56DE"FALSE"\u3002\u76F8\u7576\u65BC"<>"\u904B\u7B97\u5B50\u3002',
            "p": [
              {
                "name": "value1",
                "detail": "\u7B2C\u4E00\u500B\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u8981\u6AA2\u67E5\u662F\u5426\u8207 value1 \u4E0D\u76F8\u7B49\u7684\u503C\u3002"
              }
            ]
          },
          "EQ": {
            "d": '\u5982\u679C\u6307\u5B9A\u7684\u503C\u76F8\u7B49,\u5247\u8FD4\u56DE"TRUE"\uFF1B\u5426\u5247\u8FD4\u56DE"FALSE"\u3002\u76F8\u7576\u65BC"="\u904B\u7B97\u5B50\u3002',
            "a": '\u5982\u679C\u6307\u5B9A\u7684\u503C\u76F8\u7B49,\u5247\u8FD4\u56DE"TRUE"\uFF1B\u5426\u5247\u8FD4\u56DE"FALSE"\u3002\u76F8\u7576\u65BC"="\u904B\u7B97\u5B50\u3002',
            "p": [
              {
                "name": "value1",
                "detail": "\u7B2C\u4E00\u500B\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u8981\u6AA2\u67E5\u662F\u5426\u8207value1\u76F8\u7B49\u7684\u503C\u3002"
              }
            ]
          },
          "GT": {
            "d": false,
            "a": false,
            "p": [
              {
                "name": "value1",
                "detail": "\u8981\u6E2C\u8A66\u5176\u662F\u5426\u5927\u65BC value2 \u7684\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u7B2C\u4E8C\u500B\u503C\u3002"
              }
            ]
          },
          "GTE": {
            "d": '\u5982\u679C\u7B2C\u4E00\u500B\u53C3\u6578\u5927\u65BC\u6216\u7B49\u65BC\u7B2C\u4E8C\u500B\uFF0C\u5247\u8FD4\u56DETRUE\uFF1B\u5426\u5247\u8FD4\u56DEFALSE\u3002\u76F8\u7576\u65BC">="\u904B\u7B97\u5B50\u3002',
            "a": '\u5982\u679C\u7B2C\u4E00\u500B\u53C3\u6578\u5927\u65BC\u6216\u7B49\u65BC\u7B2C\u4E8C\u500B\uFF0C\u5247\u8FD4\u56DETRUE\uFF1B\u5426\u5247\u8FD4\u56DEFALSE\u3002\u76F8\u7576\u65BC">="\u904B\u7B97\u5B50\u3002',
            "p": [
              {
                "name": "value1",
                "detail": "\u8981\u6D4B\u8BD5\u5176\u662F\u5426\u5927\u4E8E\u7B49\u4E8E value2 \u7684\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u7B2C\u4E8C\u500B\u503C\u3002"
              }
            ]
          },
          "LT": {
            "d": '\u5982\u679C\u7B2C\u4E00\u500B\u53C3\u6578\u56B4\u683C\u5C0F\u65BC\u7B2C\u4E8C\u500B\uFF0C\u5247\u8FD4\u56DETRUE\uFF1B\u5426\u5247\u8FD4\u56DEFALSE\u3002\u76F8\u7576\u65BC"<"\u904B\u7B97\u5B50\u3002',
            "a": '\u5982\u679C\u7B2C\u4E00\u500B\u53C3\u6578\u56B4\u683C\u5C0F\u65BC\u7B2C\u4E8C\u500B\uFF0C\u5247\u8FD4\u56DETRUE\uFF1B\u5426\u5247\u8FD4\u56DEFALSE\u3002\u76F8\u7576\u65BC"<"\u904B\u7B97\u5B50\u3002',
            "p": [
              {
                "name": "value1",
                "detail": "\u8981\u6D4B\u8BD5\u5176\u662F\u5426\u5C0F\u4E8E value2 \u7684\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u7B2C\u4E8C\u500B\u503C\u3002"
              }
            ]
          },
          "LTE": {
            "d": '\u5982\u679C\u7B2C\u4E00\u500B\u53C3\u6578\u5C0F\u65BC\u6216\u7B49\u65BC\u7B2C\u4E8C\u500B\uFF0C\u5247\u8FD4\u56DETRUE\uFF1B\u5426\u5247\u8FD4\u56DEFALSE\u3002\u76F8\u7576\u65BC"<="\u904B\u7B97\u5B50\u3002',
            "a": '\u5982\u679C\u7B2C\u4E00\u500B\u53C3\u6578\u5C0F\u65BC\u6216\u7B49\u65BC\u7B2C\u4E8C\u500B\uFF0C\u5247\u8FD4\u56DETRUE\uFF1B\u5426\u5247\u8FD4\u56DEFALSE\u3002\u76F8\u7576\u65BC"<="\u904B\u7B97\u5B50\u3002',
            "p": [
              {
                "name": "value1",
                "detail": "\u8981\u6D4B\u8BD5\u5176\u662F\u5426\u5C0F\u4E8E\u7B49\u4E8E value2 \u7684\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u7B2C\u4E8C\u500B\u503C\u3002"
              }
            ]
          },
          "ADD": {
            "d": '\u8FD4\u56DE\u5169\u500B\u6578\u503C\u4E4B\u548C\u3002\u76F8\u7576\u65BC"+"\u904B\u7B97\u5B50\u3002',
            "a": '\u8FD4\u56DE\u5169\u500B\u6578\u503C\u4E4B\u548C\u3002\u76F8\u7576\u65BC"+"\u904B\u7B97\u5B50\u3002',
            "p": [
              {
                "name": "value1",
                "detail": "\u7B2C\u4E00\u500B\u52A0\u6578\u3002"
              },
              {
                "name": "value2",
                "detail": "\u7B2C\u4E8C\u500B\u52A0\u6578\u3002"
              }
            ]
          },
          "MINUS": {
            "d": '\u8FD4\u56DE\u5169\u500B\u6578\u503C\u4E4B\u5DEE\u3002\u76F8\u7576\u65BC"-"\u904B\u7B97\u5B50\u3002',
            "a": '\u8FD4\u56DE\u5169\u500B\u6578\u503C\u4E4B\u5DEE\u3002\u76F8\u7576\u65BC"-"\u904B\u7B97\u5B50\u3002',
            "p": [
              {
                "name": "value1",
                "detail": "\u88AB\u6E1B\u6578,\u5373\u8981\u5C0D\u5176\u8A08\u51CF\u7684\u6578\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u6E1B\u6578,\u5373\u8981\u5F9Evalue1\u4E2D\u51CF\u9664\u7684\u6578\u503C\u3002"
              }
            ]
          },
          "MULTIPLY": {
            "d": '\u8FD4\u56DE\u5169\u500B\u6578\u7684\u4E58\u7A4D\u3002\u76F8\u7576\u65BC"*"\u904B\u7B97\u5B50\u3002',
            "a": '\u8FD4\u56DE\u5169\u500B\u6578\u7684\u4E58\u7A4D\u3002\u76F8\u7576\u65BC"*"\u904B\u7B97\u5B50\u3002',
            "p": [
              {
                "name": "value1",
                "detail": "\u7B2C\u4E00\u500B\u4E58\u6578\u3002"
              },
              {
                "name": "value2",
                "detail": "\u7B2C\u4E8C\u500B\u4E58\u6578\u3002"
              }
            ]
          },
          "DIVIDE": {
            "d": "\u8FD4\u56DE\u5169\u500B\u53C3\u6578\u76F8\u9664\u6240\u5F97\u7684\u7D50\u679C\u3002\u76F8\u7576\u65BC`/`\u904B\u7B97\u5B50\u3002",
            "a": "\u8FD4\u56DE\u5169\u500B\u53C3\u6578\u76F8\u9664\u6240\u5F97\u7684\u7D50\u679C\u3002\u76F8\u7576\u65BC`/`\u904B\u7B97\u5B50\u3002",
            "p": [
              {
                "name": "value1",
                "detail": "\u8981\u88AB\u9664\u7684\u6578\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u7528\u65BC\u9664\u5176\u4ED6\u6578\u7684\u6578\u503C\u3002\n\n\u9664\u6578\u4E0D\u5F97\u70BA0\u3002"
              }
            ]
          },
          "CONCAT": {
            "d": "\u8FD4\u56DE\u5169\u500B\u503C\u7684\u4E32\u806F\u3002\u76F8\u7576\u65BC`&`\u904B\u7B97\u5B50\u3002",
            "a": "\u8FD4\u56DE\u5169\u500B\u503C\u7684\u4E32\u806F\u3002\u76F8\u7576\u65BC`&`\u904B\u7B97\u5B50\u3002",
            "p": [
              {
                "name": "value1",
                "detail": "value2 \u5C07\u9644\u65BC\u5176\u5F8C\u7684\u503C\u3002"
              },
              {
                "name": "value2",
                "detail": "\u8981\u9644\u65BC value1 \u4E4B\u5F8C\u7684\u503C\u3002"
              }
            ]
          },
          "UNARY_PERCENT": {
            "d": '\u8FD4\u56DE\u6309\u767E\u5206\u6BD4\u89E3\u91CB\u7684\u6578\u503C\u3002\u4F8B\u5982,"UNARY_PERCENT\uFF08100\uFF09"\u7B49\u65BC1\u3002',
            "a": '\u8FD4\u56DE\u6309\u767E\u5206\u6BD4\u89E3\u91CB\u7684\u6578\u503C\u3002\u4F8B\u5982,"UNARY_PERCENT\uFF08100\uFF09"\u7B49\u65BC1\u3002',
            "p": [
              {
                "name": "number",
                "detail": "\u8981\u4F5C\u70BA\u767E\u5206\u6BD4\u89E3\u91CB\u7684\u6578\u503C\u3002"
              }
            ]
          },
          "CONCATENATE": {
            "d": "\u5C07\u5169\u500B\u6216\u591A\u500B\u6587\u5B57\u5B57\u4E32\u806F\u63A5\u70BA\u4E00\u500B\u5B57\u4E32\u3002",
            "a": "\u5C07\u5169\u500B\u6216\u591A\u500B\u6587\u5B57\u5B57\u4E32\u806F\u63A5\u70BA\u4E00\u500B\u5B57\u4E32\u3002",
            "p": [
              {
                "name": "text1",
                "detail": "\u521D\u59CB\u5B57\u4E32\u3002"
              },
              {
                "name": "text2\u2026",
                "detail": "[\u53EF\u9078] - \u8981\u6309\u9806\u5E8F\u9023\u63A5\u5728\u4E00\u8D77\u7684\u5176\u4ED6\u5B57\u4E32\u3002"
              }
            ]
          },
          "CODE": {
            "d": "\u8FD4\u56DE\u6240\u63D0\u4F9B\u7684\u5B57\u4E32\u4E2D\u9996\u5B57\u5143\u7684Unicode\u6620\u5C04\u503C\u3002",
            "a": "\u8FD4\u56DE\u6240\u63D0\u4F9B\u7684\u5B57\u4E32\u4E2D\u9996\u5B57\u5143\u7684Unicode\u6620\u5C04\u503C\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u8FD4\u56DE\u5176\u9996\u5B57\u5143\u7684Unicode\u6620\u5C04\u503C\u7684\u5B57\u4E32\u3002"
              }
            ]
          },
          "CHAR": {
            "d": "\u6309\u7167\u7576\u524DUnicode\u7DE8\u78BC\u8868,\u5C07\u6578\u4F4D\u8F49\u63DB\u70BA\u5C0D\u61C9\u7684\u5B57\u5143\u3002",
            "a": "\u6309\u7167\u7576\u524DUnicode\u7DE8\u78BC\u8868,\u5C07\u6578\u4F4D\u8F49\u63DB\u70BA\u5C0D\u61C9\u7684\u5B57\u5143\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u4ECB\u65BC1\u5230255\u4E4B\u9593\u7684\u6578\u4F4D\u3002"
              }
            ]
          },
          "ARABIC": {
            "d": "\u5C07\u7F85\u99AC\u6578\u5B57\u8F49\u63DB\u70BA\u963F\u62C9\u4F2F\u6578\u5B57\u3002",
            "a": "\u5C07\u7F85\u99AC\u6578\u5B57\u8F49\u63DB\u70BA\u963F\u62C9\u4F2F\u6578\u5B57\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u8F49\u63DB\u683C\u5F0F\u7684\u7F85\u99AC\u6578\u5B57"
              }
            ]
          },
          "ROMAN": {
            "d": "\u5C07\u6578\u4F4D\u683C\u5F0F\u8A2D\u5B9A\u70BA\u7F85\u99AC\u6578\u5B57\u5F62\u5F0F\u3002",
            "a": "\u5C07\u6578\u4F4D\u683C\u5F0F\u8A2D\u5B9A\u70BA\u7F85\u99AC\u6578\u5B57\u5F62\u5F0F\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u8981\u8A2D\u5B9A\u683C\u5F0F\u7684\u6578\u4F4D,\u4ECB\u65BC1\u52303999\u4E4B\u9593\uFF08\u5305\u62EC\u9019\u5169\u500B\u6578\u4F4D\uFF09\u3002"
              }
            ]
          },
          "REGEXEXTRACT": {
            "d": "\u6309\u7167\u898F\u5247\u904B\u7B97\u5F0F\u9078\u53D6\u5339\u914D\u7684\u5B50\u4E32\u3002",
            "a": "\u6309\u7167\u898F\u5247\u904B\u7B97\u5F0F\u9078\u53D6\u5339\u914D\u7684\u5B50\u4E32\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8F38\u5165\u6587\u5B57\u3002"
              },
              {
                "name": "regular_expression",
                "detail": "\u6B64\u51FD\u6578\u5C07\u8FD4\u56DE\u6587\u5B57\u4E2D\u7B26\u5408\u6B64\u904B\u7B97\u5F0F\u7684\u7B2C\u4E00\u500B\u5B50\u4E32\u3002"
              }
            ]
          },
          "REGEXMATCH": {
            "d": "\u5224\u65B7\u4E00\u6BB5\u6587\u5B57\u662F\u5426\u8207\u898F\u5247\u904B\u7B97\u5F0F\u76F8\u5339\u914D\u3002",
            "a": "\u5224\u65B7\u4E00\u6BB5\u6587\u5B57\u662F\u5426\u8207\u898F\u5247\u904B\u7B97\u5F0F\u76F8\u5339\u914D\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u7528\u898F\u5247\u904B\u7B97\u5F0F\u6E2C\u8A66\u7684\u6587\u5B57\u3002"
              },
              {
                "name": "regular_expression",
                "detail": "\u7528\u4F86\u6E2C\u8A66\u6587\u5B57\u7684\u898F\u5247\u904B\u7B97\u5F0F\u3002"
              }
            ]
          },
          "REGEXREPLACE": {
            "d": "\u4F7F\u7528\u898F\u5247\u904B\u7B97\u5F0F\u5C07\u6587\u5B57\u5B57\u4E32\u4E2D\u7684\u4E00\u90E8\u5206\u66FF\u63DB\u70BA\u5176\u4ED6\u6587\u5B57\u5B57\u4E32\u3002",
            "a": "\u4F7F\u7528\u898F\u5247\u904B\u7B97\u5F0F\u5C07\u6587\u5B57\u5B57\u4E32\u4E2D\u7684\u4E00\u90E8\u5206\u66FF\u63DB\u70BA\u5176\u4ED6\u6587\u5B57\u5B57\u4E32\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u5C0D\u5176\u5C40\u90E8\u9032\u884C\u66FF\u63DB\u64CD\u4F5C\u7684\u6587\u5B57\u3002"
              },
              {
                "name": "regular_expression",
                "detail": "\u898F\u5247\u904B\u7B97\u5F0F\u3002text\u4E2D\u6240\u6709\u5339\u914D\u7684\u5BE6\u4F8B\u90FD\u5C07\u88AB\u66FF\u63DB\u3002"
              },
              {
                "name": "replacement",
                "detail": "\u8981\u63D2\u5165\u5230\u539F\u6709\u6587\u5B57\u4E2D\u7684\u6587\u5B57\u3002"
              }
            ]
          },
          "T": {
            "d": "\u8FD4\u56DE\u6587\u672C\u683C\u5F0F\u7684\u5B57\u4E32\u53C3\u6578\u3002",
            "a": "\u8FD4\u56DE\u6587\u672C\u683C\u5F0F\u7684\u5B57\u4E32\u53C3\u6578\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8F49\u63DB\u70BA\u6587\u5B57\u7684\u53C3\u6578\u3002\n\n\u5982\u679C\u503C\u70BA\u6587\u5B57,T\u5C07\u8FD4\u56DE\u503C\u672C\u8EAB\u3002\n\n\u5982\u679C\u503C\u70BA\u6307\u5411\u5305\u542B\u6587\u5B57\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,T\u5C07\u8FD4\u56DE\u503C\u4E2D\u7684\u5167\u5BB9\u3002\n\n\u5982\u679C\u503C\u70BA\u932F\u8AA4\u503C\u6216\u5305\u542B\u932F\u8AA4\u503C\u7684\u5132\u5B58\u683C,T\u5C07\u8FD4\u56DE\u8A72\u932F\u8AA4\u503C\u3002\n\n\u5C0D\u65BC\u6240\u6709\u5176\u4ED6\u60C5\u51B5,T\u5C07\u8FD4\u56DE\u7A7A\u4E32\u3002"
              }
            ]
          },
          "FIXED": {
            "d": "\u4EE5\u56FA\u5B9A\u7684\u5C0F\u6578\u4F4D\u6578\u8A2D\u5B9A\u6578\u4F4D\u7684\u683C\u5F0F\u3002",
            "a": "\u4EE5\u56FA\u5B9A\u7684\u5C0F\u6578\u4F4D\u6578\u8A2D\u5B9A\u6578\u4F4D\u7684\u683C\u5F0F\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u8981\u9032\u884C\u820D\u5165\u4E26\u8F49\u63DB\u70BA\u6587\u5B57\u7684\u6578\u4F4D\u3002"
              },
              {
                "name": "decimals",
                "detail": "[\u53EF\u9078-\u9810\u8A2D\u503C\u70BA2] - \u7D50\u679C\u4E2D\u8981\u986F\u793A\u7684\u5C0F\u6578\u4F4D\u6578\u3002\n\n\u5982\u679C\u6578\u503C\u7684\u6709\u6548\u4F4D\u6578\u5C0F\u65BC\u5C0F\u6578\u4F4D\u6578,\u5C07\u4EE5\u96F6\u586B\u5145\u3002\u5982\u679C\u6578\u503C\u7684\u6709\u6548\u4F4D\u6578\u5927\u65BC\u5C0F\u6578\u4F4D\u6578,\u5247\u5C07\u5176\u820D\u5165\u5230\u6240\u9700\u7684\u5C0F\u6578\u4F4D\u6578\u800C\u4E0D\u662F\u5C07\u5176\u622A\u65B7\u3002"
              },
              {
                "name": "no_commas",
                "detail": "[\u53EF\u9078-\u9810\u8A2D\u503C\u70BAFALSE\uFF08\uFF09] - \u4E00\u500B\u908F\u8F2F\u503C,\u5982\u679C\u70BATRUE\uFF08\uFF09,\u5247\u6703\u7981\u6B62FIXED\u5728\u8FD4\u56DE\u7684\u6587\u5B57\u4E2D\u5305\u542B\u9017\u865F\u3002"
              }
            ]
          },
          "FIND": {
            "d": "\u8FD4\u56DE\u5B57\u4E32\u5728\u6587\u5B57\u4E2D\u9996\u6B21\u51FA\u73FE\u7684\u4F4D\u7F6E\uFF08\u5340\u5206\u5927\u5C0F\u5BEB\uFF09\u3002",
            "a": "\u8FD4\u56DE\u5B57\u4E32\u5728\u6587\u5B57\u4E2D\u9996\u6B21\u51FA\u73FE\u7684\u4F4D\u7F6E\uFF08\u5340\u5206\u5927\u5C0F\u5BEB\uFF09\u3002",
            "p": [
              {
                "name": "find_text",
                "detail": "\u8981\u5728\u8981\u8490\u7D22\u7684\u6587\u5B57\u4E2D\u67E5\u627E\u7684\u5B57\u4E32\u3002"
              },
              {
                "name": "within_text",
                "detail": "\u8981\u5728\u5176\u4E2D\u8490\u7D22\u8490\u7D22\u5B57\u4E32\u7684\u9996\u6B21\u51FA\u73FE\u4F4D\u7F6E\u7684\u6587\u5B57\u3002"
              },
              {
                "name": "start_num",
                "detail": "[\u53EF\u9078-\u9810\u8A2D\u503C\u70BA1] - \u8981\u5728\u8981\u8490\u7D22\u7684\u6587\u5B57\u4E2D\u958B\u59CB\u8490\u7D22\u7684\u5B57\u5143\u4F4D\u7F6E\u3002"
              }
            ]
          },
          "FINDB": {
            "d": "\u8FD4\u56DE\u67D0\u500B\u5B57\u4E32\u5728\u6587\u5B57\u4E2D\u9996\u6B21\u51FA\u73FE\u7684\u4F4D\u7F6E\uFF08\u6BCF\u500B\u96D9\u4F4D\u5143\u7D44\u5B57\u5143\u5360\u5169\u500B\u4F4D\u7F6E\uFF09\u3002",
            "a": "\u8FD4\u56DE\u67D0\u500B\u5B57\u4E32\u5728\u6587\u5B57\u4E2D\u9996\u6B21\u51FA\u73FE\u7684\u4F4D\u7F6E\uFF08\u6BCF\u500B\u96D9\u4F4D\u5143\u7D44\u5B57\u5143\u5360\u5169\u500B\u4F4D\u7F6E\uFF09\u3002",
            "p": [
              {
                "name": "find_text",
                "detail": "\u8981\u5728\u8981\u8490\u7D22\u7684\u6587\u5B57\u4E2D\u67E5\u627E\u7684\u5B57\u4E32\u3002"
              },
              {
                "name": "within_text",
                "detail": "\u8981\u5728\u5176\u4E2D\u8490\u7D22\u8490\u7D22\u5B57\u4E32\u7684\u9996\u6B21\u51FA\u73FE\u4F4D\u7F6E\u7684\u6587\u5B57\u3002"
              },
              {
                "name": "start_num",
                "detail": "[\u53EF\u9078-\u9810\u8A2D\u503C\u70BA1] - \u8981\u5728\u8981\u8490\u7D22\u7684\u6587\u5B57\u4E2D\u958B\u59CB\u8490\u7D22\u7684\u5B57\u5143\u4F4D\u7F6E\u3002"
              }
            ]
          },
          "JOIN": {
            "d": "\u5C07\u4E00\u500B\u6216\u591A\u500B\u4F7F\u7528\u6307\u5B9A\u5B9A\u754C\u7B26\u7684\u4E00\u7DAD\u6578\u7D44\u7684\u5143\u7D20\u9023\u63A5\u5230\u4E00\u8D77\u3002",
            "a": "\u5C07\u4E00\u500B\u6216\u591A\u500B\u4F7F\u7528\u6307\u5B9A\u5B9A\u754C\u7B26\u7684\u4E00\u7DAD\u6578\u7D44\u7684\u5143\u7D20\u9023\u63A5\u5230\u4E00\u8D77\u3002",
            "p": [
              {
                "name": "separator",
                "detail": "\u7F6E\u65BC\u76F8\u4E92\u9023\u63A5\u7684\u503C\u4E4B\u9593\u7684\u5B57\u5143\u6216\u5B57\u4E32\u3002\n\n\u5B9A\u754C\u7B26\u53EF\u4EE5\u70BA\u7A7A,\u4F8B\u5982JOIN\uFF08,{1,2,3}\uFF09\u3002"
              },
              {
                "name": "array1",
                "detail": "\u8981\u4F7F\u7528\u5B9A\u754C\u7B26\u9023\u63A5\u7684\u4E00\u500B\u6216\u591A\u500B\u503C\u3002"
              },
              {
                "name": "array2,\u2026",
                "detail": "[\u53EF\u9078] - \u8981\u4F7F\u7528\u5B9A\u754C\u7B26\u9023\u63A5\u7684\u5176\u4ED6\u503C\u6216\u6578\u7D44\u3002"
              }
            ]
          },
          "LEFT": {
            "d": "\u5F9E\u6587\u5B57\u5B57\u4E32\u7684\u7B2C\u4E00\u500B\u5B57\u5143\u958B\u59CB\u8FD4\u56DE\u6307\u5B9A\u500B\u6578\u7684\u5B57\u5143\u3002",
            "a": "\u5F9E\u6587\u5B57\u5B57\u4E32\u7684\u7B2C\u4E00\u500B\u5B57\u5143\u958B\u59CB\u8FD4\u56DE\u6307\u5B9A\u500B\u6578\u7684\u5B57\u5143\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u5305\u542B\u8981\u9078\u53D6\u7684\u5B57\u5143\u7684\u6587\u5B57\u5B57\u4E32\u3002"
              },
              {
                "name": "num_chars",
                "detail": "[\u53EF\u9078-\u9810\u8A2D\u503C\u70BA1] - \u6307\u5B9A\u8981\u7531LEFT\u9078\u53D6\u7684\u5B57\u5143\u7684\u6578\u91CF\u3002"
              }
            ]
          },
          "RIGHT": {
            "d": "\u6839\u64DA\u6240\u6307\u5B9A\u7684\u5B57\u5143\u6578\u8FD4\u56DE\u6587\u5B57\u5B57\u4E32\u4E2D\u6700\u5F8C\u4E00\u500B\u6216\u591A\u500B\u5B57\u5143\u3002",
            "a": "\u6839\u64DA\u6240\u6307\u5B9A\u7684\u5B57\u5143\u6578\u8FD4\u56DE\u6587\u5B57\u5B57\u4E32\u4E2D\u6700\u5F8C\u4E00\u500B\u6216\u591A\u500B\u5B57\u5143\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u5305\u542B\u8981\u9078\u53D6\u7684\u5B57\u5143\u7684\u6587\u5B57\u5B57\u4E32\u3002"
              },
              {
                "name": "num_chars",
                "detail": "[\u53EF\u9078-\u9810\u8A2D\u503C\u70BA1] - \u6307\u5B9A\u8981\u7531RIGHT\u9078\u53D6\u7684\u5B57\u5143\u7684\u6578\u91CF\u3002"
              }
            ]
          },
          "MID": {
            "d": "\u8FD4\u56DE\u6587\u5B57\u5B57\u4E32\u4E2D\u5F9E\u6307\u5B9A\u4F4D\u7F6E\u958B\u59CB\u7684\u7279\u5B9A\u6578\u76EE\u7684\u5B57\u5143\u3002",
            "a": "\u8FD4\u56DE\u6587\u5B57\u5B57\u4E32\u4E2D\u5F9E\u6307\u5B9A\u4F4D\u7F6E\u958B\u59CB\u7684\u7279\u5B9A\u6578\u76EE\u7684\u5B57\u5143\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u5305\u542B\u8981\u9078\u53D6\u7684\u5B57\u5143\u7684\u6587\u5B57\u5B57\u4E32\u3002"
              },
              {
                "name": "start_num",
                "detail": "\u8981\u5F9E\u5B57\u4E32\u4E2D\u958B\u59CB\u9078\u53D6\u7684\u4F4D\u7F6E\u3002\u5B57\u4E32\u4E2D\u7B2C\u4E00\u500B\u5B57\u5143\u7684\u7D22\u5F15\u70BA1\u3002"
              },
              {
                "name": "num_chars",
                "detail": "\u6307\u5B9A\u8981\u7531MID\u9078\u53D6\u7684\u5B57\u5143\u7684\u6578\u91CF\u3002\n\n\u5982\u679C\u9078\u53D6\u7684\u5B57\u5143\u6578\u5C1A\u4E0D\u8DB3\u9078\u53D6\u9577\u5EA6\u500B\u5B57\u5143\u6642\u5C31\u5230\u9054\u4E86\u5B57\u4E32\u5C3E\u90E8,\u5247MID\u8FD4\u56DE\u5F9E\u958B\u59CB\u4F4D\u7F6E\u5230\u5B57\u4E32\u5C3E\u90E8\u7684\u5B57\u5143\u3002"
              }
            ]
          },
          "LEN": {
            "d": "\u8FD4\u56DE\u7D66\u5B9A\u5B57\u4E32\u7684\u9577\u5EA6\u3002",
            "a": "\u8FD4\u56DE\u7D66\u5B9A\u5B57\u4E32\u7684\u9577\u5EA6\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u8FD4\u56DE\u5176\u9577\u5EA6\u7684\u5B57\u4E32\u3002"
              }
            ]
          },
          "LENB": {
            "d": "\u8FD4\u56DE\u6587\u5B57\u4E2D\u6240\u5305\u542B\u7684\u5B57\u5143\u6578\u3002\u8207\u96D9\u4F4D\u5143\u7D44\u5B57\u5143\u96C6\uFF08DBCS\uFF09\u4E00\u8D77\u4F7F\u7528\u3002",
            "a": "\u8FD4\u56DE\u6587\u5B57\u4E2D\u6240\u5305\u542B\u7684\u5B57\u5143\u6578\u3002\u8207\u96D9\u4F4D\u5143\u7D44\u5B57\u5143\u96C6\uFF08DBCS\uFF09\u4E00\u8D77\u4F7F\u7528\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u8FD4\u56DE\u5176\u4F4D\u5143\u7D44\u6578\u7684\u5B57\u4E32\u3002\uFF08\u4E00\u500B\u6F22\u5B57\u70BA\u5169\u500B\u4F4D\u5143\u7D44\u6578\uFF09"
              }
            ]
          },
          "LOWER": {
            "d": "\u5C07\u6307\u5B9A\u5B57\u4E32\u4E2D\u7684\u5B57\u6BCD\u8F49\u63DB\u70BA\u5C0F\u5BEB\u3002",
            "a": "\u5C07\u6307\u5B9A\u5B57\u4E32\u4E2D\u7684\u5B57\u6BCD\u8F49\u63DB\u70BA\u5C0F\u5BEB\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u8F49\u63DB\u70BA\u5C0F\u5BEB\u7684\u5B57\u4E32\u3002"
              }
            ]
          },
          "UPPER": {
            "d": "\u5C07\u6307\u5B9A\u5B57\u4E32\u4E2D\u7684\u5B57\u6BCD\u8F49\u63DB\u70BA\u5927\u5BEB\u3002",
            "a": "\u5C07\u6307\u5B9A\u5B57\u4E32\u4E2D\u7684\u5B57\u6BCD\u8F49\u63DB\u70BA\u5927\u5BEB\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u8F49\u63DB\u70BA\u5927\u5BEB\u7684\u5B57\u4E32\u3002"
              }
            ]
          },
          "EXACT": {
            "d": "\u6BD4\u8F03\u5169\u500B\u5B57\u4E32\u662F\u5426\u76F8\u540C\u3002",
            "a": "\u6BD4\u8F03\u5169\u500B\u5B57\u4E32\u662F\u5426\u76F8\u540C\u3002",
            "p": [
              {
                "name": "text1",
                "detail": "\u8981\u6BD4\u8F03\u7684\u7B2C\u4E00\u500B\u5B57\u4E32\u3002"
              },
              {
                "name": "text2",
                "detail": "\u8981\u6BD4\u8F03\u7684\u7B2C\u4E8C\u500B\u5B57\u4E32\u3002"
              }
            ]
          },
          "REPLACE": {
            "d": "\u5C07\u6587\u5B57\u5B57\u4E32\u7684\u4E00\u90E8\u5206\u66FF\u63DB\u70BA\u5176\u4ED6\u6587\u5B57\u5B57\u4E32\u3002",
            "a": "\u5C07\u6587\u5B57\u5B57\u4E32\u7684\u4E00\u90E8\u5206\u66FF\u63DB\u70BA\u5176\u4ED6\u6587\u5B57\u5B57\u4E32\u3002",
            "p": [
              {
                "name": "old_text",
                "detail": "\u8981\u5C0D\u5176\u5C40\u90E8\u9032\u884C\u66FF\u63DB\u64CD\u4F5C\u7684\u6587\u5B57\u3002"
              },
              {
                "name": "start_num",
                "detail": "\u958B\u59CB\u9032\u884C\u66FF\u63DB\u64CD\u4F5C\u7684\u4F4D\u7F6E\uFF08\u6587\u5B57\u958B\u982D\u4F4D\u7F6E\u70BA1\uFF09\u3002"
              },
              {
                "name": "num_chars",
                "detail": "\u8981\u5728\u6587\u5B57\u4E2D\u66FF\u63DB\u7684\u5B57\u5143\u500B\u6578\u3002"
              },
              {
                "name": "new_text",
                "detail": "\u8981\u63D2\u5165\u5230\u539F\u6709\u6587\u5B57\u4E2D\u7684\u6587\u5B57\u3002"
              }
            ]
          },
          "REPT": {
            "d": "\u8FD4\u56DE\u6307\u5B9A\u6587\u5B57\u7684\u591A\u6B21\u91CD\u8907\u3002",
            "a": "\u8FD4\u56DE\u6307\u5B9A\u6587\u5B57\u7684\u591A\u6B21\u91CD\u8907\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u91CD\u8907\u7684\u5B57\u5143\u6216\u5B57\u4E32\u3002"
              },
              {
                "name": "number_times",
                "detail": "\u8981\u91CD\u8907\u7684\u6587\u5B57\u8981\u5728\u8FD4\u56DE\u503C\u4E2D\u51FA\u73FE\u7684\u6B21\u6578\u3002\n\n\u6700\u5927\u91CD\u8907\u6B21\u6578\u70BA100\u3002\u5373\u4F7F\u91CD\u8907\u6B21\u6578\u5927\u65BC100,REPT\u4E5F\u50C5\u5C07\u76F8\u61C9\u6587\u5B57\u91CD\u8907100\u6B21\u3002"
              }
            ]
          },
          "SEARCH": {
            "d": "\u8FD4\u56DE\u5B57\u4E32\u5728\u6587\u5B57\u4E2D\u9996\u6B21\u51FA\u73FE\u7684\u4F4D\u7F6E\uFF08\u4E0D\u5340\u5206\u5927\u5C0F\u5BEB\uFF09\u3002",
            "a": "\u8FD4\u56DE\u5B57\u4E32\u5728\u6587\u5B57\u4E2D\u9996\u6B21\u51FA\u73FE\u7684\u4F4D\u7F6E\uFF08\u4E0D\u5340\u5206\u5927\u5C0F\u5BEB\uFF09\u3002",
            "p": [
              {
                "name": "find_text",
                "detail": "\u8981\u5728\u8981\u8490\u7D22\u7684\u6587\u5B57\u4E2D\u67E5\u627E\u7684\u5B57\u4E32\u3002"
              },
              {
                "name": "within_text",
                "detail": "\u8981\u5728\u5176\u4E2D\u8490\u7D22\u8490\u7D22\u5B57\u4E32\u7684\u9996\u6B21\u51FA\u73FE\u4F4D\u7F6E\u7684\u6587\u5B57\u3002"
              },
              {
                "name": "start_num",
                "detail": "[\u53EF\u9078-\u9810\u8A2D\u503C\u70BA1 ] - \u8981\u5728\u8981\u8490\u7D22\u7684\u6587\u5B57\u4E2D\u958B\u59CB\u8490\u7D22\u7684\u5B57\u5143\u4F4D\u7F6E\u3002"
              }
            ]
          },
          "SUBSTITUTE": {
            "d": "\u5728\u6587\u5B57\u5B57\u4E32\u4E2D\u7528new_text\u66FF\u63DBold_text\u3002",
            "a": "\u5728\u6587\u5B57\u5B57\u4E32\u4E2D\u7528new_text\u66FF\u63DBold_text\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u9700\u8981\u66FF\u63DB\u5176\u4E2D\u5B57\u5143\u7684\u6587\u5B57,\u6216\u5C0D\u542B\u6709\u6587\u5B57\uFF08\u9700\u8981\u66FF\u63DB\u5176\u4E2D\u5B57\u5143\uFF09\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3002"
              },
              {
                "name": "old_text",
                "detail": "\u9700\u8981\u66FF\u63DB\u7684\u6587\u5B57\u3002"
              },
              {
                "name": "new_text",
                "detail": "\u7528\u65BC\u66FF\u63DBold_text\u7684\u6587\u5B57\u3002"
              },
              {
                "name": "instance_num",
                "detail": "[\u53EF\u9078] - \u6307\u5B9A\u8981\u7528new_text\u66FF\u63DBold_text\u7684\u4E8B\u4EF6\u3002\u5982\u679C\u6307\u5B9A\u4E86instance_num,\u5247\u53EA\u6709\u6EFF\u8DB3\u8981\u6C42\u7684old_text\u88AB\u66FF\u63DB\u3002\u5426\u5247,\u6587\u5B57\u4E2D\u51FA\u73FE\u7684\u6240\u6709old_text\u90FD\u6703\u66F4\u6539\u70BAnew_text\u3002"
              }
            ]
          },
          "CLEAN": {
            "d": "\u79FB\u9664\u6587\u5B57\u4E2D\u7684\u4E0D\u53EF\u5217\u5370ASCII\u5B57\u5143\u5F8C\u5C07\u5176\u8FD4\u56DE\u3002",
            "a": "\u79FB\u9664\u6587\u5B57\u4E2D\u7684\u4E0D\u53EF\u5217\u5370ASCII\u5B57\u5143\u5F8C\u5C07\u5176\u8FD4\u56DE\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u79FB\u9664\u5176\u4E2D\u4E0D\u53EF\u5217\u5370\u5B57\u5143\u7684\u6587\u5B57\u3002"
              }
            ]
          },
          "TEXT": {
            "d": "\u6309\u7167\u6307\u5B9A\u683C\u5F0F\u5C07\u6578\u4F4D\u8F49\u63DB\u70BA\u6587\u5B57\u3002",
            "a": "\u6309\u7167\u6307\u5B9A\u683C\u5F0F\u5C07\u6578\u4F4D\u8F49\u63DB\u70BA\u6587\u5B57\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8A2D\u5B9A\u683C\u5F0F\u7684\u6578\u4F4D\u3001\u65E5\u671F\u6216\u6642\u9593\u3002"
              },
              {
                "name": "format_text",
                "detail": '\u4EE5\u62EC\u5F27\u62EC\u8D77\u4F86\u7684\u6A21\u5F0F\u4E32,\u5C07\u6309\u8A72\u6A21\u5F0F\u8A2D\u5B9A\u6578\u4F4D\u7684\u683C\u5F0F\u3002\n\n0\u8868\u793A\u5728\u6578\u503C\u4F4D\u6578\u5C11\u65BC\u683C\u5F0F\u6307\u5B9A\u7684\u4F4D\u6578\u6642\u5FC5\u5B9A\u4EE5\u96F6\u586B\u5145\u3002\u4F8B\u5982,TEXT\uFF0812.3,\u201C000.00"\uFF09\u5C07\u8FD4\u56DE012.30\u3002\u7576\u6578\u503C\u7684\u5C0F\u6578\u4F4D\u6578\u8D85\u904E\u6A21\u5F0F\u6307\u5B9A\u7684\u5C0F\u6578\u4F4D\u6578\u6642,\u56DB\u6368\u4E94\u5165\u70BA\u6307\u5B9A\u7684\u5C0F\u6578\u4F4D\u6578\u3002\u4F8B\u5982,TEXT\uFF0812.305,\u201C00.00"\uFF09\u5C07\u8FD4\u56DE12.31\u3002\n\n#\u985E\u4F3C\u65BC0,\u4F46\u4E26\u4E0D\u662F\u5728\u5C0F\u6578\u9EDE\u7684\u5169\u5074\u90FD\u4EE5\u96F6\u586B\u5145\u3002\u4F8B\u5982,TEXT\uFF0812.3,\u201C###.##"\uFF09\u5C07\u8FD4\u56DE12.3\u3002'
              }
            ]
          },
          "TRIM": {
            "d": "\u5220\u9664\u6307\u5B9A\u5B57\u4E32\u524D\u5F8C\u7684\u7A7A\u683C\u3002",
            "a": "\u5220\u9664\u6307\u5B9A\u5B57\u4E32\u524D\u5F8C\u7684\u7A7A\u683C\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u4FEE\u526A\u7684\u5B57\u4E32\u6216\u6307\u5411\u5305\u542B\u8A72\u5B57\u4E32\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3002"
              }
            ]
          },
          "VALUE": {
            "d": "\u5C07\u53EF\u8B58\u5225\u7684\u4EFB\u4F55\u65E5\u671F\u3001\u6642\u9593\u6216\u6578\u4F4D\u683C\u5F0F\u7684\u5B57\u4E32\u8F49\u63DB\u70BA\u6578\u4F4D\u3002",
            "a": "\u5C07\u53EF\u8B58\u5225\u7684\u4EFB\u4F55\u65E5\u671F\u3001\u6642\u9593\u6216\u6578\u4F4D\u683C\u5F0F\u7684\u5B57\u4E32\u8F49\u63DB\u70BA\u6578\u4F4D\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u5305\u542B\u8981\u8F49\u63DB\u7684\u503C\u7684\u5B57\u4E32\u3002"
              }
            ]
          },
          "PROPER": {
            "d": "\u5C07\u6307\u5B9A\u5B57\u4E32\u4E2D\u6BCF\u500B\u55AE\u8A5E\u7684\u9996\u5B57\u6BCD\u8F49\u70BA\u5927\u5BEB\u3002",
            "a": "\u5C07\u6307\u5B9A\u5B57\u4E32\u4E2D\u6BCF\u500B\u55AE\u8A5E\u7684\u9996\u5B57\u6BCD\u8F49\u70BA\u5927\u5BEB\u3002",
            "p": [
              {
                "name": "text",
                "detail": "\u8981\u8F49\u63DB\u7684\u6587\u5B57,\u5176\u4E2D\u6BCF\u500B\u55AE\u8A5E\u7684\u9996\u5B57\u6BCD\u90FD\u5C07\u8F49\u70BA\u5927\u5BEB,\u6240\u6709\u5176\u4ED6\u5B57\u6BCD\u5247\u8F49\u70BA\u5C0F\u5BEB\u3002"
              }
            ]
          },
          "CONVERT": {
            "d": "\u5C07\u6578\u4F4D\u5F9E\u4E00\u7A2E\u5EA6\u91CF\u7CFB\u7D71\u8F49\u63DB\u70BA\u53E6\u4E00\u7A2E\u5EA6\u91CF\u7CFB\u7D71\u3002",
            "a": "\u5C07\u6578\u4F4D\u5F9E\u4E00\u7A2E\u5EA6\u91CF\u7CFB\u7D71\u8F49\u63DB\u70BA\u53E6\u4E00\u7A2E\u5EA6\u91CF\u7CFB\u7D71\u3002",
            "p": [
              {
                "name": "number",
                "detail": "\u662F\u4EE5from_unit\u70BA\u7D44\u7E54\u7684\u9700\u8981\u9032\u884C\u8F49\u63DB\u7684\u6578\u503C\u3002"
              },
              {
                "name": "from_unit",
                "detail": "\u662F\u6578\u503C\u7684\u7D44\u7E54\u3002"
              },
              {
                "name": "to_unit",
                "detail": "\u662F\u7D50\u679C\u7684\u7D44\u7E54\u3002"
              }
            ]
          },
          "SUMX2MY2": {
            "d": "\u8FD4\u56DE\u5169\u6578\u7D44\u4E2D\u5C0D\u61C9\u6578\u503C\u7684\u5E73\u65B9\u5DEE\u4E4B\u548C\u3002",
            "a": "\u8FD4\u56DE\u5169\u6578\u7D44\u4E2D\u5C0D\u61C9\u6578\u503C\u7684\u5E73\u65B9\u5DEE\u4E4B\u548C\u3002",
            "p": [
              {
                "name": "array_x",
                "detail": "\u7B2C\u4E00\u500B\u6578\u7D44\u6216\u6578\u503C\u5340\u57DF\u3002"
              },
              {
                "name": "array_y",
                "detail": "\u7B2C\u4E8C\u500B\u6578\u7D44\u6216\u6578\u503C\u5340\u57DF\u3002"
              }
            ]
          },
          "SUMX2PY2": {
            "d": "\u8FD4\u56DE\u5169\u6578\u7D44\u4E2D\u5C0D\u61C9\u6578\u503C\u7684\u5E73\u65B9\u548C\u4E4B\u548C\u3002",
            "a": "\u8FD4\u56DE\u5169\u6578\u7D44\u4E2D\u5C0D\u61C9\u6578\u503C\u7684\u5E73\u65B9\u548C\u4E4B\u548C\u3002",
            "p": [
              {
                "name": "array_x",
                "detail": "\u7B2C\u4E00\u500B\u6578\u7D44\u6216\u6578\u503C\u5340\u57DF\u3002"
              },
              {
                "name": "array_y",
                "detail": "\u7B2C\u4E8C\u500B\u6578\u7D44\u6216\u6578\u503C\u5340\u57DF\u3002"
              }
            ]
          },
          "SUMXMY2": {
            "d": "\u8FD4\u56DE\u5169\u6578\u7D44\u4E2D\u5C0D\u61C9\u6578\u503C\u4E4B\u5DEE\u7684\u5E73\u65B9\u548C\u3002",
            "a": "\u8FD4\u56DE\u5169\u6578\u7D44\u4E2D\u5C0D\u61C9\u6578\u503C\u4E4B\u5DEE\u7684\u5E73\u65B9\u548C\u3002",
            "p": [
              {
                "name": "array_x",
                "detail": "\u7B2C\u4E00\u500B\u6578\u7D44\u6216\u6578\u503C\u5340\u57DF\u3002"
              },
              {
                "name": "array_y",
                "detail": "\u7B2C\u4E8C\u500B\u6578\u7D44\u6216\u6578\u503C\u5340\u57DF\u3002"
              }
            ]
          },
          "TRANSPOSE": {
            "d": "\u5C07\u6578\u7D44\u6216\u5132\u5B58\u683C\u7BC4\u570D\u7684\u884C\u5217\u8F49\u7F6E\u3002",
            "a": "\u5C07\u6578\u7D44\u6216\u5132\u5B58\u683C\u7BC4\u570D\u7684\u884C\u5217\u8F49\u7F6E\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u8981\u5C07\u5176\u884C\u5217\u4E92\u63DB\u7684\u6578\u7D44\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "TREND": {
            "d": "\u8FD4\u56DE\u7DDA\u6027\u8DA8\u52E2\u503C\u3002",
            "a": "\u8FD4\u56DE\u7DDA\u6027\u8DA8\u52E2\u503C\u3002",
            "p": [
              {
                "name": "known_y",
                "detail": "\u95DC\u4FC2\u904B\u7B97\u5F0Fy = mx + b \u4E2D\u5DF2\u77E5\u7684y\u503C\u96C6\u5408\u3002\n\n\u5982\u679Cknown_y\u70BA\u4E8C\u7DAD\u9663\u5217\u6216\u7BC4\u570D,\u5247known_x\u7684\u7DAD\u6578\u5FC5\u9808\u8207\u4E4B\u76F8\u540C,\u6216\u8005\u7701\u7565\u6B64\u53C3\u6578\u3002\n\n\u5982\u679Cknown_y\u70BA\u4E00\u7DAD\u6578\u7D44\u6216\u7BC4\u570D,known_x\u5247\u53EF\u4EE3\u8868\u4E8C\u7DAD\u9663\u5217\u6216\u7BC4\u570D\u4E2D\u7684\u591A\u500B\u5F15\u6578\u3002\u4E5F\u5C31\u662F\u8AAA,\u5982\u679Cknown_y\u70BA\u55AE\u884C,\u5247\u5C07known_x\u4E2D\u7684\u6BCF\u884C\u89E3\u91CB\u70BA\u5404\u81EA\u7368\u7ACB\u7684\u503C,\u985E\u4F3C\u60C5\u51B5\u4E5F\u9069\u7528\u65BCknown_y\u70BA\u55AE\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "known_x",
                "detail": "[\u53EF\u9078-\u9ED8\u8A8D\u8A72\u6578\u7D44\u70BA{1,2,3,\u2026},\u5176\u5927\u5C0F\u8207known_y\u76F8\u540C] -\u95DC\u4FC2\u904B\u7B97\u5F0Fy = mx + b \u4E2D\u5DF2\u77E5\u7684\u53EF\u9078x\u503C\u96C6\u5408\u3002\n\n\u5982\u679Cknown_y\u70BA\u4E00\u7DAD\u6578\u7D44\u6216\u7BC4\u570D,known_x\u5247\u53EF\u4EE3\u8868\u4E8C\u7DAD\u9663\u5217\u6216\u7BC4\u570D\u4E2D\u7684\u591A\u500B\u5F15\u6578\u3002\u4E5F\u5C31\u662F\u8AAA,\u5982\u679Cknown_y\u70BA\u55AE\u884C,\u5247\u5C07known_x\u4E2D\u7684\u6BCF\u884C\u89E3\u91CB\u70BA\u5404\u81EA\u7368\u7ACB\u7684\u503C,\u985E\u4F3C\u60C5\u51B5\u4E5F\u9069\u7528\u65BCknown_y\u70BA\u55AE\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "new_x",
                "detail": "[\u53EF\u9078 - \u9ED8\u8A8D\u8207known_x\u76F8\u540C] - \u9700\u8981\u51FD\u6578TREND\u8FD4\u56DE\u5C0D\u61C9y\u503C\u7684\u65B0x\u503C\u3002"
              },
              {
                "name": "const",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BATRUE\uFF08\uFF09] - \u4E00\u500B\u908F\u8F2F\u503C,\u7528\u65BC\u6307\u5B9A\u662F\u5426\u5C07\u5E38\u6578b\u5F37\u5236\u8A2D\u70BA0\u3002\n\nTRUE\uFF08\uFF09\u8868\u793Ab\u5C07\u6309\u6B63\u5E38\u8A08\u7B97\uFF1B\n\nFALSE\uFF08\uFF09\u8868\u793Ab\u5C07\u88AB\u8A2D\u70BA0\uFF08\u96F6\uFF09,m \u5C07\u88AB\u8ABF\u6574\u4EE5\u4F7Fy = mx\u3002"
              }
            ]
          },
          "FREQUENCY": {
            "d": "\u8A08\u7B97\u6578\u503C\u5728\u67D0\u500B\u5340\u57DF\u5167\u7684\u51FA\u73FE\u983B\u7387,\u7136\u5F8C\u8FD4\u56DE\u4E00\u500B\u5782\u76F4\u6578\u7D44\u3002",
            "a": "\u8A08\u7B97\u6578\u503C\u5728\u67D0\u500B\u5340\u57DF\u5167\u7684\u51FA\u73FE\u983B\u7387,\u7136\u5F8C\u8FD4\u56DE\u4E00\u500B\u5782\u76F4\u6578\u7D44\u3002",
            "p": [
              {
                "name": "data_array",
                "detail": "\u8981\u5C0D\u5176\u983B\u7387\u9032\u884C\u8A08\u6578\u7684\u4E00\u7D44\u6578\u503C\u6216\u5C0D\u9019\u7D44\u6578\u503C\u7684\u5F15\u7528\u3002"
              },
              {
                "name": "bins_array",
                "detail": "\u8981\u5C07data_array\u4E2D\u7684\u503C\u63D2\u5165\u5230\u7684\u9593\u9694\u6578\u7D44\u6216\u5C0D\u9593\u9694\u7684\u5F15\u7528\u3002\n\n\u70BA\u6E05\u6670\u8D77\u898B,\u61C9\u5C07\u985E\u5225\u6392\u5E8F,\u4F46\u5982\u679C\u672A\u6392\u5E8F,FREQUENCY\u6703\u5728\u5167\u90E8\u5C0D\u9019\u4E9B\u6307\u5B9A\u7684\u503C\u9032\u884C\u6392\u5E8F\u4E26\u8FD4\u56DE\u6B63\u78BA\u7D50\u679C\u3002"
              }
            ]
          },
          "GROWTH": {
            "d": "\u4F7F\u7528\u73FE\u6709\u6578\u64DA\u8A08\u7B97\u9810\u6E2C\u7684\u6307\u6578\u7B49\u6BD4\u3002",
            "a": "\u4F7F\u7528\u73FE\u6709\u6578\u64DA\u8A08\u7B97\u9810\u6E2C\u7684\u6307\u6578\u7B49\u6BD4\u3002",
            "p": [
              {
                "name": "known_y",
                "detail": "\u95DC\u4FC2\u904B\u7B97\u5F0Fy = b*m^x \u4E2D\u5DF2\u77E5\u7684y\u503C\u96C6\u5408\u3002\n\n\u5982\u679C\u5DF2\u77E5\u6578\u64DA_y\u70BA\u4E8C\u7DAD\u9663\u5217\u6216\u7BC4\u570D,\u5247\u5DF2\u77E5\u6578\u64DA_x\u7684\u7DAD\u6578\u5FC5\u9808\u8207\u4E4B\u76F8\u540C,\u6216\u8005\u7701\u7565\u6B64\u53C3\u6578\u3002\n\n\u5982\u679C\u5DF2\u77E5\u6578\u64DA_y\u70BA\u4E00\u7DAD\u6578\u7D44\u6216\u7BC4\u570D,\u5DF2\u77E5\u6578\u64DA_x\u5247\u53EF\u4EE3\u8868\u4E8C\u7DAD\u9663\u5217\u6216\u7BC4\u570D\u4E2D\u7684\u591A\u500B\u5F15\u6578\u3002\u4E5F\u5C31\u662F\u8AAA,\u5982\u679C\u5DF2\u77E5\u6578\u64DA_y\u70BA\u55AE\u884C,\u5247\u5C07\u5DF2\u77E5\u6578\u64DA_x\u4E2D\u7684\u6BCF\u884C\u89E3\u91CB\u70BA\u5404\u81EA\u7368\u7ACB\u7684\u503C,\u985E\u4F3C\u60C5\u51B5\u4E5F\u9069\u7528\u65BC\u5DF2\u77E5\u6578\u64DA_y\u70BA\u55AE\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "known_x",
                "detail": "[\u53EF\u9078 - \u9ED8\u8A8D\u8A72\u6578\u7D44\u70BA{1,2,3,\u2026},\u5176\u5927\u5C0F\u8207known_y\u76F8\u540C] - \u95DC\u4FC2\u904B\u7B97\u5F0Fy = b*m^x \u4E2D\u5DF2\u77E5\u7684\u53EF\u9078x\u503C\u96C6\u5408\u3002\n\n\u5982\u679C\u5DF2\u77E5\u6578\u64DA_y\u70BA\u4E00\u7DAD\u6578\u7D44\u6216\u7BC4\u570D,\u5DF2\u77E5\u6578\u64DA_x\u5247\u53EF\u4EE3\u8868\u4E8C\u7DAD\u9663\u5217\u6216\u7BC4\u570D\u4E2D\u7684\u591A\u500B\u5F15\u6578\u3002\u4E5F\u5C31\u662F\u8AAA,\u5982\u679C\u5DF2\u77E5\u6578\u64DA_y\u70BA\u55AE\u884C,\u5247\u5C07\u5DF2\u77E5\u6578\u64DA_x\u4E2D\u7684\u6BCF\u884C\u89E3\u91CB\u70BA\u5404\u81EA\u7368\u7ACB\u7684\u503C,\u985E\u4F3C\u60C5\u51B5\u4E5F\u9069\u7528\u65BC\u5DF2\u77E5\u6578\u64DA_y\u70BA\u55AE\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "new_x",
                "detail": "[\u53EF\u9078 - \u9ED8\u8A8D\u8207known_x\u76F8\u540C] - \u9700\u8981\u51FD\u6578GROWTH\u8FD4\u56DE\u5C0D\u61C9y\u503C\u7684\u65B0x\u503C\u3002"
              },
              {
                "name": "const",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BATRUE\uFF08\uFF09] - \u4E00\u500B\u908F\u8F2F\u503C,\u7528\u65BC\u6307\u5B9A\u662F\u5426\u5C07\u5E38\u6578b\u5F37\u5236\u8A2D\u70BA1\u3002\n\nTRUE\uFF08\uFF09\u8868\u793Ab\u5C07\u6309\u6B63\u5E38\u8A08\u7B97\uFF1B\n\nFALSE\uFF08\uFF09\u8868\u793Ab\u5C07\u88AB\u8A2D\u70BA1,m\u5C07\u88AB\u8ABF\u6574\u4EE5\u4F7Fy = m^x\u3002"
              }
            ]
          },
          "LINEST": {
            "d": "\u53EF\u901A\u904E\u4F7F\u7528\u6700\u5C0F\u4E8C\u4E58\u6CD5\u8A08\u7B97\u8207\u73FE\u6709\u6578\u64DA\u6700\u4F73\u64EC\u5408\u7684\u76F4\u7DDA,\u4F86\u8A08\u7B97\u67D0\u76F4\u7DDA\u7684\u7D71\u8A08\u503C,\u7136\u5F8C\u8FD4\u56DE\u63CF\u8FF0\u6B64\u76F4\u7DDA\u7684\u6578\u7D44\u3002",
            "a": "\u53EF\u901A\u904E\u4F7F\u7528\u6700\u5C0F\u4E8C\u4E58\u6CD5\u8A08\u7B97\u8207\u73FE\u6709\u6578\u64DA\u6700\u4F73\u64EC\u5408\u7684\u76F4\u7DDA,\u4F86\u8A08\u7B97\u67D0\u76F4\u7DDA\u7684\u7D71\u8A08\u503C,\u7136\u5F8C\u8FD4\u56DE\u63CF\u8FF0\u6B64\u76F4\u7DDA\u7684\u6578\u7D44\u3002",
            "p": [
              {
                "name": "known_y",
                "detail": "\u95DC\u4FC2\u904B\u7B97\u5F0Fy = mx + b \u4E2D\u5DF2\u77E5\u7684y\u503C\u96C6\u5408\u3002\n\n\u5982\u679Cknown_y\u70BA\u4E8C\u7DAD\u9663\u5217\u6216\u7BC4\u570D,\u5247known_x\u7684\u7DAD\u6578\u5FC5\u9808\u8207\u4E4B\u76F8\u540C,\u6216\u8005\u7701\u7565\u6B64\u53C3\u6578\u3002\n\n\u5982\u679Cknown_y\u70BA\u4E00\u7DAD\u6578\u7D44\u6216\u7BC4\u570D,known_x\u5247\u53EF\u4EE3\u8868\u4E8C\u7DAD\u9663\u5217\u6216\u7BC4\u570D\u4E2D\u7684\u591A\u500B\u5F15\u6578\u3002\u4E5F\u5C31\u662F\u8AAA,\u5982\u679Cknown_y\u70BA\u55AE\u884C,\u5247\u5C07known_x\u4E2D\u7684\u6BCF\u884C\u89E3\u91CB\u70BA\u5404\u81EA\u7368\u7ACB\u7684\u503C,\u985E\u4F3C\u60C5\u51B5\u4E5F\u9069\u7528\u65BCknown_y\u70BA\u55AE\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "known_x",
                "detail": "[\u53EF\u9078 - \u9ED8\u8A8D\u8A72\u6578\u7D44\u70BA{1,2,3,\u2026},\u5176\u5927\u5C0F\u8207known_y\u76F8\u540C] - \u95DC\u4FC2\u904B\u7B97\u5F0Fy = mx + b\u4E2D\u5DF2\u77E5\u7684\u53EF\u9078x\u503C\u96C6\u5408\u3002\n\n\u5982\u679Cknown_y\u70BA\u4E00\u7DAD\u6578\u7D44\u6216\u7BC4\u570D,known_x\u5247\u53EF\u4EE3\u8868\u4E8C\u7DAD\u9663\u5217\u6216\u7BC4\u570D\u4E2D\u7684\u591A\u500B\u5F15\u6578\u3002\u4E5F\u5C31\u662F\u8AAA,\u5982\u679Cknown_y\u70BA\u55AE\u884C,\u5247\u5C07known_x\u4E2D\u7684\u6BCF\u884C\u89E3\u91CB\u70BA\u5404\u81EA\u7368\u7ACB\u7684\u503C,\u985E\u4F3C\u60C5\u51B5\u4E5F\u9069\u7528\u65BCknown_y\u70BA\u55AE\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "const",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BATRUE\uFF08\uFF09] - \u4E00\u500B\u908F\u8F2F\u503C,\u7528\u65BC\u6307\u5B9A\u662F\u5426\u5C07\u5E38\u6578b\u5F37\u5236\u8A2D\u70BA0\u3002\n\nTRUE\uFF08\uFF09\u8868\u793Ab\u5C07\u6309\u6B63\u5E38\u8A08\u7B97\uFF1B\n\nFALSE\uFF08\uFF09\u8868\u793Ab\u5C07\u88AB\u8A2D\u70BA0\uFF08\u96F6\uFF09,m\u5C07\u88AB\u8ABF\u6574\u4EE5\u4F7Fy = mx\u3002"
              },
              {
                "name": "stats",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BAFALSE\uFF08\uFF09] - \u4E00\u500B\u908F\u8F2F\u503C,\u7528\u65BC\u6307\u5B9A\u662F\u5426\u8FD4\u56DE\u9644\u52A0\u56DE\u6B78\u7D71\u8A08\u503C\u3002\n\n\u5982\u679C\u8A73\u7D30\u70BATRUE,\u9664\u4E86\u5C0D\u61C9\u65BC\u6BCF\u500B\u5F15\u6578\u7684\u4E00\u7D44\u7DDA\u6027\u4FC2\u6578\u548Cy\u622A\u8DDD\u4E4B\u5916,LINEST\u9084\u8FD4\u56DE\u4EE5\u4E0B\u8CC7\u8A0A:\n\n\u6BCF\u9805\u4FC2\u6578\u548C\u622A\u8DDD\u7684\u6A19\u6E96\u8AA4\u5DEE\u3001\n\n\u9650\u5B9A\u4FC2\u6578\uFF08\u4ECB\u65BC0\u548C1\u4E4B\u9593,1\u8868\u793A\u5B8C\u5168\u76F8\u95DC\uFF09\u3001\n\n\u56E0\u8B8A\u6578\u503C\u7684\u6A19\u51C6\u8AA4\u5DEE\u3001\n\nF\u7D71\u8A08\u6216F\u89C0\u6E2C\u503C,\u8A13\u793A\u6240\u89C0\u6E2C\u5230\u7684\u56E0\u8B8A\u6578\u548C\u5F15\u6578\u8B8A\u6578\u4E4B\u9593\u7684\u95DC\u4FC2\u662F\u96A8\u6A5F\u7684\u9084\u662F\u7DDA\u6027\u7684\u3001\n\n\u81EA\u7531\u5EA6,\u7528\u65BC\u5728\u53C3\u7167\u9336\u4E2D\u67E5\u627EF\u7D71\u8A08\u503C\u4EE5\u4F30\u7B97\u53EF\u4FE1\u5EA6\u3001\n\n\u56DE\u6B78\u5E73\u65B9\u548C,\u4EE5\u53CA\n\n\u6B98\u5DEE\u5E73\u65B9\u548C\u3002"
              }
            ]
          },
          "LOGEST": {
            "d": "\u5728\u56DE\u6B78\u5206\u6790\u4E2D,\u8A08\u7B97\u6700\u7B26\u5408\u6578\u64DA\u7684\u6307\u6578\u56DE\u6B78\u64EC\u5408\u66F2\u7DDA,\u4E26\u8FD4\u56DE\u63CF\u8FF0\u8A72\u66F2\u7DDA\u7684\u6578\u503C\u6578\u7D44\u3002",
            "a": "\u5728\u56DE\u6B78\u5206\u6790\u4E2D,\u8A08\u7B97\u6700\u7B26\u5408\u6578\u64DA\u7684\u6307\u6578\u56DE\u6B78\u64EC\u5408\u66F2\u7DDA,\u4E26\u8FD4\u56DE\u63CF\u8FF0\u8A72\u66F2\u7DDA\u7684\u6578\u503C\u6578\u7D44\u3002",
            "p": [
              {
                "name": "known_y",
                "detail": "\u95DC\u4FC2\u904B\u7B97\u5F0Fy = mx + b \u4E2D\u5DF2\u77E5\u7684y\u503C\u96C6\u5408\u3002\n\n\u5982\u679Cknown_y\u70BA\u4E8C\u7DAD\u9663\u5217\u6216\u7BC4\u570D,\u5247known_x\u7684\u7DAD\u6578\u5FC5\u9808\u8207\u4E4B\u76F8\u540C,\u6216\u8005\u7701\u7565\u6B64\u53C3\u6578\u3002\n\n\u5982\u679Cknown_y\u70BA\u4E00\u7DAD\u6578\u7D44\u6216\u7BC4\u570D,known_x\u5247\u53EF\u4EE3\u8868\u4E8C\u7DAD\u9663\u5217\u6216\u7BC4\u570D\u4E2D\u7684\u591A\u500B\u5F15\u6578\u3002\u4E5F\u5C31\u662F\u8AAA,\u5982\u679Cknown_y\u70BA\u55AE\u884C,\u5247\u5C07known_x\u4E2D\u7684\u6BCF\u884C\u89E3\u91CB\u70BA\u5404\u81EA\u7368\u7ACB\u7684\u503C,\u985E\u4F3C\u60C5\u51B5\u4E5F\u9069\u7528\u65BCknown_y\u70BA\u55AE\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "known_x",
                "detail": "[\u53EF\u9078 - \u9ED8\u8A8D\u8A72\u6578\u7D44\u70BA{1,2,3,\u2026},\u5176\u5927\u5C0F\u8207known_y\u76F8\u540C] - \u95DC\u4FC2\u904B\u7B97\u5F0Fy = mx + b\u4E2D\u5DF2\u77E5\u7684\u53EF\u9078x\u503C\u96C6\u5408\u3002\n\n\u5982\u679Cknown_y\u70BA\u4E00\u7DAD\u6578\u7D44\u6216\u7BC4\u570D,known_x\u5247\u53EF\u4EE3\u8868\u4E8C\u7DAD\u9663\u5217\u6216\u7BC4\u570D\u4E2D\u7684\u591A\u500B\u5F15\u6578\u3002\u4E5F\u5C31\u662F\u8AAA,\u5982\u679Cknown_y\u70BA\u55AE\u884C,\u5247\u5C07known_x\u4E2D\u7684\u6BCF\u884C\u89E3\u91CB\u70BA\u5404\u81EA\u7368\u7ACB\u7684\u503C,\u985E\u4F3C\u60C5\u51B5\u4E5F\u9069\u7528\u65BCknown_y\u70BA\u55AE\u5217\u7684\u60C5\u51B5\u3002"
              },
              {
                "name": "const",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BATRUE\uFF08\uFF09] - \u4E00\u500B\u908F\u8F2F\u503C,\u7528\u65BC\u6307\u5B9A\u662F\u5426\u5C07\u5E38\u6578b\u5F37\u5236\u8A2D\u70BA0\u3002\n\nTRUE\uFF08\uFF09\u8868\u793Ab\u5C07\u6309\u6B63\u5E38\u8A08\u7B97\uFF1B\n\nFALSE\uFF08\uFF09\u8868\u793Ab\u5C07\u88AB\u8A2D\u70BA0\uFF08\u96F6\uFF09,m\u5C07\u88AB\u8ABF\u6574\u4EE5\u4F7Fy = mx\u3002"
              },
              {
                "name": "stats",
                "detail": "[\u53EF\u9078 - \u9810\u8A2D\u503C\u70BAFALSE\uFF08\uFF09] - \u4E00\u500B\u908F\u8F2F\u503C,\u7528\u65BC\u6307\u5B9A\u662F\u5426\u8FD4\u56DE\u9644\u52A0\u56DE\u6B78\u7D71\u8A08\u503C\u3002\n\n\u5982\u679C\u8A73\u7D30\u70BATRUE,\u5247\u9664\u4E86\u70BA\u6BCF\u500B\u5F15\u6578\u548C\u4FC2\u6578b\u8FD4\u56DE\u4E00\u7D44\u6307\u6578\u503C\u4E4B\u5916,LOGEST\u9084\u5C07\u8FD4\u56DE\u4EE5\u4E0B\u6578\u64DA:\n\n\u6BCF\u9805\u6307\u6578\u548C\u4FC2\u6578\u7684\u6A19\u6E96\u8AA4\u5DEE\u3001\n\n\u9650\u5B9A\u4FC2\u6578\uFF08\u4ECB\u65BC0\u548C1\u4E4B\u9593,1\u8868\u793A\u5B8C\u5168\u76F8\u95DC\uFF09\u3001\n\n\u56E0\u8B8A\u6578\u503C\u7684\u6A19\u51C6\u8AA4\u5DEE\u3001\n\nF\u7D71\u8A08\u6216F\u89C0\u6E2C\u503C,\u8A13\u793A\u6240\u89C0\u6E2C\u5230\u7684\u56E0\u8B8A\u6578\u548C\u5F15\u6578\u4E4B\u9593\u7684\u95DC\u4FC2\u662F\u96A8\u6A5F\u7684\u9084\u662F\u6307\u6578\u7684\u3001\n\n\u81EA\u7531\u5EA6-\u7528\u65BC\u5728\u53C3\u7167\u9336\u4E2D\u67E5\u627EF\u7D71\u8A08\u503C\u4EE5\u4F30\u7B97\u53EF\u4FE1\u5EA6\u3001\n\n\u56DE\u6B78\u5E73\u65B9\u548C,\u4EE5\u53CA\n\n\u6B98\u5DEE\u5E73\u65B9\u548C\u3002"
              }
            ]
          },
          "MDETERM": {
            "d": "\u8FD4\u56DE\u4E00\u500B\u6578\u7D44\u7684\u77E9\u9663\u884C\u5217\u5F0F\u7684\u503C\u3002",
            "a": "\u8FD4\u56DE\u4E00\u500B\u6578\u7D44\u7684\u77E9\u9663\u884C\u5217\u5F0F\u7684\u503C\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u884C\u6578\u548C\u5217\u6578\u76F8\u7B49\u7684\u6578\u503C\u6578\u7D44\u3002"
              }
            ]
          },
          "MINVERSE": {
            "d": "\u8FD4\u56DE\u6578\u7D44\u4E2D\u5B58\u5132\u7684\u77E9\u9663\u7684\u9006\u77E9\u9663\u3002",
            "a": "\u8FD4\u56DE\u6578\u7D44\u4E2D\u5B58\u5132\u7684\u77E9\u9663\u7684\u9006\u77E9\u9663\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u884C\u6578\u548C\u5217\u6578\u76F8\u7B49\u7684\u6578\u503C\u6578\u7D44\u3002"
              }
            ]
          },
          "MMULT": {
            "d": "\u8FD4\u56DE\u5169\u500B\u6578\u7D44\u7684\u77E9\u9663\u4E58\u7A4D\u3002\u7D50\u679C\u77E9\u9663\u7684\u884C\u6578\u8207array1\u7684\u884C\u6578\u76F8\u540C,\u77E9\u9663\u7684\u5217\u6578\u8207array2\u7684\u5217\u6578\u76F8\u540C\u3002",
            "a": "\u8FD4\u56DE\u5169\u500B\u6578\u7D44\u7684\u77E9\u9663\u4E58\u7A4D\u3002\u7D50\u679C\u77E9\u9663\u7684\u884C\u6578\u8207array1\u7684\u884C\u6578\u76F8\u540C,\u77E9\u9663\u7684\u5217\u6578\u8207array2\u7684\u5217\u6578\u76F8\u540C\u3002",
            "p": [
              {
                "name": "array1",
                "detail": "\u8981\u9032\u884C\u77E9\u9663\u4E58\u6CD5\u904B\u7B97\u7684\u7B2C\u4E00\u500B\u77E9\u9663\u6578\u7D44\u3002\n\narray1\u5217\u6578\u5FC5\u9808\u8207array2\u7684\u884C\u6578\u76F8\u540C"
              },
              {
                "name": "array2",
                "detail": "\u8981\u9032\u884C\u77E9\u9663\u4E58\u6CD5\u904B\u7B97\u7684\u7B2C\u4E8C\u500B\u77E9\u9663\u6578\u7D44\u3002\n\narray2\u7684\u884C\u6578\u5FC5\u9808\u8207array1\u5217\u6578\u76F8\u540C"
              }
            ]
          },
          "SUMPRODUCT": {
            "d": "\u5728\u7D66\u5B9A\u7684\u5E7E\u7D44\u6578\u7D44\u4E2D,\u5C07\u6578\u7D44\u9593\u5C0D\u61C9\u7684\u5143\u7D20\u76F8\u4E58,\u4E26\u8FD4\u56DE\u4E58\u7A4D\u4E4B\u548C\u3002",
            "a": "\u5728\u7D66\u5B9A\u7684\u5E7E\u7D44\u6578\u7D44\u4E2D,\u5C07\u6578\u7D44\u9593\u5C0D\u61C9\u7684\u5143\u7D20\u76F8\u4E58,\u4E26\u8FD4\u56DE\u4E58\u7A4D\u4E4B\u548C\u3002",
            "p": [
              {
                "name": "array1",
                "detail": "\u5176\u76F8\u61C9\u5143\u7D20\u9700\u8981\u9032\u884C\u76F8\u4E58\u4E26\u6C42\u548C\u7684\u7B2C\u4E00\u500B\u6578\u7D44\u53C3\u6578\u3002"
              },
              {
                "name": "array2",
                "detail": "[\u53EF\u9078] - \u5176\u76F8\u61C9\u5143\u7D20\u9700\u8981\u9032\u884C\u76F8\u4E58\u4E26\u6C42\u548C\u7684\u5176\u5B83\u6578\u7D44\u53C3\u6578\u3002"
              }
            ]
          },
          "ISFORMULA": {
            "d": "\u6AA2\u67E5\u516C\u5F0F\u662F\u5426\u4F4D\u65BC\u5F15\u7528\u7684\u5132\u5B58\u683C\u4E2D\u3002",
            "a": "\u6AA2\u67E5\u516C\u5F0F\u662F\u5426\u4F4D\u65BC\u5F15\u7528\u7684\u5132\u5B58\u683C\u4E2D\u3002",
            "p": [
              {
                "name": "cell",
                "detail": "\u8981\u6AA2\u67E5\u662F\u5426\u5B58\u5728\u516C\u5F0F\u7684\u5132\u5B58\u683C\u3002\n\n\u5982\u679C cell \u70BA\u5305\u542B\u516C\u5F0F\u7684\u5132\u5B58\u683C,\u5247 ISFORMULA \u5C07\u8FD4\u56DETRUE\u3002\u5982\u679C cell \u70BA\u76F8\u61C9\u5132\u5B58\u683C\u7BC4\u570D,\u5247\u7576\u8A72\u7BC4\u570D\u5167\u7684\u9996\u500B\u5132\u5B58\u683C\u5305\u542B\u516C\u5F0F\u6642,\u7CFB\u7D71\u6703\u8FD4\u56DETRUE\u3002\u5982\u679C\u662F\u4EFB\u4F55\u5176\u4ED6\u503C,\u7CFB\u7D71\u90FD\u5C07\u8FD4\u56DEFALSE\u3002"
              }
            ]
          },
          "CELL": {
            "d": "\u8FD4\u56DE\u6709\u95DC\u5132\u5B58\u683C\u7684\u683C\u5F0F\u3001\u4F4D\u7F6E\u6216\u5167\u5BB9\u7684\u8CC7\u8A0A\u3002",
            "a": "\u8FD4\u56DE\u6709\u95DC\u5132\u5B58\u683C\u7684\u683C\u5F0F\u3001\u4F4D\u7F6E\u6216\u5167\u5BB9\u7684\u8CC7\u8A0A\u3002",
            "p": [
              {
                "name": "info_type",
                "detail": "\u4E00\u500B\u6587\u5B57\u503C,\u6307\u5B9A\u8981\u8FD4\u56DE\u7684\u5132\u5B58\u683C\u8CC7\u8A0A\u7684\u985E\u578B\u3002"
              },
              {
                "name": "reference",
                "detail": "\u9700\u8981\u5176\u76F8\u95DC\u8CC7\u8A0A\u7684\u5132\u5B58\u683C\u3002"
              }
            ]
          },
          "NA": {
            "d": "\u8FD4\u56DE\u932F\u8AA4\u503C#N/A\u3002",
            "a": "\u8FD4\u56DE\u932F\u8AA4\u503C#N/A\u3002",
            "p": []
          },
          "ERROR_TYPE": {
            "d": "\u8FD4\u56DE\u8207\u5176\u4ED6\u5132\u5B58\u683C\u4E2D\u7684\u932F\u8AA4\u503C\u76F8\u5C0D\u61C9\u7684\u6578\u4F4D\u3002",
            "a": "\u8FD4\u56DE\u8207\u5176\u4ED6\u5132\u5B58\u683C\u4E2D\u7684\u932F\u8AA4\u503C\u76F8\u5C0D\u61C9\u7684\u6578\u4F4D\u3002",
            "p": [
              {
                "name": "error_val",
                "detail": "\u7528\u65BC\u67E5\u627E\u932F\u8AA4\u865F\u7684\u5132\u5B58\u683C,\u96D6\u7136\u60A8\u4E5F\u53EF\u4EE5\u76F4\u63A5\u63D0\u4F9B\u932F\u8AA4\u503C\u3002"
              }
            ]
          },
          "ISBLANK": {
            "d": "\u6AA2\u67E5\u6240\u5F15\u7528\u7684\u5132\u5B58\u683C\u662F\u5426\u70BA\u7A7A\u3002",
            "a": "\u6AA2\u67E5\u6240\u5F15\u7528\u7684\u5132\u5B58\u683C\u662F\u5426\u70BA\u7A7A\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u5C0D\u8981\u6AA2\u67E5\u5176\u662F\u5426\u70BA\u7A7A\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528\u3002\n\n\u5982\u679C\u662F\u7A7A\u5132\u5B58\u683C,\u5247TRUE\uFF1B\u5426\u5247\u8FD4\u56DEFALSE\u3002"
              }
            ]
          },
          "ISERR": {
            "d": "\u6AA2\u67E5\u67D0\u500B\u503C\u662F\u5426\u70BA#N/A\u4EE5\u5916\u7684\u932F\u8AA4\u503C\u3002",
            "a": "\u6AA2\u67E5\u67D0\u500B\u503C\u662F\u5426\u70BA#N/A\u4EE5\u5916\u7684\u932F\u8AA4\u503C\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u9A57\u8B49\u5176\u662F\u5426\u70BA#N/A\u4EE5\u5916\u7684\u932F\u8AA4\u985E\u578B\u7684\u503C\u3002\n\n\u5982\u679C\u503C\u662F\u9664#N/A\u4E4B\u5916\u7684\u4EFB\u4F55\u932F\u8AA4\uFF08\u5305\u62EC#DIV/0\uFF01\u3001#NAME\uFF1F\u3001#NULL\uFF01\u3001#NUM\uFF01\u3001#VALUE\uFF01\u548C#REF\uFF01\uFF09,ISERR\u5C07\u8FD4\u56DETRUE\u3002"
              }
            ]
          },
          "ISERROR": {
            "d": "\u6AA2\u67E5\u67D0\u500B\u503C\u662F\u5426\u70BA\u932F\u8AA4\u503C\u3002",
            "a": "\u6AA2\u67E5\u67D0\u500B\u503C\u662F\u5426\u70BA\u932F\u8AA4\u503C\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u9A57\u8B49\u5176\u662F\u5426\u70BA\u932F\u8AA4\u985E\u578B\u7684\u503C\u3002\n\n\u53EA\u8981\u503C\u662F\u67D0\u7A2E\u932F\u8AA4\u503C\uFF08\u5305\u62EC#DIV/0\uFF01\u3001#N/A\u3001#NAME\uFF1F\u3001#NULL\uFF01\u3001#NUM\uFF01\u3001#VALUE\uFF01\u548C#REF\uFF01\uFF09,ISERROR\u5C31\u6703\u8FD4\u56DETRUE\u3002"
              }
            ]
          },
          "ISLOGICAL": {
            "d": "\u6AA2\u67E5\u67D0\u500B\u503C\u662FTRUE\u9084\u662FFALSE\u3002",
            "a": "\u6AA2\u67E5\u67D0\u500B\u503C\u662FTRUE\u9084\u662FFALSE\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u9A57\u8B49\u5176\u70BA\u908F\u8F2F TRUE \u9084\u662F\u908F\u8F2F FALSE \u7684\u503C\u3002\n\n*\u5982\u679C\u503C\u70BATRUE\u6216FALSE,\u6216\u70BA\u6307\u5411\u503C\u70BATRUE\u6216FALSE\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,ISLOGICAL\u5C07\u8FD4\u56DETRUE\u3002"
              }
            ]
          },
          "ISNA": {
            "d": "\u6AA2\u67E5\u67D0\u500B\u503C\u662F\u5426\u70BA\u932F\u8AA4\u503C#N/A\u3002",
            "a": "\u6AA2\u67E5\u67D0\u500B\u503C\u662F\u5426\u70BA\u932F\u8AA4\u503C#N/A\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8207\u932F\u8AA4\u503C#N/A\u9032\u884C\u6BD4\u8F03\u7684\u503C\u3002\n\n*\u5982\u679C\u503C\u70BA#N/A\u6216\u6307\u5411\u5305\u542B#N/A\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,\u5247ISNA\u5C07\u8FD4\u56DETRUE,\u5426\u5247\u8FD4\u56DEFALSE\u3002"
              }
            ]
          },
          "ISNONTEXT": {
            "d": "\u6AA2\u67E5\u67D0\u500B\u503C\u662F\u5426\u70BA\u975E\u6587\u5B57\u3002",
            "a": "\u6AA2\u67E5\u67D0\u500B\u503C\u662F\u5426\u70BA\u975E\u6587\u5B57\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u6AA2\u67E5\u7684\u6587\u5B57\u3002\n\n*\u5982\u679C\u53C3\u6578\u70BA\u6587\u5B57\u503C\u6216\u6307\u5411\u5305\u542B\u6587\u5B57\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,ISNONTEXT\u5C07\u8FD4\u56DEFALSE,\u5426\u5247\u8FD4\u56DETRUE\u3002\n\n\u7576\u503C\u70BA\u6307\u5411\u7A7A\u5132\u5B58\u683C\u7684\u5F15\u7528\u6642,ISNONTEXT\u6703\u8FD4\u56DETRUE\u3002\n\n\u7576\u503C\u70BA\u7A7A\u5B57\u4E32\u6642,ISNONTEXT\u5C07\u8FD4\u56DEFALSE,\u56E0\u70BA\u7A7A\u4E32\u88AB\u8996\u4F5C\u6587\u5B57\u3002"
              }
            ]
          },
          "ISNUMBER": {
            "d": "\u6AA2\u67E5\u67D0\u500B\u503C\u662F\u5426\u70BA\u6578\u4F4D\u3002",
            "a": "\u6AA2\u67E5\u67D0\u500B\u503C\u662F\u5426\u70BA\u6578\u4F4D\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u9A57\u8B49\u5176\u662F\u5426\u70BA\u6578\u4F4D\u7684\u503C\u3002\n\n*\u5982\u679C\u53C3\u6578\u70BA\u6578\u4F4D\u6216\u6307\u5411\u5167\u5BB9\u70BA\u6578\u4F4D\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,ISNUMBER\u5C07\u8FD4\u56DETRUE,\u5426\u5247\u8FD4\u56DEFALSE\u3002"
              }
            ]
          },
          "ISREF": {
            "d": "\u6AA2\u67E5\u67D0\u500B\u503C\u662F\u5426\u70BA\u6709\u6548\u7684\u5132\u5B58\u683C\u5F15\u7528\u3002",
            "a": "\u6AA2\u67E5\u67D0\u500B\u503C\u662F\u5426\u70BA\u6709\u6548\u7684\u5132\u5B58\u683C\u5F15\u7528\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u9A57\u8B49\u5176\u662F\u5426\u70BA\u5132\u5B58\u683C\u5F15\u7528\u7684\u503C\u3002\n\n*\u5982\u679C\u53C3\u6578\u662F\u6709\u6548\u7684\u5132\u5B58\u683C\u5F15\u7528,ISREF\u5C07\u8FD4\u56DETRUE,\u5426\u5247\u8FD4\u56DEFALSE\u3002"
              }
            ]
          },
          "ISTEXT": {
            "d": "\u6AA2\u67E5\u67D0\u500B\u503C\u662F\u5426\u70BA\u6587\u5B57\u3002",
            "a": "\u6AA2\u67E5\u67D0\u500B\u503C\u662F\u5426\u70BA\u6587\u5B57\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u9A57\u8B49\u5176\u662F\u5426\u70BA\u6587\u5B57\u7684\u503C\u3002\n\n\u5982\u679C\u53C3\u6578\u70BA\u6587\u5B57\u503C\u6216\u6307\u5411\u5305\u542B\u6587\u5B57\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,ISTEXT\u5C07\u8FD4\u56DETRUE,\u5426\u5247\u8FD4\u56DEFALSE\u3002"
              }
            ]
          },
          "TYPE": {
            "d": "\u8FD4\u56DE\u6578\u503C\u7684\u985E\u578B\u3002",
            "a": "\u8FD4\u56DE\u6578\u503C\u7684\u985E\u578B\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u78BA\u5B9A\u5176\u985E\u578B\u7684\u6578\u64DA\u3002\n\n\u6578\u4F4D\u8FD4\u56DE1\uFF1B\n\n\u6587\u5B57\u8FD4\u56DE2\uFF1B\n\n\u908F\u8F2F\u503C\u8FD4\u56DE4\uFF1B\n\n\u932F\u8AA4\u503C\u8FD4\u56DE16\uFF1B\n\n\u6578\u7D44\u8FD4\u56DE64\uFF1B"
              }
            ]
          },
          "N": {
            "d": "\u8FD4\u56DE\u8F49\u5316\u70BA\u6578\u503C\u5F8C\u7684\u503C\u3002",
            "a": "\u8FD4\u56DE\u8F49\u5316\u70BA\u6578\u503C\u5F8C\u7684\u503C\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8F49\u63DB\u70BA\u6578\u4F4D\u7684\u53C3\u6578\u3002\n\n\u5982\u679C\u503C\u70BA\u6578\u4F4D,\u5247\u8FD4\u56DE\u8A72\u6578\u4F4D\u3002\n\n\u5982\u679C\u503C\u70BA\u65E5\u671F,\u5247\u8FD4\u56DE\u8A72\u65E5\u671F\u7684\u5E8F\u865F\u3002\n\n\u5982\u679C\u503C\u70BATRUE,\u5247\u8FD4\u56DE1\u3002\n\n\u5982\u679C\u503C\u70BAFALSE,\u5247\u8FD4\u56DE0\u3002\n\n\u5982\u679C\u503C\u70BA\u932F\u8AA4\u503C,\u5247\u8FD4\u56DE\u932F\u8AA4\u503C\u3002\n\n\u5982\u679C\u503C\u70BA\u5176\u4ED6\u503C,\u5247\u8FD4\u56DE0\u3002"
              }
            ]
          },
          "TO_DATE": {
            "d": "\u5C07\u6307\u5B9A\u7684\u6578\u4F4D\u8F49\u63DB\u70BA\u65E5\u671F\u3002",
            "a": "\u5C07\u6307\u5B9A\u7684\u6578\u4F4D\u8F49\u63DB\u70BA\u65E5\u671F\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8F49\u63DB\u70BA\u65E5\u671F\u7684\u53C3\u6578\u6216\u5176\u5132\u5B58\u683C\u5F15\u7528\u3002\n\n\u5982\u679C\u503C\u70BA\u6578\u4F4D\u6216\u6307\u5411\u5167\u5BB9\u70BA\u6578\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,TO_DATE\u6703\u5C07\u503C\u8F49\u63DB\u70BA\u76F8\u61C9\u7684\u65E5\u671F\u4E26\u8FD4\u56DE,\u503C\u4EE3\u8868\u5F9E\u5341\u4E8C\u670830\u65E5\u5230\u5C0D\u61C9\u7684\u65E5\u671F\u4E4B\u9593\u7684\u5929\u6578,\n\n\u8CA0\u503C\u8868\u793A\u5C0D\u61C9\u7684\u65E5\u671F\u5728\u5341\u4E8C\u670830\u65E5\u4E4B\u524D,\u800C\u5C0F\u6578\u503C\u5247\u4EE3\u8868\u4E00\u5929\u4E2D\u5F9E\u5348\u591C\u7B97\u8D77\u7684\u6642\u9593\u3002\n\u5982\u679C\u503C\u4E0D\u662F\u6578\u4F4D\u6216\u6307\u5411\u5167\u5BB9\u70BA\u6578\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,\u5247TO_DATE\u5C07\u5728\u4E0D\u505A\u4EFB\u4F55\u4FEE\u6539\u7684\u60C5\u51B5\u4E0B\u8FD4\u56DE\u503C\u3002"
              }
            ]
          },
          "TO_PURE_NUMBER": {
            "d": "\u5C07\u7D66\u5B9A\u7684\u65E5\u671F/\u6642\u9593\u3001\u767E\u5206\u6BD4\u3001\u8CA8\u5E63\u91D1\u984D\u6216\u5176\u4ED6\u683C\u5F0F\u7684\u6578\u503C\u8F49\u63DB\u70BA\u4E0D\u5E36\u683C\u5F0F\u7684\u7D14\u6578\u4F4D\u3002",
            "a": "\u5C07\u7D66\u5B9A\u7684\u65E5\u671F/\u6642\u9593\u3001\u767E\u5206\u6BD4\u3001\u8CA8\u5E63\u91D1\u984D\u6216\u5176\u4ED6\u683C\u5F0F\u7684\u6578\u503C\u8F49\u63DB\u70BA\u4E0D\u5E36\u683C\u5F0F\u7684\u7D14\u6578\u4F4D\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8F49\u63DB\u70BA\u7D14\u6578\u4F4D\u7684\u53C3\u6578\u6216\u5176\u5132\u5B58\u683C\u5F15\u7528\u3002\n\n\u5982\u679C\u503C\u70BA\u6578\u4F4D\u6216\u6307\u5411\u5305\u542B\u6578\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,TO_PURE_NUMBER\u5C07\u4EE5\u4E0D\u5E36\u4EFB\u4F55\u683C\u5F0F\u8207\u89E3\u91CB\u7684\u5F62\u5F0F\u8FD4\u56DE\u503C\u3002\n\n\u5982\u679C\u503C\u4E0D\u662F\u6578\u4F4D\u6216\u6307\u5411\u5167\u5BB9\u70BA\u6578\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,\u5247TO_PERCENT\u5C07\u5728\u4E0D\u505A\u4EFB\u4F55\u4FEE\u6539\u7684\u60C5\u51B5\u4E0B\u8FD4\u56DE\u503C\u3002"
              }
            ]
          },
          "TO_TEXT": {
            "d": "\u5C07\u7D66\u5B9A\u7684\u6578\u4F4D\u503C\u8F49\u63DB\u70BA\u6587\u672C\u683C\u5F0F\u3002",
            "a": "\u5C07\u7D66\u5B9A\u7684\u6578\u4F4D\u503C\u8F49\u63DB\u70BA\u6587\u672C\u683C\u5F0F\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8F49\u63DB\u70BA\u6587\u5B57\u7684\u53C3\u6578\u6216\u5176\u5132\u5B58\u683C\u5F15\u7528\u3002\n\n\u5982\u679C\u503C\u70BA\u6578\u4F4D\u6216\u6307\u5411\u5305\u542B\u6578\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,TO_TEXT\u5C07\u8FD4\u56DE\u5B57\u4E32\u5F62\u5F0F\u7684\u503C,\u4E26\u4FDD\u6301\u73FE\u6709\u683C\u5F0F\u3002\u5373\u539F\u70BA\u8CA8\u5E63\u7684\u4ECD\u70BA\u8CA8\u5E63,\u539F\u70BA\u5341\u9032\u4F4D\u6578\u7684\u4ECD\u70BA\u5341\u9032\u4F4D\u6578,\u539F\u70BA\u767E\u5206\u6BD4\u7684\u4ECD\u70BA\u767E\u5206\u6BD4,\u539F\u70BA\u65E5\u671F\u7684\u4ECD\u70BA\u65E5\u671F\u3002\n\n\u5982\u679C\u503C\u4E0D\u662F\u6578\u4F4D\u6216\u6307\u5411\u5167\u5BB9\u70BA\u6578\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,\u5247TO_TEXT\u5C07\u5728\u4E0D\u505A\u4EFB\u4F55\u4FEE\u6539\u7684\u60C5\u51B5\u4E0B\u8FD4\u56DE\u503C\u3002"
              }
            ]
          },
          "TO_DOLLARS": {
            "d": "\u5C07\u6307\u5B9A\u7684\u6578\u4F4D\u8F49\u63DB\u70BA\u7F8E\u5143\u91D1\u984D\u3002",
            "a": "\u5C07\u6307\u5B9A\u7684\u6578\u4F4D\u8F49\u63DB\u70BA\u7F8E\u5143\u91D1\u984D\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8F49\u63DB\u70BA\u7F8E\u5143\u91D1\u984D\u7684\u53C3\u6578\u6216\u5176\u5132\u5B58\u683C\u5F15\u7528\u3002\n\n\u5982\u679C\u503C\u4E0D\u662F\u6578\u4F4D\u6216\u6307\u5411\u5167\u5BB9\u70BA\u6578\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,\u5247TO_DOLLARS\u5C07\u5728\u4E0D\u505A\u4EFB\u4F55\u4FEE\u6539\u7684\u60C5\u51B5\u4E0B\u8FD4\u56DE\u503C\u3002"
              }
            ]
          },
          "TO_PERCENT": {
            "d": "\u5C07\u6307\u5B9A\u7684\u6578\u4F4D\u8F49\u63DB\u70BA\u767E\u5206\u6BD4\u3002",
            "a": "\u5C07\u6307\u5B9A\u7684\u6578\u4F4D\u8F49\u63DB\u70BA\u767E\u5206\u6BD4\u3002",
            "p": [
              {
                "name": "value",
                "detail": "\u8981\u8F49\u63DB\u70BA\u767E\u5206\u6BD4\u7684\u53C3\u6578\u6216\u5176\u5132\u5B58\u683C\u5F15\u7528\u3002\n\n\u5982\u679C\u503C\u70BA\u6578\u4F4D\u6216\u6307\u5411\u5305\u542B\u6578\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,TO_PERCENT\u6703\u4EE51 = 100%\u70BA\u6A19\u6E96,\u5C07\u503C\u8F49\u63DB\u70BA\u767E\u5206\u6BD4\u3002\n\n\u5982\u679C\u503C\u4E0D\u662F\u6578\u4F4D\u6216\u6307\u5411\u5167\u5BB9\u70BA\u6578\u503C\u7684\u5132\u5B58\u683C\u7684\u5F15\u7528,\u5247TO_PERCENT\u5C07\u5728\u4E0D\u505A\u4EFB\u4F55\u4FEE\u6539\u7684\u60C5\u51B5\u4E0B\u8FD4\u56DE\u503C\u3002"
              }
            ]
          },
          "DGET": {
            "d": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u5F9E\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u7684\u5217\u4E2D\u9078\u53D6\u7B26\u5408\u6307\u5B9A\u689D\u4EF6\u7684\u55AE\u500B\u503C\u3002",
            "a": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u5F9E\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u7684\u5217\u4E2D\u9078\u53D6\u7B26\u5408\u6307\u5B9A\u689D\u4EF6\u7684\u55AE\u500B\u503C\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u69CB\u6210\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u7684\u5132\u5B58\u683C\u5340\u57DF,\u6E05\u55AE\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6A19\u7C64\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9Adatabase\u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u9078\u53D6\u548C\u7528\u65BC\u8A08\u7B97\u7684\u503C\u3002\n\nfield\u53EF\u4EE5\u662F\u8207database\u7B2C\u4E00\u884C\u4E2D\u67D0\u500B\u5217\u6A19\u984C\u5C0D\u61C9\u7684\u6587\u5B57\u6A19\u7C64,\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u95DC\u5217\u7684\u6578\u4F4D\u7D22\u5F15,\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u70BA1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u689D\u4EF6\u7684\u5132\u5B58\u683C\u5340\u57DF\u3002\u8A08\u7B97\u4E4B\u524D\u5C07\u4F7F\u7528\u9019\u4E9B\u689D\u4EF6\u4F86\u904E\u6FFEdatabase\u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DMAX": {
            "d": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5217\u8868\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6700\u5927\u6578\u4F4D\u3002",
            "a": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5217\u8868\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6700\u5927\u6578\u4F4D\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u69CB\u6210\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u7684\u5132\u5B58\u683C\u5340\u57DF,\u6E05\u55AE\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6A19\u7C64\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9Adatabase\u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u9078\u53D6\u548C\u7528\u65BC\u8A08\u7B97\u7684\u503C\u3002\n\nfield\u53EF\u4EE5\u662F\u8207database\u7B2C\u4E00\u884C\u4E2D\u67D0\u500B\u5217\u6A19\u984C\u5C0D\u61C9\u7684\u6587\u5B57\u6A19\u7C64,\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u95DC\u5217\u7684\u6578\u4F4D\u7D22\u5F15,\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u70BA1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u689D\u4EF6\u7684\u5132\u5B58\u683C\u5340\u57DF\u3002\u8A08\u7B97\u4E4B\u524D\u5C07\u4F7F\u7528\u9019\u4E9B\u689D\u4EF6\u4F86\u904E\u6FFEdatabase\u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DMIN": {
            "d": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5217\u8868\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6700\u5C0F\u6578\u4F4D\u3002",
            "a": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5217\u8868\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6700\u5C0F\u6578\u4F4D\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u69CB\u6210\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u7684\u5132\u5B58\u683C\u5340\u57DF,\u6E05\u55AE\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6A19\u7C64\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9Adatabase\u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u9078\u53D6\u548C\u7528\u65BC\u8A08\u7B97\u7684\u503C\u3002\n\nfield\u53EF\u4EE5\u662F\u8207database\u7B2C\u4E00\u884C\u4E2D\u67D0\u500B\u5217\u6A19\u984C\u5C0D\u61C9\u7684\u6587\u5B57\u6A19\u7C64,\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u95DC\u5217\u7684\u6578\u4F4D\u7D22\u5F15,\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u70BA1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u689D\u4EF6\u7684\u5132\u5B58\u683C\u5340\u57DF\u3002\u8A08\u7B97\u4E4B\u524D\u5C07\u4F7F\u7528\u9019\u4E9B\u689D\u4EF6\u4F86\u904E\u6FFEdatabase\u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DAVERAGE": {
            "d": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u5C0D\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6578\u503C\u6C42\u5E73\u5747\u503C\u3002",
            "a": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u5C0D\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6578\u503C\u6C42\u5E73\u5747\u503C\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u69CB\u6210\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u7684\u5132\u5B58\u683C\u5340\u57DF,\u6E05\u55AE\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6A19\u7C64\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9Adatabase\u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u9078\u53D6\u548C\u7528\u65BC\u8A08\u7B97\u7684\u503C\u3002\n\nfield\u53EF\u4EE5\u662F\u8207database\u7B2C\u4E00\u884C\u4E2D\u67D0\u500B\u5217\u6A19\u984C\u5C0D\u61C9\u7684\u6587\u5B57\u6A19\u7C64,\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u95DC\u5217\u7684\u6578\u4F4D\u7D22\u5F15,\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u70BA1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u689D\u4EF6\u7684\u5132\u5B58\u683C\u5340\u57DF\u3002\u8A08\u7B97\u4E4B\u524D\u5C07\u4F7F\u7528\u9019\u4E9B\u689D\u4EF6\u4F86\u904E\u6FFEdatabase\u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DCOUNT": {
            "d": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5217\u8868\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u5305\u542B\u6578\u4F4D\u7684\u5132\u5B58\u683C\u7684\u500B\u6578\u3002",
            "a": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5217\u8868\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u5305\u542B\u6578\u4F4D\u7684\u5132\u5B58\u683C\u7684\u500B\u6578\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u69CB\u6210\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u7684\u5132\u5B58\u683C\u5340\u57DF,\u6E05\u55AE\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6A19\u7C64\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9Adatabase\u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u9078\u53D6\u548C\u7528\u65BC\u8A08\u7B97\u7684\u503C\u3002\n\nfield\u53EF\u4EE5\u662F\u8207database\u7B2C\u4E00\u884C\u4E2D\u67D0\u500B\u5217\u6A19\u984C\u5C0D\u61C9\u7684\u6587\u5B57\u6A19\u7C64,\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u95DC\u5217\u7684\u6578\u4F4D\u7D22\u5F15,\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u70BA1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u689D\u4EF6\u7684\u5132\u5B58\u683C\u5340\u57DF\u3002\u8A08\u7B97\u4E4B\u524D\u5C07\u4F7F\u7528\u9019\u4E9B\u689D\u4EF6\u4F86\u904E\u6FFEdatabase\u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DCOUNTA": {
            "d": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5217\u8868\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u975E\u7A7A\u5132\u5B58\u683C\u7684\u500B\u6578\u3002",
            "a": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5217\u8868\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u975E\u7A7A\u5132\u5B58\u683C\u7684\u500B\u6578\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u69CB\u6210\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u7684\u5132\u5B58\u683C\u5340\u57DF,\u6E05\u55AE\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6A19\u7C64\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9Adatabase\u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u9078\u53D6\u548C\u7528\u65BC\u8A08\u7B97\u7684\u503C\u3002\n\nfield\u53EF\u4EE5\u662F\u8207database\u7B2C\u4E00\u884C\u4E2D\u67D0\u500B\u5217\u6A19\u984C\u5C0D\u61C9\u7684\u6587\u5B57\u6A19\u7C64,\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u95DC\u5217\u7684\u6578\u4F4D\u7D22\u5F15,\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u70BA1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u689D\u4EF6\u7684\u5132\u5B58\u683C\u5340\u57DF\u3002\u8A08\u7B97\u4E4B\u524D\u5C07\u4F7F\u7528\u9019\u4E9B\u689D\u4EF6\u4F86\u904E\u6FFEdatabase\u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DPRODUCT": {
            "d": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5217\u8868\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6578\u503C\u7684\u4E58\u7A4D\u3002",
            "a": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5217\u8868\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6578\u503C\u7684\u4E58\u7A4D\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u69CB\u6210\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u7684\u5132\u5B58\u683C\u5340\u57DF,\u6E05\u55AE\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6A19\u7C64\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9Adatabase\u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u9078\u53D6\u548C\u7528\u65BC\u8A08\u7B97\u7684\u503C\u3002\n\nfield\u53EF\u4EE5\u662F\u8207database\u7B2C\u4E00\u884C\u4E2D\u67D0\u500B\u5217\u6A19\u984C\u5C0D\u61C9\u7684\u6587\u5B57\u6A19\u7C64,\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u95DC\u5217\u7684\u6578\u4F4D\u7D22\u5F15,\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u70BA1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u689D\u4EF6\u7684\u5132\u5B58\u683C\u5340\u57DF\u3002\u8A08\u7B97\u4E4B\u524D\u5C07\u4F7F\u7528\u9019\u4E9B\u689D\u4EF6\u4F86\u904E\u6FFEdatabase\u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DSTDEV": {
            "d": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5229\u7528\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6578\u4F4D\u4F5C\u70BA\u4E00\u500B\u6A23\u672C\u4F30\u7B97\u51FA\u7684\u7E3D\u9AD4\u6A19\u6E96\u5DEE\u3002",
            "a": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5229\u7528\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6578\u4F4D\u4F5C\u70BA\u4E00\u500B\u6A23\u672C\u4F30\u7B97\u51FA\u7684\u7E3D\u9AD4\u6A19\u6E96\u5DEE\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u69CB\u6210\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u7684\u5132\u5B58\u683C\u5340\u57DF,\u6E05\u55AE\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6A19\u7C64\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9Adatabase\u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u9078\u53D6\u548C\u7528\u65BC\u8A08\u7B97\u7684\u503C\u3002\n\nfield\u53EF\u4EE5\u662F\u8207database\u7B2C\u4E00\u884C\u4E2D\u67D0\u500B\u5217\u6A19\u984C\u5C0D\u61C9\u7684\u6587\u5B57\u6A19\u7C64,\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u95DC\u5217\u7684\u6578\u4F4D\u7D22\u5F15,\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u70BA1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u689D\u4EF6\u7684\u5132\u5B58\u683C\u5340\u57DF\u3002\u8A08\u7B97\u4E4B\u524D\u5C07\u4F7F\u7528\u9019\u4E9B\u689D\u4EF6\u4F86\u904E\u6FFEdatabase\u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DSTDEVP": {
            "d": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5229\u7528\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6578\u4F4D\u4F5C\u70BA\u6A23\u672C\u7E3D\u9AD4\u8A08\u7B97\u51FA\u7684\u7E3D\u9AD4\u6A19\u6E96\u5DEE\u3002",
            "a": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5229\u7528\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6578\u4F4D\u4F5C\u70BA\u6A23\u672C\u7E3D\u9AD4\u8A08\u7B97\u51FA\u7684\u7E3D\u9AD4\u6A19\u6E96\u5DEE\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u69CB\u6210\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u7684\u5132\u5B58\u683C\u5340\u57DF,\u6E05\u55AE\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6A19\u7C64\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9Adatabase\u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u9078\u53D6\u548C\u7528\u65BC\u8A08\u7B97\u7684\u503C\u3002\n\nfield\u53EF\u4EE5\u662F\u8207database\u7B2C\u4E00\u884C\u4E2D\u67D0\u500B\u5217\u6A19\u984C\u5C0D\u61C9\u7684\u6587\u5B57\u6A19\u7C64,\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u95DC\u5217\u7684\u6578\u4F4D\u7D22\u5F15,\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u70BA1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u689D\u4EF6\u7684\u5132\u5B58\u683C\u5340\u57DF\u3002\u8A08\u7B97\u4E4B\u524D\u5C07\u4F7F\u7528\u9019\u4E9B\u689D\u4EF6\u4F86\u904E\u6FFEdatabase\u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DSUM": {
            "d": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5217\u8868\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6578\u4F4D\u4E4B\u548C\u3002",
            "a": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5217\u8868\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6578\u4F4D\u4E4B\u548C\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u69CB\u6210\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u7684\u5132\u5B58\u683C\u5340\u57DF,\u6E05\u55AE\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6A19\u7C64\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9Adatabase\u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u9078\u53D6\u548C\u7528\u65BC\u8A08\u7B97\u7684\u503C\u3002\n\nfield\u53EF\u4EE5\u662F\u8207database\u7B2C\u4E00\u884C\u4E2D\u67D0\u500B\u5217\u6A19\u984C\u5C0D\u61C9\u7684\u6587\u5B57\u6A19\u7C64,\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u95DC\u5217\u7684\u6578\u4F4D\u7D22\u5F15,\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u70BA1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u689D\u4EF6\u7684\u5132\u5B58\u683C\u5340\u57DF\u3002\u8A08\u7B97\u4E4B\u524D\u5C07\u4F7F\u7528\u9019\u4E9B\u689D\u4EF6\u4F86\u904E\u6FFEdatabase\u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DVAR": {
            "d": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5229\u7528\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6578\u4F4D\u4F5C\u70BA\u4E00\u500B\u6A23\u672C\u4F30\u7B97\u51FA\u7684\u7E3D\u9AD4\u65B9\u5DEE\u3002",
            "a": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u8FD4\u56DE\u5229\u7528\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6578\u4F4D\u4F5C\u70BA\u4E00\u500B\u6A23\u672C\u4F30\u7B97\u51FA\u7684\u7E3D\u9AD4\u65B9\u5DEE\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u69CB\u6210\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u7684\u5132\u5B58\u683C\u5340\u57DF,\u6E05\u55AE\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6A19\u7C64\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9Adatabase\u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u9078\u53D6\u548C\u7528\u65BC\u8A08\u7B97\u7684\u503C\u3002\n\nfield\u53EF\u4EE5\u662F\u8207database\u7B2C\u4E00\u884C\u4E2D\u67D0\u500B\u5217\u6A19\u984C\u5C0D\u61C9\u7684\u6587\u5B57\u6A19\u7C64,\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u95DC\u5217\u7684\u6578\u4F4D\u7D22\u5F15,\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u70BA1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u689D\u4EF6\u7684\u5132\u5B58\u683C\u5340\u57DF\u3002\u8A08\u7B97\u4E4B\u524D\u5C07\u4F7F\u7528\u9019\u4E9B\u689D\u4EF6\u4F86\u904E\u6FFEdatabase\u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "DVARP": {
            "d": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u901A\u904E\u4F7F\u7528\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6578\u4F4D\u8A08\u7B97\u6A23\u672C\u7E3D\u9AD4\u7684\u6A23\u672C\u7E3D\u9AD4\u65B9\u5DEE\u3002",
            "a": "\u4F7F\u7528SQL\u5F0F\u67FB\u8A62,\u901A\u904E\u4F7F\u7528\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u4E2D\u6EFF\u8DB3\u6307\u5B9A\u689D\u4EF6\u7684\u8A18\u9304\u6B04\u4F4D\uFF08\u5217\uFF09\u4E2D\u7684\u6578\u4F4D\u8A08\u7B97\u6A23\u672C\u7E3D\u9AD4\u7684\u6A23\u672C\u7E3D\u9AD4\u65B9\u5DEE\u3002",
            "p": [
              {
                "name": "database",
                "detail": "\u69CB\u6210\u6E05\u55AE\u6216\u8CC7\u6599\u5EAB\u7684\u5132\u5B58\u683C\u5340\u57DF,\u6E05\u55AE\u7684\u7B2C\u4E00\u884C\u5305\u542B\u6BCF\u4E00\u5217\u7684\u6A19\u7C64\u3002"
              },
              {
                "name": "field",
                "detail": "\u6307\u5B9Adatabase\u4E2D\u7684\u54EA\u4E00\u5217\u5305\u542B\u8981\u9078\u53D6\u548C\u7528\u65BC\u8A08\u7B97\u7684\u503C\u3002\n\nfield\u53EF\u4EE5\u662F\u8207database\u7B2C\u4E00\u884C\u4E2D\u67D0\u500B\u5217\u6A19\u984C\u5C0D\u61C9\u7684\u6587\u5B57\u6A19\u7C64,\u4E5F\u53EF\u4EE5\u662F\u6307\u5B9A\u76F8\u95DC\u5217\u7684\u6578\u4F4D\u7D22\u5F15,\u7B2C\u4E00\u5217\u7684\u7D22\u5F15\u503C\u70BA1\u3002"
              },
              {
                "name": "criteria",
                "detail": "\u5305\u542B\u6240\u6307\u5B9A\u689D\u4EF6\u7684\u5132\u5B58\u683C\u5340\u57DF\u3002\u8A08\u7B97\u4E4B\u524D\u5C07\u4F7F\u7528\u9019\u4E9B\u689D\u4EF6\u4F86\u904E\u6FFEdatabase\u4E2D\u7684\u503C\u3002"
              }
            ]
          },
          "AGE_BY_IDCARD": {
            "d": "\u64DA\u4E2D\u570B\u8EAB\u4EFD\u8B49\u865F\u8A08\u7B97\u51FA\u5E74\u9F61\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8B49",
            "a": "\u64DA\u4E2D\u570B\u8EAB\u4EFD\u8B49\u865F\u8A08\u7B97\u51FA\u5E74\u9F61",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8B49\u865F",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8B49\u865F\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u622A\u6B62\u65E5\u671F",
                "detail": "\u5E74\u9F61\u8A08\u7B97\u7684\u622A\u6B62\u65E5\u671F\u6216\u7BC4\u570D,\u9ED8\u8A8D\u70BA\u7576\u65E5\u3002"
              }
            ]
          },
          "SEX_BY_IDCARD": {
            "d": "\u6839\u64DA\u4E2D\u570B\u8EAB\u4EFD\u8B49\u865F\u8A08\u7B97\u51FA\u6027\u5225\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8B49",
            "a": "\u6839\u64DA\u8EAB\u4EFD\u8B49\u865F\u5F97\u5230\u6027\u5225\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8B49\u865F",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8B49\u865F\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "BIRTHDAY_BY_IDCARD": {
            "d": "\u6839\u64DA\u4E2D\u570B\u8EAB\u4EFD\u8B49\u865F\u8A08\u7B97\u51FA\u751F\u65E5\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8B49",
            "a": "\u6839\u64DA\u8EAB\u4EFD\u8B49\u865F\u5F97\u5230\u751F\u65E5\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8B49\u865F",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8B49\u865F\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "\u751F\u65E5\u683C\u5F0F",
                "detail": "\u65E5\u671F\u985E\u578B,\u9ED8\u8A8D0:[1900/01/01],1:[1900-01-01],2:[1900\u5E741\u67081\u65E5]"
              }
            ]
          },
          "PROVINCE_BY_IDCARD": {
            "d": "\u6839\u64DA\u4E2D\u570B\u8EAB\u4EFD\u8B49\u865F\u8A08\u7B97\u51FA\u7C4D\u8CAB\u7684\u7701\u4EFD\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8B49",
            "a": "\u6839\u64DA\u8EAB\u4EFD\u8B49\u865F\u5F97\u5230\u7C4D\u8CAB\u7684\u7701\u4EFD\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8B49\u865F",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8B49\u865F\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "CITY_BY_IDCARD": {
            "d": "\u6839\u64DA\u4E2D\u570B\u8EAB\u4EFD\u8B49\u865F\u8A08\u7B97\u51FA\u7C4D\u8CAB\u7684\u90FD\u5E02\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8B49",
            "a": "\u6839\u64DA\u8EAB\u4EFD\u8B49\u865F\u5F97\u5230\u7C4D\u8CAB\u7684\u90FD\u5E02\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8B49\u865F",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8B49\u865F\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "STAR_BY_IDCARD": {
            "d": "\u6839\u64DA\u4E2D\u570B\u8EAB\u4EFD\u8B49\u865F\u8A08\u7B97\u51FA\u661F\u5EA7\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8B49",
            "a": "\u6839\u64DA\u8EAB\u4EFD\u8B49\u865F\u5F97\u5230\u661F\u5EA7\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8B49\u865F",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8B49\u865F\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "ANIMAL_BY_IDCARD": {
            "d": "\u6839\u64DA\u4E2D\u570B\u8EAB\u4EFD\u8B49\u865F\u8A08\u7B97\u51FA\u751F\u8096\uFF08\u9F20\u3001\u725B\u3001\u864E\u3001\u5154\u2026\uFF09\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8B49",
            "a": "\u6839\u64DA\u8EAB\u4EFD\u8B49\u865F\u5F97\u5230\u751F\u8096\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8B49\u865F",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8B49\u865F\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "ISIDCARD": {
            "d": "\u9A57\u8B49\u8EAB\u4EFD\u8B49\u7684\u683C\u5F0F\u662F\u5426\u6B63\u78BA\u3002\u652F\u630115\u4F4D\u621618\u4F4D\u8EAB\u4EFD\u8B49",
            "a": "\u9A57\u8B49\u8EAB\u4EFD\u8B49\u683C\u5F0F\u6B63\u78BA\u6027\u3002",
            "p": [
              {
                "name": "\u8EAB\u4EFD\u8B49\u865F",
                "detail": "15\u4F4D\u6216\u800518\u4F4D\u7684\u8EAB\u4EFD\u8B49\u865F\u6216\u7BC4\u570D\u3002"
              }
            ]
          },
          "DM_TEXT_CUTWORD": {
            "d": "\u6587\u5B57\u5206\u8A5E\u3002\u628A\u4E00\u9023\u4E32\u6587\u5B57\u6298\u958B\u70BA\u4E00\u7CFB\u5217\u55AE\u7368\u8A5E\u8A9E",
            "a": "\u4E2D\u6587\u6587\u5B57\u5206\u8A5E\u3002",
            "p": [
              {
                "name": "\u6587\u5B57",
                "detail": "\u4EFB\u610F\u9700\u8981\u5206\u8A5E\u7684\u6587\u5B57\u3002"
              },
              {
                "name": "\u5206\u8A5E\u6A21\u5F0F",
                "detail": "\u9ED8\u8A8D\u70BA0[\u7CBE\u78BA\u6A21\u5F0F]\uFF0C1[\u5168\u6A21\u5F0F]\uFF0C2[\u641C\u5C0B\u5F15\u64CE\u6A21\u5F0F]\u3002"
              }
            ]
          },
          "DM_TEXT_TFIDF": {
            "d": "\u63A1\u7528tf-idf\u7B97\u704B\u9032\u884C\u95DC\u9375\u5B57\u9078\u53D6\u3002\u5F9E\u4E00\u9023\u4E32\u6587\u5B57\u4E2D\u8B58\u5225\u95DC\u9375\u5B57",
            "a": "tf-idf\u95DC\u9375\u5B57\u8B58\u5225\u3002",
            "p": [
              {
                "name": "\u6587\u5B57",
                "detail": "\u4EFB\u610F\u9700\u8981\u5206\u8A5E\u7684\u6587\u5B57\u3002"
              },
              {
                "name": "\u95DC\u9375\u5B57\u500B\u6578",
                "detail": "\u7B97\u704B\u8FD4\u56DE\u7684\u95DC\u9375\u5B57\u500B\u6578\uFF0C\u9ED8\u8A8D20"
              },
              {
                "name": "\u8A9E\u6599\u5EAB",
                "detail": "\u9078\u64C7\u7279\u5B9A\u9818\u57DF\u7684\u8A9E\u6599\u5EAB\uFF0C\u9ED8\u8A8D0[\u901A\u7528]\uFF0C1[\u91D1\u878D]\uFF0C2[\u91AB\u7642]"
              }
            ]
          },
          "DM_TEXT_TEXTRANK": {
            "d": "\u63A1\u7528TextRank\u7B97\u704B\u9032\u884C\u95DC\u9375\u5B57\u9078\u53D6\u3002\u5F9E\u4E00\u9023\u4E32\u6587\u5B57\u4E2D\u8B58\u5225\u95DC\u9375\u5B57",
            "a": "TextRank\u95DC\u9375\u5B57\u8B58\u5225\u3002",
            "p": [
              {
                "name": "\u6587\u5B57",
                "detail": "\u4EFB\u610F\u9700\u8981\u5206\u8A5E\u7684\u6587\u5B57\u3002"
              },
              {
                "name": "\u95DC\u9375\u5B57\u500B\u6578",
                "detail": "\u7B97\u704B\u8FD4\u56DE\u7684\u95DC\u9375\u5B57\u500B\u6578\uFF0C\u9ED8\u8A8D20"
              },
              {
                "name": "\u8A9E\u6599\u5EAB",
                "detail": "\u9078\u64C7\u7279\u5B9A\u9818\u57DF\u7684\u8A9E\u6599\u5EAB\uFF0C\u9ED8\u8A8D0[\u901A\u7528]\uFF0C1[\u91D1\u878D]\uFF0C2[\u91AB\u7642]"
              }
            ]
          },
          "DATA_CN_STOCK_CLOSE": {
            "d": "\u6839\u64DA\u80A1\u7968\u4EE3\u78BC\u548C\u65E5\u671F\uFF0C\u8FD4\u56DEA\u80A1\u5C0D\u61C9\u80A1\u7968\u6536\u76E4\u50F9\u3002",
            "a": "\u8FD4\u56DEA\u80A1\u5C0D\u61C9\u80A1\u7968\u6536\u76E4\u50F9\u3002",
            "p": [
              {
                "name": "\u80A1\u7968\u4EE3\u78BC",
                "detail": "6\u4F4D\u80A1\u7968\u4EE3\u78BC\uFF0C\u5FC5\u586B\u9805\u3002"
              },
              {
                "name": "\u65E5\u671F",
                "detail": "\u80A1\u7968\u7684\u4EA4\u6613\u65E5\uFF0C\u9ED8\u8A8D\u70BA\u6700\u65B0\u4EA4\u6613\u65E5"
              },
              {
                "name": "\u8907\u6B0A\u9664\u6B0A",
                "detail": "\u9078\u64C7\u80A1\u7968\u7684\u9664\u6B0A\u8907\u6B0A\u985E\u578B\uFF0C\u9ED8\u8A8D0[\u524D\u8907\u6B0A]\uFF0C1[\u539F\u59CB\u50F9\u683C]\uFF0C2[\u5F8C\u8907\u6B0A]"
              }
            ]
          },
          "DATA_CN_STOCK_OPEN": {
            "d": "\u6839\u64DA\u80A1\u7968\u4EE3\u78BC\u548C\u65E5\u671F\uFF0C\u8FD4\u56DEA\u80A1\u5C0D\u61C9\u80A1\u7968\u958B\u76E4\u50F9\u3002",
            "a": "\u8FD4\u56DEA\u80A1\u5C0D\u61C9\u80A1\u7968\u958B\u76E4\u50F9\u3002",
            "p": [
              {
                "name": "\u80A1\u7968\u4EE3\u78BC",
                "detail": "6\u4F4D\u80A1\u7968\u4EE3\u78BC\uFF0C\u5FC5\u586B\u9805\u3002"
              },
              {
                "name": "\u65E5\u671F",
                "detail": "\u80A1\u7968\u7684\u4EA4\u6613\u65E5\uFF0C\u9ED8\u8A8D\u70BA\u6700\u65B0\u4EA4\u6613\u65E5"
              },
              {
                "name": "\u8907\u6B0A\u9664\u6B0A",
                "detail": "\u9078\u64C7\u80A1\u7968\u7684\u9664\u6B0A\u8907\u6B0A\u985E\u578B\uFF0C\u9ED8\u8A8D0[\u524D\u8907\u6B0A]\uFF0C1[\u539F\u59CB\u50F9\u683C]\uFF0C2[\u5F8C\u8907\u6B0A]"
              }
            ]
          },
          "DATA_CN_STOCK_MAX": {
            "d": "\u6839\u64DA\u80A1\u7968\u4EE3\u78BC\u548C\u65E5\u671F\uFF0C\u8FD4\u56DEA\u80A1\u5C0D\u61C9\u80A1\u7968\u6700\u9AD8\u50F9\u3002",
            "a": "\u8FD4\u56DEA\u80A1\u5C0D\u61C9\u80A1\u7968\u6700\u9AD8\u50F9\u3002",
            "p": [
              {
                "name": "\u80A1\u7968\u4EE3\u78BC",
                "detail": "6\u4F4D\u80A1\u7968\u4EE3\u78BC\uFF0C\u5FC5\u586B\u9805\u3002"
              },
              {
                "name": "\u65E5\u671F",
                "detail": "\u80A1\u7968\u7684\u4EA4\u6613\u65E5\uFF0C\u9ED8\u8A8D\u70BA\u6700\u65B0\u4EA4\u6613\u65E5"
              },
              {
                "name": "\u8907\u6B0A\u9664\u6B0A",
                "detail": "\u9078\u64C7\u80A1\u7968\u7684\u9664\u6B0A\u8907\u6B0A\u985E\u578B\uFF0C\u9ED8\u8A8D0[\u524D\u8907\u6B0A]\uFF0C1[\u539F\u59CB\u50F9\u683C]\uFF0C2[\u5F8C\u8907\u6B0A]"
              }
            ]
          },
          "DATA_CN_STOCK_MIN": {
            "d": "\u6839\u64DA\u80A1\u7968\u4EE3\u78BC\u548C\u65E5\u671F\uFF0C\u8FD4\u56DEA\u80A1\u5C0D\u61C9\u80A1\u7968\u6700\u4F4E\u50F9\u3002",
            "a": "\u8FD4\u56DEA\u80A1\u5C0D\u61C9\u80A1\u7968\u6700\u4F4E\u50F9\u3002",
            "p": [
              {
                "name": "\u80A1\u7968\u4EE3\u78BC",
                "detail": "6\u4F4D\u80A1\u7968\u4EE3\u78BC\uFF0C\u5FC5\u586B\u9805\u3002"
              },
              {
                "name": "\u65E5\u671F",
                "detail": "\u80A1\u7968\u7684\u4EA4\u6613\u65E5,\u9ED8\u8BA4\u4E3A\u6700\u65B0\u4EA4\u6613\u65E5"
              },
              {
                "name": "\u8907\u6B0A\u9664\u6B0A",
                "detail": "\u9078\u64C7\u80A1\u7968\u7684\u9664\u6B0A\u8907\u6B0A\u985E\u578B\uFF0C\u9ED8\u8A8D0[\u524D\u8907\u6B0A]\uFF0C1[\u539F\u59CB\u50F9\u683C]\uFF0C2[\u5F8C\u8907\u6B0A]"
              }
            ]
          },
          "DATA_CN_STOCK_VOLUMN": {
            "d": "\u6839\u64DA\u80A1\u7968\u4EE3\u78BC\u548C\u65E5\u671F\uFF0C\u8FD4\u56DEA\u80A1\u5C0D\u61C9\u80A1\u7968\u6210\u4EA4\u91CF\u3002",
            "a": "\u8FD4\u56DEA\u80A1\u5C0D\u61C9\u80A1\u7968\u6210\u4EA4\u91CF\u3002",
            "p": [
              {
                "name": "\u80A1\u7968\u4EE3\u78BC",
                "detail": "6\u4F4D\u80A1\u7968\u4EE3\u78BC\uFF0C\u5FC5\u586B\u9805\u3002"
              },
              {
                "name": "\u65E5\u671F",
                "detail": "\u80A1\u7968\u7684\u4EA4\u6613\u65E5\uFF0C\u9ED8\u8A8D\u70BA\u6700\u65B0\u4EA4\u6613\u65E5"
              },
              {
                "name": "\u8907\u6B0A\u9664\u6B0A",
                "detail": "\u9078\u64C7\u80A1\u7968\u7684\u9664\u6B0A\u8907\u6B0A\u985E\u578B\uFF0C\u9ED8\u8A8D0[\u524D\u8907\u6B0A]\uFF0C1[\u539F\u59CB\u50F9\u683C]\uFF0C2[\u5F8C\u8907\u6B0A]"
              }
            ]
          },
          "DATA_CN_STOCK_AMOUNT": {
            "d": "\u6839\u64DA\u80A1\u7968\u4EE3\u78BC\u548C\u65E5\u671F\uFF0C\u8FD4\u56DEA\u80A1\u5C0D\u61C9\u80A1\u7968\u6210\u4EA4\u984D\u3002",
            "a": "\u8FD4\u56DEA\u80A1\u5C0D\u61C9\u80A1\u7968\u6210\u4EA4\u984D\u3002",
            "p": [
              {
                "name": "\u80A1\u7968\u4EE3\u78BC",
                "detail": "6\u4F4D\u80A1\u7968\u4EE3\u78BC\uFF0C\u5FC5\u586B\u9805\u3002"
              },
              {
                "name": "\u65E5\u671F",
                "detail": "\u80A1\u7968\u7684\u4EA4\u6613\u65E5\uFF0C\u9ED8\u8A8D\u70BA\u6700\u65B0\u4EA4\u6613\u65E5"
              },
              {
                "name": "\u8907\u6B0A\u9664\u6B0A",
                "detail": "\u9078\u64C7\u80A1\u7968\u7684\u9664\u6B0A\u8907\u6B0A\u985E\u578B\uFF0C\u9ED8\u8A8D0[\u524D\u8907\u6B0A]\uFF0C1[\u539F\u59CB\u50F9\u683C]\uFF0C2[\u5F8C\u8907\u6B0A]"
              }
            ]
          },
          "ISDATE": {
            "d": "\u9A57\u8B49\u65E5\u671F\u7684\u683C\u5F0F\u662F\u5426\u6B63\u78BA\u3002\u652F\u6301\u591A\u7A2E\u65E5\u671F\u683C\u5F0F",
            "a": "\u9A57\u8B49\u65E5\u671F\u683C\u5F0F\u6B63\u78BA\u6027\u3002",
            "p": [
              {
                "name": "\u65E5\u671F",
                "detail": "\u65E5\u671F\u503C,\u4F8B\u59821990/01/01, 1990\u5E741\u67081\u65E5\u7B49\u3002"
              }
            ]
          },
          "LINESPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5132\u5B58\u683C\u5167\u7684\u6298\u7DDA\u5716sparklines\uFF0C\u7528\u65BC\u63CF\u8FF0\u6578\u64DA\u7684\u9023\u7E8C\u8D70\u52E2",
            "a": "\u751F\u6210\u5132\u5B58\u683C\u6298\u7DDA\u5716",
            "p": [
              {
                "name": "\u6578\u64DA\u7BC4\u570D",
                "detail": "\u6578\u64DA\u7BC4\u570D\uFF0C\u6578\u503C\u624D\u80FD\u88AB\u6709\u6548\u8A08\u7B97\uFF0C\u4F8B\u5982A1:A20\uFF0C{1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u7DDA\u689D\u984F\u8272",
                "detail": "\u7DDA\u5716\u7684\u7DDA\u689D\u984F\u8272\uFF0C\u53EF\u4EE5\u662F\u5426\u500B\u7BC4\u570DA1\u3001\u8272\u9336\u7D22\u5F15\u6578\u503C\u6216\u8005\u5177\u9AD4\u984F\u8272\u503C\uFF0C\u8A2D\u5B9A\u70BA0\u6216false\u5247\u4E0D\u986F\u793A\uFF0C\u652F\u6301regx\u3001rgb\u3001rgba\u7B49\u3002\u9ED8\u8A8D#2ec7c9"
              },
              {
                "name": "\u7DDA\u689D\u7C97\u7D30",
                "detail": "\u6298\u7DDA\u5716\u7DDA\u6BB5\u7C97\u7D30\uFF0C\u9ED8\u8A8D\u70BA1px"
              },
              {
                "name": "\u8F14\u52A9\u7DDA",
                "detail": "\u4E00\u689D\u6A6B\u7DDA\uFF0C\u53EF\u4EE5\u662Fmin\u3001max\u3001avg\u3001median\u3001\u7BC4\u570D\u6216\u81EA\u5B9A\u7FA9\u6578\u503C\uFF0C\u9ED8\u8A8D0\u7121"
              },
              {
                "name": "\u8F14\u52A9\u7DDA\u984F\u8272",
                "detail": "\u8F14\u52A9\u7DDA\u7684\u984F\u8272\u8A2D\u5B9A\uFF0C\u540C\u7DDA\u689D\u984F\u8272\u914D\u5BD8\uFF0C\u9ED8\u8A8D#000"
              },
              {
                "name": "\u6700\u5927\u503C\u6A19\u8B58",
                "detail": "\u6A19\u8B58\u7DDA\u5716\u6700\u5927\u503C\uFF0C\u540C\u7DDA\u689D\u984F\u8272\u914D\u5BD8\uFF0C\u9ED8\u8A8D0\u4E0D\u986F\u793A"
              },
              {
                "name": "\u6700\u5C0F\u503C\u6A19\u8B58",
                "detail": "\u6A19\u8B58\u7DDA\u5716\u6700\u5C0F\u503C\uFF0C\u540C\u7DDA\u689D\u984F\u8272\u914D\u5BD8\uFF0C\u9ED8\u8A8D0\u4E0D\u986F\u793A"
              },
              {
                "name": "\u6A19\u8B58\u5927\u5C0F",
                "detail": "\u6700\u5927\u503C\u548C\u6700\u5C0F\u503C\u7684\u6A19\u8B58\u5927\u5C0F\u8A2D\u5B9A\uFF0C\u9ED8\u8A8D\u70BA1.5"
              }
            ]
          },
          "AREASPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5132\u5B58\u683C\u5167\u7684\u9762\u7A4D\u5716sparklines\uFF0C\u4E00\u822C\u7528\u65BC\u63CF\u8FF0\u6578\u64DA\u7684\u9023\u7E8C\u7D2F\u7A4D\u503C\u8D70\u52E2",
            "a": "\u751F\u6210\u5132\u5B58\u683C\u9762\u7A4D\u5716",
            "p": [
              {
                "name": "\u6578\u64DA\u7BC4\u570D",
                "detail": "\u6578\u64DA\u7BC4\u570D\uFF0C\u6578\u503C\u624D\u80FD\u88AB\u6709\u6548\u8A08\u7B97\uFF0C\u4F8B\u5982A1:A20\uFF0C{1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u7DDA\u689D\u984F\u8272",
                "detail": "\u7DDA\u5716\u7684\u7DDA\u689D\u984F\u8272\uFF0C\u53EF\u4EE5\u662F\u5426\u500B\u7BC4\u570DA1\u3001\u8272\u9336\u7D22\u5F15\u6578\u503C\u6216\u8005\u5177\u9AD4\u984F\u8272\u503C\uFF0C\u8A2D\u5B9A\u70BA0\u6216false\u5247\u4E0D\u986F\u793A\uFF0C\u652F\u6301regx\u3001rgb\u3001rgba\u7B49\u3002\u9ED8\u8A8D#2ec7c9"
              },
              {
                "name": "\u586B\u5145\u984F\u8272",
                "detail": "\u5F62\u6210\u9762\u7A4D\u5716\uFF0C\u540C\u7DDA\u689D\u984F\u8272\u914D\u5BD8\uFF0C\u9ED8\u8A8D0\u4E0D\u986F\u793A"
              },
              {
                "name": "\u7DDA\u689D\u7C97\u7D30",
                "detail": "\u6298\u7DDA\u5716\u7DDA\u6BB5\u7C97\u7D30\uFF0C\u9ED8\u8A8D\u70BA1px"
              },
              {
                "name": "\u8F14\u52A9\u7DDA",
                "detail": "\u4E00\u689D\u6A6B\u7DDA\uFF0C\u53EF\u4EE5\u662Fmin\u3001max\u3001avg\u3001median\u3001\u7BC4\u570D\u6216\u81EA\u5B9A\u7FA9\u6578\u503C\uFF0C\u9ED8\u8A8D0\u7121"
              },
              {
                "name": "\u8F14\u52A9\u7DDA\u984F\u8272",
                "detail": "\u8F14\u52A9\u7DDA\u7684\u984F\u8272\u8A2D\u5B9A\uFF0C\u540C\u7DDA\u689D\u984F\u8272\u914D\u5BD8\uFF0C\u9ED8\u8A8D#000"
              }
            ]
          },
          "COLUMNSPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5132\u5B58\u683C\u5167\u7684\u5782\u76F4\u67F1\u72C0\u5716sparklines\uFF0C\u4E00\u822C\u7528\u65BC\u63CF\u8FF0\u96E2\u6563\u6578\u64DA\u4E4B\u9593\u7684\u5927\u5C0F\u60C5\u51B5",
            "a": "\u751F\u6210\u5132\u5B58\u683C\u5782\u76F4\u67F1\u72C0\u5716",
            "p": [
              {
                "name": "\u6578\u64DA\u7BC4\u570D",
                "detail": "\u6578\u64DA\u7BC4\u570D\uFF0C\u6578\u503C\u624D\u80FD\u88AB\u6709\u6548\u8A08\u7B97\uFF0C\u4F8B\u5982A1:A20\uFF0C{1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u67F1\u689D\u9593\u9694",
                "detail": "\u67F1\u689D\u4E4B\u9593\u7684\u9593\u9694\u8DDD\u96E2\uFF0C\u9ED8\u8A8D\u70BA1"
              },
              {
                "name": "\u67F1\u689D\u984F\u8272",
                "detail": "\u7DDA\u5716\u7684\u7DDA\u689D\u984F\u8272\uFF0C\u53EF\u4EE5\u662F\u5426\u500B\u7BC4\u570DA1\u3001\u8272\u9336\u7D22\u5F15\u6578\u503C\u6216\u8005\u5177\u9AD4\u984F\u8272\u503C\uFF0C\u8A2D\u5B9A\u70BA0\u6216false\u5247\u4E0D\u986F\u793A\uFF0C\u652F\u6301regx\u3001rgb\u3001rgba\u7B49\u3002\u9ED8\u8A8D#fc5c5c"
              },
              {
                "name": "\u8CA0\u5411\u67F1\u689D\u984F\u8272",
                "detail": "\u8CA0\u5411\u67F1\u689D\u984F\u8272\u8A2D\u5B9A\uFF0C\u4EE3\u8868\u8CA0\u503C\u7684\u984F\u8272\uFF0C\u540C\u67F1\u689D\u984F\u8272\u914D\u5BD8\uFF0C\u9ED8\u8A8D#97b552"
              },
              {
                "name": "\u6700\u5927\u503C",
                "detail": "\u67F1\u5716\u6700\u5927\u503C\uFF0C\u7528\u65BC\u898F\u7BC4\u67F1\u5716\u9577\u5EA6\uFF0C\u9ED8\u8A8D\u70BA\u81EA\u52D5\u8A08\u7B97false\u3001auto\u3001null"
              },
              {
                "name": "\u8272\u677F",
                "detail": "\u8ABF\u8272\u677F\u53EF\u4EE5\u55AE\u7368\u8A2D\u5B9A\u6BCF\u500B\u67F1\u689D\u7684\u984F\u8272\uFF0C\u53EF\u8A2D\u5B9A\u591A\u500B\uFF0C\u652F\u6301\u5169\u7A2E\u683C\u5F0F:1\u984F\u8272\u4F8B\u5982#000\uFF0C\u4EE3\u8868\u7B2C\u4E00\u500B\u67F1\u7684\u984F\u8272\u662F\u9ED1\u8272\uFF1B2\u6578\u503C\u7BC4\u570D:\u984F\u8272\uFF0C\u4F8B\u5982-2:#000\u8868\u793A\u6578\u503C\u70BA-2\u7684\u67F1\u70BA\u9ED1\u8272\uFF0C0:5:#000\u8868\u793A\u6578\u503C0-5\u7684\u67F1\u70BA\u9ED1\u8272\uFF0C\u9ED8\u8A8D\u70BA\u7A7A"
              }
            ]
          },
          "STACKCOLUMNSPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5132\u5B58\u683C\u5167\u7684\u7D2F\u7A4D\u5782\u76F4\u67F1\u72C0\u5716sparklines\uFF0C\u4E00\u822C\u7528\u65BC\u63CF\u8FF0\u96E2\u6563\u6578\u64DA\u591A\u500B\u7DAD\u5EA6\u7684\u6578\u503C\u5927\u5C0F",
            "a": "\u751F\u6210\u5132\u5B58\u683C\u7D2F\u7A4D\u5782\u76F4\u67F1\u72C0\u5716",
            "p": [
              {
                "name": "\u6578\u64DA\u7BC4\u570D",
                "detail": "\u6578\u64DA\u7BC4\u570D\uFF0C\u6578\u503C\u624D\u80FD\u88AB\u6709\u6548\u8A08\u7B97\uFF0C\u4F8B\u5982A1:A20\uFF0C{1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u6309\u5217\u5806\u7A4D",
                "detail": "\u5982\u679C\u9700\u8981\u6309\u884C\u5806\u7A4D\u5247\u672C\u9805\u8A2D\u70BAfalse\u62160\uFF0C\u9ED8\u8A8D\u70BA\u662F1"
              },
              {
                "name": "\u67F1\u689D\u9593\u9694",
                "detail": "\u67F1\u689D\u4E4B\u9593\u7684\u9593\u9694\u8DDD\u96E2\uFF0C\u9ED8\u8A8D\u70BA1"
              },
              {
                "name": "\u6700\u5927\u503C",
                "detail": "\u7D2F\u7A4D\u67F1\u5716\u6700\u5927\u503C\uFF0C\u7528\u65BC\u898F\u7BC4\u67F1\u5716\u9577\u5EA6\uFF0C\u9ED8\u8A8D\u70BA\u81EA\u52D5\u8A08\u7B97false\u3001auto\u3001null"
              },
              {
                "name": "\u7D2F\u7A4D\u8272\u677F",
                "detail": "\u8ABF\u8272\u677F\u53EF\u4EE5\u55AE\u7368\u8A2D\u5B9A\u6BCF\u500B\u7DAD\u5EA6\u7684\u67F1\u689D\u984F\u8272\uFF0C\u53EF\u8A2D\u5B9A\u70BAA1:A10\u7B49\u7BC4\u570D\uFF0C\u9ED8\u8A8D\u70BA#2ec7c9, #fc5c5c, #5ab1ef, #ffb980..."
              }
            ]
          },
          "BARSPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5132\u5B58\u683C\u5167\u7684\u6A6B\u5411\u689D\u5F62\u5716sparklines\uFF0C\u4E00\u822C\u7528\u65BC\u63CF\u8FF0\u96E2\u6563\u6578\u64DA\u4E4B\u9593\u7684\u5927\u5C0F\u60C5\u51B5",
            "a": "\u751F\u6210\u5132\u5B58\u683C\u6A6B\u5411\u689D\u5F62\u5716",
            "p": [
              {
                "name": "\u6578\u64DA\u7BC4\u570D",
                "detail": "\u6578\u64DA\u7BC4\u570D,\u6578\u503C\u624D\u80FD\u88AB\u6709\u6548\u8A08\u7B97\uFF0C\u4F8B\u5982A1:A20, {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u67F1\u689D\u9593\u9694",
                "detail": "\u67F1\u689D\u4E4B\u9593\u7684\u9593\u9694\u8DDD\u96E2\uFF0C\u9ED8\u8A8D\u70BA1"
              },
              {
                "name": "\u67F1\u689D\u984F\u8272",
                "detail": "\u7DDA\u5716\u7684\u7DDA\u689D\u984F\u8272\uFF0C\u53EF\u4EE5\u662F\u5426\u500B\u7BC4\u570DA1\u3001\u8272\u9336\u7D22\u5F15\u6578\u503C\u6216\u8005\u5177\u9AD4\u984F\u8272\u503C\uFF0C\u8A2D\u5B9A\u70BA0\u6216false\u5247\u4E0D\u986F\u793A\uFF0C\u652F\u6301regx\u3001rgb\u3001rgba\u7B49\u3002\u9ED8\u8A8D#fc5c5c"
              },
              {
                "name": "\u8CA0\u5411\u67F1\u689D\u984F\u8272",
                "detail": "\u8CA0\u5411\u67F1\u689D\u984F\u8272\u8A2D\u5B9A\uFF0C\u4EE3\u8868\u8CA0\u503C\u7684\u984F\u8272\uFF0C\u540C\u67F1\u689D\u984F\u8272\u914D\u5BD8\uFF0C\u9ED8\u8A8D#97b552"
              },
              {
                "name": "\u6700\u5927\u503C",
                "detail": "\u67F1\u5716\u6700\u5927\u503C\uFF0C\u7528\u65BC\u898F\u7BC4\u67F1\u5716\u9577\u5EA6\uFF0C\u9ED8\u8A8D\u70BA\u81EA\u52D5\u8A08\u7B97false\u3001auto\u3001null"
              },
              {
                "name": "\u8272\u677F",
                "detail": "\u8ABF\u8272\u677F\u53EF\u4EE5\u55AE\u7368\u8A2D\u5B9A\u6BCF\u500B\u67F1\u689D\u7684\u984F\u8272\uFF0C\u53EF\u8A2D\u5B9A\u591A\u500B\uFF0C\u652F\u6301\u5169\u7A2E\u683C\u5F0F:1\u984F\u8272\u4F8B\u5982#000\uFF0C\u4EE3\u8868\u7B2C\u4E00\u500B\u67F1\u7684\u984F\u8272\u662F\u9ED1\u8272\uFF1B2\u6578\u503C\u7BC4\u570D:\u984F\u8272\uFF0C\u4F8B\u5982-2:#000\u8868\u793A\u6578\u503C\u70BA-2\u7684\u67F1\u70BA\u9ED1\u8272\uFF0C0:5:#000\u8868\u793A\u6578\u503C0-5\u7684\u67F1\u70BA\u9ED1\u8272\uFF0C\u9ED8\u8A8D\u70BA\u7A7A"
              }
            ]
          },
          "STACKBARSPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5132\u5B58\u683C\u5167\u7684\u7D2F\u7A4D\u6A6B\u5411\u689D\u5F62\u5716sparklines\uFF0C\u4E00\u822C\u7528\u65BC\u63CF\u8FF0\u96E2\u6563\u6578\u64DA\u591A\u500B\u7DAD\u5EA6\u7684\u6578\u503C\u5927\u5C0F",
            "a": "\u751F\u6210\u5132\u5B58\u683C\u7D2F\u7A4D\u6A6B\u5411\u689D\u5F62\u5716",
            "p": [
              {
                "name": "\u6578\u64DA\u7BC4\u570D",
                "detail": "\u6578\u64DA\u7BC4\u570D,\u6578\u503C\u624D\u80FD\u88AB\u6709\u6548\u8A08\u7B97\uFF0C\u4F8B\u5982A1:A20, {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u6309\u5217\u5806\u7A4D",
                "detail": "\u5982\u679C\u9700\u8981\u6309\u884C\u5806\u7A4D\u5247\u672C\u9805\u8A2D\u70BAfalse\u62160\uFF0C\u9ED8\u8A8D\u70BA\u662F1"
              },
              {
                "name": "\u67F1\u689D\u9593\u9694",
                "detail": "\u67F1\u689D\u4E4B\u9593\u7684\u9593\u9694\u8DDD\u96E2\uFF0C\u9ED8\u8A8D\u70BA1"
              },
              {
                "name": "\u6700\u5927\u503C",
                "detail": "\u7D2F\u7A4D\u67F1\u5716\u6700\u5927\u503C\uFF0C\u7528\u65BC\u898F\u7BC4\u67F1\u5716\u9577\u5EA6\uFF0C\u9ED8\u8A8D\u70BA\u81EA\u52D5\u8A08\u7B97false\u3001auto\u3001null"
              },
              {
                "name": "\u7D2F\u7A4D\u8272\u677F",
                "detail": "\u8ABF\u8272\u677F\u53EF\u4EE5\u55AE\u7368\u8A2D\u5B9A\u6BCF\u500B\u7DAD\u5EA6\u7684\u67F1\u689D\u984F\u8272\uFF0C\u53EF\u8A2D\u5B9A\u70BAA1:A10\u7B49\u7BC4\u570D\uFF0C\u9ED8\u8A8D\u70BA#2ec7c9, #fc5c5c, #5ab1ef, #ffb980..."
              }
            ]
          },
          "DISCRETESPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5132\u5B58\u683C\u5167\u7684\u96E2\u6563\u5716sparklines\uFF0C\u4E00\u822C\u7528\u65BC\u63CF\u8FF0\u96E2\u6563\u6578\u64DA\u8D70\u52E2",
            "a": "\u751F\u6210\u5132\u5B58\u683C\u96E2\u6563\u5716",
            "p": [
              {
                "name": "\u6578\u64DA\u7BC4\u570D",
                "detail": "\u6578\u64DA\u7BC4\u570D,\u6578\u503C\u624D\u80FD\u88AB\u6709\u6548\u8A08\u7B97\uFF0C\u4F8B\u5982A1:A20, {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u5206\u5272\u95BE\u503C",
                "detail": "\u96E2\u6563\u5716\u67F1\u5F62\u984F\u8272\u7684\u5340\u5206\uFF0C\u4F8B\u5982:\u8A72\u503C\u70BA0\uFF0C\u5247\u5927\u65BC0\u70BA\u85CD\u8272\uFF0C\u5C0F\u65BC0\u70BA\u7D05\u8272\uFF0C\u9ED8\u8A8D\u70BA0"
              },
              {
                "name": "\u95BE\u503C\u4EE5\u4E0A\u984F\u8272",
                "detail": "\u7DDA\u5716\u7684\u7DDA\u689D\u984F\u8272\uFF0C\u53EF\u4EE5\u662F\u5426\u500B\u7BC4\u570DA1\u3001\u8272\u9336\u7D22\u5F15\u6578\u503C\u6216\u8005\u5177\u9AD4\u984F\u8272\u503C\uFF0C\u8A2D\u5B9A\u70BA0\u6216false\u5247\u4E0D\u986F\u793A\uFF0C\u652F\u6301regx\u3001rgb\u3001rgba\u7B49\u3002\u9ED8\u8A8D#2ec7c9"
              },
              {
                "name": "\u95BE\u503C\u4EE5\u4E0B\u984F\u8272",
                "detail": "\u95BE\u503C\u4EE5\u4E0B\u67F1\u689D\u984F\u8272\u8A2D\u5B9A\uFF0C\u540C\u95BE\u503C\u4EE5\u4E0A\u984F\u8272\uFF0C\u9ED8\u8A8D#fc5c5c"
              }
            ]
          },
          "TRISTATESPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5132\u5B58\u683C\u5167\u7684\u4E09\u614B\u5716sparklines\uFF0C\u4E00\u822C\u7528\u65BC\u63CF\u8FF0\u4E09\u7A2E\u614B\u52E2\u7684\u8D70\u52E2\u4F8B\u5982\u52DD\u8CA0\u5E73",
            "a": "\u751F\u6210\u5132\u5B58\u683C\u4E09\u614B\u5716",
            "p": [
              {
                "name": "\u6578\u64DA\u7BC4\u570D",
                "detail": "\u6578\u64DA\u7BC4\u570D,\u6578\u503C\u624D\u80FD\u88AB\u6709\u6548\u8A08\u7B97\uFF0C\u4F8B\u5982A1:A20, {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u67F1\u689D\u9593\u9694",
                "detail": "\u67F1\u689D\u4E4B\u9593\u7684\u9593\u9694\u8DDD\u96E2\uFF0C\u9ED8\u8A8D\u70BA1"
              },
              {
                "name": "\u67F1\u689D\u984F\u8272",
                "detail": "\u7DDA\u5716\u7684\u7DDA\u689D\u984F\u8272\uFF0C\u53EF\u4EE5\u662F\u5426\u500B\u7BC4\u570DA1\u3001\u8272\u9336\u7D22\u5F15\u6578\u503C\u6216\u8005\u5177\u9AD4\u984F\u8272\u503C\uFF0C\u8A2D\u5B9A\u70BA0\u6216false\u5247\u4E0D\u986F\u793A\uFF0C\u652F\u6301regx\u3001rgb\u3001rgba\u7B49\u3002\u9ED8\u8A8D#fc5c5c"
              },
              {
                "name": "\u8D1F\u5411\u67F1\u689D\u984F\u8272",
                "detail": "\u8CA0\u5411\u67F1\u689D\u984F\u8272\u8A2D\u5B9A\uFF0C\u4EE3\u8868\u8CA0\u503C\u7684\u984F\u8272\uFF0C\u540C\u67F1\u689D\u984F\u8272\u914D\u5BD8\uFF0C\u9ED8\u8A8D#97b552"
              },
              {
                "name": "\u96F6\u503C\u67F1\u689D\u984F\u8272",
                "detail": "\u96F6\u503C\u67F1\u689D\u984F\u8272\u8A2D\u5B9A\uFF0C\u4EE3\u88680\u503C\u984F\u8272\uFF0C\u540C\u67F1\u689D\u984F\u8272\u914D\u5BD8\uFF0C\u9ED8\u8A8D#999"
              },
              {
                "name": "\u8272\u677F",
                "detail": "\u8ABF\u8272\u677F\u53EF\u4EE5\u55AE\u7368\u8A2D\u5B9A\u6BCF\u500B\u67F1\u689D\u7684\u984F\u8272\uFF0C\u53EF\u8A2D\u5B9A\u591A\u500B\uFF0C\u652F\u6301\u5169\u7A2E\u683C\u5F0F:1\u984F\u8272\u4F8B\u5982#000\uFF0C\u4EE3\u8868\u7B2C\u4E00\u500B\u67F1\u7684\u984F\u8272\u662F\u9ED1\u8272\uFF1B2\u6578\u503C\u7BC4\u570D:\u984F\u8272\uFF0C\u4F8B\u5982-2:#000\u8868\u793A\u6578\u503C\u70BA-2\u7684\u67F1\u70BA\u9ED1\u8272\uFF0C0-5:#000\u8868\u793A\u6578\u503C0-5\u7684\u67F1\u70BA\u9ED1\u8272\uFF0C\u9ED8\u8A8D\u70BA\u7A7A"
              }
            ]
          },
          "PIESPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5132\u5B58\u683C\u5167\u7684\u9905\u5716sparklines\uFF0C\u4E00\u822C\u7528\u65BC\u63CF\u8FF0\u6578\u64DA\u5360\u6BD4",
            "a": "\u751F\u6210\u5132\u5B58\u683C\u9905\u5716",
            "p": [
              {
                "name": "\u6578\u64DA\u7BC4\u570D",
                "detail": "\u6578\u64DA\u7BC4\u570D,\u6578\u503C\u624D\u80FD\u88AB\u6709\u6548\u8A08\u7B97\uFF0C\u4F8B\u5982A1:A20, {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u65CB\u8F49\u89D2\u5EA6",
                "detail": "\u9905\u5716\u7684\u65CB\u8F49\u89D2\u5EA6\uFF0C\u9ED8\u8A8D\u70BA0"
              },
              {
                "name": "\u9905\u5716\u908A\u6846",
                "detail": "\u9905\u5716\u908A\u6846\u5927\u5C0F\uFF0C\u9ED8\u8A8D\u70BA\u71210"
              },
              {
                "name": "\u908A\u6846\u984F\u8272",
                "detail": "\u9905\u5716\u908A\u6846\u984F\u8272\uFF0C\u9ED8\u8A8D\u70BA#000"
              },
              {
                "name": "\u9905\u5716\u8272\u677F",
                "detail": "\u8ABF\u8272\u677F\u53EF\u4EE5\u8A2D\u5B9A\u5207\u7247\u7684\u984F\u8272\uFF0C\u53EF\u8A2D\u5B9A\u70BAA1:A10\u7B49\u7BC4\u570D\uFF0C\u9ED8\u8A8D\u70BA#2ec7c9, #fc5c5c, #5ab1ef, #ffb980..."
              }
            ]
          },
          "BOXSPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5132\u5B58\u683C\u5167\u7684\u7BB1\u7DDA\u5716sparklines\uFF0C\u4E00\u822C\u7528\u65BC\u63CF\u8FF0\u6578\u64DA\u96C6\u7684\u7D71\u8A08\u5206\u4F48",
            "a": "\u751F\u6210\u5132\u5B58\u683C\u7BB1\u7DDA\u5716",
            "p": [
              {
                "name": "\u6578\u64DA\u7BC4\u570D",
                "detail": "\u6578\u64DA\u7BC4\u570D,\u6578\u503C\u624D\u80FD\u88AB\u6709\u6548\u8A08\u7B97\uFF0C\u4F8B\u5982A1:A20, {1,2,3,4,5}\u7B49\u3002"
              },
              {
                "name": "\u96E2\u7FA4\u9EDE\u6BD4\u4F8B",
                "detail": "\u96E2\u7FA4\u9EDE\u7684\u95BE\u503C\u7BC4\u570D\uFF0C\u5982\u679C\u70BA0\u6216false\u5247\u4E0D\u986F\u793A\uFF0C\u9ED8\u8A8D\u70BA1.5\u500D"
              },
              {
                "name": "\u76EE\u6A19\u9EDE\u503C",
                "detail": "\u7BB1\u7DDA\u5716\u4E0A\u7684\u76EE\u6A19\u503C\u8A2D\u5B9A\uFF0C\u9ED8\u8A8D\u70BAfalse\u4E0D\u986F\u793A"
              },
              {
                "name": "\u6578\u64DA\u9EDE\u5927\u5C0F",
                "detail": "\u76EE\u6A19\u9EDE\u548C\u96E2\u7FA4\u9EDE\u7684\u534A\u5F91\u5927\u5C0F\u8A2D\u5B9A\uFF0C\u9ED8\u8A8D\u70BA1.5"
              }
            ]
          },
          "BULLETSPLINES": {
            "d": "\u751F\u6210\u5D4C\u5165\u5728\u5132\u5B58\u683C\u5167\u7684\u5B50\u5F48\u5716sparklines\uFF0C\u4E00\u822C\u7528\u65BC\u63CF\u8FF0\u4EFB\u52D9\u9054\u6210\u7387",
            "a": "\u751F\u6210\u5132\u5B58\u683C\u5B50\u5F48\u5716",
            "p": [
              {
                "name": "\u76EE\u6A19",
                "detail": "\u9054\u6210\u7684\u76EE\u6A19\u503C\uFF0C\u6578\u503C\u624D\u80FD\u88AB\u6709\u6548\u8A08\u7B97\uFF0C\u4F8B\u5982A1\uFF0C100\u7B49\u3002"
              },
              {
                "name": "\u5BE6\u969B\u5B8C\u6210",
                "detail": "\u73FE\u6642\u5B8C\u6210\u503C\uFF0C\u6578\u503C\u624D\u80FD\u88AB\u6709\u6548\u8A08\u7B97\uFF0C\u4F8B\u5982A1\uFF0C100\u7B49\u3002"
              },
              {
                "name": "\u5C0D\u6BD4\u503C",
                "detail": "\u5C0D\u6BD4\u503C\uFF0C\u4F8B\u5982\u8D85\u984D\u3001\u6700\u4F4E\u3001\u7372\u734E\u5E95\u7DDA\u7B49\uFF0C\u6578\u503C\u624D\u80FD\u88AB\u6709\u6548\u8A08\u7B97\uFF0C\u4F8B\u5982A1\uFF0C100\u7B49\u3002\u53EF\u4EE5\u8A2D\u5B9A\u6700\u591A9\u500B\u5C0D\u6BD4\u503C"
              }
            ]
          },
          "COMPOSESPLINES": {
            "d": "\u652F\u6301\u591A\u500B\u985E\u578B\u7684\u5716\u756B\u5728\u540C\u4E00\u500B\u5132\u5B58\u683C\uFF0C\u6BCF\u500B\u53C3\u6578\u4EE3\u8868\u4E00\u500Bsparklines\u5716",
            "a": "\u7D44\u5408sparklines\u5716\u5230\u4E00\u500B\u5132\u5B58\u683C",
            "p": [
              {
                "name": "\u5716\u8A2D\u5B9A",
                "detail": "sparklines\u5716\u8A2D\u5B9A\uFF0C\u4F8B\u5982A1:A20\uFF0C\u4E00\u500B\u5B8C\u6210\u7684\u9905\u5716\u3001\u7DDA\u5716\u8A2D\u5B9A\u7B49\u3002"
              }
            ]
          },
          "SORT": {
            "d": "\u8FD4\u56DE\u6578\u7D44\u4E2D\u5143\u7D20\u7684\u6392\u5E8F\u6578\u7D44\u3002\u8FD4\u56DE\u7684\u6578\u7D44\u8207\u63D0\u4F9B\u7684\u6578\u7D44\u53C3\u6578\u5F62\u72C0\u76F8\u540C\u3002",
            "a": "\u8FD4\u56DE\u6578\u7D44\u4E2D\u5143\u7D20\u7684\u6392\u5E8F\u6578\u7D44\u3002\u8FD4\u56DE\u7684\u6578\u7D44\u8207\u63D0\u4F9B\u7684\u6578\u7D44\u53C3\u6578\u5F62\u72C0\u76F8\u540C\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u8981\u6392\u5E8F\u7684\u7BC4\u570D\u6216\u6578\u7D44\u3002"
              },
              {
                "name": "sort_index",
                "detail": "[\u53EF\u9078] - \u8868\u793A\u8981\u6392\u5E8F\u7684\u884C\u6216\u5217\u7684\u6578\u4F4D\u3002\uFF08\u9ED8\u8A8Drow1/col1\uFF09"
              },
              {
                "name": "sort_order",
                "detail": "[\u53EF\u9078] - \u8868\u793A\u6240\u9700\u6392\u5E8F\u9806\u5E8F\u7684\u6578\u4F4D\uFF1B1\u8868\u793A\u6607\u51AA\uFF08\u9ED8\u8A8D\uFF09\uFF0C-1\u8868\u793A\u964D\u5E8F\u3002"
              },
              {
                "name": "by_col",
                "detail": "[\u53EF\u9078] - \u8868\u793A\u6240\u9700\u6392\u5E8F\u65B9\u5411\u7684\u908F\u8F2F\u503C\uFF1B\u6309\u884C\u6392\u5E8F\u70BAFALSE\uFF08\uFF09\uFF08\u9ED8\u8A8D\uFF09\uFF0C\u6309\u5217\u6392\u5E8F\u70BATRUE\uFF08\uFF09\u3002"
              }
            ]
          },
          "FILTER": {
            "d": "\u57FA\u65BC\u4E00\u500B\u5E03\u6797\uFF08\u771F/\u5047\uFF09\u6578\u7D44\u904E\u6FFE\u4E00\u500B\u6578\u7D44\u3002",
            "a": "\u57FA\u65BC\u4E00\u500B\u5E03\u6797\uFF08\u771F/\u5047\uFF09\u6578\u7D44\u904E\u6FFE\u4E00\u500B\u6578\u7D44\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u8981\u7BE9\u9078\u7684\u6578\u7D44\u6216\u7BC4\u570D\u3002"
              },
              {
                "name": "include",
                "detail": "\u5E03\u6797\u6578\u7D44\uFF0C\u5176\u9AD8\u5EA6\u6216\u5BEC\u5EA6\u8207\u6578\u7D44\u76F8\u540C"
              },
              {
                "name": "if_empty",
                "detail": "[\u53EF\u9078] - \u5982\u679C\u5305\u542B\u6578\u7D44\u4E2D\u7684\u6240\u6709\u503C\u90FD\u70BA\u7A7A\uFF08filter\u4E0D\u8FD4\u56DE\u4EFB\u4F55\u503C\uFF09\uFF0C\u5247\u8FD4\u56DE\u7684\u503C\u3002"
              }
            ]
          },
          "UNIQUE": {
            "d": "\u8FD4\u56DE\u5217\u8868\u6216\u5340\u57DF\u4E2D\u7684\u552F\u4E00\u503C\u7684\u6E05\u55AE\u3002",
            "a": "\u8FD4\u56DE\u5217\u8868\u6216\u5340\u57DF\u4E2D\u7684\u552F\u4E00\u503C\u7684\u6E05\u55AE\u3002",
            "p": [
              {
                "name": "array",
                "detail": "\u5F9E\u5176\u8FD4\u56DE\u552F\u4E00\u503C\u7684\u6578\u7D44\u6216\u5340\u57DF\u3002"
              },
              {
                "name": "by_col",
                "detail": "[\u53EF\u9078] - \u908F\u8F2F\u503C\uFF0C\u8A13\u793A\u5982\u4F55\u6BD4\u8F03\uFF1B\u6309\u884C= FALSE\uFF08\uFF09\u6216\u7701\u7565\uFF1B\u6309\u5217= TRUE\uFF08\uFF09\u3002"
              },
              {
                "name": "occurs_once",
                "detail": "[\u53EF\u9078] - \u908F\u8F2F\u503C\uFF0C\u50C5\u8FD4\u56DE\u552F\u4E00\u503C\u4E2D\u51FA\u73FE\u4E00\u6B21= TRUE\uFF08\uFF09\uFF1B\u5305\u62EC\u6240\u6709\u552F\u4E00\u503C= FALSE\uFF08\uFF09\u6216\u7701\u7565\u3002"
              }
            ]
          },
          "RANDARRAY": {
            "d": "\u8FD4\u56DE0\u52301\u4E4B\u9593\u7684\u96A8\u6A5F\u6578\u4F4D\u6578\u7D44\u3002",
            "a": "\u8FD4\u56DE0\u52301\u4E4B\u9593\u7684\u96A8\u6A5F\u6578\u4F4D\u6578\u7D44",
            "p": [
              {
                "name": "rows",
                "detail": "[\u53EF\u9078] - \u8981\u8FD4\u56DE\u7684\u884C\u6578\u3002"
              },
              {
                "name": "cols",
                "detail": "[\u53EF\u9078] - \u8981\u8FD4\u56DE\u7684\u5217\u6578\u3002"
              }
            ]
          },
          "SEQUENCE": {
            "d": "\u751F\u6210\u6578\u4F4D\u5E8F\u5217\u7684\u6E05\u55AE\u3002",
            "a": "\u751F\u6210\u6578\u4F4D\u5E8F\u5217\u7684\u6E05\u55AE\u3002",
            "p": [
              {
                "name": "rows",
                "detail": "\u8981\u8FD4\u56DE\u7684\u884C\u6578\u3002"
              },
              {
                "name": "cols",
                "detail": "[\u53EF\u9078] - \u8981\u8FD4\u56DE\u7684\u5217\u6578\u3002"
              },
              {
                "name": "start",
                "detail": "[\u53EF\u9078] - \u5E8F\u5217\u4E2D\u7684\u7B2C\u4E00\u500B\u6578\u4F4D\u3002"
              },
              {
                "name": "step",
                "detail": "[\u53EF\u9078] -\u5E8F\u5217\u4E2D\u6BCF\u500B\u5E8F\u5217\u503C\u7684\u589E\u91CF\u3002"
              }
            ]
          },
          "EVALUATE": {
            "d": "\u5C0D\u4EE5\u6587\u5B57\u8868\u793A\u7684\u516C\u5F0F\u6216\u8005\u8868\u9054\u5F0F\u6C42\u503C\uFF0C\u4E26\u8FD4\u56DE\u7D50\u679C\u3002",
            "a": "\u6839\u64DA\u6587\u5B57\u516C\u5F0F\u6216\u8005\u8868\u9054\u5F0F\u6C42\u503C\u3002",
            "p": [
              {
                "name": "\u516C\u5F0F",
                "detail": "\u516C\u5F0F\u6216\u8868\u9054\u5F0F"
              }
            ]
          },
          "REMOTE": {
            "d": "Calls a function on a remote server",
            "a": "Calls a function on a remote back end server/API.",
            "p": [
              {
                "name": "remote_expression",
                "detail": "Formula"
              }
            ]
          }
        },
        toolbar: {
          undo: "\u64A4\u92B7",
          redo: "\u91CD\u505A",
          paintFormat: "\u683C\u5F0F\u5237",
          currencyFormat: "\u8CA8\u5E63\u683C\u5F0F",
          percentageFormat: "\u767E\u5206\u6BD4\u683C\u5F0F",
          numberDecrease: "\u51CF\u5C11\u5C0F\u6578\u4F4D\u6578",
          numberIncrease: "\u65B0\u589E\u5C0F\u6578\u4F4D\u6578",
          moreFormats: "\u66F4\u591A\u683C\u5F0F",
          font: "\u5B57\u9AD4",
          fontSize: "\u5B57\u578B\u5927\u5C0F",
          bold: "\u7C97\u9AD4\uFF08Ctrl+B\uFF09",
          italic: "\u659C\u9AD4\uFF08Ctrl+I\uFF09",
          strikethrough: "\u5220\u9664\u7DDA\uFF08Alt+Shift+5\uFF09",
          underline: "\u5E95\u7DDA",
          textColor: "\u6587\u5B57\u984F\u8272",
          chooseColor: "\u984F\u8272\u9078\u64C7",
          resetColor: "\u91CD\u7F6E\u984F\u8272",
          customColor: "\u81EA\u5B9A\u7FA9",
          alternatingColors: "\u4EA4\u66FF\u984F\u8272",
          confirmColor: "\u78BA\u5B9A\u984F\u8272",
          cancelColor: "\u53D6\u6D88",
          collapse: "\u6536\u8D77",
          fillColor: "\u5132\u5B58\u683C\u984F\u8272",
          border: "\u908A\u6846",
          borderStyle: "\u908A\u6846\u985E\u578B",
          mergeCell: "\u5408\u4F75\u5132\u5B58\u683C",
          chooseMergeType: "\u9078\u64C7\u5408\u4F75\u985E\u578B",
          horizontalAlign: "\u6C34\u51C6\u5C0D\u9F4A",
          verticalAlign: "\u5782\u76F4\u5C0D\u9F4A",
          alignment: "\u5C0D\u9F4A\u7BA1\u9053",
          textWrap: "\u6587\u5B57\u63DB\u884C",
          textWrapMode: "\u63DB\u884C\u7BA1\u9053",
          textRotate: "\u6587\u5B57\u65CB\u8F49",
          textRotateMode: "\u65CB\u8F49\u7BA1\u9053",
          freezeTopRow: "\u51CD\u7D50\u7B2C\u4E00\u884C",
          sortAndFilter: "\u6392\u5E8F\u548C\u7BE9\u9078",
          findAndReplace: "\u67E5\u627E\u66FF\u63DB",
          sum: "\u6C42\u548C",
          autoSum: "\u81EA\u52D5\u6C42\u548C",
          moreFunction: "\u66F4\u591A\u51FD\u6578",
          conditionalFormat: "\u689D\u4EF6\u683C\u5F0F",
          postil: "\u6279\u8A3B",
          pivotTable: "\u6578\u64DA\u900F\u8996\u9336",
          chart: "\u5716\u8868",
          screenshot: "\u622A\u5716",
          splitColumn: "\u5206\u5217",
          insertImage: "\u63D2\u5165\u5716\u7247",
          insertLink: "\u63D2\u5165\u9023\u7D50",
          dataVerification: "\u6578\u64DA\u9A57\u8B49",
          protection: "\u4FDD\u8B77\u5DE5\u4F5C\u8868\u5167\u5BB9",
          clearText: "\u6E05\u9664\u984F\u8272\u9078\u64C7",
          noColorSelectedText: "\u6C92\u6709\u984F\u8272\u88AB\u9078\u64C7",
          toolMore: "\u66F4\u591A",
          toolLess: "\u5C11\u65BC",
          toolClose: "\u6536\u8D77",
          toolMoreTip: "\u66F4\u591A\u529F\u80FD",
          moreOptions: "\u66F4\u591A\u9078\u9805",
          cellFormat: "\u8A2D\u5B9A\u5132\u5B58\u683C\u683C\u5F0F",
          print: "\u5217\u5370"
        },
        alternatingColors: {
          applyRange: "\u61C9\u7528\u7BC4\u570D",
          selectRange: "\u9078\u64C7\u61C9\u7528\u7BC4\u570D",
          header: "\u9801\u7709",
          footer: "\u9801\u8173",
          errorInfo: "\u4E0D\u80FD\u5C0D\u591A\u91CD\u9078\u64C7\u5340\u57DF\u57F7\u884C\u6B64\u64CD\u4F5C,\u8ACB\u9078\u64C7\u55AE\u500B\u5340\u57DF,\u7136\u5F8C\u518D\u8A66",
          textTitle: "\u683C\u5F0F\u6A23\u5F0F",
          custom: "\u81EA\u5B9A\u7FA9",
          close: "\u95DC\u9589",
          selectionTextColor: "\u9078\u64C7\u6587\u5B57\u984F\u8272",
          selectionCellColor: "\u9078\u64C7\u5132\u5B58\u683C\u984F\u8272",
          removeColor: "\u79FB\u9664\u4EA4\u66FF\u984F\u8272",
          colorShow: "\u984F\u8272",
          currentColor: "\u7576\u524D\u984F\u8272",
          tipSelectRange: "\u8ACB\u9078\u64C7\u4EA4\u66FF\u984F\u8272\u61C9\u7528\u7BC4\u570D",
          errorNoRange: "\u60A8\u9078\u64C7\u7684\u61C9\u7528\u7BC4\u570D\u4E0D\u662F\u9078\u5340\uFF01",
          errorExistColors: "\u60A8\u9078\u64C7\u7684\u61C9\u7528\u7BC4\u570D\u5DF2\u5B58\u5728\u4EA4\u66FF\u984F\u8272\u4E14\u4E0D\u5C6C\u65BC\u4F60\u8981\u7DE8\u8F2F\u7684\u61C9\u7528\u7BC4\u570D\uFF01"
        },
        button: {
          confirm: "\u78BA\u5B9A",
          cancel: "\u53D6\u6D88",
          close: "\u95DC\u9589",
          update: "Update",
          delete: "Delete",
          insert: "\u65B0\u5EFA",
          prevPage: "\u4E0A\u4E00\u9801",
          nextPage: "\u4E0B\u4E00\u9801",
          total: "\u7E3D\u5171\uFF1A"
        },
        paint: {
          start: "\u683C\u5F0F\u5237\u958B\u555F",
          end: "ESC\u9375\u9000\u51FA",
          tipSelectRange: "\u8ACB\u9078\u64C7\u9700\u8981\u8907\u88FD\u683C\u5F0F\u7684\u5340\u57DF",
          tipNotMulti: "\u7121\u6CD5\u5C0D\u591A\u91CD\u9078\u64C7\u5340\u57DF\u57F7\u884C\u6B64\u64CD\u4F5C"
        },
        format: {
          moreCurrency: "\u66F4\u591A\u8CA8\u5E63\u683C\u5F0F",
          moreDateTime: "\u66F4\u591A\u65E5\u671F\u8207\u6642\u9593\u683C\u5F0F",
          moreNumber: "\u66F4\u591A\u6578\u4F4D\u683C\u5F0F",
          titleCurrency: "\u8CA8\u5E63\u683C\u5F0F",
          decimalPlaces: "\u5C0F\u6578\u4F4D\u6578",
          titleDateTime: "\u65E5\u671F\u8207\u6642\u9593\u683C\u5F0F",
          titleNumber: "\u6578\u4F4D\u683C\u5F0F"
        },
        info: {
          detailUpdate: "\u65B0\u6253\u958B",
          detailSave: "\u5DF2\u6062\u5FA9\u672C\u5730\u7DE9\u5B58",
          row: "\u884C",
          column: "\u5217",
          loading: "\u6E32\u67D3\u4E2D\xB7\xB7\xB7",
          copy: "\u526F\u672C",
          return: "\u8FD4\u56DE",
          rename: "\u91CD\u547D\u540D",
          tips: "\u8868\u683C\u91CD\u547D\u540D",
          noName: "\u7121\u6A19\u984C\u7684\u8A66\u7B97\u8868",
          wait: "\u5F85\u66F4\u65B0",
          add: "\u6DFB\u52A0",
          addLast: "\u5728\u5E95\u90E8\u6DFB\u52A0",
          backTop: "\u56DE\u5230\u9802\u90E8",
          pageInfo: "\u5171${total}\u689D,${totalPage}\u9801,\u7576\u524D\u5DF2\u986F\u793A${currentPage}\u9801",
          nextPage: "\u4E0B\u4E00\u9801",
          tipInputNumber: "\u8ACB\u8F38\u5165\u6578\u4F4D",
          tipInputNumberLimit: "\u65B0\u589E\u7BC4\u570D\u9650\u5236\u57281-100",
          tipRowHeightLimit: "\u884C\u9AD8\u5FC5\u9808\u57280 ~ 545\u4E4B\u9593",
          tipColumnWidthLimit: "\u5217\u5BEC\u5FC5\u9808\u57280 ~ 2038\u4E4B\u9593",
          pageInfoFull: "\u5171${total}\u689D,${totalPage}\u9801,\u5DF2\u986F\u793A\u5168\u90E8\u6578\u64DA"
        },
        currencyDetail: {
          RMB: "\u4EBA\u6C11\u5E63",
          USdollar: "\u7F8E\u5143",
          EUR: "\u6B50\u5143",
          GBP: "\u82F1\u938A",
          HK: "\u6E2F\u5143",
          JPY: "\u65E5\u5143",
          AlbanianLek: "\u963F\u723E\u5DF4\u5C3C\u4E9E\u5217\u514B",
          AlgerianDinar: "\u963F\u723E\u53CA\u5229\u4E9E\u7B2C\u7D0D\u723E",
          Afghani: "\u963F\u5BCC\u6C57\u5C3C",
          ArgentinePeso: "\u963F\u6839\u5EF7\u6BD4\u7D22",
          UnitedArabEmiratesDirham: "\u963F\u62C9\u4F2F\u806F\u5408\u5927\u516C\u570B\u8FEA\u62C9\u59C6",
          ArubanFlorin: "\u963F\u9B6F\u5DF4\u5F17\u7F85\u6797",
          OmaniRial: "\u963F\u66FC\u88E1\u4E9E\u723E",
          Azerbaijanimanat: "\u963F\u585E\u62DC\u7586\u99AC\u7D0D\u7279",
          EgyptianPound: "\u57C3\u53CA\u938A",
          EthiopianBirr: "\u8863\u7D22\u6BD4\u4E9E\u6BD4\u723E",
          AngolaKwanza: "\u5B89\u54E5\u62C9\u5BEC\u7D2E",
          AustralianDollar: "\u6FB3\u5927\u5229\u4E9E\u5143",
          Patacas: "\u6FB3\u9580\u5143",
          BarbadosDollar: "\u5DF4\u5DF4\u591A\u65AF\u5143",
          PapuaNewGuineaKina: "\u5DF4\u5E03\u4E9E\u65B0\u5E7E\u5167\u4E9E\u57FA\u90A3",
          BahamianDollar: "\u5DF4\u54C8\u99AC\u5143",
          PakistanRupee: "\u5DF4\u57FA\u65AF\u5766\u76E7\u6BD4",
          ParaguayanGuarani: "\u5DF4\u62C9\u572D\u74DC\u62C9\u5C3C",
          BahrainiDinar: "\u5DF4\u6797\u7B2C\u7D0D\u723E",
          PanamanianBalboa: "\u5DF4\u62FF\u99AC\u5DF4\u6CE2\u4E9E",
          Brazilianreal: "\u5DF4\u897F\u88CF\u4E9E\u4F0A",
          Belarusianruble: "\u767D\u4FC4\u7F85\u65AF\u76E7\u5E03",
          BermudianDollar: "\u767E\u6155\u5927\u5143",
          BulgarianLev: "\u4FDD\u52A0\u5229\u4E9E\u5217\u5F17",
          IcelandKrona: "\u51B0\u5CF6\u514B\u6717",
          BosniaHerzegovinaConvertibleMark: "\u6CE2\u9ED1\u53EF\u514C\u63DB\u99AC\u514B",
          PolishZloty: "\u6CE2\u862D\u8332\u7F85\u63D0",
          Boliviano: "\u73BB\u5229\u7DAD\u4E9E\u8AFE",
          BelizeDollar: "\u8C9D\u88E1\u65AF\u5143",
          BotswanaPula: "\u6CE2\u5284\u90A3\u666E\u62C9",
          NotDannuzhamu: "\u4E0D\u4E39\u52AA\u7D2E\u59C6",
          BurundiFranc: "\u5E03\u9686\u8FEA\u6CD5\u90CE",
          NorthKoreanWon: "\u671D\u9BAE\u5713",
          DanishKrone: "\u4E39\u9EA5\u514B\u6717",
          EastCaribbeanDollar: "\u6771\u52A0\u52D2\u6BD4\u5143",
          DominicaPeso: "\u591A\u660E\u5C3C\u52A0\u6BD4\u7D22",
          RussianRuble: "\u4FC4\u570B\u76E7\u5E03",
          EritreanNakfa: "\u5384\u5229\u5782\u4E9E\u7D0D\u514B\u6CD5",
          CFAfranc: "\u975E\u6D32\u91D1\u878D\u5171\u540C\u9AD4\u6CD5\u90CE",
          PhilippinePeso: "\u83F2\u5F8B\u8CD3\u6BD4\u7D22",
          FijiDollar: "\u6590\u6FDF\u5143",
          CapeVerdeEscudo: "\u4F5B\u5F97\u89D2\u57C3\u65AF\u5EAB\u591A",
          FalklandIslandsPound: "\u798F\u514B\u862D\u7FA4\u5CF6\u938A",
          GambianDalasi: "\u5CA1\u6BD4\u4E9E\u9054\u62C9\u897F",
          Congolesefranc: "\u525B\u679C\u6CD5\u90CE",
          ColombianPeso: "\u54E5\u502B\u6BD4\u4E9E\u6BD4\u7D22",
          CostaRicanColon: "\u54E5\u65AF\u5927\u9ECE\u52A0\u79D1\u6717",
          CubanPeso: "\u53E4\u5DF4\u6BD4\u7D22",
          Cubanconvertiblepeso: "\u53E4\u5DF4\u53EF\u514C\u63DB\u6BD4\u7D22",
          GuyanaDollar: "\u84CB\u4E9E\u90A3\u5143",
          KazakhstanTenge: "\u54C8\u85A9\u514B\u5171\u548C\u570B\u5805\u6208",
          Haitiangourde: "\u6D77\u5730\u53E4\u5FB7",
          won: "\u97D3\u5143",
          NetherlandsAntillesGuilder: "\u8377\u5C6C\u5B89\u7684\u5217\u65AF\u76FE",
          Honduraslempiras: "\u6D2A\u90FD\u62C9\u65AF\u62C9\u502B\u76AE\u62C9",
          DjiboutiFranc: "\u5409\u5E03\u63D0\u6CD5\u90CE",
          KyrgyzstanSom: "\u5409\u723E\u5409\u65AF\u65AF\u5766\u7D22\u59C6",
          GuineaFranc: "\u5E7E\u5167\u4E9E\u6CD5\u90CE",
          CanadianDollar: "\u52A0\u62FF\u5927\u5143",
          GhanaianCedi: "\u52A0\u7D0D\u585E\u5730",
          Cambodianriel: "\u9AD8\u68C9\u745E\u723E",
          CzechKoruna: "\u6377\u514B\u514B\u6717",
          ZimbabweDollar: "\u8F9B\u5DF4\u5A01\u5143",
          QatariRiyal: "\u5361\u5854\u723E\u88E1\u4E9E\u723E",
          CaymanIslandsDollar: "\u958B\u66FC\u7FA4\u5CF6\u5143",
          Comorianfranc: "\u79D1\u6469\u7F85\u6CD5\u90CE",
          KuwaitiDinar: "\u79D1\u5A01\u7279\u7B2C\u7D0D\u723E",
          CroatianKuna: "\u514B\u7F85\u5730\u4E9E\u5EAB\u7D0D",
          KenyanShilling: "\u80AF\u96C5\u5148\u4EE4",
          LesothoLoti: "\u840A\u7D22\u6258\u6D1B\u8482",
          LaoKip: "\u8001\u64BE\u57FA\u666E",
          LebanesePound: "\u9ECE\u5DF4\u5AE9\u938A",
          Lithuanianlitas: "\u7ACB\u9676\u5B9B\u7ACB\u7279",
          LibyanDinar: "\u5229\u6BD4\u4E9E\u7B2C\u7D0D\u723E",
          LiberianDollar: "\u5229\u6BD4\u4E9E\u5143",
          RwandaFranc: "\u76E7\u5B89\u9054\u6CD5\u90CE",
          RomanianLeu: "\u7F85\u99AC\u5C3C\u4E9E\u5217\u4F0A",
          MalagasyAriary: "\u99AC\u62C9\u52A0\u897F\u963F\u88CF\u4E9E\u88CF",
          MaldivianRufiyaa: "\u746A\u5F8B\u5730\u592B\u62C9\u83F2\u4E9E",
          MalawiKwacha: "\u99AC\u62C9\u5A01\u514B\u74E6\u67E5",
          MalaysianRinggit: "\u99AC\u4F86\u897F\u4E9E\u6797\u5409\u7279",
          MacedoniawearingDinar: "\u99AC\u5176\u9813\u6234\u7B2C\u7D0D\u723E",
          MauritiusRupee: "\u6A21\u88E1\u897F\u65AF\u76E7\u6BD4",
          MauritanianOuguiya: "\u8305\u5229\u5854\u5C3C\u4E9E\u70CF\u5409\u4E9E",
          MongolianTugrik: "\u8499\u53E4\u5716\u683C\u88E1\u514B",
          BangladeshiTaka: "\u5B5F\u52A0\u62C9\u5854\u5361",
          PeruvianNuevoSol: "\u79D8\u9B6F\u65B0\u7D22\u723E",
          MyanmarKyat: "\u7DEC\u7538\u958B\u4E9E\u7279",
          MoldovanLeu: "\u83AB\u723E\u9054\u74E6\u5217\u4F0A",
          MoroccanDirham: "\u6469\u6D1B\u54E5\u8FEA\u62C9\u59C6",
          MozambiqueMetical: "\u83AB\u4E09\u6BD4\u514B\u6885\u8482\u5361\u723E",
          MexicanPeso: "\u58A8\u897F\u54E5\u6BD4\u7D22",
          NamibianDollar: "\u7D0D\u7C73\u6BD4\u4E9E\u5143",
          SouthAfricanRand: "\u5357\u975E\u862D\u7279",
          SouthSudanesePound: "\u5357\u8607\u4E39\u938A",
          NicaraguaCordoba: "\u5C3C\u52A0\u62C9\u74DC\u79D1\u591A\u5DF4",
          NepaleseRupee: "\u5C3C\u6CCA\u723E\u76E7\u6BD4",
          NigerianNaira: "\u5948\u53CA\u5229\u4E9E\u5948\u62C9",
          NorwegianKrone: "\u632A\u5A01\u514B\u6717",
          GeorgianLari: "\u55AC\u6CBB\u4E9E\u62C9\u745E",
          RMBOffshore: "\u4EBA\u6C11\u5E63\uFF08\u96E2\u5CB8\uFF09",
          SwedishKrona: "\u745E\u5178\u514B\u6717",
          SwissFranc: "\u745E\u58EB\u6CD5\u90CE",
          SerbianDinar: "\u585E\u723E\u7DAD\u4E9E\u7B2C\u7D0D\u723E",
          SierraLeone: "\u585E\u62C9\u91CC\u6602\u5229\u6602",
          SeychellesRupee: "\u585E\u820C\u8033\u76E7\u6BD4",
          SaudiRiyal: "\u6C99\u7279\u88E1\u4E9E\u723E",
          SaoTomeDobra: "\u8056\u591A\u7F8E\u591A\u5E03\u62C9",
          SaintHelenapound: "\u8056\u8D6B\u502B\u90A3\u7FA4\u5CF6\u78C5",
          SriLankaRupee: "\u65AF\u91CC\u862D\u5361\u76E7\u6BD4",
          SwazilandLilangeni: "\u53F2\u74E6\u6FDF\u862D\u88CF\u862D\u5409\u5C3C",
          SudanesePound: "\u8607\u4E39\u938A",
          Surinamesedollar: "\u8607\u5229\u5357\u5143",
          SolomonIslandsDollar: "\u6240\u7F85\u9580\u7FA4\u5CF6\u5143",
          SomaliShilling: "\u7D22\u99AC\u5229\u4E9E\u5148\u4EE4",
          TajikistanSomoni: "\u5854\u5409\u514B\u5171\u548C\u570B\u7D22\u83AB\u5C3C",
          PacificFranc: "\u592A\u5E73\u6D0B\u6CD5\u90CE",
          ThaiBaht: "\u6CF0\u570B\u9296",
          TanzanianShilling: "\u5766\u5C1A\u5C3C\u4E9E\u5148\u4EE4",
          TonganPaanga: "\u6771\u52A0\u6F58\u52A0",
          TrinidadandTobagoDollar: "\u5343\u88E1\u9054\u6258\u8C9D\u54E5\u5143",
          TunisianDinar: "\u7A81\u5C3C\u65AF\u7B2C\u7D0D\u723E",
          TurkishLira: "\u571F\u8033\u5176\u91CC\u62C9",
          VanuatuVatu: "\u74E6\u52AA\u963F\u5716\u74E6\u5716",
          GuatemalanQuetzal: "\u74DC\u5730\u99AC\u62C9\u683C\u67E5\u723E",
          CommissionBolivar: "\u59D4\u5167\u745E\u62C9\u535A\u5229\u74E6",
          BruneiDollar: "\u6C76\u840A\u5143",
          UgandanShilling: "\u70CF\u5E72\u9054\u5148\u4EE4",
          UkrainianHryvnia: "\u70CF\u514B\u862D\u683C\u88E1\u592B\u5C3C\u4E9E",
          UruguayanPeso: "\u70CF\u62C9\u572D\u6BD4\u7D22",
          Uzbekistansom: "\u70CF\u8332\u5225\u514B\u8607\u59C6",
          WesternSamoaTala: "\u85A9\u6469\u4E9E\u5854\u62C9",
          SingaporeDollar: "\u65B0\u52A0\u5761\u5143",
          NT: "\u65B0\u81FA\u5E63",
          NewZealandDollar: "\u65B0\u897F\u862D\u5143",
          HungarianForint: "\u5308\u7259\u5229\u798F\u6797",
          SyrianPound: "\u6558\u5229\u4E9E\u938A",
          JamaicanDollar: "\u7259\u8CB7\u52A0\u5143",
          ArmenianDram: "\u4E9E\u7F8E\u5C3C\u4E9E\u5FB7\u62C9\u59C6",
          YemeniRial: "\u8449\u9580\u88E1\u4E9E\u723E",
          IraqiDinar: "\u4F0A\u62C9\u514B\u7B2C\u7D0D\u723E",
          IranianRial: "\u4F0A\u6717\u88E1\u4E9E\u723E",
          NewIsraeliShekel: "\u4EE5\u8272\u5217\u65B0\u8B1D\u514B\u723E",
          IndianRupee: "\u5370\u5EA6\u76E7\u6BD4",
          IndonesianRupiah: "\u5370\u5C3C\u76E7\u6BD4",
          JordanianDinar: "\u7D04\u65E6\u7B2C\u7D0D\u723E",
          VND: "\u8D8A\u5357\u76FE",
          ZambianKwacha: "\u5C1A\u6BD4\u4E9E\u514B\u74E6\u67E5",
          GibraltarPound: "\u76F4\u5E03\u7F85\u9640\u938A",
          ChileanPeso: "\u667A\u5229\u6BD4\u7D22",
          CFAFrancBEAC: "\u4E2D\u975E\u91D1\u878D\u5408\u4F5C\u6CD5\u90CE"
        },
        defaultFmt: [
          {"text": "\u81EA\u52D5", "value": "General", "example": ""},
          {"text": "\u7D14\u6587\u5B57", "value": "@", "example": ""},
          {"text": "", "value": "split", "example": ""},
          {"text": "\u6578\u4F4D", "value": "##0.00", "example": "1000.12"},
          {"text": "\u767E\u5206\u6BD4", "value": "#0.00%", "example": "12.21%"},
          {"text": "\u79D1\u5B78\u8A08\u6578", "value": "0.00E+00", "example": "1.01E+5"},
          {"text": "", "value": "split", "example": ""},
          {"text": "\u6703\u8A08", "value": "\xA5(0.00)", "example": "\xA5(1200.09)"},
          {"text": "\u842C\u5143", "value": "w", "example": "1\u4EBF2000\u4E072500"},
          {"text": "\u8CA8\u5E63", "value": "\xA50.00", "example": "\xA51200.09"},
          {"text": "\u842C\u51432\u4F4D\u5C0F\u6578", "value": "w0.00", "example": "2\u4E072500.55"},
          {"text": "", "value": "split", "example": ""},
          {"text": "\u65E5\u671F", "value": "yyyy-MM-dd", "example": "2017-11-29"},
          {"text": "\u6642\u9593", "value": "hh:mm AM/PM", "example": "3:00 PM"},
          {"text": "\u6642\u959324H", "value": "hh:mm", "example": "15:00"},
          {"text": "\u65E5\u671F\u6642\u9593", "value": "yyyy-MM-dd hh:mm AM/PM", "example": "2017-11-29 3:00 PM"},
          {"text": "\u65E5\u671F\u6642\u959324H", "value": "yyyy-MM-dd hh:mm", "example": "2017-11-29 15:00"},
          {"text": "", "value": "split", "example": ""},
          {"text": "\u81EA\u5B9A\u7FA9\u683C\u5F0F", "value": "fmtOtherSelf", "example": "more"}
        ],
        dateFmtList: [
          {
            "name": "1930-08-05",
            "value": "yyyy-MM-dd"
          },
          {
            "name": "1930/8/5",
            "value": "yyyy/MM/dd"
          },
          {
            "name": "1930\u5E748\u67085\u65E5",
            "value": 'yyyy"\u5E74"M"\u6708"d"\u65E5"'
          },
          {
            "name": "08-05",
            "value": "MM-dd"
          },
          {
            "name": "8-5",
            "value": "M-d"
          },
          {
            "name": "8\u67085\u65E5",
            "value": 'M"\u6708"d"\u65E5"'
          },
          {
            "name": "13:30:30",
            "value": "h:mm:ss"
          },
          {
            "name": "13:30",
            "value": "h:mm"
          },
          {
            "name": "\u4E0B\u534801:30",
            "value": "\u4E0A\u5348/\u4E0B\u5348 hh:mm"
          },
          {
            "name": "\u4E0B\u53481:30",
            "value": "\u4E0A\u5348/\u4E0B\u5348 h:mm"
          },
          {
            "name": "\u4E0B\u53481:30:30",
            "value": "\u4E0A\u5348/\u4E0B\u5348 h:mm:ss"
          },
          {
            "name": "08-05 \u4E0B\u534801:30",
            "value": "MM-dd \u4E0A\u5348/\u4E0B\u5348 hh:mm"
          }
        ],
        fontFamily: {
          MicrosoftYaHei: "Microsoft YaHei"
        },
        fontarray: ["Times New Roman", "Arial", "Tahoma", "Verdana", "\u5FAE\u8EDF\u96C5\u9ED1", "\u5B8B\u9AD4", "\u9ED1\u9AD4", "\u6977\u9AD4", "\u4EFF\u5B8B", "\u65B0\u5B8B\u9AD4", "\u83EF\u6587\u65B0\u9B4F", "\u83EF\u6587\u884C\u6977", "\u83EF\u6587\u96B8\u66F8"],
        fontjson: {"times new roman": 0, "arial": 1, "tahoma": 2, "verdana": 3, "\u5FAE\u8EDF\u96C5\u9ED1": 4, "microsoft yahei": 4, "\u5B8B\u9AD4": 5, "simsun": 5, "\u9ED1\u9AD4": 6, "simhei": 6, "\u6977\u9AD4": 7, "kaiti": 7, "\u4EFF\u5B8B": 8, "fangsong": 8, "\u65B0\u5B8B\u9AD4": 9, "nsimsun": 9, "\u83EF\u6587\u65B0\u9B4F": 10, "stxinwei": 10, "\u83EF\u6587\u884C\u6977": 11, "stxingkai": 11, "\u83EF\u6587\u96B8\u66F8": 12, "stliti": 12},
        border: {
          borderTop: "\u4E0A\u6846\u7DDA",
          borderBottom: "\u4E0B\u6846\u7DDA",
          borderLeft: "\u5DE6\u6846\u7DDA",
          borderRight: "\u53F3\u6846\u7DDA",
          borderNone: "\u7121",
          borderAll: "\u6240\u6709",
          borderOutside: "\u5916\u5074",
          borderInside: "\u5167\u5074",
          borderHorizontal: "\u5167\u5074\u6A6B\u7DDA",
          borderVertical: "\u5167\u5074\u5206\u9694\u865F",
          borderColor: "\u908A\u6846\u984F\u8272",
          borderSize: "\u908A\u6846\u7C97\u7D30"
        },
        merge: {
          mergeAll: "\u5168\u90E8\u5408\u4F75",
          mergeV: "\u5782\u76F4\u5408\u4F75",
          mergeH: "\u6C34\u5E73\u5408\u4F75",
          mergeCancel: "\u53D6\u6D88\u5408\u4F75",
          overlappingError: "\u4E0D\u80FD\u5408\u4F75\u91CD\u758A\u5340\u57DF",
          partiallyError: "\u7121\u6CD5\u5C0D\u90E8\u5206\u5408\u4F75\u5132\u5B58\u683C\u57F7\u884C\u6B64\u64CD\u4F5C"
        },
        align: {
          left: "\u5DE6\u5C0D\u9F4A",
          center: "\u4E2D\u9593\u5C0D\u9F4A",
          right: "\u53F3\u5C0D\u9F4A",
          top: "\u9802\u90E8\u5C0D\u9F4A",
          middle: "\u5C45\u4E2D\u5C0D\u9F4A",
          bottom: "\u5E95\u90E8\u5C0D\u9F4A"
        },
        textWrap: {
          "overflow": "\u6EA2\u51FA",
          "wrap": "\u81EA\u52D5\u63DB\u884C",
          "clip": "\u622A\u65B7"
        },
        rotation: {
          "none": "\u7121\u65CB\u8F49",
          "angleup": "\u5411\u4E0A\u50BE\u659C",
          "angledown": "\u5411\u4E0B\u50BE\u659C",
          "vertical": "\u8C4E\u6392\u6587\u5B57",
          "rotationUp": "\u5411\u4E0A90\xB0",
          "rotationDown": "\u5411\u4E0B90\xB0"
        },
        freezen: {
          default: "\u51CD\u7D50\u7B2C\u4E00\u884C",
          freezenRow: "\u51CD\u7D50\u7B2C\u4E00\u884C",
          freezenColumn: "\u51CD\u7D50\u7B2CA\u5217",
          freezenRC: "\u51CD\u7D50\u884C\u5217",
          freezenRowRange: "\u51CD\u7D50\u884C\u5230\u9078\u5340",
          freezenColumnRange: "\u51CD\u7D50\u5217\u5230\u9078\u5340",
          freezenRCRange: "\u51CD\u7D50\u884C\u5217\u5230\u9078\u5340",
          freezenCancel: "\u53D6\u6D88\u51CD\u7D50",
          noSeletionError: "\u6CA1\u6709\u9078\u5340",
          rangeRCOverErrorTitle: "\u51CD\u7D50\u63D0\u9192",
          rangeRCOverError: "\u51CD\u7D50\u7A97\u683C\u8D85\u904E\u53EF\u898B\u7BC4\u570D\uFF0C\u6703\u5C0E\u81F4\u7121\u6CD5\u6B63\u5E38\u64CD\u4F5C\uFF0C\u8ACB\u91CD\u65B0\u8A2D\u5B9A\u51CD\u7D50\u5340\u57DF\u3002"
        },
        sort: {
          "asc": "\u6607\u51AA",
          "desc": "\u964D\u5E8F",
          "custom": "\u81EA\u5B9A\u7FA9\u6392\u5E8F",
          "hasTitle": "\u6578\u64DA\u5177\u6709\u6A19\u984C\u884C",
          "sortBy": "\u6392\u5E8F\u4F9D\u64DA",
          "addOthers": "\u6DFB\u52A0\u5176\u4ED6\u6392\u5E8F\u5217",
          "close": "\u95DC\u9589",
          "confirm": "\u6392\u5E8F",
          "columnOperation": "\u5217",
          "secondaryTitle": "\u6B21\u8981\u6392\u5E8F",
          "sortTitle": "\u6392\u5E8F\u7BC4\u570D",
          "sortRangeTitle": "\u6392\u5E8F\u7BC4\u570D\u5F9E",
          "sortRangeTitleTo": "\u5230",
          "noRangeError": "\u4E0D\u80FD\u5C0D\u591A\u91CD\u9078\u64C7\u5340\u57DF\u57F7\u884C\u6B64\u64CD\u4F5C,\u8ACB\u9078\u64C7\u55AE\u500B\u5340\u57DF,\u7136\u5F8C\u518D\u8A66",
          "mergeError": "\u9078\u5340\u6709\u5408\u4F75\u5132\u5B58\u683C,\u7121\u6CD5\u57F7\u884C\u6B64\u64CD\u4F5C\uFF01",
          "columnSortMergeError": "\u5217\u6392\u5E8F\u6703\u64F4\u5C55\u81F3\u6574\u500B\u8868\u683C\u9078\u5340\uFF0C\u9078\u5340\u6709\u5408\u4E26\u55AE\u5143\u683C\uFF0C\u7121\u6CD5\u57F7\u884C\u6B64\u64CD\u4F5C\uFF0C\u8ACB\u9078\u64C7\u529F\u80FD\u6B04\u6392\u5E8F\u529F\u80FD\uFF01"
        },
        filter: {
          "filter": "\u7BE9\u9078",
          "clearFilter": "\u6E05\u9664\u7BE9\u9078",
          sortByAsc: "\u4EE5A-Z\u6607\u51AA\u6392\u5217",
          sortByDesc: "\u4EE5Z-A\u964D\u5E8F\u6392\u5217",
          filterByColor: "\u6309\u984F\u8272\u7BE9\u9078",
          filterByCondition: "\u6309\u689D\u4EF6\u904E\u6FFE",
          filterByValues: "\u6309\u503C\u904E\u6FFE",
          filiterInputNone: "\u7121",
          filiterInputTip: "\u8F38\u5165\u7BE9\u9078\u503C",
          filiterRangeStart: "\u5F9E",
          filiterRangeStartTip: "\u7BC4\u570D\u958B\u59CB",
          filiterRangeEnd: "\u5230",
          filiterRangeEndTip: "\u7BC4\u570D\u7ED3\u675F",
          filterValueByAllBtn: "\u5168\u9078",
          filterValueByClearBtn: "\u6E05\u9664",
          filterValueByInverseBtn: "\u53CD\u9078",
          filterValueByTip: "\u6309\u7167\u503C\u9032\u884C\u7BE9\u9078",
          filterConform: "\u78BA \u8A8D",
          filterCancel: "\u53D6 \u6D88",
          conditionNone: "\u7121",
          conditionCellIsNull: "\u5132\u5B58\u683C\u70BA\u7A7A",
          conditionCellNotNull: "\u5132\u5B58\u683C\u6709\u6578\u64DA",
          conditionCellTextContain: "\u6587\u5B57\u5305\u542B",
          conditionCellTextNotContain: "\u6587\u5B57\u4E0D\u5305\u542B",
          conditionCellTextStart: "\u6587\u5B57\u958B\u982D\u70BA",
          conditionCellTextEnd: "\u6587\u5B57\u7D50\u5C3E\u70BA",
          conditionCellTextEqual: "\u6587\u5B57\u7B49\u65BC",
          conditionCellDateEqual: "\u65E5\u671F\u7B49\u65BC",
          conditionCellDateBefore: "\u65E5\u671F\u65E9\u65BC",
          conditionCellDateAfter: "\u65E5\u671F\u665A\u65BC",
          conditionCellGreater: "\u5927\u65BC",
          conditionCellGreaterEqual: "\u5927\u65BC\u7B49\u65BC",
          conditionCellLess: "\u5C0F\u65BC",
          conditionCellLessEqual: "\u5C0F\u4E8E\u7B49\u65BC",
          conditionCellEqual: "\u7B49\u65BC",
          conditionCellNotEqual: "\u4E0D\u7B49\u65BC",
          conditionCellBetween: "\u4ECB\u65BC",
          conditionCellNotBetween: "\u4E0D\u5728\u5176\u4E2D",
          filiterMoreDataTip: "\u6578\u64DA\u91CF\u5927\uFF01\u8ACB\u7A0D\u5F8C",
          filiterMonthText: "\u6708",
          filiterYearText: "\u5E74",
          filiterByColorTip: "\u6309\u5132\u5B58\u683C\u984F\u8272\u7BE9\u9078",
          filiterByTextColorTip: "\u6309\u5132\u5B58\u683C\u5B57\u9AD4\u984F\u8272\u7BE9\u9078",
          filterContainerOneColorTip: "\u672C\u5217\u50C5\u5305\u542B\u4E00\u7A2E\u984F\u8272",
          filterDateFormatTip: "\u65E5\u671F\u683C\u5F0F",
          valueBlank: "(\u7A7A\u767D)",
          mergeError: "\u7BE9\u9078\u9078\u5340\u6709\u5408\u4F75\u5132\u5B58\u683C,\u7121\u6CD5\u57F7\u884C\u6B64\u64CD\u4F5C\uFF01"
        },
        rightclick: {
          copy: "\u8907\u88FD",
          copyAs: "\u8907\u88FD\u70BA",
          paste: "\u7C98\u8CBC",
          insert: "\u63D2\u5165",
          delete: "\u5220\u9664",
          deleteCell: "\u5220\u9664\u5132\u5B58\u683C",
          deleteSelected: "\u5220\u9664\u9078\u4E2D",
          hide: "\u96B1\u85CF",
          hideSelected: "\u96B1\u85CF\u9078\u4E2D",
          showHide: "\u986F\u793A\u96B1\u85CF",
          to: "\u5411",
          left: "\u5DE6",
          right: "\u53F3",
          top: "\u4E0A",
          bottom: "\u4E0B",
          moveLeft: "\u5DE6\u79FB",
          moveUp: "\u4E0A\u79FB",
          add: "\u65B0\u589E",
          row: "\u884C",
          column: "\u5217",
          width: "\u5BEC",
          height: "\u9AD8",
          number: "\u6578\u4F4D",
          confirm: "\u78BA\u8A8D",
          orderAZ: "A-Z\u9806\u5E8F\u6392\u5217",
          orderZA: "Z-A\u964D\u5E8F\u6392\u5217",
          clearContent: "\u6E05\u9664\u5167\u5BB9",
          matrix: "\u77E9\u9663\u64CD\u4F5C\u9078\u5340",
          sortSelection: "\u6392\u5E8F\u9078\u5340",
          filterSelection: "\u7BE9\u9078\u9078\u5340",
          chartGeneration: "\u5716\u8868\u751F\u6210",
          firstLineTitle: "\u9996\u884C\u70BA\u6A19\u984C",
          untitled: "\u7121\u6A19\u984C",
          array1: "\u4E00\u7DAD\u6578\u7D44",
          array2: "\u4E8C\u7DAD\u9663\u5217",
          array3: "\u591A\u5143\u6578\u7D44",
          diagonal: "\u5C0D\u89D2\u7DDA",
          antiDiagonal: "\u53CD\u5C0D\u89D2\u7DDA",
          diagonalOffset: "\u5C0D\u89D2\u504F\u79FB",
          offset: "\u504F\u79FB\u91CF",
          boolean: "\u5E03\u6797\u503C",
          flip: "\u7FFB\u8F49",
          upAndDown: "\u4E0A\u4E0B",
          leftAndRight: "\u5DE6\u53F3",
          clockwise: "\u9806\u6642\u91DD",
          counterclockwise: "\u9006\u6642\u91DD",
          transpose: "\u8F49\u7F6E",
          matrixCalculation: "\u77E9\u9663\u8A08\u7B97",
          plus: "\u52A0",
          minus: "\u51CF",
          multiply: "\u4E58",
          divided: "\u9664",
          power: "\u6B21\u65B9",
          root: "\u6B21\u65B9\u6839",
          log: "log",
          delete0: "\u5220\u9664\u5169\u7AEF0\u503C",
          removeDuplicate: "\u5220\u9664\u91CD\u8907\u503C",
          byRow: "\u6309\u884C",
          byCol: "\u6309\u5217",
          generateNewMatrix: "\u751F\u6210\u65B0\u77E9\u9663"
        },
        comment: {
          "insert": "\u65B0\u5EFA\u6279\u8A3B",
          "edit": "\u7DE8\u8F2F\u6279\u8A3B",
          "delete": "\u5220\u9664",
          "showOne": "\u986F\u793A/\u96B1\u85CF\u6279\u8A3B",
          "showAll": "\u986F\u793A/\u96B1\u85CF\u6240\u6709\u6279\u8A3B"
        },
        screenshot: {
          screenshotTipNoSelection: "\u8ACB\u6846\u9078\u9700\u8981\u622A\u5716\u7684\u7BC4\u570D",
          screenshotTipTitle: "\u63D0\u793A\uFF01",
          screenshotTipHasMerge: "\u7121\u6CD5\u5C0D\u5408\u4F75\u5132\u5B58\u683C\u57F7\u884C\u6B64\u64CD\u4F5C",
          screenshotTipHasMulti: "\u7121\u6CD5\u5C0D\u591A\u91CD\u9078\u64C7\u5340\u57DF\u57F7\u884C\u6B64\u64CD\u4F5C",
          screenshotTipSuccess: "\u622A\u53D6\u6210\u529F",
          screenshotImageName: "\u622A\u5716",
          downLoadClose: "\u95DC\u9589",
          downLoadCopy: "\u8907\u88FD\u5230\u526A\u5207\u677F",
          downLoadBtn: "\u4E0B\u8F09",
          browserNotTip: "\u4E0B\u8F09\u529F\u80FDIE\u700F\u89BD\u5668\u4E0D\u652F\u6301\uFF01",
          rightclickTip: "\u8ACB\u5728\u5716\u7247\u4E0A\u53F3\u9375\u9EDE\u64CA'\u8907\u88FD'",
          successTip: "\u5DF2\u6210\u529F\u8907\u88FD\uFF08\u5982\u679C\u7C98\u8CBC\u5931\u6557,\u8ACB\u5728\u5716\u7247\u4E0A\u53F3\u9375\u9EDE\u64CA'\u8907\u88FD\u5716\u7247'\uFF09"
        },
        splitText: {
          splitDelimiters: "\u5206\u5272\u7B26\u865F",
          splitOther: "\u5176\u5B83",
          splitContinueSymbol: "\u9023\u7E8C\u5206\u9694\u7B26\u865F\u8996\u70BA\u55AE\u500B\u8655\u7406",
          splitDataPreview: "\u6578\u64DA\u9810\u89BD",
          splitTextTitle: "\u6587\u5B57\u5206\u5217",
          splitConfirmToExe: "\u6B64\u8655\u5DF2\u6709\u6578\u64DA,\u662F\u5426\u66FF\u63DB\u5B83\uFF1F",
          tipNoMulti: "\u80FD\u5C0D\u591A\u91CD\u9078\u64C7\u5340\u57DF\u57F7\u884C\u6B64\u64CD\u4F5C,\u8ACB\u9078\u64C7\u55AE\u500B\u5340\u57DF,\u7136\u5F8C\u518D\u8A66",
          tipNoMultiColumn: "\u4E00\u6B21\u53EA\u80FD\u8F49\u63DB\u4E00\u5217\u6578\u64DA,\u9078\u5B9A\u5340\u57DF\u53EF\u4EE5\u6709\u591A\u884C,\u4F46\u4E0D\u80FD\u6709\u591A\u5217,\u8ACB\u5728\u9078\u5B9A\u55AE\u5217\u5340\u57DF\u4EE5\u5F8C\u518D\u8A66"
        },
        imageText: {
          imageSetting: "\u5716\u7247\u8A2D\u5B9A",
          close: "\u95DC\u9589",
          conventional: "\u5E38\u898F",
          moveCell1: "\u79FB\u52D5\u4E26\u8ABF\u6574\u5132\u5B58\u683C\u5927\u5C0F",
          moveCell2: "\u79FB\u52D5\u4E26\u4E14\u4E0D\u8ABF\u6574\u5132\u5B58\u683C\u7684\u5927\u5C0F",
          moveCell3: "\u4E0D\u8981\u79FB\u52D5\u5132\u5B58\u683C\u4E26\u8ABF\u6574\u5176\u5927\u5C0F",
          fixedPos: "\u56FA\u5B9A\u4F4D\u7F6E",
          border: "\u908A\u6846",
          width: "\u5BEC\u5EA6",
          radius: "\u534A\u5F91",
          style: "\u6A23\u5F0F",
          solid: "\u5BE6\u7DDA",
          dashed: "\u865B\u7DDA",
          dotted: "\u9EDE\u72C0",
          double: "\u96D9\u7DDA",
          color: "\u984F\u8272"
        },
        punctuation: {
          "tab": "Tab \u9375",
          "semicolon": "\u5206\u865F",
          "comma": "\u9017\u865F",
          "space": "\u7A7A\u683C"
        },
        findAndReplace: {
          find: "\u67E5\u627E",
          replace: "\u66FF\u63DB",
          goto: "\u8F49\u5230",
          location: "\u5B9A\u4F4D\u689D\u4EF6",
          formula: "\u516C\u5F0F",
          date: "\u65E5\u671F",
          number: "\u6578\u4F4D",
          string: "\u5B57\u5143",
          error: "\u932F\u8AA4",
          condition: "\u689D\u4EF6\u683C\u5F0F",
          rowSpan: "\u9593\u9694\u884C",
          columnSpan: "\u9593\u9694\u5217",
          locationExample: "\u5B9A\u4F4D",
          lessTwoRowTip: "\u8ACB\u9078\u64C7\u6700\u5C11\u5169\u884C",
          lessTwoColumnTip: "\u8ACB\u9078\u64C7\u6700\u5C11\u5169\u884C",
          findTextbox: "\u67E5\u627E\u5185\u5BB9",
          replaceTextbox: "\u66FF\u63DB\u5167\u5BB9",
          regexTextbox: "\u898F\u5247\u904B\u7B97\u5F0F\u5339\u914D",
          wholeTextbox: "\u6574\u8A5E\u5339\u914D",
          distinguishTextbox: "\u5340\u5206\u5927\u5C0F\u5BEB\u5339\u914D",
          allReplaceBtn: "\u5168\u90E8\u66FF\u63DB",
          replaceBtn: "\u66FF\u63DB",
          allFindBtn: "\u67E5\u627E\u5168\u90E8",
          findBtn: "\u67E5\u627E\u4E0B\u4E00\u500B",
          noFindTip: "\u6C92\u6709\u67E5\u627E\u5230\u8A72\u5167\u5BB9",
          modeTip: "\u8A72\u6A21\u5F0F\u4E0B\u4E0D\u53EF\u9032\u884C\u6B64\u64CD\u4F5C",
          searchTargetSheet: "\u5DE5\u4F5C\u8868",
          searchTargetCell: "\u5132\u5B58\u683C",
          searchTargetValue: "\u503C",
          searchInputTip: "\u8ACB\u8F38\u5165\u67E5\u627E\u5167\u5BB9",
          noReplceTip: "\u6C92\u6709\u53EF\u66FF\u63DB\u7684\u5167\u5BB9",
          noMatchTip: "\u627E\u4E0D\u5230\u5339\u914D\u9805",
          successTip: "\u5DF2\u7D93\u5E6B\u60A8\u8490\u7D22\u4E26\u9032\u884C\u4E86${xlength}\u8655\u66FF\u63DB",
          locationConstant: "\u5E38\u6578",
          locationFormula: "\u516C\u5F0F",
          locationDate: "\u65E5\u671F",
          locationDigital: "\u6578\u4F4D",
          locationString: "\u5B57\u5143",
          locationBool: "\u908F\u8F2F\u503C",
          locationError: "\u932F\u8AA4",
          locationNull: "\u7A7A\u503C",
          locationCondition: "\u689D\u4EF6\u683C\u5F0F",
          locationRowSpan: "\u9593\u9694\u884C",
          locationColumnSpan: "\u9593\u9694\u5217",
          locationTiplessTwoRow: "\u8ACB\u9078\u64C7\u6700\u5C11\u5169\u884C",
          locationTiplessTwoColumn: "\u8ACB\u9078\u64C7\u6700\u5C11\u5169\u5217",
          locationTipNotFindCell: "\u672A\u627E\u5230\u5132\u5B58\u683C"
        },
        sheetconfig: {
          delete: "\u5220\u9664",
          copy: "\u8907\u88FD",
          rename: "\u91CD\u547D\u540D",
          changeColor: "\u66F4\u6539\u984F\u8272",
          hide: "\u96B1\u85CF",
          unhide: "\u53D6\u6D88\u96B1\u85CF",
          moveLeft: "\u5411\u5DE6\u79FB",
          moveRight: "\u5411\u53F3\u79FB",
          resetColor: "\u91CD\u7F6E\u984F\u8272",
          cancelText: "\u53D6\u6D88",
          chooseText: "\u78BA\u5B9A\u984F\u8272",
          tipNameRepeat: "\u7C64\u9801\u7684\u540D\u7A31\u4E0D\u80FD\u91CD\u8907\uFF01\u8ACB\u91CD\u65B0\u4FEE\u6539",
          noMoreSheet: "\u5DE5\u4F5C\u8584\u5167\u81F3\u5C11\u542B\u6709\u4E00\u5F35\u53EF\u8996\u5DE5\u4F5C\u8868\u3002\u82E5\u9700\u5220\u9664\u9078\u5B9A\u7684\u5DE5\u4F5C\u8868,\u8ACB\u5148\u63D2\u5165\u4E00\u5F35\u65B0\u5DE5\u4F5C\u8868\u6216\u986F\u793A\u4E00\u5F35\u96B1\u85CF\u7684\u5DE5\u4F5C\u8868\u3002\u3002",
          confirmDelete: "\u662F\u5426\u5220\u9664",
          redoDelete: "\u53EF\u4EE5\u901A\u904ECtrl+Z\u64A4\u92B7\u5220\u9664",
          noHide: "\u4E0D\u80FD\u96B1\u85CF,\u81F3\u5C11\u4FDD\u7559\u4E00\u500Bsheet\u6A19\u7C64",
          chartEditNoOpt: "\u5716\u8868\u7DE8\u8F2F\u6A21\u5F0F\u4E0B\u4E0D\u5141\u8A31\u8A72\u64CD\u4F5C\uFF01",
          sheetNameSpecCharError: `\u540D\u7A31\u4E0D\u80FD\u5305\u542B:[ ] :  ? * / ' "`,
          sheetNamecannotIsEmptyError: "\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A"
        },
        conditionformat: {
          conditionformat_greaterThan: "\u689D\u4EF6\u683C\u5F0F\u2014\u2014\u5927\u65BC",
          conditionformat_greaterThan_title: "\u70BA\u5927\u65BC\u4EE5\u4E0B\u503C\u7684\u5132\u5B58\u683C\u8A2D\u5B9A\u683C\u5F0F",
          conditionformat_lessThan: "\u689D\u4EF6\u683C\u5F0F\u2014\u2014\u5C0F\u65BC",
          conditionformat_lessThan_title: "\u70BA\u5C0F\u65BC\u4EE5\u4E0B\u503C\u7684\u5132\u5B58\u683C\u8A2D\u5B9A\u683C\u5F0F",
          conditionformat_betweenness: "\u689D\u4EF6\u683C\u5F0F\u2014\u2014\u4ECB\u65BC",
          conditionformat_betweenness_title: "\u70BA\u4ECB\u65BC\u4EE5\u4E0B\u503C\u7684\u5132\u5B58\u683C\u8A2D\u5B9A\u683C\u5F0F",
          conditionformat_equal: "\u689D\u4EF6\u683C\u5F0F\u2014\u2014\u7B49\u65BC",
          conditionformat_equal_title: "\u70BA\u7B49\u65BC\u4EE5\u4E0B\u503C\u7684\u5132\u5B58\u683C\u8A2D\u5B9A\u683C\u5F0F",
          conditionformat_textContains: "\u689D\u4EF6\u683C\u5F0F\u2014\u2014\u6587\u5B57\u5305\u542B",
          conditionformat_textContains_title: "\u70BA\u5305\u542B\u4EE5\u4E0B\u6587\u5B57\u7684\u5132\u5B58\u683C\u8A2D\u5B9A\u683C\u5F0F",
          conditionformat_occurrenceDate: "\u689D\u4EF6\u683C\u5F0F\u2014\u2014\u767C\u751F\u65E5\u671F",
          conditionformat_occurrenceDate_title: "\u70BA\u5305\u542B\u4EE5\u4E0B\u65E5\u671F\u7684\u5132\u5B58\u683C\u8A2D\u5B9A\u683C\u5F0F",
          conditionformat_duplicateValue: "\u689D\u4EF6\u683C\u5F0F\u2014\u2014\u91CD\u8907\u503C",
          conditionformat_duplicateValue_title: "\u70BA\u5305\u542B\u4EE5\u4E0B\u985E\u578B\u503C\u7684\u5132\u5B58\u683C\u8A2D\u5B9A\u683C\u5F0F",
          conditionformat_top10: "\u689D\u4EF6\u683C\u5F0F\u2014\u2014\u524D10\u9805",
          conditionformat_top10_percent: "\u689D\u4EF6\u683C\u5F0F\u2014\u2014\u524D10%",
          conditionformat_top10_title: "\u70BA\u503C\u6700\u5927\u7684\u90A3\u4E9B\u5132\u5B58\u683C\u8A2D\u5B9A\u683C\u5F0F",
          conditionformat_last10: "\u689D\u4EF6\u683C\u5F0F\u2014\u2014\u6700\u5F8C10\u9805",
          conditionformat_last10_percent: "\u689D\u4EF6\u683C\u5F0F\u2014\u2014\u6700\u5F8C10%",
          conditionformat_last10_title: "\u70BA\u503C\u6700\u5C0F\u7684\u90A3\u4E9B\u5132\u5B58\u683C\u8A2D\u5B9A\u683C\u5F0F",
          conditionformat_AboveAverage: "\u689D\u4EF6\u683C\u5F0F\u2014\u2014\u9AD8\u65BC\u5E73\u5747\u503C",
          conditionformat_AboveAverage_title: "\u70BA\u9AD8\u65BC\u5E73\u5747\u503C\u7684\u5132\u5B58\u683C\u8A2D\u5B9A\u683C\u5F0F",
          conditionformat_SubAverage: "\u689D\u4EF6\u683C\u5F0F\u2014\u2014\u4F4E\u65BC\u5E73\u5747\u503C",
          conditionformat_SubAverage_title: "\u70BA\u4F4E\u65BC\u5E73\u5747\u503C\u7684\u5132\u5B58\u683C\u8A2D\u5B9A\u683C\u5F0F",
          rule: "\u898F\u5247",
          newRule: "\u65B0\u5EFA\u898F\u5247",
          editRule: "\u7DE8\u8F2F\u898F\u5247",
          deleteRule: "\u5220\u9664\u898F\u5247",
          deleteCellRule: "\u6E05\u9664\u6240\u9078\u5132\u5B58\u683C\u7684\u898F\u5247",
          deleteSheetRule: "\u6E05\u9664\u6574\u500B\u5DE5\u4F5C\u8868\u7684\u898F\u5247",
          manageRules: "\u7BA1\u7406\u898F\u5247",
          showRules: "\u986F\u793A\u5176\u683C\u5F0F\u898F\u5247",
          highlightCellRules: "\u7A81\u51FA\u986F\u793A\u5132\u5B58\u683C\u898F\u5247",
          itemSelectionRules: "\u9805\u76EE\u9078\u53D6\u898F\u5247",
          conditionformatManageRules: "\u689D\u4EF6\u683C\u5F0F\u898F\u5247\u7BA1\u7406\u5668",
          format: "\u683C\u5F0F",
          setFormat: "\u8A2D\u5B9A\u683C\u5F0F",
          setAs: "\u8A2D\u5B9A\u70BA",
          setAsByArea: "\u91DD\u5C0D\u9078\u5B9A\u5340\u57DF,\u8A2D\u5B9A\u70BA",
          applyRange: "\u61C9\u7528\u7BC4\u570D",
          selectRange: "\u9EDE\u64CA\u9078\u64C7\u61C9\u7528\u7BC4\u570D",
          selectRange_percent: "\u6240\u9078\u7BC4\u570D\u7684\u767E\u5206\u6BD4",
          selectRange_average: "\u9078\u5B9A\u7BC4\u570D\u7684\u5E73\u5747\u503C",
          selectRange_value: "\u9078\u5B9A\u7BC4\u570D\u4E2D\u7684\u6578\u503C",
          pleaseSelectRange: "\u8ACB\u9078\u64C7\u61C9\u7528\u7BC4\u570D",
          selectDataRange: "\u9EDE\u64CA\u9078\u64C7\u6578\u64DA\u7BC4\u570D",
          selectCell: "\u9078\u64C7\u5132\u5B58\u683C",
          pleaseSelectCell: "\u8ACB\u9078\u64C7\u5132\u5B58\u683C",
          pleaseSelectADate: "\u8ACB\u9078\u64C7\u65E5\u671F",
          pleaseEnterInteger: "\u8ACB\u8F38\u5165\u4E00\u500B\u4ECB\u65BC1\u548C1000\u4E4B\u9593\u7684\u6574\u6578",
          onlySingleCell: "\u53EA\u80FD\u5C0D\u55AE\u500B\u5132\u5B58\u683C\u9032\u884C\u5F15\u7528",
          conditionValueCanOnly: "\u689D\u4EF6\u503C\u53EA\u80FD\u662F\u6578\u4F4D\u6216\u8005\u55AE\u500B\u5132\u5B58\u683C",
          ruleTypeItem1: "\u57FA\u65BC\u5404\u81EA\u503C\u8A2D\u5B9A\u6240\u6709\u5132\u5B58\u683C\u7684\u683C\u5F0F",
          ruleTypeItem2: "\u53EA\u70BA\u5305\u542B\u4EE5\u4E0B\u5167\u5BB9\u7684\u5132\u5B58\u683C\u8A2D\u5B9A\u683C\u5F0F",
          ruleTypeItem2_title: "\u53EA\u70BA\u6EFF\u8DB3\u4EE5\u4E0B\u689D\u4EF6\u7684\u5132\u5B58\u683C",
          ruleTypeItem3: "\u50C5\u5C0D\u6392\u540D\u9760\u524D\u6216\u9760\u5F8C\u7684\u6578\u503C\u8A2D\u5B9A\u683C\u5F0F",
          ruleTypeItem3_title: "\u70BA\u4EE5\u4E0B\u6392\u540D\u5167\u7684\u503C",
          ruleTypeItem4: "\u50C5\u5C0D\u9AD8\u65BC\u6216\u4F4E\u65BC\u5E73\u5747\u503C\u7684\u6578\u503C\u8A2D\u5B9A\u683C\u5F0F",
          ruleTypeItem4_title: "\u70BA\u6EFF\u8DB3\u4EE5\u4E0B\u689D\u4EF6\u7684\u503C",
          ruleTypeItem5: "\u50C5\u5C0D\u552F\u4E00\u503C\u6216\u91CD\u8907\u503C\u8A2D\u5B9A\u683C\u5F0F",
          ruleTypeItem6: "\u4F7F\u7528\u516C\u5F0F\u78BA\u5B9A\u8981\u8A2D\u7F6E\u683C\u5F0F\u7684\u55AE\u5143\u683C",
          formula: "\u516C\u5F0F",
          textColor: "\u6587\u5B57\u984F\u8272",
          cellColor: "\u5132\u5B58\u683C\u984F\u8272",
          confirm: "\u78BA\u5B9A",
          confirmColor: "\u78BA\u5B9A\u984F\u8272",
          cancel: "\u53D6\u6D88",
          close: "\u95DC\u9589",
          clearColorSelect: "\u6E05\u9664\u984F\u8272\u9078\u64C7",
          sheet: "\u9336",
          currentSheet: "\u7576\u524D\u5DE5\u4F5C\u8868",
          dataBar: "\u6578\u64DA\u689D",
          dataBarColor: "\u6578\u64DA\u689D\u984F\u8272",
          gradientDataBar_1: "\u85CD-\u767D\u6F38\u8B8A\u6578\u64DA\u689D",
          gradientDataBar_2: "\u7DA0-\u767D\u6F38\u8B8A\u6578\u64DA\u689D",
          gradientDataBar_3: "\u7D05-\u767D\u6F38\u8B8A\u6578\u64DA\u689D",
          gradientDataBar_4: "\u67F3\u4E01-\u767D\u6F38\u8B8A\u6578\u64DA\u689D",
          gradientDataBar_5: "\u6DFA\u85CD-\u767D\u6F38\u8B8A\u6578\u64DA\u689D",
          gradientDataBar_6: "\u7D2B-\u767D\u6F38\u8B8A\u6578\u64DA\u689D",
          solidColorDataBar_1: "\u85CD\u8272\u6578\u64DA\u689D",
          solidColorDataBar_2: "\u7DA0\u8272\u6578\u64DA\u689D",
          solidColorDataBar_3: "\u7D05\u8272\u6578\u64DA\u689D",
          solidColorDataBar_4: "\u6A59\u8272\u6578\u64DA\u689D",
          solidColorDataBar_5: "\u6DFA\u85CD\u8272\u6578\u64DA\u689D",
          solidColorDataBar_6: "\u7D2B\u8272\u6578\u64DA\u689D",
          colorGradation: "\u8272\u968E",
          colorGradation_1: "\u7DA0-\u9EC3-\u7D05\u8272\u968E",
          colorGradation_2: "\u7D05-\u9EC3-\u7DA0\u8272\u968E",
          colorGradation_3: "\u7DA0-\u767D-\u7D05\u8272\u968E",
          colorGradation_4: "\u7D05-\u767D-\u7DA0\u8272\u968E",
          colorGradation_5: "\u85CD-\u767D-\u7D05\u8272\u968E",
          colorGradation_6: "\u7D05-\u767D-\u85CD\u8272\u968E",
          colorGradation_7: "\u767D-\u7D05\u8272\u968E",
          colorGradation_8: "\u7D05-\u767D\u8272\u968E",
          colorGradation_9: "\u7DA0-\u767D\u8272\u968E",
          colorGradation_10: "\u767D-\u7DA0\u8272\u968E",
          colorGradation_11: "\u7DA0-\u9EC3\u8272\u968E",
          colorGradation_12: "\u9EC3-\u7DA0\u8272\u968E",
          icons: "\u5716\u6A19\u96C6",
          pleaseSelectIcon: "\u8ACB\u9EDE\u64CA\u9078\u64C7\u4E00\u7D44\u5716\u6A19:",
          cellValue: "\u5132\u5B58\u683C\u503C",
          specificText: "\u7279\u5B9A\u6587\u5B57",
          occurrence: "\u767C\u751F\u65E5\u671F",
          greaterThan: "\u5927\u65BC",
          lessThan: "\u5C0F\u65BC",
          between: "\u4ECB\u65BC",
          equal: "\u7B49\u65BC",
          in: "\u548C",
          to: "\u5230",
          between2: "\u4E4B\u9593",
          contain: "\u5305\u542B",
          textContains: "\u6587\u5B57\u5305\u542B",
          duplicateValue: "\u91CD\u8907\u503C",
          uniqueValue: "\u552F\u4E00\u503C",
          top: "\u524D",
          top10: "\u524D10\u9805",
          top10_percent: "\u524D10%",
          last: "\u5F8C",
          last10: "\u5F8C10\u9805",
          last10_percent: "\u5F8C10%",
          oneself: "\u500B",
          above: "\u9AD8\u65BC",
          aboveAverage: "\u9AD8\u65BC\u5E73\u5747\u503C",
          below: "\u4F4E\u65BC",
          belowAverage: "\u4F4E\u65BC\u5E73\u5747\u503C",
          all: "\u5168\u90E8",
          yesterday: "\u6628\u5929",
          today: "\u4ECA\u5929",
          tomorrow: "\u660E\u5929",
          lastWeek: "\u4E0A\u5468",
          thisWeek: "\u672C\u5468",
          lastMonth: "\u4E0A\u6708",
          thisMonth: "\u672C\u6708",
          lastYear: "\u53BB\u5E74",
          thisYear: "\u672C\u5E74",
          last7days: "\u6700\u8FD17\u5929",
          last30days: "\u6700\u8FD130\u5929",
          next7days: "\u672A\u4F867\u5929",
          next30days: "\u672A\u4F8630\u5929",
          next60days: "\u672A\u4F8660\u5929",
          chooseRuleType: "\u9078\u64C7\u898F\u5247\u985E\u578B",
          editRuleDescription: "\u7DE8\u8F2F\u898F\u5247\u8AAA\u660E",
          newFormatRule: "\u65B0\u5EFA\u683C\u5F0F\u898F\u5247",
          editFormatRule: "\u7DE8\u8F2F\u683C\u5F0F\u898F\u5247",
          formatStyle: "\u683C\u5F0F\u6A23\u5F0F",
          fillType: "\u586B\u5145\u985E\u578B",
          color: "\u984F\u8272",
          twocolor: "\u96D9\u8272",
          tricolor: "\u4E09\u8272",
          multicolor: "\u5F69\u8272",
          grayColor: "\u7070\u8272",
          gradient: "\u6F38\u8B8A",
          solid: "\u5BE6\u5FC3",
          maxValue: "\u6700\u5927\u503C",
          medianValue: "\u4E2D\u9593\u503C",
          minValue: "\u6700\u5C0F\u503C",
          direction: "\u65B9\u5411",
          threeWayArrow: "\u4E09\u5411\u7BAD\u982D",
          fourWayArrow: "\u56DB\u5411\u7BAD\u982D",
          fiveWayArrow: "\u4E94\u5411\u7BAD\u982D",
          threeTriangles: "3\u500B\u4E09\u89D2\u5F62",
          shape: "\u5F62\u72C0",
          threeColorTrafficLight: "\u4E09\u8272\u4EA4\u901A\u71C8",
          fourColorTrafficLight: "\u56DB\u8272\u4EA4\u901A\u71C8",
          threeSigns: "\u4E09\u6A19\u8A8C",
          greenRedBlackGradient: "\u7DA0-\u7D05-\u9ED1\u6F38\u8B8A",
          rimless: "\u7121\u908A\u6846",
          bordered: "\u6709\u908A\u6846",
          mark: "\u6A19\u8A18",
          threeSymbols: "\u4E09\u500B\u7B26\u865F",
          tricolorFlag: "\u4E09\u8272\u65D7",
          circled: "\u6709\u5713\u5708",
          noCircle: "\u7121\u5713\u5708",
          grade: "\u7B49\u7D1A",
          grade4: "\u56DB\u7B49\u7D1A",
          grade5: "\u4E94\u7B49\u7D1A",
          threeStars: "3\u500B\u661F\u5F62",
          fiveQuadrantDiagram: "\u4E94\u8C61\u9650\u5716",
          fiveBoxes: "5\u500B\u6846"
        },
        insertLink: {
          linkText: "\u6587\u5B57",
          linkType: "\u9023\u7D50\u985E\u578B",
          external: "\u5916\u90E8\u9023\u7D50",
          internal: "\u5185\u90E8\u9023\u7D50",
          linkAddress: "\u9023\u7D50\u5730\u5740",
          linkSheet: "\u5DE5\u4F5C\u8868",
          linkCell: "\u5132\u5B58\u683C\u5F15\u7528",
          linkTooltip: "\u63D0\u793A",
          placeholder1: "\u8ACB\u8F38\u5165\u7DB2\u9801\u9023\u7D50\u4F4D\u5740",
          placeholder2: "\u8ACB\u8F38\u5165\u8981\u5F15\u7528\u7684\u5132\u5B58\u683C,\u4F8BA1",
          placeholder3: "\u8ACB\u8F38\u5165\u63D0\u793A\u5167\u5BB9",
          tooltipInfo1: "\u8ACB\u8F38\u5165\u6709\u6548\u7684\u9023\u7D50",
          tooltipInfo2: "\u8ACB\u8F38\u5165\u6B63\u78BA\u7684\u5132\u5B58\u683C\u5F15\u7528"
        },
        dataVerification: {
          cellRange: "\u5132\u5B58\u683C\u7BC4\u570D",
          selectCellRange: "\u9EDE\u64CA\u9078\u64C7\u5132\u5B58\u683C\u7BC4\u570D",
          selectCellRange2: "\u8ACB\u9078\u64C7\u5132\u5B58\u683C\u7BC4\u570D",
          verificationCondition: "\u9A57\u8B49\u689D\u4EF6",
          allowMultiSelect: "\u662F\u5426\u5141\u8A31\u591A\u9078",
          dropdown: "\u4E0B\u62C9\u6E05\u55AE",
          checkbox: "\u6838\u53D6\u65B9\u584A",
          number: "\u6578\u4F4D",
          number_integer: "\u6578\u4F4D-\u6574\u6578",
          number_decimal: "\u6578\u4F4D-\u5C0F\u6578",
          text_content: "\u6587\u5B57-\u5167\u5BB9",
          text_length: "\u6587\u5B57-\u9577\u5EA6",
          date: "\u65E5\u671F",
          validity: "\u6709\u6548\u6027",
          placeholder1: "\u8ACB\u8F38\u5165\u9078\u9805,\u4EE5\u82F1\u6587\u9017\u865F\u5206\u9694,\u59821,2,3,4,5",
          placeholder2: "\u8ACB\u8F38\u5165\u5167\u5BB9",
          placeholder3: "\u6578\u503C,\u598210",
          placeholder4: "\u8ACB\u8F38\u5165\u6307\u5B9A\u7684\u6587\u5B57",
          placeholder5: "\u8ACB\u8F38\u5165\u9078\u4E2D\u5132\u5B58\u683C\u6642\u986F\u793A\u7684\u63D0\u793A\u8A9E",
          selected: "\u9078\u64C7\u6642",
          notSelected: "\u672A\u9078\u64C7",
          between: "\u4ECB\u65BC",
          notBetween: "\u4E0D\u4ECB\u65BC",
          equal: "\u7B49\u65BC",
          notEqualTo: "\u4E0D\u7B49\u65BC",
          moreThanThe: "\u5927\u65BC",
          lessThan: "\u5C0F\u65BC",
          greaterOrEqualTo: "\u5927\u65BC\u7B49\u65BC",
          lessThanOrEqualTo: "\u5C0F\u65BC\u7B49\u65BC",
          include: "\u5305\u62EC",
          exclude: "\u4E0D\u5305\u62EC",
          earlierThan: "\u65E9\u65BC",
          noEarlierThan: "\u4E0D\u65E9\u65BC",
          laterThan: "\u665A\u65BC",
          noLaterThan: "\u4E0D\u665A\u65BC",
          identificationNumber: "\u8EAB\u4EFD\u8B49\u865F\u78BC",
          phoneNumber: "\u624B\u6A5F\u865F",
          remote: "\u81EA\u52D5\u9060\u7A0B\u7372\u53D6\u9078\u9805",
          prohibitInput: "\u8F38\u5165\u6578\u64DA\u7121\u6548\u6642\u7981\u6B62\u8F38\u5165",
          hintShow: "\u9078\u4E2D\u5132\u5B58\u683C\u6642\u986F\u793A\u63D0\u793A\u8A9E",
          deleteVerification: "\u5220\u9664\u9A57\u8B49",
          tooltipInfo1: "\u4E0B\u62C9\u6E05\u55AE\u9078\u9805\u4E0D\u53EF\u70BA\u7A7A",
          tooltipInfo2: "\u6838\u53D6\u65B9\u584A\u5167\u5BB9\u4E0D\u53EF\u70BA\u7A7A",
          tooltipInfo3: "\u8F38\u5165\u7684\u503C\u4E0D\u662F\u6578\u503C\u985E\u578B",
          tooltipInfo4: "\u6578\u503C2\u4E0D\u80FD\u5C0F\u65BC\u6578\u503C1",
          tooltipInfo5: "\u6587\u5B57\u5167\u5BB9\u4E0D\u80FD\u70BA\u7A7A",
          tooltipInfo6: "\u8F38\u5165\u7684\u503C\u4E0D\u662F\u65E5\u671F\u985E\u578B",
          tooltipInfo7: "\u65E5\u671F2\u4E0D\u80FD\u5C0F\u65BC\u65E5\u671F1",
          textlengthInteger: "\u6587\u5B57\u9577\u5EA6\u5FC5\u9808\u662F\u5927\u65BC\u7B49\u65BC0\u7684\u6574\u6578"
        },
        formula: {
          sum: "\u6C42\u548C",
          average: "\u5E73\u5747\u503C",
          count: "\u8A08\u6578",
          max: "\u6700\u5927\u503C",
          min: "\u6700\u5C0F\u503C",
          ifGenerate: "if\u516C\u5F0F\u751F\u6210\u5668",
          find: "\u66F4\u591A\u51FD\u6578",
          tipNotBelongToIf: "\u8A72\u5132\u5B58\u683C\u51FD\u6578\u4E0D\u5C6C\u65BCif\u516C\u5F0F!",
          tipSelectCell: "\u8ACB\u9078\u64C7\u5132\u5B58\u683C\u63D2\u5165\u51FD\u6578",
          ifGenCompareValueTitle: "\u6BD4\u8F83\u503C",
          ifGenSelectCellTitle: "\u9EDE\u64CA\u9078\u64C7\u5132\u5B58\u683C",
          ifGenRangeTitle: "\u7BC4\u570D",
          ifGenRangeTo: "\u81F3",
          ifGenRangeEvaluate: "\u7BC4\u570D\u8A55\u4F30",
          ifGenSelectRangeTitle: "\u9EDE\u64CA\u9078\u64C7\u7BC4\u570D",
          ifGenCutWay: "\u5283\u5206\u7BA1\u9053",
          ifGenCutSame: "\u5283\u5206\u503C\u76F8\u540C",
          ifGenCutNpiece: "\u5283\u5206\u4E3AN\u4EFD",
          ifGenCutCustom: "\u81EA\u5B9A\u7FA9\u8F38\u5165",
          ifGenCutConfirm: "\u751F\u6210",
          ifGenTipSelectCell: "\u9078\u64C7\u5132\u5B58\u683C",
          ifGenTipSelectCellPlace: "\u8ACB\u9078\u64C7\u5132\u5B58\u683C",
          ifGenTipSelectRange: "\u9078\u64C7\u55AE\u7BC4\u570D",
          ifGenTipSelectRangePlace: "\u8ACB\u9078\u64C7\u7BC4\u570D",
          ifGenTipNotNullValue: "\u6BD4\u8F03\u503C\u4E0D\u80FD\u70BA\u7A7A!",
          ifGenTipLableTitile: "\u6A19\u7C64",
          ifGenTipRangeNotforNull: "\u7BC4\u570D\u4E0D\u80FD\u70BA\u7A7A!",
          ifGenTipCutValueNotforNull: "\u5283\u5206\u503C\u4E0D\u80FD\u70BA\u7A7A\uFF01",
          ifGenTipNotGenCondition: "\u6C92\u6709\u751F\u6210\u53EF\u7528\u7684\u689D\u4EF6\uFF01"
        },
        formulaMore: {
          valueTitle: "\u503C",
          tipSelectDataRange: "\u9078\u53D6\u6578\u64DA\u7BC4\u570D",
          tipDataRangeTile: "\u6578\u64DA\u7BC4\u570D",
          findFunctionTitle: "\u67E5\u627E\u51FD\u6578",
          tipInputFunctionName: "\u8ACB\u8F38\u5165\u60A8\u8981\u67E5\u627E\u7684\u51FD\u6578\u540D\u7A31\u6216\u51FD\u6578\u529F\u80FD\u7684\u7C21\u8981\u63CF\u8FF0",
          Array: "\u6578\u7D44",
          Database: "\u8CC7\u6599\u4F86\u6E90",
          Date: "\u65E5\u671F",
          Engineering: "\u5DE5\u7A0B\u8A08\u7B97",
          Filter: "\u7BE9\u6AA2\u7A0B\u5F0F",
          Financial: "\u8CA1\u52D9",
          luckysheet: "Luckysheet\u5167\u5BD8",
          other: "\u5176\u5B83",
          Logical: "\u908F\u8F2F",
          Lookup: "\u67E5\u627E",
          Math: "\u6578\u5B78",
          Operator: "\u904B\u7B97\u5B50",
          Parser: "\u8F49\u63DB\u5DE5\u5177",
          Statistical: "\u7D71\u8A08",
          Text: "\u6587\u5B57",
          dataMining: "\u8CC7\u6599\u6316\u6398",
          selectFunctionTitle: "\u9078\u64C7\u51FD\u6578",
          calculationResult: "\u8A08\u7B97\u7D50\u679C",
          tipSuccessText: "\u6210\u529F",
          tipParamErrorText: "\u53C3\u6578\u985E\u578B\u932F\u8AA4",
          helpClose: "\u95DC\u9589",
          helpCollapse: "\u6536\u8D77",
          helpExample: "\u793A\u4F8B",
          helpAbstract: "\u6458\u8981",
          execfunctionError: '\u63D0\u793A", "\u516C\u5F0F\u5B58\u5728\u932F\u8AA4',
          execfunctionSelfError: "\u516C\u5F0F\u4E0D\u53EF\u5F15\u7528\u5176\u672C\u8EAB\u7684\u5132\u5B58\u683C",
          execfunctionSelfErrorResult: "\u516C\u5F0F\u4E0D\u53EF\u5F15\u7528\u5176\u672C\u8EAB\u7684\u5132\u5B58\u683C,\u6703\u5C0E\u81F4\u8A08\u7B97\u7D50\u679C\u4E0D\u6E96\u78BA",
          allowRepeatText: "\u53EF\u91CD\u8907",
          allowOptionText: "\u53EF\u9078",
          selectCategory: "\u6216\u9078\u64C7\u985E\u5225"
        },
        drag: {
          noMerge: "\u7121\u6CD5\u5C0D\u5408\u4F75\u5132\u5B58\u683C\u57F7\u884C\u6B64\u64CD\u4F5C",
          affectPivot: "\u7121\u6CD5\u5C0D\u6240\u9078\u5132\u5B58\u683C\u9032\u884C\u6B64\u66F4\u6539,\u56E0\u70BA\u5B83\u6703\u5F71\u97FF\u6578\u64DA\u900F\u8996\u9336\uFF01",
          noMulti: "\u7121\u6CD5\u5C0D\u591A\u91CD\u9078\u64C7\u5340\u57DF\u57F7\u884C\u6B64\u64CD\u4F5C,\u8ACB\u9078\u64C7\u55AE\u500B\u5340\u57DF",
          noPaste: "\u7121\u6CD5\u5728\u6B64\u8655\u7C98\u8CBC\u6B64\u5167\u5BB9,\u8ACB\u9078\u64C7\u7C98\u8CBC\u5340\u57DF\u7684\u4E00\u500B\u5132\u5B58\u683C,\u7136\u5F8C\u518D\u6B21\u5617\u8A66\u7C98\u8CBC",
          noPartMerge: "\u7121\u6CD5\u5C0D\u90E8\u5206\u5408\u4F75\u5132\u5B58\u683C\u57F7\u884C\u6B64\u64CD\u4F5C",
          inputCorrect: "\u8ACB\u8F38\u5165\u6B63\u78BA\u7684\u6578\u503C",
          notLessOne: "\u884C\u5217\u6578\u4E0D\u80FD\u5C0F\u65BC1",
          offsetColumnLessZero: "\u504F\u79FB\u5217\u4E0D\u80FD\u70BA\u8CA0\u6578\uFF01",
          pasteMustKeybordAlert: "Copy and paste in the Sheet: Ctrl + C to copy, Ctrl + V to paste, Ctrl + X to cut",
          pasteMustKeybordAlertHTMLTitle: "Copy and paste in the Sheet",
          pasteMustKeybordAlertHTML: "<span style='line-height: 1.0;font-size:36px;font-weight: bold;color:#666;'>Ctrl + C</span>&nbsp;&nbsp;to copy<br/><span style='line-height: 1.0;font-size:36px;font-weight: bold;color:#666;'>Ctrl + V</span>&nbsp;&nbsp;to paste<br/><span style='line-height: 1.0;font-size:36px;font-weight: bold;color:#666;'>Ctrl + X</span>&nbsp;&nbsp;to cut"
        },
        paste: {
          warning: "\u63D0\u793A",
          errorNotAllowMulti: "\u4E0D\u80FD\u5C0D\u591A\u91CD\u9078\u64C7\u5340\u57DF\u57F7\u884C\u6B64\u64CD\u4F5C,\u8ACB\u9078\u64C7\u55AE\u500B\u5340\u57DF,\u7136\u5F8C\u518D\u8A66",
          errorNotAllowMerged: "\u4E0D\u80FD\u5BF9\u5408\u5E76\u5355\u5143\u683C\u505A\u90E8\u5206\u66F4\u6539"
        },
        pivotTable: {
          title: "\u6578\u64DA\u900F\u8996\u9336",
          closePannel: "\u95DC\u9589",
          editRange: "\u7DE8\u8F2F\u7BC4\u570D",
          tipPivotFieldSelected: "\u9078\u64C7\u9700\u8981\u6DFB\u52A0\u5230\u6578\u64DA\u900F\u8996\u9336\u7684\u6B04\u4F4D",
          tipClearSelectedField: "\u6E05\u9664\u6240\u6709\u5DF2\u9078\u6B04\u4F4D",
          btnClearSelectedField: "\u6E05\u9664",
          btnFilter: "\u7BE9\u9078",
          titleRow: "\u884C",
          titleColumn: "\u5217",
          titleValue: "\u6578\u503C",
          tipShowColumn: "\u7D71\u8A08\u6B04\u4F4D\u986F\u793A\u70BA\u5217",
          tipShowRow: "\u7D71\u8A08\u6B04\u4F4D\u986F\u793A\u70BA\u884C",
          titleSelectionDataRange: "\u9078\u53D6\u6578\u64DA\u7BC4\u570D",
          titleDataRange: "\u6578\u64DA\u7BC4\u570D",
          valueSum: "\u7E3D\u8A08",
          valueStatisticsSUM: "\u6C42\u548C",
          valueStatisticsCOUNT: "\u6578\u503C\u8A08\u6578",
          valueStatisticsCOUNTA: "\u8A08\u6578",
          valueStatisticsCOUNTUNIQUE: "\u53BB\u91CD\u8A08\u6578",
          valueStatisticsAVERAGE: "\u5E73\u5747\u503C",
          valueStatisticsMAX: "\u6700\u5927\u503C",
          valueStatisticsMIN: "\u6700\u5C0F\u503C",
          valueStatisticsMEDIAN: "\u4E2D\u4F4D\u6578",
          valueStatisticsPRODUCT: "\u4E58\u7A4D",
          valueStatisticsSTDEV: "\u6A19\u6E96\u5DEE",
          valueStatisticsSTDEVP: "\u6574\u9AD4\u6A19\u6E96\u5DEE",
          valueStatisticslet: "\u65B9\u5DEE",
          valueStatisticsVARP: "\u6574\u9AD4\u65B9\u5DEE",
          errorNotAllowEdit: "\u975E\u7DE8\u8F2F\u6A21\u5F0F\u4E0B\u7981\u6B62\u8A72\u64CD\u4F5C!",
          errorNotAllowMulti: "\u4E0D\u80FD\u5C0D\u591A\u91CD\u9078\u64C7\u5340\u57DF\u57F7\u884C\u6B64\u64CD\u4F5C,\u8ACB\u9078\u64C7\u55AE\u500B\u5340\u57DF,\u7136\u5F8C\u518D\u8A66",
          errorSelectRange: "\u8ACB\u9078\u64C7\u65B0\u5EFA\u900F\u8996\u9336\u7684\u5340\u57DF",
          errorIsDamage: "\u6B64\u6578\u64DA\u900F\u8996\u9336\u7684\u6E90\u6578\u64DA\u5DF2\u640D\u58DE\uFF01",
          errorNotAllowPivotData: "\u4E0D\u53EF\u9078\u64C7\u6578\u64DA\u900F\u8996\u9336\u70BA\u6E90\u6578\u64DA!",
          errorSelectionRange: "\u9078\u64C7\u5931\u6557,\u8F38\u5165\u7BC4\u570D\u932F\u8AA4\uFF01",
          errorIncreaseRange: "\u8ACB\u64F4\u5927\u9078\u64C7\u7684\u6578\u64DA\u7BC4\u570D!",
          titleAddColumn: "\u6DFB\u52A0\u5217\u5230\u6578\u64DA\u900F\u8996\u9336",
          titleMoveColumn: "\u79FB\u52D5\u8A72\u5217\u5230\u4E0B\u65B9\u767D\u6846",
          titleClearColumnFilter: "\u6E05\u9664\u8A72\u5217\u7684\u7BE9\u9078\u689D\u4EF6",
          titleFilterColumn: "\u7BE9\u9078\u8A72\u5217",
          titleSort: "\u6392\u5E8F",
          titleNoSort: "\u7121\u6392\u5E8F",
          titleSortAsc: "\u6607\u51AA",
          titleSortDesc: "\u964D\u5E8F",
          titleSortBy: "\u6392\u5E8F\u4F9D\u64DA",
          titleShowSum: "\u986F\u793A\u7E3D\u8A08",
          titleStasticTrue: "\u662F",
          titleStasticFalse: "\u5426"
        },
        dropCell: {
          copyCell: "\u8907\u88FD\u5132\u5B58\u683C",
          sequence: "\u586B\u5145\u5E8F\u5217",
          onlyFormat: "\u50C5\u586B\u5145\u683C\u5F0F",
          noFormat: "\u4E0D\u5E36\u683C\u5F0F\u586B\u5145",
          day: "\u4EE5\u5929\u6578\u586B\u5145",
          workDay: "\u4EE5\u5DE5\u4F5C\u65E5\u586B\u5145",
          month: "\u4EE5\u6708\u586B\u5145",
          year: "\u4EE5\u5E74\u586B\u5145",
          chineseNumber: "\u4EE5\u4E2D\u6587\u5C0F\u5BEB\u6578\u4F4D\u586B\u5145"
        },
        imageCtrl: {
          borderTile: "\u5716\u7247\u908A\u6846\u984F\u8272\u9078\u64C7",
          borderCur: "\u7576\u524D\u984F\u8272"
        },
        protection: {
          protectiontTitle: "\u4FDD\u8B77\u5DE5\u4F5C\u8868",
          enterPassword: "\u8ACB\u8F38\u5165\u5BC6\u78BC\uFF08\u53EF\u7559\u7A7A\uFF09",
          enterHint: "\u60A8\u8A66\u5716\u66F4\u6539\u7684\u5132\u5B58\u683C\u6216\u5716\u8868\u4F4D\u65BC\u53D7\u4FDD\u8B77\u7684\u5DE5\u4F5C\u8868\u4E2D\u3002\u82E5\u8981\u66F4\u6539,\u8ACB\u53D6\u6D88\u5DE5\u4F5C\u8868\u4FDD\u8B77\u3002\u60A8\u53EF\u80FD\u9700\u8981\u8F38\u5165\u5BC6\u78BC",
          swichProtectionTip: "\u4FDD\u8B77\u5DE5\u4F5C\u8868\u53CA\u9396\u5B9A\u7684\u5132\u5B58\u683C\u5167\u5BB9",
          authorityTitle: "\u5141\u8A31\u6B64\u5DE5\u4F5C\u8868\u7684\u7528\u6236\u9032\u884C:",
          selectLockedCells: "\u5B9A\u9396\u5B9A\u5132\u5B58\u683C",
          selectunLockedCells: "\u9078\u5B9A\u89E3\u9664\u9396\u5B9A\u7684\u5132\u5B58\u683C",
          formatCells: "\u8A2D\u5B9A\u5132\u5B58\u683C\u683C\u5F0F",
          formatColumns: "\u8A2D\u5B9A\u5217\u683C\u5F0F",
          formatRows: "\u8A2D\u5B9A\u884C\u683C\u5F0F",
          insertColumns: "\u63D2\u5165\u5217",
          insertRows: "\u63D2\u5165\u884C",
          insertHyperlinks: "\u63D2\u5165\u8D85\u9023\u7D50",
          deleteColumns: "\u5220\u9664\u5217",
          deleteRows: "\u5220\u9664\u884C",
          sort: "\u6392\u5E8F",
          filter: "\u4F7F\u7528\u81EA\u52D5\u7BE9\u9078",
          usePivotTablereports: "\u4F7F\u7528\u6578\u64DA\u900F\u8996\u9336\u548C\u5831\u8868",
          editObjects: "\u7DE8\u8F2F\u5C0D\u8C61",
          editScenarios: "\u7DE8\u8F2F\u65B9\u6848",
          allowRangeTitle: "\u5141\u8A31\u7528\u6236\u7DE8\u8F2F\u5340\u57DF",
          allowRangeAdd: "\u65B0\u5EFA...",
          allowRangeAddTitle: "\u6A19\u984C",
          allowRangeAddSqrf: "\u5F15\u7528\u5132\u5B58\u683C",
          selectCellRange: "\u9EDE\u64CA\u9078\u64C7\u5132\u5B58\u683C\u7BC4\u570D",
          selectCellRangeHolder: "\u8ACB\u8F38\u5165\u5132\u5B58\u683C\u7BC4\u570D",
          allowRangeAddTitlePassword: "\u5BC6\u78BC",
          allowRangeAddTitleHint: "\u63D0\u793A",
          allowRangeAddTitleHintTitle: "\u8A2D\u7F6E\u5BC6\u78BC\u5F8C,\u63D0\u793A\u7528\u6236\u8F38\u5165\u5BC6\u78BC\uFF08\u53EF\u7559\u7A7A\uFF09",
          allowRangeAddtitleDefault: "\u8ACB\u8F38\u5165\u5340\u57DF\u540D\u7A31",
          rangeItemDblclick: "\u6309\u5169\u4E0B\u9032\u884C\u7DE8\u8F2F",
          rangeItemHasPassword: "\u5DF2\u8A2D\u7F6E\u5BC6\u78BC",
          rangeItemErrorTitleNull: "\u6A19\u984C\u4E0D\u80FD\u70BA\u7A7A",
          rangeItemErrorRangeNull: "\u5132\u5B58\u683C\u7BC4\u570D\u4E0D\u80FD\u70BA\u7A7A",
          rangeItemErrorRange: "\u5132\u5B58\u683C\u7BC4\u570D\u683C\u5F0F\u932F\u8AA4",
          validationTitle: "\u9A57\u8B49\u63D0\u793A",
          validationTips: "\u9700\u8981\u8F38\u5165\u5BC6\u78BC\u4F86\u64A4\u92B7\u5DE5\u4F5C\u8868\u7684\u4FDD\u8B77",
          validationInputHint: "\u8ACB\u8F38\u5165\u5BC6\u78BC",
          checkPasswordNullalert: "\u5BC6\u78BC\u4E0D\u80FD\u70BA\u7A7A!",
          checkPasswordWrongalert: "\u5BC6\u78BC\u932F\u8AA4,\u8ACB\u91CD\u8A66\uFF01",
          checkPasswordSucceedalert: "\u89E3\u9396\u6210\u529F,\u53EF\u4EE5\u7DE8\u8F2F\u8A72\u5340\u57DF!",
          defaultRangeHintText: "\u8A72\u5132\u5B58\u683C\u6B63\u5728\u53D7\u5BC6\u78BC\u4FDD\u8B77",
          defaultSheetHintText: "\u8A72\u5132\u5B58\u683C\u6216\u5716\u8868\u4F4D\u65BC\u53D7\u4FDD\u8B77\u7684\u5DE5\u4F5C\u8868\u4E2D,\u82E5\u8981\u9032\u884C\u66F4\u6539,\u8ACB\u53D6\u6D88\u5DE5\u4F5C\u8868\u4FDD\u8B77,\u60A8\u53EF\u80FD\u9700\u8981\u8F38\u5165\u5BC6\u78BC\u3002"
        },
        cellFormat: {
          cellFormatTitle: "\u8A2D\u5B9A\u5132\u5B58\u683C\u683C\u5F0F",
          protection: "\u4FDD\u8B77",
          locked: "\u9396\u5B9A\u5132\u5B58\u683C",
          hidden: "\u96B1\u85CF\u516C\u5F0F",
          protectionTips: "\u53EA\u6709\u4FDD\u8B77\u5DE5\u4F5C\u8868\u529F\u80FD\uFF08\u5728\u529F\u80FD\u8868\u5217\u9EDE\u64CA\u4FDD\u8B77\u5DE5\u4F5C\u8868\u6309\u9215\u9032\u884C\u8A2D\u5B9A\uFF09\u958B\u555F\u5F8C,\u9396\u5B9A\u5132\u5B58\u683C\u6216\u96B1\u85CF\u516C\u5F0F\u624D\u80FD\u751F\u6548",
          tipsPart: "\u90E8\u5206\u9078\u4E2D",
          tipsAll: "\u5168\u90E8\u9078\u4E2D",
          selectionIsNullAlert: "\u8ACB\u9078\u64C7\u4E00\u500B\u7BC4\u570D\uFF01",
          sheetDataIsNullAlert: "\u6578\u64DA\u70BA\u7A7A\u7121\u6CD5\u8A2D\u5B9A\uFF01"
        },
        print: {
          normalBtn: "\u5E38\u898F\u8996\u5716",
          layoutBtn: "\u9801\u9762\u4F48\u5C40",
          pageBtn: "\u5206\u9801\u9810\u89BD",
          menuItemPrint: "\u5217\u5370(Ctrl+P)",
          menuItemAreas: "\u5217\u5370\u5340\u57DF",
          menuItemRows: "\u5217\u5370\u6A19\u984C\u884C",
          menuItemColumns: "\u5217\u5370\u6A19\u984C\u5217"
        },
        edit: {
          typing: "\u6B63\u5728\u8F38\u5165"
        },
        websocket: {
          success: "WebSocket\u9023\u63A5\u6210\u529F",
          refresh: "WebSocket\u9023\u63A5\u767C\u751F\u932F\u8AA4,\u8ACB\u5237\u65B0\u9801\u9762\uFF01",
          wait: "WebSocket\u9023\u63A5\u767C\u751F\u932F\u8AA4,\u8ACB\u8010\u5FC3\u7B49\u5F85\uFF01",
          close: "WebSocket\u9023\u63A5\u95DC\u9589",
          contact: "\u670D\u52D9\u5668\u901A\u4FE1\u767C\u751F\u932F\u8AA4,\u8ACB\u5237\u65B0\u9801\u9762\u5F8C\u518D\u8A66,\u5982\u82E5\u4E0D\u884C\u8ACB\u806F\u7CFB\u7BA1\u7406\u54E1\uFF01",
          support: "\u7576\u524D\u700F\u89BD\u5668\u4E0D\u652F\u6301WebSocket"
        }
      };
    }
  });

  // src/locale/locale.js
  function locale() {
    return locales[store_default.lang];
  }
  var locales, locale_default;
  var init_locale = __esm({
    "src/locale/locale.js"() {
      init_en();
      init_zh();
      init_es();
      init_zh_tw();
      init_store();
      locales = {en: en_default, zh: zh_default, es: es_default, zh_tw: zh_tw_default};
      locale_default = locale;
    }
  });

  // src/controllers/toolbar.js
  function createToolbarHtml() {
    const toolbar = locale_default().toolbar;
    const fontarray = locale_default().fontarray;
    const defaultFmtArray = locale_default().defaultFmt;
    const htmlMap = {
      undo: `<div class="luckysheet-toolbar-button luckysheet-inline-block disabled" data-tips="${toolbar.undo}"
        id="luckysheet-icon-undo" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-undo iconfont luckysheet-iconfont-qianjin"
                        style="user-select: none;">
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      redo: `<div class="luckysheet-toolbar-button luckysheet-inline-block disabled" data-tips="${toolbar.redo}"
        id="luckysheet-icon-redo" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-redo iconfont luckysheet-iconfont-houtui"
                        style="user-select: none;">
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      paintFormat: `<div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.paintFormat}"
        id="luckysheet-icon-paintformat" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img iconfont luckysheet-iconfont-geshishua"
                        style="user-select: none;">
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      currencyFormat: `<div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.currencyFormat}"
        id="luckysheet-icon-currency" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img iconfont luckysheet-iconfont-jine"
                        style="user-select: none;">
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      percentageFormat: `<div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.percentageFormat}"
        id="luckysheet-icon-percent" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img iconfont luckysheet-iconfont-baifenhao"
                        style="user-select: none;">
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      numberDecrease: `<div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.numberDecrease}"
        id="luckysheet-icon-fmt-decimal-decrease" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block toolbar-decimal-icon"
                    style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-decimal-decrease iconfont luckysheet-iconfont-zengjiaxiaoshuwei"
                        style="user-select: none;">
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      numberIncrease: `<div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.numberIncrease}"
        id="luckysheet-icon-fmt-decimal-increase" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block toolbar-decimal-icon"
                    style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-decimal-increase iconfont luckysheet-iconfont-jianxiaoxiaoshuwei"
                        style="user-select: none;">
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      moreFormats: `<div class="luckysheet-toolbar-select luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="${toolbar.moreFormats}"
        id="luckysheet-icon-fmt-other" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        ${defaultFmtArray[0].text}
                    </div>
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      font: `<div class="luckysheet-toolbar-select luckysheet-toolbar-menu-button luckysheet-inline-block"
        data-tips="${toolbar.font}" id="luckysheet-icon-font-family" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        ${fontarray[0]}
                    </div>
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      fontSize: `<div class="luckysheet-toolbar-select luckysheet-toolbar-zoom-combobox luckysheet-toolbar-combo-button luckysheet-inline-block"
        data-tips="${toolbar.fontSize}" id="luckysheet-icon-font-size" style="user-select: none;">
            <div class="luckysheet-toolbar-combo-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-combo-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div aria-posinset="4" aria-setsize="7" class="luckysheet-inline-block luckysheet-toolbar-combo-button-caption"
                    style="user-select: none;">
                        <input aria-label="${toolbar.fontSize}" class="luckysheet-toolbar-combo-button-input luckysheet-toolbar-textinput"
                        role="combobox" style="user-select: none;" tabindex="-1" type="text" value="10"
                        />
                    </div>
                    <div class="luckysheet-toolbar-combo-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      bold: `<div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.bold}"
        id="luckysheet-icon-bold" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-bold iconfont luckysheet-iconfont-jiacu"
                        style="user-select: none;">
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      italic: `<div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.italic}"
        id="luckysheet-icon-italic" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-italic iconfont luckysheet-iconfont-wenbenqingxie1"
                        style="user-select: none;">
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      strikethrough: `<div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.strikethrough}"
        id="luckysheet-icon-strikethrough" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-strikethrough iconfont luckysheet-iconfont-wenbenshanchuxian"
                        style="user-select: none;">
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      underline: `<div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${toolbar.underline}"
        id="luckysheet-icon-underline" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-underline iconfont luckysheet-iconfont-wenbenxiahuaxian"
                        style="user-select: none;">
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      textColor: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block luckysheet-icon-text-color"
        data-tips="${toolbar.textColor}" id="luckysheet-icon-text-color" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-color-menu-button-indicator" style="border-bottom-color: rgb(0, 0, 0); user-select: none;">
                            <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                                <div class="text-color-bar" style="background-color:${luckysheetConfigsetting_default.defaultTextColor}"></div>
                                <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-text-color iconfont luckysheet-iconfont-wenbenyanse"
                                style="user-select: none;">
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
        data-tips="${toolbar.chooseColor}..." id="luckysheet-icon-text-color-menu" role="button"
        style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      fillColor: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block luckysheet-icon-cell-color"
        data-tips="${toolbar.fillColor}" id="luckysheet-icon-cell-color" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-color-menu-button-indicator" style="border-bottom-color: rgb(255, 255, 255); user-select: none;">
                            <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                                <div class="text-color-bar" style="background-color:${luckysheetConfigsetting_default.defaultCellColor}"></div>
                                <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-cell-color iconfont luckysheet-iconfont-tianchong"
                                style="user-select: none;">
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
        data-tips="${toolbar.chooseColor}..." id="luckysheet-icon-cell-color-menu" role="button"
        style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      border: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block luckysheet-icon-border-all"
        data-tips="${toolbar.border}" id="luckysheet-icon-border-all" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-border-all iconfont luckysheet-iconfont-quanjiabiankuang"
                        style="user-select: none;">
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
        data-tips="${toolbar.borderStyle}..." id="luckysheet-icon-border-menu" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      mergeCell: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block luckysheet-icon-merge-button"
        data-tips="${toolbar.mergeCell}" id="luckysheet-icon-merge-button" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-merge iconfont luckysheet-iconfont-hebing"
                        style="user-select: none;">
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
        data-tips="${toolbar.chooseMergeType}..." id="luckysheet-icon-merge-menu" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      horizontalAlignMode: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block luckysheet-icon-align"
        data-tips="${toolbar.horizontalAlign}" id="luckysheet-icon-align" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                            <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-align-left iconfont luckysheet-iconfont-wenbenzuoduiqi"
                            style="user-select: none;">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
        data-tips="${toolbar.alignment}..." id="luckysheet-icon-align-menu" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      verticalAlignMode: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block luckysheet-icon-valign"
        data-tips="${toolbar.verticalAlign}" id="luckysheet-icon-valign" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                            <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-valign-bottom iconfont luckysheet-iconfont-dibuduiqi"
                            style="user-select: none;">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
        data-tips="${toolbar.alignment}..." id="luckysheet-icon-valign-menu" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      textWrapMode: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block luckysheet-icon-textwrap"
        data-tips="${toolbar.textWrap}" id="luckysheet-icon-textwrap" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                            <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-textwrap-clip iconfont luckysheet-iconfont-jieduan"
                            style="user-select: none;">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
        data-tips="${toolbar.textWrapMode}..." id="luckysheet-icon-textwrap-menu" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      textRotateMode: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block luckysheet-icon-rotation"
        data-tips="${toolbar.textRotate}" id="luckysheet-icon-rotation" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                            <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-none iconfont luckysheet-iconfont-wuxuanzhuang"
                            style="user-select: none;">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
        data-tips="${toolbar.textRotateMode}..." id="luckysheet-icon-rotation-menu" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      image: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
        data-tips="${toolbar.insertImage}" id="luckysheet-insertImg-btn-title" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                            <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-none iconfont luckysheet-iconfont-tupian"
                            style="user-select: none;">
                                <input id="luckysheet-imgUpload" type="file" accept="image/*" style="display:none;"></input>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      link: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
        data-tips="${toolbar.insertLink}" id="luckysheet-insertLink-btn-title" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                            <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-none iconfont luckysheet-iconfont-lianjie"
                            style="user-select: none;">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      chart: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
        data-tips="${toolbar.chart}" id="luckysheet-chart-btn-title" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                            <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-none iconfont luckysheet-iconfont-tubiao"
                            style="user-select: none;">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      postil: `<div class="luckysheet-toolbar-select luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="${toolbar.postil}"
        id="luckysheet-icon-postil" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon-img-container luckysheet-toolbar-menu-button-caption luckysheet-inline-block iconfont luckysheet-iconfont-zhushi"
                    style="user-select: none;">
                    </div>
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      pivotTable: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
        data-tips="${toolbar.pivotTable}" id="luckysheet-pivot-btn-title" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                            <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-none iconfont luckysheet-iconfont-shujutoushi"
                            style="user-select: none;">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      function: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block luckysheet-icon-function"
        data-tips="${toolbar.autoSum}" id="luckysheet-icon-function" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-function iconfont luckysheet-iconfont-jisuan"
                        style="user-select: none;">
                        </div>
                    </div>
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        ${toolbar.sum}
                    </div>
                </div>
            </div>
        </div>
        <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
        data-tips="${toolbar.moreFunction}..." id="luckysheet-icon-function-menu" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      frozenMode: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block luckysheet-freezen-btn-horizontal"
        data-tips="${toolbar.freezeTopRow}" id="luckysheet-freezen-btn-horizontal" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">

                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                            <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-none iconfont luckysheet-iconfont-dongjie1"
                            style="user-select: none;">
                            </div>
                        </div>
                    </div>

                </div>
            </div>
        </div>
        <div class="luckysheet-toolbar-button-split-right luckysheet-toolbar-menu-button luckysheet-inline-block"
        data-tips="${toolbar.moreOptions}..." id="luckysheet-icon-freezen-menu" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      sortAndFilter: `<div class="luckysheet-toolbar-select luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="${toolbar.sortAndFilter}"
        id="luckysheet-icon-autofilter" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-autofilter iconfont luckysheet-iconfont-shaixuan"
                        style="user-select: none;">
                        </div>
                    </div>
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;margin-left: 0px;margin-right: 4px;">
                    </div>
                </div>
            </div>
        </div>`,
      conditionalFormat: `<div class="luckysheet-toolbar-select luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="${toolbar.conditionalFormat}"
        id="luckysheet-icon-conditionformat" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">

                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-autofilter iconfont luckysheet-iconfont-geshitiaojian"
                        style="user-select: none;">
                        </div>
                    </div>
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;">
                    </div>
                </div>
            </div>
        </div>`,
      dataVerification: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
        data-tips="${toolbar.dataVerification}" id="luckysheet-dataVerification-btn-title" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                            <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-none iconfont luckysheet-iconfont-shujuyanzheng"
                            style="user-select: none;">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      splitColumn: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
        data-tips="${toolbar.splitColumn}" id="luckysheet-splitColumn-btn-title" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                            <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-none iconfont luckysheet-iconfont-wenbenfenge"
                            style="user-select: none;">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      screenshot: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
        data-tips="${toolbar.screenshot}" id="luckysheet-chart-btn-screenshot" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                            <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-none iconfont luckysheet-iconfont-jieping"
                            style="user-select: none;">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      findAndReplace: `<div class="luckysheet-toolbar-select luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="${toolbar.findAndReplace}"
        id="luckysheet-icon-seachmore" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">

                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-autofilter iconfont luckysheet-iconfont-sousuo"
                        style="user-select: none;">
                        </div>
                    </div>
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;margin-left: 0px;margin-right: 4px;">
                    </div>
                </div>
            </div>
        </div>`,
      protection: `<div class="luckysheet-toolbar-button-split-left luckysheet-toolbar-button luckysheet-inline-block"
        data-tips="${toolbar.protection}" id="luckysheet-icon-protection" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-menu-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                            <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-none iconfont luckysheet-iconfont-biaogesuoding"
                            style="user-select: none;">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>`,
      print: `<div class="luckysheet-toolbar-select luckysheet-toolbar-menu-button luckysheet-inline-block" data-tips="${toolbar.print}"
        id="luckysheet-icon-print" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-menu-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">

                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-autofilter iconfont luckysheet-iconfont-dayin"
                        style="user-select: none;">
                        </div>
                    </div>
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige"
                    style="user-select: none;margin-left: 0px;margin-right: 4px;">
                    </div>
                </div>
            </div>
        </div>`
    };
    const showtoolbar = luckysheetConfigsetting_default.showtoolbar;
    const showtoolbarConfig = luckysheetConfigsetting_default.showtoolbarConfig;
    const buttonHTML = ['<div class="luckysheet-toolbar-left-theme"></div>'];
    if (getObjType(showtoolbarConfig) === "array") {
      if (!showtoolbar) {
        return "";
      }
      let i2 = 0;
      showtoolbarConfig.forEach(function(key, i3) {
        if (key === "|") {
          const nameKeys = showtoolbarConfig[i3 - 1];
          if (nameKeys !== "|") {
            buttonHTML.push(`<div id="toolbar-separator-${camel2split(nameKeys)}" class="luckysheet-toolbar-separator luckysheet-inline-block" style="user-select: none;"></div>`);
          }
        } else {
          buttonHTML.push(htmlMap[key]);
        }
      });
      return buttonHTML.join("");
    }
    const config = defaultToolbar.reduce(function(total, curr) {
      if (curr !== "|") {
        total[curr] = true;
      }
      return total;
    }, {});
    if (!showtoolbar) {
      for (let s in config) {
        config[s] = false;
      }
    }
    if (JSON.stringify(showtoolbarConfig) !== "{}") {
      if (showtoolbarConfig.hasOwnProperty("undoRedo")) {
        config.undo = config.redo = showtoolbarConfig.undoRedo;
      }
      Object.assign(config, showtoolbarConfig);
    }
    for (let i2 = 0; i2 < defaultToolbar.length; i2++) {
      let key = defaultToolbar[i2];
      if (!config[key] && key !== "|") {
        if (defaultToolbar[i2 + 1] === "|") {
          i2++;
        }
        continue;
      }
      if (key === "|") {
        const nameKeys = defaultToolbar[i2 - 1];
        if (nameKeys !== "|") {
          buttonHTML.push(`<div id="toolbar-separator-${camel2split(nameKeys)}" class="luckysheet-toolbar-separator luckysheet-inline-block" style="user-select: none;"></div>`);
        }
      } else {
        buttonHTML.push(htmlMap[key]);
      }
    }
    return buttonHTML.join("");
  }
  var defaultToolbar, toolbarIdMap;
  var init_toolbar = __esm({
    "src/controllers/toolbar.js"() {
      init_locale();
      init_luckysheetConfigsetting();
      init_util();
      defaultToolbar = [
        "undo",
        "redo",
        "paintFormat",
        "|",
        "currencyFormat",
        "percentageFormat",
        "numberIncrease",
        "numberDecrease",
        "moreFormats",
        "|",
        "font",
        "|",
        "fontSize",
        "|",
        "bold",
        "italic",
        "strikethrough",
        "underline",
        "textColor",
        "|",
        "fillColor",
        "border",
        "mergeCell",
        "|",
        "horizontalAlignMode",
        "verticalAlignMode",
        "textWrapMode",
        "textRotateMode",
        "|",
        "image",
        "link",
        "chart",
        "postil",
        "pivotTable",
        "|",
        "function",
        "frozenMode",
        "sortAndFilter",
        "conditionalFormat",
        "dataVerification",
        "splitColumn",
        "screenshot",
        "findAndReplace",
        "protection",
        "print"
      ];
      toolbarIdMap = {
        undo: "#luckysheet-icon-undo",
        redo: "#luckysheet-icon-redo",
        paintFormat: ["#luckysheet-icon-paintformat"],
        currencyFormat: "#luckysheet-icon-currency",
        percentageFormat: "#luckysheet-icon-percent",
        numberDecrease: "#luckysheet-icon-fmt-decimal-decrease",
        numberIncrease: "#luckysheet-icon-fmt-decimal-increase",
        moreFormats: "#luckysheet-icon-fmt-other",
        font: "#luckysheet-icon-font-family",
        fontSize: "#luckysheet-icon-font-size",
        bold: "#luckysheet-icon-bold",
        italic: "#luckysheet-icon-italic",
        strikethrough: "#luckysheet-icon-strikethrough",
        underline: "#luckysheet-icon-underline",
        textColor: ["#luckysheet-icon-text-color", "#luckysheet-icon-text-color-menu"],
        fillColor: ["#luckysheet-icon-cell-color", "#luckysheet-icon-cell-color-menu"],
        border: ["#luckysheet-icon-border-all", "#luckysheet-icon-border-menu"],
        mergeCell: ["#luckysheet-icon-merge-button", "#luckysheet-icon-merge-menu"],
        horizontalAlignMode: ["#luckysheet-icon-align", "#luckysheet-icon-align-menu"],
        verticalAlignMode: ["#luckysheet-icon-valign", "#luckysheet-icon-valign-menu"],
        textWrapMode: ["#luckysheet-icon-textwrap", "#luckysheet-icon-textwrap-menu"],
        textRotateMode: ["#luckysheet-icon-rotation", "#luckysheet-icon-rotation-menu"],
        image: "#luckysheet-insertImg-btn-title",
        link: "#luckysheet-insertLink-btn-title",
        chart: "#luckysheet-chart-btn-title",
        postil: "#luckysheet-icon-postil",
        pivotTable: ["#luckysheet-pivot-btn-title"],
        function: ["#luckysheet-icon-function", "#luckysheet-icon-function-menu"],
        frozenMode: ["#luckysheet-freezen-btn-horizontal", "#luckysheet-icon-freezen-menu"],
        sortAndFilter: "#luckysheet-icon-autofilter",
        conditionalFormat: "#luckysheet-icon-conditionformat",
        dataVerification: "#luckysheet-dataVerification-btn-title",
        splitColumn: "#luckysheet-splitColumn-btn-title",
        screenshot: "#luckysheet-chart-btn-screenshot",
        findAndReplace: "#luckysheet-icon-seachmore",
        protection: "#luckysheet-icon-protection",
        print: "#luckysheet-icon-print"
      };
    }
  });

  // src/controllers/constant.js
  function rightclickHTML() {
    const _locale = locale_default();
    const rightclick = _locale.rightclick;
    const toolbar = _locale.toolbar;
    const config = customCellRightClickConfig();
    let handleincellMenuseparator = true;
    if (!config.insertRow && !config.insertColumn && !config.deleteRow && !config.deleteColumn && !config.deleteCell) {
      handleincellMenuseparator = false;
    }
    let dataMenuseparator = true;
    if (!config.clear && !config.matrix && !config.sort && !config.filter && !config.chart && !config.image && !config.link && !config.data && !config.cellFormat) {
      dataMenuseparator = false;
    }
    const customsButtons = (config.customs || []).map((item2, index2) => `
            <div data-index="${index2}" class="luckysheetColsRowsHandleAdd_custom luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                ${item2.title}
                </div>
            </div>`).join("");
    const rightclickContainer = `<div id="luckysheet-rightclick-menu" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-mousedown-cancel">
                <div id="luckysheet-copy-btn" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel luckysheet-copy-btn" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" style="display:${config.copy ? "block" : "none"};">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${rightclick.copy}</div>
                </div>
                <div id="luckysheetcopyfor" class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel"  style="display:${config.copyAs ? "block" : "none"};">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.copyAs}<span class="luckysheet-submenu-arrow iconfont luckysheet-iconfont-youjiantou" style="user-select: none;"></span>
                    </div>
                </div>
                <div id="luckysheet-copy-paste" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.paste ? "block" : "none"};">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${rightclick.paste}</div>
                </div>
                <div id="luckysheet-cols-rows-handleincell">
                    <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator" style="display:${handleincellMenuseparator ? "block" : "none"};"></div>
                    <div id="luckysheetColsRowsHandleAdd_row" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.insertRow ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                            ${rightclick.insert}${rightclick.row}<span class="luckysheet-submenu-arrow" style="user-select: none;"></span>
                        </div>
                    </div>
                    <div id="luckysheetColsRowsHandleAdd_column" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.insertColumn ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                            ${rightclick.insert}${rightclick.column}<span class="luckysheet-submenu-arrow" style="user-select: none;"></span>
                        </div>
                    </div>
                    <div id="luckysheet-delRows" class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel" style="display:${config.deleteRow ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.deleteSelected}${rightclick.row}<span class="luckysheet-submenu-arrow" style="user-select: none;"></span>
                        </div>
                    </div>
                    <div id="luckysheet-delCols" class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel" style="display:${config.deleteColumn ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.deleteSelected}${rightclick.column}<span class="luckysheet-submenu-arrow" style="user-select: none;"></span>
                        </div>
                    </div>
                    <!-- cell right click remove hide button
                    <div id="luckysheetColsRowsHandleHid" class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                            ${rightclick.hide}<span class="luckysheet-submenu-arrow iconfont luckysheet-iconfont-youjiantou" style="user-select: none;"></span>
                        </div>
                    </div>
                    -->
                    <div id="luckysheetCellsHandleDel" class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel" style="display:${config.deleteCell ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                            ${rightclick.deleteCell}<span class="luckysheet-submenu-arrow iconfont luckysheet-iconfont-youjiantou" style="user-select: none;"></span>
                        </div>
                    </div>
                </div>
                <div id="luckysheet-cols-rows-add">
                    <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div>
                    <div id="luckysheet-top-left-add-selected" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                            ${rightclick.to}
                            <span class="luckysheet-cols-rows-shift-left">${rightclick.left}</span>
                            ${rightclick.add}
                            <input type="text" class="luckysheet-mousedown-cancel" placeholder="${rightclick.number}" value="1" style="width:40px;height:20px;box-sizing:border-box;text-align:center;margin-left:5px;"/>
                            <span class="luckysheet-cols-rows-shift-word luckysheet-mousedown-cancel">${rightclick.column}</span>
                        </div>
                    </div>
                    <div id="luckysheet-bottom-right-add-selected" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                            ${rightclick.to}
                            <span class="luckysheet-cols-rows-shift-right">${rightclick.right}</span>
                            ${rightclick.add}
                            <input type="text" class="luckysheet-mousedown-cancel" placeholder="${rightclick.number}" value="1" style="width:40px;height:20px;box-sizing:border-box;text-align: center;margin-left:5px;"/>
                            <span class="luckysheet-cols-rows-shift-word luckysheet-mousedown-cancel">${rightclick.column}</span>
                        </div>
                    </div>
                    <div id="luckysheet-del-selected" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                            ${rightclick.deleteSelected}
                            <span class="luckysheet-cols-rows-shift-word luckysheet-mousedown-cancel">${rightclick.column}</span>
                        </div>
                    </div>
                    <div id="luckysheet-hide-selected" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.hideSelected}
                        <span class="luckysheet-cols-rows-shift-word luckysheet-mousedown-cancel">${rightclick.column}</span>
                        </div>
                    </div>
                    <div id="luckysheet-show-selected" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                            ${rightclick.showHide}
                            <span class="luckysheet-cols-rows-shift-word luckysheet-mousedown-cancel">${rightclick.column}</span>
                        </div>
                    </div>
                    <div id="luckysheet-column-row-width-selected" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                            <span class="luckysheet-cols-rows-shift-word luckysheet-mousedown-cancel">${rightclick.column}</span>
                            <span class="luckysheet-cols-rows-shift-size luckysheet-mousedown-cancel">${rightclick.width}</span>
                            <input type="number" class="luckysheet-mousedown-cancel rcsize" min="0" max="255" placeholder="${rightclick.number}" value="" style="width:50px;height:20px;box-sizing:border-box;text-align: center;margin-left:5px;">
                            px
                        </div>
                    </div>
                </div>
                <div id="luckysheet-cols-rows-shift">
                    <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator" style="display:${config.sort ? "block" : "none"};"></div>
                    <div id="luckysheetorderbyasc" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.sort ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${rightclick.orderAZ}</div>
                    </div>
                    <div id="luckysheetorderbydesc" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.sort ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${rightclick.orderZA}</div>
                    </div>
                </div>
                <div id="luckysheet-cols-rows-data">
                    <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator" style="display:${dataMenuseparator ? "block" : "none"};"></div>
                    <div id="luckysheet-delete-text" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.clear ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${rightclick.clearContent}</div>
                    </div>
                    <div id="luckysheetmatrix" class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel" style="display:${config.matrix ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                            ${rightclick.matrix}<span class="luckysheet-submenu-arrow iconfont luckysheet-iconfont-youjiantou" style="user-select: none;"></span>
                        </div>
                    </div>
                    <div id="luckysheetorderby" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.sort ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${rightclick.sortSelection}</div>
                    </div>
                    <div id="luckysheetfilter" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.filter ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${rightclick.filterSelection}</div>
                    </div>
                    <div id="luckysheetdatavisual" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.chart ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${rightclick.chartGeneration}</div>
                    </div>
                    <div id="luckysheetInsertImage" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.image ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${toolbar.insertImage}</div>
                    </div>
                    <div id="luckysheetInsertLink" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.link ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${toolbar.insertLink}</div>
                    </div>
                    <div id="luckysheetDataVerification" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.data ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${toolbar.dataVerification}</div>
                    </div>
                    <div id="luckysheetCellFormatRightClickMenu" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.cellFormat ? "block" : "none"};">
                        <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${toolbar.cellFormat}</div>
                    </div>
                    ${customsButtons}
                </div>
            </div>
            <div id="luckysheetcopyfor_sub" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel">
                <div id="luckysheet-copy-json-head" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">Json ${rightclick.firstLineTitle}</div>
                </div>
                <div id="luckysheet-copy-json-nohead" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">Json ${rightclick.untitled}</div>
                </div>
                <div id="luckysheet-copy-array1" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${rightclick.array1}</div>
                </div>
                <div id="luckysheet-copy-array2" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${rightclick.array2}</div>
                </div>
                <div id="luckysheet-copy-arraymore-confirm" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        <span class="luckysheet-mousedown-cancel">${rightclick.array3}</span>
                        <input type="number" id="luckysheet-copy-arraymore-row" min="1" class="luckysheet-mousedown-cancel" placeholder="${rightclick.row}" style="width:40px;height:20px;box-sizing:border-box;text-align: center;"/>
                            \xD7
                            <input type="number" id="luckysheet-copy-arraymore-col" min="1" class="luckysheet-mousedown-cancel" placeholder="${rightclick.column}" style="width:40px;height:20px;box-sizing:border-box;text-align: center;"/>
                    </div>
                </div>
                <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div>
                <div id="luckysheet-copy-diagonal" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${rightclick.diagonal}</div>
                </div>
                <div id="luckysheet-copy-antidiagonal" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${rightclick.antiDiagonal}</div>
                </div>
                <div id="luckysheet-copy-diagonaloffset" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.diagonalOffset}
                        <input type="number" id="luckysheet-copy-diagonaloffset-value" class="luckysheet-mousedown-cancel" placeholder="${rightclick.offset}" value="1" style="width:40px;height:20px;box-sizing:border-box;text-align: center;margin-left:5px;"/>
                        ${rightclick.column}
                    </div>
                </div>
                <div id="luckysheet-copy-boolvalue" data-clipboard-action="copy" data-clipboard-target="#luckysheet-copy-content" class="luckysheet-cols-menuitem luckysheet-copy-btn luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${rightclick.boolean}</div>
                </div>
            </div>
            
            <!-- Revision: modeled on google sheet
            
            <div id="luckysheetColsRowsHandleAdd_sub" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel">
                <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.to}${rightclick.top}${rightclick.add}
                        <input type="text" class="luckysheet-mousedown-cancel" placeholder="${rightclick.number}" value="1" style="width:40px;height:20px;box-sizing:border-box;text-align: center;margin-left:5px;"/>
                        <span class="luckysheet-mousedown-cancel">${rightclick.row}</span>
                    </div>
                </div>
                <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.to}${rightclick.bottom}${rightclick.add}
                        <input type="text" class="luckysheet-mousedown-cancel" placeholder="${rightclick.number}" value="1" style="width:40px;height:20px;box-sizing:border-box;text-align: center;margin-left:5px;"/>
                        <span class="luckysheet-mousedown-cancel">${rightclick.row}</span>
                    </div>
                </div>
                <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.to}${rightclick.left}${rightclick.add}
                        <input type="text" class="luckysheet-mousedown-cancel" placeholder="${rightclick.number}" value="1" style="width:40px;height:20px;box-sizing:border-box;text-align: center;margin-left:5px;"/>
                        <span class="luckysheet-mousedown-cancel">${rightclick.column}</span>
                    </div>
                </div>
                <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.to}${rightclick.right}${rightclick.add}
                        <input type="text" class="luckysheet-mousedown-cancel" placeholder="${rightclick.number}" value="1" style="width:40px;height:20px;box-sizing:border-box;text-align: center;margin-left:5px;"/>
                        <span class="luckysheet-mousedown-cancel">${rightclick.column}</span>
                    </div>
                </div>
            </div>
            
            -->

            <!-- delete row or column
            
            <div id="luckysheetColsRowsHandleDel_sub" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel">
                <div id="luckysheet-delRows" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.deleteSelected}${rightclick.row}
                    </div>
                </div>
                <div id="luckysheet-delCols" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.deleteSelected}${rightclick.column}
                    </div>
                </div>
            </div>
            
            -->

            <!--
            <div id="luckysheetColsRowsHandleHid_sub" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel">
                <div id="luckysheet-hidRows" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.hideSelected}${rightclick.row}
                    </div>
                </div>
                <div id="luckysheet-showHidRows" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.showHide}${rightclick.row}
                    </div>
                </div>
                <div id="luckysheet-hidCols" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.hideSelected}${rightclick.column}
                    </div>
                </div>
                <div id="luckysheet-showHidCols" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.showHide}${rightclick.column}
                    </div>
                </div>
            </div>

            -->

            <div id="luckysheetCellsHandleDel_sub" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel">
                <div id="luckysheet-delCellsMoveLeft" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.moveLeft}
                    </div>
                </div>
                <div id="luckysheet-delCellsMoveUp" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.moveUp}
                    </div>
                </div>
            </div>
            <div id="luckysheetmatrix_sub" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel">
                <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.flip}
                        <button id="luckysheet-matrix-turn-up" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">${rightclick.upAndDown}</button>
                        <button id="luckysheet-matrix-turn-left" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">${rightclick.leftAndRight}</button>
                    </div>
                </div>
                <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.flip}
                        <button id="luckysheet-matrix-turn-cw" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">${rightclick.clockwise}</button>
                        <button id="luckysheet-matrix-turn-anticw" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">${rightclick.counterclockwise}</button>
                    </div>
                </div>
                <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div id="luckysheet-matrix-turn-trans" class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${rightclick.transpose}</div>
                </div>
                <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div>
                <div id="luckysheet-matrix-cal-confirm" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        <div class="luckysheet-mousedown-cancel">${rightclick.matrixCalculation}</div>
                        <div class="luckysheet-mousedown-cancel">
                            <select id="luckysheet-matrix-cal-type" class="luckysheet-mousedown-cancel" style="height:20px;">
                                <option value="plus">${rightclick.plus}</option>
                                <option value="minus">${rightclick.minus}</option>
                                <option value="multiply">${rightclick.multiply}</option>
                                <option value="divided">${rightclick.divided}</option>
                                <option value="power">${rightclick.power}</option>
                                <option value="root">${rightclick.root}</option>
                                <option value="log">${rightclick.log}</option>
                            </select>
                            <input type="number" id="luckysheet-matrix-cal-value" class="luckysheet-mousedown-cancel" placeholder="${rightclick.number}" value="2" style="width:40px;height:20px;box-sizing:border-box;text-align: center;margin-left:5px;"/>
                        </div>
                    </div>
                </div>
                <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.delete0}
                        <button id="luckysheet-matrix-delezero-row" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">${rightclick.byRow}</button>
                        <button id="luckysheet-matrix-delezero-column" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">${rightclick.byCol}</button>
                    </div>
                </div>
                <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">
                        ${rightclick.removeDuplicate}
                        <button id="luckysheet-matrix-delerpt-row" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">${rightclick.byRow}</button>
                        <button id="luckysheet-matrix-delerpt-column" class="btn btn-primary luckysheet-mousedown-cancel" style="margin-left:5px;padding:2px 3px;line-height:12px;font-size:12px;">${rightclick.byCol}</button>
                    </div>
                </div>
            </div>`;
    return rightclickContainer;
  }
  function sheetconfigHTML() {
    const sheetconfig = locale_default().sheetconfig;
    const config = customSheetRightClickConfig();
    if (Object.values(config).every((ele) => !ele)) {
      $("#luckysheet-sheet-container-c").addClass("luckysheet-sheet-container-menu-hide");
      return "";
    }
    let hideTopMenuseparator = true;
    let moveTopMenuseparator = true;
    if (!config.delete && !config.copy && !config.rename && !config.color) {
      hideTopMenuseparator = false;
      if (!config.hide) {
        moveTopMenuseparator = false;
      }
    }
    if (!config.hide) {
      hideTopMenuseparator = false;
    }
    if (!config.move) {
      moveTopMenuseparator = false;
    }
    const sheetconfigModel = `<div id="luckysheet-rightclick-sheet-menu" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-mousedown-cancel"> 
                <div id="luckysheetsheetconfigdelete" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.delete ? "block" : "none"};"> 
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${sheetconfig.delete}</div>
                </div> 
                <div id="luckysheetsheetconfigcopy" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.copy ? "block" : "none"};"> 
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${sheetconfig.copy}</div> 
                </div> 
                <div id="luckysheetsheetconfigrename" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.rename ? "block" : "none"};"> 
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${sheetconfig.rename}</div> 
                </div> 
                <div id="luckysheetsheetconfigcolor" class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel" style="display:${config.color ? "block" : "none"};"> 
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> 
                        ${sheetconfig.changeColor} <span class="luckysheet-submenu-arrow iconfont luckysheet-iconfont-youjiantou" style="user-select: none;"></span> 
                    </div> 
                </div> 
                <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator" style="display:${hideTopMenuseparator ? "block" : "none"};"></div> 
                <div id="luckysheetsheetconfighide" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.hide ? "block" : "none"};"> 
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${sheetconfig.hide}</div> 
                </div> 
                <div id="luckysheetsheetconfigshow" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.hide ? "block" : "none"};"> 
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${sheetconfig.unhide}</div> 
                </div> 
                <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator" style="display:${moveTopMenuseparator ? "block" : "none"};"></div> 
                <div id="luckysheetsheetconfigmoveleft" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.move ? "block" : "none"};"> 
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${sheetconfig.moveLeft}</div> 
                </div> 
                <div id="luckysheetsheetconfigmoveright" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="display:${config.move ? "block" : "none"};"> 
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${sheetconfig.moveRight}</div> 
                </div> 
            </div> 
            <div id="luckysheetsheetconfigcolor_sub" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel">
                <div id="luckysheetsheetconfigcolorreset" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel">
                    <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${sheetconfig.resetColor}</div>
                </div> 
                <div class="luckysheet-mousedown-cancel"> 
                    <div class="luckysheet-mousedown-cancel"> 
                        <input type="text" id="luckysheetsheetconfigcolorur" /> 
                    </div> 
                </div> 
            </div>`;
    return sheetconfigModel;
  }
  function filtermenuHTML() {
    const _locale = locale_default();
    const locale_filter = _locale.filter;
    return `<div class="luckysheet-cols-menu luckysheet-mousedown-cancel luckysheet-filter-menu" id="luckysheet-\${menuid}-menu"><div id="luckysheet-\${menuid}-orderby-asc" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.sortByAsc}</div></div><div id="luckysheet-\${menuid}-orderby-desc" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"><div style="width:205px;" class="luckysheet-mousedown-cancel">${locale_filter.sortByDesc}</div></div></div> <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div><div id="luckysheet-\${menuid}-orderby-color" class="luckysheet-cols-menuitem luckysheet-cols-submenu luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel" style="position: relative;">${locale_filter.filterByColor}<span class="luckysheet-submenu-arrow iconfont luckysheet-iconfont-youjiantou" style="user-select: none;right: 0;"></span></div></div><div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" id="luckysheet-\${menuid}-bycondition" style="padding-top:0px;padding-bottom:0px;"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"><i class="fa fa-caret-right" aria-hidden="true"></i> ${locale_filter.filterByCondition}</div></div> <div class="luckysheet-\${menuid}-bycondition" style="display:none;"><div class="luckysheet-flat-menu-button luckysheet-mousedown-cancel" id="luckysheet-\${menuid}-selected"><span class="luckysheet-mousedown-cancel" data-value="null" data-type="0">${locale_filter.filiterInputNone}</span><div class="luckysheet-mousedown-cancel"><i class="fa fa-sort" aria-hidden="true"></i></div></div><div class="luckysheet-\${menuid}-selected-input"><input type="text" placeholder="${locale_filter.filiterInputTip}" class="luckysheet-mousedown-cancel" /></div><div class="luckysheet-\${menuid}-selected-input luckysheet-\${menuid}-selected-input2"><span>${locale_filter.filiterRangeStart}</span><input type="text" placeholder="${locale_filter.filiterRangeStartTip}" class="luckysheet-mousedown-cancel" /><span>${locale_filter.filiterRangeEnd}</span><input type="text" placeholder="${locale_filter.filiterRangeEndTip}" class="luckysheet-mousedown-cancel" /></div></div> <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" id="luckysheet-\${menuid}-byvalue" style="padding-top:0px;padding-bottom:0px;"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"><i class="fa fa-caret-right" aria-hidden="true"></i> ${locale_filter.filterByValues}</div></div> <div class="luckysheet-\${menuid}-byvalue"><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel luckysheet-mousedown-\${menuid}-byvalue-btn"><span id="luckysheet-\${menuid}-byvalue-btn-all" class="luckysheet-mousedown-cancel">${locale_filter.filterValueByAllBtn}</span> - <span id="luckysheet-\${menuid}-byvalue-btn-clear" class="luckysheet-mousedown-cancel">${locale_filter.filterValueByClearBtn}</span> - <span id="luckysheet-\${menuid}-byvalue-btn-contra" class="luckysheet-mousedown-cancel">${locale_filter.filterValueByInverseBtn}</span> <div><i class="fa fa-\${menuid} luckysheet-mousedown-cancel" aria-hidden="true"></i></div></div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="padding-left:3px; padding-right:3px;"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"><input type="text" placeholder="${locale_filter.filterValueByTip}" class="luckysheet-mousedown-cancel" id="luckysheet-\${menuid}-byvalue-input" /><div class="luckysheet-\${menuid}-byvalue-input-icon luckysheet-mousedown-cancel"><i class="fa fa-search luckysheet-mousedown-cancel" aria-hidden="true"></i></div></div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div id="luckysheet-\${menuid}-byvalue-select" class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"></div></div></div> <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"><div class="btn btn-primary luckysheet-mousedown-cancel" id="luckysheet-\${menuid}-confirm">${locale_filter.filterConform}</div> <div class="btn btn-default luckysheet-mousedown-cancel" id="luckysheet-\${menuid}-cancel">${locale_filter.filterCancel}</div> <div class="btn btn-danger luckysheet-mousedown-cancel" id="luckysheet-\${menuid}-initial">${locale_filter.clearFilter}</div></div></div> </div>`;
  }
  function filtersubmenuHTML() {
    const _locale = locale_default();
    const locale_filter = _locale.filter;
    return `<div style="z-index:1004;overflow-y:auto;" class="luckysheet-filter-submenu luckysheet-cols-menu luckysheet-mousedown-cancel" id="luckysheet-\${menuid}-submenu"><div data-value="null" data-type="0" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionNone}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="cellnull"  data-type="0"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellIsNull}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="cellnonull"  data-type="0"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellNotNull}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="textinclude"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellTextContain}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="textnotinclude"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellTextNotContain}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="textstart"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellTextStart}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="textend"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellTextEnd}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="textequal"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellTextEqual}</div></div>  <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div>  <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="dateequal"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellDateEqual}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="datelessthan"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellDateBefore}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="datemorethan"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellDateAfter}</div></div> <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="morethan"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellGreater}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="moreequalthan"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellGreaterEqual}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="lessthan"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellLess}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="lessequalthan"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellLessEqual}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="equal"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellEqual}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="noequal"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellNotEqual}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="include"  data-type="2"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellBetween}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-value="noinclude" data-type="2"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${locale_filter.conditionCellNotBetween}</div></div> </div>`;
  }
  function luckysheetAlternateformatHtml() {
    const _locale = locale_default();
    const alternatingColors = _locale.alternatingColors;
    const toolbar = _locale.toolbar;
    return '<div id="luckysheet-modal-dialog-slider-alternateformat" class="luckysheet-modal-dialog-slider luckysheet-modal-dialog-slider-alternateformat" style="display: block;"><div class="luckysheet-modal-dialog-slider-title"><span>' + toolbar.alternatingColors + '</span><span class="luckysheet-model-close-btn" title="' + alternatingColors.close + '"><i class="fa fa-times" aria-hidden="true"></i></span></div><div class="luckysheet-modal-dialog-slider-content"><div class="textTitle">' + alternatingColors.applyRange + '</div><div id="luckysheet-alternateformat-range"><input class="formulaInputFocus" placeholder="' + alternatingColors.selectRange + '"/><i class="fa fa-table" aria-hidden="true"></i></div><div id="luckysheet-alternateformat-checkbox"><div class="cf"><input type="checkbox" id="luckysheet-alternateformat-rowHeader"/><label for="luckysheet-alternateformat-rowHeader">' + alternatingColors.header + '</label></div><div class="cf"><input type="checkbox" id="luckysheet-alternateformat-rowFooter"/><label for="luckysheet-alternateformat-rowFooter">' + alternatingColors.footer + '</label></div></div><div class="textTitle">' + alternatingColors.textTitle + '</div><div id="luckysheet-alternateformat-modelList" class="cf"></div><div class="textTitle">' + alternatingColors.custom + '</div><div id="luckysheet-alternateformat-modelCustom" class="cf"></div><div id="luckysheet-alternateformat-modelToning"><div class="toningbox header"><div class="toningShow"> ' + alternatingColors.header + ' </div><div class="luckysheet-color-menu-button-indicator" title="' + alternatingColors.selectionTextColor + '" style="border-bottom-color: #000;margin-right: 10px;"> <div class="luckysheet-icon luckysheet-inline-block"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-text-color" style="user-select: none;"> </div> </div> </div><div class="luckysheet-color-menu-button-indicator" title="' + alternatingColors.selectionCellColor + '" style="border-bottom-color: #fff;"> <div class="luckysheet-icon luckysheet-inline-block"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-cell-color" style="user-select: none;"> </div> </div> </div></div><div class="toningbox ctOne"><div class="toningShow"> ' + alternatingColors.colorShow + '1 </div><div class="luckysheet-color-menu-button-indicator" title="' + alternatingColors.selectionTextColor + '" style="border-bottom-color: #000;margin-right: 10px;"> <div class="luckysheet-icon luckysheet-inline-block"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-text-color" style="user-select: none;"> </div> </div> </div><div class="luckysheet-color-menu-button-indicator" title="' + alternatingColors.selectionCellColor + '" style="border-bottom-color: #fff;"> <div class="luckysheet-icon luckysheet-inline-block"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-cell-color" style="user-select: none;"> </div> </div> </div></div><div class="toningbox ctTwo"><div class="toningShow"> ' + alternatingColors.colorShow + '2 </div><div class="luckysheet-color-menu-button-indicator" title="' + alternatingColors.selectionTextColor + '" style="border-bottom-color: #000;margin-right: 10px;"> <div class="luckysheet-icon luckysheet-inline-block"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-text-color" style="user-select: none;"> </div> </div> </div><div class="luckysheet-color-menu-button-indicator" title="' + alternatingColors.selectionCellColor + '" style="border-bottom-color: #fff;"> <div class="luckysheet-icon luckysheet-inline-block"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-cell-color" style="user-select: none;"> </div> </div> </div></div><div class="toningbox footer"><div class="toningShow"> ' + alternatingColors.footer + ' </div><div class="luckysheet-color-menu-button-indicator" title="' + alternatingColors.selectionTextColor + '" style="border-bottom-color: #000;margin-right: 10px;"> <div class="luckysheet-icon luckysheet-inline-block"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-text-color" style="user-select: none;"> </div> </div> </div><div class="luckysheet-color-menu-button-indicator" title="' + alternatingColors.selectionCellColor + '" style="border-bottom-color: #fff;"> <div class="luckysheet-icon luckysheet-inline-block"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-cell-color" style="user-select: none;"> </div> </div> </div></div></div><button id="luckysheet-alternateformat-remove" class="btn btn-default" style="margin: 10px;">' + alternatingColors.removeColor + "</button></div></div>";
  }
  function menuToolBar() {
    return createToolbarHtml();
  }
  function customLoadingConfig() {
    const _locale = locale_default();
    const info = _locale.info;
    const config = {
      enable: true,
      image: () => {
        return `<svg viewBox="25 25 50 50" class="circular">
            <circle cx="50" cy="50" r="20" fill="none"></circle>
            </svg>`;
      },
      text: info.loading,
      viewBox: "32 32 64 64",
      imageClass: "",
      textClass: "",
      customClass: ""
    };
    if (JSON.stringify(luckysheetConfigsetting_default.loading) !== "{}") {
      Object.assign(config, luckysheetConfigsetting_default.loading);
    }
    return config;
  }
  function customCellRightClickConfig() {
    const config = {
      copy: true,
      copyAs: true,
      paste: true,
      insertRow: true,
      insertColumn: true,
      deleteRow: true,
      deleteColumn: true,
      deleteCell: true,
      hideRow: true,
      hideColumn: true,
      rowHeight: true,
      columnWidth: true,
      clear: true,
      matrix: true,
      sort: true,
      filter: true,
      chart: true,
      image: true,
      link: true,
      data: true,
      cellFormat: true
    };
    if (JSON.stringify(luckysheetConfigsetting_default.cellRightClickConfig) !== "{}") {
      Object.assign(config, luckysheetConfigsetting_default.cellRightClickConfig);
    }
    luckysheetConfigsetting_default.cellRightClickConfig = config;
    return config;
  }
  function customSheetRightClickConfig() {
    const config = {
      delete: true,
      copy: true,
      rename: true,
      color: true,
      hide: true,
      move: true
    };
    if (JSON.stringify(luckysheetConfigsetting_default.sheetRightClickConfig) !== "{}") {
      Object.assign(config, luckysheetConfigsetting_default.sheetRightClickConfig);
    }
    luckysheetConfigsetting_default.sheetRightClickConfig = config;
    return config;
  }
  var gridHTML, flow, colsmenuHTML, pivottableconfigHTML, pivottablesumHTML, sheetHTML, columnHeaderHTML, sheetselectlistHTML, sheetselectlistitemHTML, inputHTML, modelHTML, maskHTML, luckysheetPivotTableHTML, luckysheetchartpointconfigHTML, luckysheetToolHTML, luckysheetloadingImage, luckysheetlodingHTML, luckyColor, keycode, luckysheetdefaultstyle, luckysheetdefaultFont, luckysheet_CFiconsImg, iconfontObjects;
  var init_constant = __esm({
    "src/controllers/constant.js"() {
      init_locale();
      init_store();
      init_luckysheetConfigsetting();
      init_util();
      init_toolbar();
      gridHTML = function() {
        const _locale = locale_default();
        const locale_info = _locale.info;
        const locale_print = _locale.print;
        const userInfo = luckysheetConfigsetting_default.userInfo === true ? '<i style="font-size:16px;color:#ff6a00;" class="fa fa-taxi" aria-hidden="true"></i> Lucky' : luckysheetConfigsetting_default.userInfo;
        return `<div class="luckysheet">
                    <canvas id="luckysheetTableContentF" style="display:none;" class="luckysheetTableContent"></canvas> 
                    <div class="luckysheet-work-area luckysheet-noselected-text"> 
                        <div id ="luckysheet_info_detail" class="luckysheet_info_detail"> 
                            <div data-tips="${locale_info.return}" id="luckysheet_info_detail_title" class="luckysheet_info_detail_back"> 
                                <i style="color:#444D5A;" class="fa fa-angle-left fa-2x" aria-hidden="true"></i> 
                            </div> 
                            <div class="luckysheet-share-logo" title="\${logotitle}"></div>
                            <div class="sheet-name"> 
                                <input data-tips="${locale_info.tips}" id="luckysheet_info_detail_input" class="luckysheet_info_detail_input luckysheet-mousedown-cancel" value="${locale_info.noName}" tabindex="0" dir="ltr" aria-label="${locale_info.rename}" style="visibility: visible; width: 149px;" data-tooltip="${locale_info.rename}"> 
                            </div> 
                            <div id="luckysheet_info_detail_update" class="luckysheet_info_detail_update"> ${locale_info.detailUpdate} </div> 
                            <div id="luckysheet_info_detail_save" class="luckysheet_info_detail_save"> ${locale_info.wait} </div>
                            
                            \${functionButton}
                            
                            ${getObjType(userInfo) === "string" ? `<div class="luckysheet_info_detail_user">
                            <span id="luckysheet_info_detail_user">${userInfo}</span></div>` : ""}

                            ${getObjType(userInfo) === "object" ? `<div class="luckysheet_info_detail_user">                            
                            <img src="${userInfo.userImage}" id="luckysheet_info_detail_user_img">
                            <span id="luckysheet_info_detail_user">${userInfo.userName}</span>
                            </div>` : ""}
                            
                        </div> 
                        <div id="luckysheet-wa-editor" class="luckysheet-wa-editor toolbar"> \${menu} </div> 
                        <div id="luckysheet-wa-calculate" class="luckysheet-wa-calculate"> 
                            <div class="luckysheet-wa-calculate-size" id="luckysheet-wa-calculate-size"></div> 
                            <div class="luckysheet-wa-calculate-help"> 
                                <div class="luckysheet-wa-calculate-help-box"> 
                                    <div spellcheck="false" aria-hidden="false" id="luckysheet-helpbox">
                                        <div id="luckysheet-helpbox-cell" class="luckysheet-helpbox-cell-input luckysheet-mousedown-cancel" tabindex="0" contenteditable="true" dir="ltr" aria-autocomplete="list"></div>
                                    </div> 
                                </div>  
                                <div class="luckysheet-wa-calculate-help-tool">
                                    <i class="fa fa-caret-down" aria-hidden="true"></i>
                                </div> 
                            </div> 
                            <div id="luckysheet-wa-functionbox-cancel" class="luckysheet-wa-functionbox">
                                <span><i class="iconfont luckysheet-iconfont-qingchu" aria-hidden="true"></i></span>
                            </div> 
                            <div id="luckysheet-wa-functionbox-confirm" class="luckysheet-wa-functionbox">
                                <span><i class="iconfont luckysheet-iconfont-yunhang" aria-hidden="true"></i></span>
                            </div> 
                            <div id="luckysheet-wa-functionbox-fx" class="luckysheet-wa-functionbox">
                                <span><i class="iconfont luckysheet-iconfont-hanshu" aria-hidden="true" style="color:#333"></i></span> 
                            </div> 
                            <div id="luckysheet-functionbox-container" class="luckysheet-mousedown-cancel">
                                <div class="luckysheet-mousedown-cancel" dir="ltr">
                                    <div spellcheck="false" aria-hidden="false" id="luckysheet-functionbox">
                                        <div id="luckysheet-functionbox-cell" class="luckysheet-functionbox-cell-input luckysheet-mousedown-cancel" tabindex="0" contenteditable="true" dir="ltr" aria-autocomplete="list" aria-label="D4"></div>
                                    </div>
                                </div>
                            </div>   
                        </div> 
                    </div> 
                    <div class="luckysheet-grid-container luckysheet-scrollbars-enabled"> 
                        <div class="luckysheet-grid-window"> 
                            <div class="luckysheet-help-sub"></div> 
                            <div class="luckysheet-grid-window-1" id="luckysheet-grid-window-1">
                                <canvas id="luckysheetTableContent" class="luckysheetTableContent"></canvas> 
                                <table class="luckysheet-grid-window-2" cellspacing="0" cellpadding="0" dir="ltr" tabindex="-1" > 
                                    <tbody> 
                                        <tr> 
                                            <td valign="top" class="luckysheet-paneswrapper"> 
                                                <div class="luckysheet-left-top" id="luckysheet-left-top"> </div> 
                                            </td> 
                                            <td valign="top" class="luckysheet-paneswrapper"> 
                                                <div id="luckysheet-cols-h-c" class="luckysheet-cols-h-c">
                                                    <div class="luckysheet-cols-change-size" id="luckysheet-cols-change-size"></div>  
                                                    <div class="luckysheet-cols-menu-btn luckysheet-mousedown-cancel" id="luckysheet-cols-menu-btn"><i class="fa fa-caret-down luckysheet-mousedown-cancel" aria-hidden="true"></i></div>  
                                                    <div class="luckysheet-cols-h-hover" id="luckysheet-cols-h-hover"></div>  
                                                    <div id="luckysheet-cols-h-selected"></div>  
                                                    <div class="luckysheet-grdusedrange"></div>  
                                                    <div class="luckysheet-grdblkflowpush"></div>  \${columnHeader}
                                                </div>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td valign="top" class="luckysheet-paneswrapper"> 
                                                <div class="luckysheet-rows-h" id="luckysheet-rows-h"> 
                                                    <div class="luckysheet-rows-change-size" id="luckysheet-rows-change-size"></div> 
                                                    <div class="luckysheet-rows-h-hover" id="luckysheet-rows-h-hover"></div> 
                                                    <div id="luckysheet-rows-h-selected"></div>  
                                                    <div class="luckysheet-grdusedrange"></div>  
                                                    <div class="luckysheet-grdblkflowpush"></div> \${rowHeader}
                                                </div> 
                                            </td>  
                                            <td valign="top" class="luckysheet-paneswrapper">
                                                <div class="luckysheet-cell-loading" id="luckysheet-cell-loading">
                                                    <div class="luckysheet-cell-loading-inner">
                                                        <i class="fa fa-circle-o-notch fa-spin"></i>
                                                        <span></span>
                                                    </div>
                                                </div> 
                                                <div class="luckysheet-cell-freezen"></div> 
                                                <div class="luckysheet-scrollbars luckysheet-scrollbar-ltr luckysheet-scrollbar-x" id="luckysheet-scrollbar-x"><div></div></div> 
                                                <div class="luckysheet-scrollbars luckysheet-scrollbar-ltr luckysheet-scrollbar-y" id="luckysheet-scrollbar-y"><div></div></div> 
                                                <div class="luckysheet-cell-main " id="luckysheet-cell-main">
                                                    <div id="luckysheet-formula-functionrange"></div>  
                                                    <div id="luckysheet-formula-functionrange-select" class="luckysheet-selection-copy luckysheet-formula-functionrange-select">
                                                        <div class="luckysheet-selection-copy-top luckysheet-copy"></div>
                                                        <div class="luckysheet-selection-copy-right luckysheet-copy"></div>
                                                        <div class="luckysheet-selection-copy-bottom luckysheet-copy"></div>
                                                        <div class="luckysheet-selection-copy-left luckysheet-copy"></div>
                                                        <div class="luckysheet-selection-copy-hc"></div>
                                                    </div>  
                                                    <div class="luckysheet-row-count-show luckysheet-count-show" id="luckysheet-row-count-show"></div>
                                                    <div class="luckysheet-column-count-show luckysheet-count-show" id="luckysheet-column-count-show"></div>
                                                    <div class="luckysheet-change-size-line" id="luckysheet-change-size-line"></div>  
                                                    <div class="luckysheet-cell-selected-focus" id="luckysheet-cell-selected-focus"></div>  
                                                    <div id="luckysheet-selection-copy"></div>  
                                                    <div id="luckysheet-chart-rangeShow"></div>
                                                    <div class="luckysheet-cell-selected-extend" id="luckysheet-cell-selected-extend"></div>  
                                                    <div class="luckysheet-cell-selected-move" id="luckysheet-cell-selected-move"></div>  
                                                    <div id="luckysheet-cell-selected-boxs">
                                                        <div id="luckysheet-cell-selected" class="luckysheet-cell-selected">
                                                            <div class="luckysheet-cs-inner-border"></div>
                                                            <div class="luckysheet-cs-fillhandle"></div>
                                                            <div class="luckysheet-cs-inner-border"></div>
                                                            <div class="luckysheet-cs-draghandle-top luckysheet-cs-draghandle"></div>
                                                            <div class="luckysheet-cs-draghandle-bottom luckysheet-cs-draghandle"></div>
                                                            <div class="luckysheet-cs-draghandle-left luckysheet-cs-draghandle"></div>
                                                            <div class="luckysheet-cs-draghandle-right luckysheet-cs-draghandle"></div>
                                                            <div class="luckysheet-cs-touchhandle luckysheet-cs-touchhandle-lt"><div class="luckysheet-cs-touchhandle-btn"></div></div>
                                                            <div class="luckysheet-cs-touchhandle luckysheet-cs-touchhandle-rb"><div class="luckysheet-cs-touchhandle-btn"></div></div>
                                                        </div>
                                                    </div>
                                                    <div id="luckysheet-postil-showBoxs"></div>
                                                    <div id="luckysheet-multipleRange-show"></div>  
                                                    <div id="luckysheet-dynamicArray-hightShow"></div>  
                                                    <div id="luckysheet-image-showBoxs">
                                                        <div id="luckysheet-modal-dialog-activeImage" class="luckysheet-modal-dialog" style="display:none;padding:0;position:absolute;z-index:300;">
                                                            <div class="luckysheet-modal-dialog-border" style="position:absolute;"></div> 
                                                            <div class="luckysheet-modal-dialog-content"></div>  
                                                            <div class="luckysheet-modal-dialog-resize">
                                                                <div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-lt" data-type="lt"></div>
                                                                <div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-mt" data-type="mt"></div>
                                                                <div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-lm" data-type="lm"></div>
                                                                <div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-rm" data-type="rm"></div>
                                                                <div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-rt" data-type="rt"></div>
                                                                <div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-lb" data-type="lb"></div>
                                                                <div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-mb" data-type="mb"></div>
                                                                <div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-rb" data-type="rb"></div>
                                                            </div>
                                                            <div class="luckysheet-modal-dialog-controll">
                                                                <span class="luckysheet-modal-controll-btn luckysheet-modal-controll-crop" role="button" tabindex="0" aria-label="\u88C1\u526A" title="\u88C1\u526A">
                                                                    <i class="fa fa-pencil" aria-hidden="true"></i>
                                                                </span>
                                                                <span class="luckysheet-modal-controll-btn luckysheet-modal-controll-restore" role="button" tabindex="0" aria-label="\u6062\u590D\u539F\u56FE" title="\u6062\u590D\u539F\u56FE">
                                                                    <i class="fa fa-window-maximize" aria-hidden="true"></i>
                                                                </span>
                                                                <span class="luckysheet-modal-controll-btn luckysheet-modal-controll-del" role="button" tabindex="0" aria-label="\u5220\u9664" title="\u5220\u9664">
                                                                    <i class="fa fa-trash" aria-hidden="true"></i>
                                                                </span>
                                                            </div>
                                                        </div>
                                                        <div id="luckysheet-modal-dialog-cropping" class="luckysheet-modal-dialog" style="display:none;padding:0;position:absolute;z-index:300;">
                                                            <div class="cropping-mask"></div>
                                                            <div class="cropping-content"></div>
                                                            <div class="luckysheet-modal-dialog-border" style="position:absolute;"></div>
                                                            <div class="luckysheet-modal-dialog-resize">
                                                                <div class="resize-item lt" data-type="lt"></div> 
                                                                <div class="resize-item mt" data-type="mt"></div> 
                                                                <div class="resize-item lm" data-type="lm"></div> 
                                                                <div class="resize-item rm" data-type="rm"></div> 
                                                                <div class="resize-item rt" data-type="rt"></div> 
                                                                <div class="resize-item lb" data-type="lb"></div> 
                                                                <div class="resize-item mb" data-type="mb"></div> 
                                                                <div class="resize-item rb" data-type="rb"></div>
                                                            </div>
                                                            <div class="luckysheet-modal-dialog-controll">
                                                                <span class="luckysheet-modal-controll-btn luckysheet-modal-controll-crop" role="button" tabindex="0" aria-label="\u88C1\u526A" title="\u88C1\u526A">
                                                                    <i class="fa fa-pencil" aria-hidden="true"></i>
                                                                </span>
                                                                <span class="luckysheet-modal-controll-btn luckysheet-modal-controll-restore" role="button" tabindex="0" aria-label="\u6062\u590D\u539F\u56FE" title="\u6062\u590D\u539F\u56FE">
                                                                    <i class="fa fa-window-maximize" aria-hidden="true"></i>
                                                                </span>
                                                                <span class="luckysheet-modal-controll-btn luckysheet-modal-controll-del" role="button" tabindex="0" aria-label="\u5220\u9664" title="\u5220\u9664">
                                                                    <i class="fa fa-trash" aria-hidden="true"></i>
                                                                </span>
                                                            </div>
                                                        </div>
                                                        <div class="img-list"></div>
                                                        <div class="cell-date-picker">
                                                            <input id="cellDatePickerBtn" class="formulaInputFocus" readonly="readonly"/>
                                                        </div>
                                                    </div>
                                                    <div id="luckysheet-dataVerification-dropdown-btn"></div>
                                                    <div id="luckysheet-dataVerification-dropdown-List" class="luckysheet-mousedown-cancel"></div>
                                                    <div id="luckysheet-dataVerification-showHintBox" class="luckysheet-mousedown-cancel"></div>
                                                    <div class="luckysheet-cell-copy"></div>  
                                                    <div class="luckysheet-grdblkflowpush"></div>  \${flow} 
                                                </div> 
                                            </td> 
                                        </tr> 
                                    </tbody> 
                                </table> 
                            </div> 
                            <div class="luckysheet-sheet-area luckysheet-noselected-text" id="luckysheet-sheet-area">
                                <div id="luckysheet-sheet-content">
                                    <div id="luckysheet-sheets-add" class="luckysheet-sheets-add lucky-button-custom"><i class="iconfont luckysheet-iconfont-jia1"></i></div>
                                    <div id="luckysheet-sheets-m" class="luckysheet-sheets-m lucky-button-custom"><i class="iconfont luckysheet-iconfont-caidan2"></i></div>
                                    <div class="luckysheet-sheet-container" id="luckysheet-sheet-container">
                                        <div class="docs-sheet-fade docs-sheet-fade-left" style="display: none;">
                                            <div class="docs-sheet-fade3"></div>
                                            <div class="docs-sheet-fade2"></div>
                                            <div class="docs-sheet-fade1"></div>
                                        </div>
                                        <div class="docs-sheet-fade docs-sheet-fade-right" style="display: none;">
                                            <div class="docs-sheet-fade1"></div>
                                            <div class="docs-sheet-fade2"></div>
                                            <div class="docs-sheet-fade3"></div>
                                        </div>
                                        <div class="luckysheet-sheet-container-c" id="luckysheet-sheet-container-c"></div>
                                    </div>
                                    <div id="luckysheet-sheets-leftscroll" class="luckysheet-sheets-scroll lucky-button-custom"><i class="fa fa-caret-left"></i></div>
                                    <div id="luckysheet-sheets-rightscroll" class="luckysheet-sheets-scroll lucky-button-custom"><i class="fa fa-caret-right"></i></div>
                                </div>
                            </div> 
                        </div> 
                        <div class="luckysheet-stat-area"> 
                            <div class="luckysheet-sta-c">
                                <div class="luckysheet-zoom-content" id="luckysheet-zoom-content">
                                    <div class="luckysheet-zoom-minus" id="luckysheet-zoom-minus">
                                        <div class="luckysheet-zoom-minus-icon"></div>
                                    </div>
                                    <div class="luckysheet-zoom-slider" id="luckysheet-zoom-slider">
                                        <div class="luckysheet-zoom-line"></div>
                                        <div class="luckysheet-zoom-cursor" id="luckysheet-zoom-cursor"></div>
                                        <div class="luckysheet-zoom-hundred"></div>
                                    </div>
                                    <div class="luckysheet-zoom-plus" id="luckysheet-zoom-plus">
                                        <div class="luckysheet-zoom-plus-icon"></div>
                                    </div>
                                    <div class="luckysheet-zoom-ratioText" id="luckysheet-zoom-ratioText">100%</div>
                                </div>
                                <div class="luckysheet-print-viewList">
                                    <div type="viewNormal" class="luckysheet-print-viewBtn luckysheet-print-viewNormal luckysheet-print-viewBtn-active" title="${locale_print.normalBtn}"><i class="icon iconfont luckysheet-iconfont-putong"></i></div>
                                    <div type="viewLayout" class="luckysheet-print-viewBtn luckysheet-print-viewLayout" title="${locale_print.layoutBtn}"><i class="icon iconfont luckysheet-iconfont-yemianbuju"></i></div>
                                    <div type="viewPage" class="luckysheet-print-viewBtn luckysheet-print-viewPage" title="${locale_print.pageBtn}"><i class="icon iconfont luckysheet-iconfont-fenyeyulan"></i></div>
                                </div>
                                <div class="luckysheet-sta-content" id="luckysheet-sta-content"></div>  
                                <!--<div class="luckysheet-bottom-content" id="luckysheet-bottom-content-show"></div> -->
                            </div> 
                        </div> 
                    </div>
                    <div id="luckysheet-copy-content" contenteditable="true"></div>
                    <input id="luckysheet-copy-btn" type="button" data-clipboard-target="luckysheet-copy-content">
                    <div id="testdpidiv" style="height: 1in; left: -100%; position: absolute; top: -100%; width: 1in;"></div>
                  </div>`;
      };
      flow = '<div id="luckysheet-cell-flow_${index}" class="luckysheet-cell-flow luckysheetsheetchange" style="width:${width}px;"><div class="luckysheet-cell-flow-clip"><div class="luckysheet-grdblkpush"></div>${flow}</div></div>';
      colsmenuHTML = "";
      pivottableconfigHTML = function() {
        const _locale = locale_default();
        const locale_pivotTable = _locale.pivotTable;
        return '<div class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-mousedown-cancel" id="luckysheet-pivotTable-config-option"> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <div class="luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.titleSort + '</span> <select class="luckysheet-mousedown-cancel" style="height:24px;" id="luckysheet-pivotTable-config-option-order"> <option selected="selected" value="default">' + locale_pivotTable.titleNoSort + '</option> <option value="asc">' + locale_pivotTable.titleSortAsc + '</option> <option value="desc">' + locale_pivotTable.titleSortDesc + '</option> </select> </div> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <div class="luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.titleSortBy + '</span> <select class="luckysheet-mousedown-cancel" style="height:24px;" id="luckysheet-pivotTable-config-option-orderby"> </select> </div> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <div class="luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.titleShowSum + '</span> <select class="luckysheet-mousedown-cancel" style="height:24px;" id="luckysheet-pivotTable-config-option-stastic"> <option  value="0">' + locale_pivotTable.titleStasticFalse + '</option> <option value="1" selected="selected">' + locale_pivotTable.titleStasticTrue + "</option> </select> </div> </div> </div> </div>";
      };
      pivottablesumHTML = function() {
        const _locale = locale_default();
        const locale_pivotTable = _locale.pivotTable;
        return '<div class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-mousedown-cancel" id="luckysheet-pivotTable-config-option-sumtype"> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="SUM"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.valueStatisticsSUM + '</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="COUNT"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.valueStatisticsCOUNT + '</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="COUNTA"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.valueStatisticsCOUNTA + '</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="COUNTUNIQUE"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.valueStatisticsCOUNTUNIQUE + '</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="AVERAGE"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.valueStatisticsAVERAGE + '</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="MAX"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.valueStatisticsMAX + '</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="MIN"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.valueStatisticsMIN + '</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="MEDIAN"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.valueStatisticsMEDIAN + '</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="PRODUCT"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.valueStatisticsPRODUCT + '</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="STDEV"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.valueStatisticsSTDEV + '</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="STDEVP"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.valueStatisticsSTDEVP + '</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="VAR"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.valueStatisticslet + '</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> <div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" sumtype="VARP"> <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> <span class="luckysheet-mousedown-cancel">' + locale_pivotTable.valueStatisticsVARP + '</span> <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel" style="user-select: none;"><i class="fa fa-check luckysheet-mousedown-cancel" aria-hidden="true"></i></span> </div> </div> </div>';
      };
      sheetHTML = '<div style="${style}" id="luckysheet-sheets-item${index}" data-index="${index}" class="luckysheet-sheets-item ${active}"><span class="luckysheet-sheets-item-name" spellcheck ="false" contenteditable="false">${name}</span> <span class="luckysheet-sheets-item-menu luckysheet-mousedown-cancel"><i class="fa fa-sort-desc luckysheet-mousedown-cancel"></i></span>${colorset}</div>';
      columnHeaderHTML = '<div class="luckysheet-cols-h-cells luckysheetsheetchange"  id="luckysheet-cols-h-cells_${index}" style="width:${width}px;"> <div class="luckysheet-cols-h-cells-c"> <div class="luckysheet-grdblkpush"></div>${column}</div></div>';
      sheetselectlistHTML = '<div class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-mousedown-cancel" id="luckysheet-sheet-list">${item}</div>';
      sheetselectlistitemHTML = '<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"  id="luckysheet-sheet-btn${index}" data-index="${index}"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel" style="${style}" ><span class="icon luckysheet-mousedown-cancel">${icon}</span>${name}</div></div>';
      inputHTML = '<div dir="ltr"><div class="luckysheet-input-box-index" id="luckysheet-input-box-index"></div><div id="luckysheet-input-box" spellcheck="false" aria-hidden="false" class="luckysheet-input-box"><div class="luckysheet-cell-input editable" tabindex="0" role="combobox" contenteditable="true" id="luckysheet-rich-text-editor" dir="ltr" g_editable="true" aria-autocomplete="list"></div></div></div>';
      modelHTML = '<div id="${id}" style="${style}" class="luckysheet-modal-dialog ${addclass}" tabindex="0" role="dialog" aria-labelledby=":41e" dir="ltr"> <div class="luckysheet-modal-dialog-title luckysheet-modal-dialog-title-draggable"> <span class="luckysheet-modal-dialog-title-text" role="heading">${title}</span>	 <span class="luckysheet-modal-dialog-title-close" role="button" tabindex="0" aria-label="${close}"><i class="fa fa-times" aria-hidden="true"></i></span> </div> <div class="luckysheet-modal-dialog-content">${content}</div> <div class="luckysheet-modal-dialog-buttons">	 ${botton} </div></div>';
      maskHTML = '<div class="luckysheet-modal-dialog-mask" id="luckysheet-modal-dialog-mask"></div>';
      luckysheetPivotTableHTML = function() {
        const _locale = locale_default();
        const locale_pivotTable = _locale.pivotTable;
        return `
        <div id="luckysheet-modal-dialog-slider-pivot" class="luckysheet-modal-dialog-slider luckysheet-modal-dialog-slider-pivot">
        <div class="luckysheet-modal-dialog-slider-title"> <span>${locale_pivotTable.title}</span> <span id="luckysheet-modal-dialog-slider-close" title="${locale_pivotTable.closePannel}"><i class="fa fa-times" aria-hidden="true"></i></span> </div>
        <div class="luckysheet-modal-dialog-slider-content">
            <div class="luckysheet-modal-dialog-slider-range">
                <div id="luckysheet-dialog-pivotTable-range"></div>
                <div id="luckysheet-dialog-pivotTable-range-seleted">${locale_pivotTable.editRange}</div>
            </div>
            <div class="luckysheet-modal-dialog-slider-list-title"> ${locale_pivotTable.tipPivotFieldSelected} <span title="${locale_pivotTable.tipClearSelectedField}" id="luckysheet-dialog-pivotTable-clearitem">${locale_pivotTable.btnClearSelectedField}</span></div>
            <div id="luckysheet-modal-dialog-pivotTable-list" class="luckysheet-modal-dialog-slider-list luckysheet-scrollbars"> </div>
            <div class="luckysheet-modal-dialog-slider-config-c">
                <div class="luckysheet-modal-dialog-slider-config luckysheet-modal-dialog-config-filter">
                    <div> <span><i class="fa fa-filter luckysheet-mousedown-cancel" aria-hidden="true"></i> ${locale_pivotTable.btnFilter}</span> </div>
                    <div id="luckysheet-modal-dialog-config-filter" class="luckysheet-modal-dialog-slider-config-list luckysheet-scrollbars"> </div>
                </div>
                <div class="luckysheet-modal-dialog-slider-config luckysheet-modal-dialog-config-row">
                    <div> <span><i class="fa fa-list-alt" aria-hidden="true"></i> ${locale_pivotTable.titleRow}</span> </div>
                    <div id="luckysheet-modal-dialog-config-row" class="luckysheet-modal-dialog-slider-config-list luckysheet-scrollbars"> </div>
                </div>
                <div class="luckysheet-modal-dialog-slider-config luckysheet-modal-dialog-config-column">
                    <div> <span><i class="fa fa-indent" aria-hidden="true"></i> ${locale_pivotTable.titleColumn}</span> </div>
                    <div id="luckysheet-modal-dialog-config-column" class="luckysheet-modal-dialog-slider-config-list luckysheet-scrollbars"> </div>
                </div>
                <div class="luckysheet-modal-dialog-slider-config luckysheet-modal-dialog-config-value">
                    <div> <span><i class="fa fa-cube" aria-hidden="true"></i> ${locale_pivotTable.titleValue}</span> <span style="float: right;margin-right: 10px;display:none;" id="luckysheetpivottablevaluecolrowshow"><label style="padding:0px 5px;margin:0px;font-size:12px;height:15px;line-height:15px;" title="${locale_pivotTable.tipShowColumn}" for="luckysheetpivottablevaluecolrow">${locale_pivotTable.titleColumn}</label> <input type="radio" checked="checked" value="1" name="luckysheetpivottablevaluecolrow" id="luckysheetpivottablevaluecolrow" /> <label style="padding:0px 5px;margin:0px;font-size:12px;height:15px;line-height:15px;" title="${locale_pivotTable.tipShowRow}" for="luckysheetpivottablevaluecolrow1">${locale_pivotTable.titleRow}</label> <input type="radio" value="0" name="luckysheetpivottablevaluecolrow" id="luckysheetpivottablevaluecolrow1" /></span></div>
                    <div id="luckysheet-modal-dialog-config-value" class="luckysheet-modal-dialog-slider-config-list luckysheet-scrollbars"> </div>
                </div>
            </div>
        </div>
        </div>
        `;
      };
      luckysheetchartpointconfigHTML = '<div class="luckysheet-chart-point-config"> <div class="luckysheet-chart-point-config-set"> <div class="luckysheet-chart-point-config-left"> <div class="luckysheet-chart-point-config-left-top"> <div class="luckysheet-chart-point-searchcondition"> <div class="luckysheet-datavisual-content-row" style="margin-bottom: 0px;margin-top: 0px;height: 30px;"> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-title luckysheet-datavisual-content-column-2x" style="width:10%;white-space:nowrap;">\u9009\u62E9\u7EF4\u5EA6</div> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-right luckysheet-datavisual-content-column-2x" style="width:80%;"> <select data-tips="\u7EF4\u5EA6\u9009\u62E9" name="luckysheetpointconfigsearchdim" id="luckysheetpointconfigsearchdim"> </select> </div> </div> <div class="luckysheet-datavisual-content-row" style="margin-bottom: 0px;margin-top: 3px;height: 30px;"> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-title luckysheet-datavisual-content-column-2x" style="width:10%;">\u6392\u5E8F</div> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-right luckysheet-datavisual-content-column-2x" style="width:80%;"> <label data-tips="\u65E0\u6392\u5E8F" for="luckysheetpointconfigsearchorderno">\u65E0\u6392\u5E8F</label> <input type="radio" checked="checked" value="0" name="luckysheetpointconfigsearchorder" id="luckysheetpointconfigsearchorderno"> <label data-tips="\u5347\u5E8F" for="luckysheetpointconfigsearchorderasc">\u5347\u5E8F</label> <input type="radio" value="1" name="luckysheetpointconfigsearchorder" id="luckysheetpointconfigsearchorderasc"> <label data-tips="\u964D\u5E8F" for="luckysheetpointconfigsearchorderdesc">\u964D\u5E8F</label> <input type="radio" value="2" name="luckysheetpointconfigsearchorder" id="luckysheetpointconfigsearchorderdesc"> </div> </div> <div class="luckysheet-datavisual-content-row" style="margin-bottom: 0px;margin-top: 5px;height: 30px;"> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-right luckysheet-datavisual-content-column-2x" style="width:90%;text-align: left;"> <select data-width="70" data-tips="\u6309\u7167\u4EC0\u4E48\u65B9\u5F0F\u67E5\u8BE2" name="luckysheetpointconfigsearchtype" id="luckysheetpointconfigsearchtype"> <option value="0" selected="selected">\u6309\u7167\u540D\u79F0</option> <option value="1">\u6309\u6392\u5E8F\u524D%</option> </select> <input data-tips="\u67E5\u8BE2\u5173\u4E8E\u70B9\u7684\u5173\u952E\u5B57" id="luckysheetpointconfigsearchcontent" type="text" class="luckysheet-datavisual-config-input-no" style="width:40%;" placeholder="\u67E5\u8BE2\u5185\u5BB9" /> <button id="luckysheetpointconfigsearchcomfirm" class="btn btn-primary luckysheet-model-conform-btn">\u67E5\u8BE2</button> </div> </div> </div> </div> <div class="luckysheet-chart-point-config-left-mid"> <span id="luckysheet-chart-point-btn-all" class="luckysheet-mousedown-cancel">\u5168\u9009</span> - <span id="luckysheet-chart-point-btn-clear" class="luckysheet-mousedown-cancel">\u6E05\u9664</span> - <span id="luckysheet-chart-point-btn-contra" class="luckysheet-mousedown-cancel">\u53CD\u9009</span><span style="text-decoration:none;color:#8D8D8D;float:right;margin-right:40px;cursor:default;" class="luckysheet-mousedown-cancel">\u53EF\u4EE5\u76F4\u63A5\u6846\u9009\u6570\u636E\u70B9</span> </div> <div class="luckysheet-chart-point-config-left-bottom"> <div class="luckysheet-chart-point-searchitem-c luckysheet-noselected-text">  </div> </div> </div> <div class="luckysheet-chart-point-config-right"> <div class="luckysheet-chart-point-itemconfig"> <div class="luckysheet-datavisual-content-row" style="font-size: 16px;font-weight: bold;"> \u6570\u636E\u70B9\u8BBE\u7F6E </div> <div class="luckysheet-datavisual-content-row"> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-title luckysheet-datavisual-content-column-2x" style="width:10%;white-space:nowrap;">\u56FE\u5F62\u989C\u8272</div> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-right luckysheet-datavisual-content-column-2x" style="width:80%;"> <input data-tips="\u989C\u8272" class="luckysheet-datavisual-config-colorOpacity" id="scattersingleitemstylecolor" type="text" data-bigclass="scattersingle" data-attr="itemstyle" data-func="color" /> </div> </div> <div class="luckysheet-datavisual-content-row"> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-title luckysheet-datavisual-content-column-2x" style="width:10%;white-space:nowrap;">\u56FE\u5F62\u5927\u5C0F</div> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-right luckysheet-datavisual-content-column-2x" style="width:80%;"> <select data-sliderdiy="scattersingleallsymbolsizeslider" data-tips="\u70B9\u5927\u5C0F\u8BBE\u7F6E" name="scattersingleallsymbolsize" id="scattersingleallsymbolsize" data-width="50" data-bigclass="scattersingle" data-attr="all" data-func="symbolsize"> <option value="4" selected="selected">4px</option> <option value="6">6px</option> <option value="8">8px</option> <option value="10">10px</option> <option value="12">12px</option> <option value="14">14px</option> <option value="16">16px</option> <option value="diy">\u81EA\u5B9A\u4E49</option> </select> </div> </div> <div class="luckysheet-datavisual-content-row" style="display:none;"> <div data-tips="\u6ED1\u52A8\u4FEE\u6539\u70B9\u5927\u5C0F" id="scattersingleallsymbolsizeslider" data-bigclass="scattersingle" data-attr="all" data-func="symbolsize" class="luckysheet-datavisual-config-slider" style="width:70%;" data-min="1" data-max="50" data-step="1"></div> <input data-tips="\u81EA\u5B9A\u4E49\u70B9\u5927\u5C0F" data-sliderid="scattersingleallsymbolsizeslider" id="scattersingleallsymbolsizesliderdiy" type="text" class="luckysheet-datavisual-config-input" data-bigclass="scattersingle" data-attr="all" data-func="symbolsize" placeholder="\u8BF7\u8F93\u5165" style="width:10%;margin-left:10px;text-align:center;margin-right: 2px;" /><label for="scattersingleallsymbolsizesliderdiy">px</label> </div> <div class="luckysheet-datavisual-content-row"> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-title luckysheet-datavisual-content-column-2x" style="width:10%;white-space:nowrap;">\u56FE\u5F62\u5F62\u72B6</div> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-right luckysheet-datavisual-content-column-2x" style="width:80%;"> <select data-tips="\u70B9\u7C7B\u578B\u8BBE\u7F6E" data-width="70" name="scattersingleallsymboltype" id="scattersingleallsymboltype" data-bigclass="scattersingle" data-attr="all" data-func="symboltype"> <option value="emptyCircle" selected="selected">\u7A7A\u5FC3\u5706</option> <option value="circle">\u5706\u5F62</option> <option value="emptyRectangle">\u7A7A\u5FC3\u77E9\u5F62</option> <option value="rect">\u77E9\u5F62</option> <option value="roundRect">\u5706\u89D2\u77E9\u5F62</option> <option value="emptyTriangle">\u7A7A\u5FC3\u4E09\u89D2</option> <option value="triangle">\u4E09\u89D2\u5F62</option> <option value="emptyDiamond">\u7A7A\u5FC3\u83F1\u5F62</option> <option value="diamond">\u83F1\u5F62</option> <option value="droplet">\u6C34\u6EF4</option> <option value="pin">\u6807\u6CE8</option> <option value="arrow">\u7BAD\u5934</option> <option value="heart">\u5FC3\u5F62</option> <option value="star">\u661F\u661F</option> </select> </div> </div> <div class="luckysheet-datavisual-content-rowsplit-sub"></div> <div class="luckysheet-datavisual-content-row"> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-title luckysheet-datavisual-content-column-2x" style="width:10%;white-space:nowrap;">\u8FB9\u6846\u7C97\u7EC6</div> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-right luckysheet-datavisual-content-column-2x" style="width:80%;"> <select data-sliderdiy="scattersingleitemstyleborderwidthslider" data-tips="\u70B9\u8FB9\u6846\u7C97\u7EC6" name="scattersingleitemstyleborderwidth" id="scattersingleitemstyleborderwidth" data-width="50" data-bigclass="scattersingle" data-attr="itemstyle" data-func="borderwidth"><option value="0" selected="selected">\u65E0</option> <option value="1">1px</option> <option value="2">2px</option> <option value="3">3px</option> <option value="4">4px</option> <option value="5">5px</option> <option value="6">6px</option> <option value="7">7px</option> <option value="8">8px</option> <option value="diy">\u81EA\u5B9A\u4E49</option> </select> </div> </div> <div class="luckysheet-datavisual-content-row" style="display:none;"> <div data-tips="\u6ED1\u52A8\u4FEE\u6539\u8FB9\u6846\u7C97\u7EC6" id="scattersingleitemstyleborderwidthslider" data-bigclass="scattersingle" data-attr="itemstyle" data-func="borderwidth" class="luckysheet-datavisual-config-slider" style="width:70%;" data-min="12" data-max="100" data-step="1"></div> <input data-tips="\u81EA\u5B9A\u4E49\u8FB9\u6846\u7C97\u7EC6" data-sliderid="scattersingleitemstyleborderwidthslider" id="scattersingleitemstyleborderwidthsliderdiy" type="text" class="luckysheet-datavisual-config-input" data-bigclass="scattersingle" data-attr="itemstyle" data-func="borderwidth" placeholder="\u8BF7\u8F93\u5165" style="width:10%;margin-left:10px;text-align:center;margin-right: 2px;" /><label for="scattersingleitemstyleborderwidthsliderdiy">%</label> </div> <div class="luckysheet-datavisual-content-row"> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-title luckysheet-datavisual-content-column-2x" style="width:10%;white-space:nowrap;">\u8FB9\u6846\u6837\u5F0F</div> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-right luckysheet-datavisual-content-column-2x" style="width:80%;"> <select data-tips="\u70B9\u8FB9\u6846\u7C7B\u578B\u8BBE\u7F6E" data-width="50" name="scattersingleitemstyleborderlinetype" id="scattersingleitemstyleborderlinetype" data-bigclass="scattersingle" data-attr="itemstyle" data-func="borderlinetype"> <option value="solid" selected="selected">\u5B9E\u7EBF</option> <option value="dashed">\u865A\u7EBF</option> <option value="dotted">\u70B9\u7EBF</option> </select> </div> </div> <div class="luckysheet-datavisual-content-row"> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-title luckysheet-datavisual-content-column-2x" style="width:10%;white-space:nowrap;">\u8FB9\u6846\u989C\u8272</div> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-right luckysheet-datavisual-content-column-2x" style="width:80%;"> <input data-tips="\u70B9\u8FB9\u6846\u989C\u8272" class="luckysheet-datavisual-config-colorOpacity" id="scattersingleitemstyleborderlinecolor" type="text" data-bigclass="scattersingle" data-attr="itemstyle" data-func="borderlinecolor" /> </div> </div> <div class="luckysheet-datavisual-content-rowsplit-sub"></div> <div class="luckysheet-datavisual-content-row"> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-title luckysheet-datavisual-content-column-2x" style="width:10%;white-space:nowrap;"><i class="fa fa-th-large" aria-hidden="true"></i> \u6587\u5B57\u6807\u7B7E</div> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-right luckysheet-datavisual-content-column-2x" style="width:80%;"> <label data-tips="\u663E\u793A\u6570\u636E\u70B9\u7684\u6807\u7B7E" data-bigclass="scattersingle" data-attr="label" data-func="labelshow" for="scattersinglelabellabelshow">\u663E\u793A</label> <input type="radio" checked="checked" value="1" name="scattersinglelabellabelshow" id="scattersinglelabellabelshow" data-bigclass="scattersingle" data-attr="label" data-func="labelshow"> <label data-tips="\u9690\u85CF\u6570\u636E\u70B9\u7684\u6807\u7B7E" data-bigclass="scattersingle" data-attr="label" data-func="labelshow" for="scattersinglelabellabelshow1">\u9690\u85CF</label> <input type="radio" value="0" name="scattersinglelabellabelshow" id="scattersinglelabellabelshow1" data-bigclass="scattersingle" data-attr="label" data-func="labelshow"> </div> </div> <div class="luckysheet-datavisual-content-row" style="height:auto;line-height: initial;margin-left:auto;" showfor="scattersinglelabellabelshow1" hidefor="scattersinglelabellabelshow"> <div class="luckysheet-datavisual-content-row"> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-title luckysheet-datavisual-content-column-2x" style="width:40%;">\u6570\u503C\u6BD4\u4F8B</div> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-right luckysheet-datavisual-content-column-2x" style="width:50%;"> <select data-tips="\u523B\u5EA6\u6570\u503C\u653E\u5927\u6BD4\u4F8B" name="scattersinglelabelformatratio" id="scattersinglelabelformatratio" data-bigclass="scattersingle" data-attr="label" data-func="formatratio"> <option value="0.01">\u4E58\u4EE5100</option> <option value="0.1">\u4E58\u4EE510</option> <option value="1" selected="selected">\u9ED8\u8BA4</option> <option value="10">\u9664\u4EE510</option> <option value="100">\u9664\u4EE5100</option> <option value="1000">\u9664\u4EE51000</option> <option value="10000">\u9664\u4EE51\u4E07</option> <option value="100000">\u9664\u4EE510\u4E07</option> <option value="1000000">\u9664\u4EE5\u4E00\u767E\u4E07</option> <option value="10000000">\u9664\u4EE5\u4E00\u5343\u4E07</option> <option value="100000000">\u9664\u4EE5\u4E00\u4EBF</option> <option value="1000000000">\u9664\u4EE5\u5341\u4EBF</option> </select> </div> </div> <div class="luckysheet-datavisual-content-row"> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-title luckysheet-datavisual-content-column-2x" style="width:40%;white-space: nowrap;">\u5C0F\u6570\u4F4D\u6570</div> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-right luckysheet-datavisual-content-column-2x" style="width:50%;"> <select data-tips="\u6570\u503C\u5C0F\u6570\u70B9\u4F4D\u6570" name="scattersinglelabelfloatlen" id="scattersinglelabelfloatlen" data-bigclass="scattersingle" data-attr="label" data-func="floatlen"> <option value="auto" selected="selected">\u81EA\u52A8\u663E\u793A</option> <option value="0">\u6574\u6570</option> <option value="1">1\u4F4D\u5C0F\u6570</option> <option value="2">2\u4F4D\u5C0F\u6570</option> <option value="3">3\u4F4D\u5C0F\u6570</option> <option value="4">4\u4F4D\u5C0F\u6570</option> <option value="5">5\u4F4D\u5C0F\u6570</option> <option value="6">6\u4F4D\u5C0F\u6570</option> <option value="7">7\u4F4D\u5C0F\u6570</option> <option value="8">8\u4F4D\u5C0F\u6570</option> </select> </div> </div> <div class="luckysheet-datavisual-content-row"> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-title luckysheet-datavisual-content-column-2x" style="width:20%;">\u6807\u7B7E\u683C\u5F0F</div> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-right luckysheet-datavisual-content-column-2x" style="width:70%;"> <select data-sliderdiy="scattersinglelabelcontentformatslider" data-tips="\u6807\u7B7E\u663E\u793A\u683C\u5F0F" name="scattersinglelabelcontentformat" id="scattersinglelabelcontentformat" data-bigclass="scattersingle" data-attr="label" data-func="contentformat"> <option value="default" selected="selected">\u9ED8\u8BA4</option> <option value="1">\u4EC5\u6570\u636E\u540D</option> <option value="2">\u6570\u636E\u540D+2\u7EF4\u6570\u503C</option> <option value="5">\u6570\u636E\u540D+\u5168\u90E8\u6570\u503C</option> <option value="diy">\u81EA\u5B9A\u4E49</option> </select> </div> </div> <div style="display:none;"> <div class="luckysheet-datavisual-content-row" id="scattersinglelabelcontentformatslider"> <div style="text-align:center; width:60px; display:inline-block;">\u6570\u636E\u540D\u79F0</div> <label data-tips="\u662F\u5426\u663E\u793A\u6570\u636E\u540D" data-bigclass="scattersingle" data-attr="label" data-func="scattersingledatalabelshow" for="scattersinglelabeldatalabelshow" style="font-weight:bold;"><i class="fa fa-eye" aria-hidden="true"></i></label> <input type="checkbox" checked="checked" name="scattersinglelabeldatalabelshow" id="scattersinglelabeldatalabelshow" data-bigclass="scattersingle" data-attr="label" data-func="scattersingledatalabelshow"> <input data-tips="\u663E\u793A\u5728\u6570\u636E\u540D\u524D\u90E8\u6587\u5B57" placeholder="\u524D\u7F00" id="scattersinglelabeldatalabelprefix" type="text" class="luckysheet-datavisual-config-input" style="width:60px;height:19px;" data-bigclass="scattersingle" data-attr="label" data-func="scattersingledatalabelprefix" /> <input data-tips="\u663E\u793A\u5728\u6570\u636E\u540D\u5C3E\u90E8\u6587\u5B57" placeholder="\u540E\u7F00" id="scattersinglelabeldatalabelsuffix" type="text" class="luckysheet-datavisual-config-input" style="width:60px;height:19px;" data-bigclass="scattersingle" data-attr="label" data-func="scattersingledatalabelsuffix" /> <label data-tips="\u662F\u5426\u5728\u6570\u636E\u540D\u540E\u6362\u884C" data-bigclass="scattersingle" data-attr="label" data-func="scattersingledatalabelline" for="scattersinglelabeldatalabelline" style="font-weight:bold;">\u6362\u884C</label> <input type="checkbox" checked="checked" name="scattersinglelabeldatalabelline" id="scattersinglelabeldatalabelline" data-bigclass="scattersingle" data-attr="label" data-func="scattersingledatalabelline"> </div> </div> <div class="luckysheet-datavisual-content-row" > <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-title luckysheet-datavisual-content-column-2x" style="width:10%;white-space:nowrap;">\u6807\u7B7E\u4F4D\u7F6E</div> <div class="luckysheet-datavisual-content-column luckysheet-datavisual-content-column-right luckysheet-datavisual-content-column-2x" style="width:80%;"> <select data-sliderdiy="scattersinglelabellabelplaceslider" data-tips="\u6807\u7B7E\u8DDD\u79BB\u56FE\u5F62\u4F4D\u7F6E" data-width="70" name="scattersinglelabellabelplace" id="scattersinglelabellabelplace" data-bigclass="scattersingle" data-attr="label" data-func="labelplace"> <option value="top" selected="selected">\u9876\u7AEF</option> <option value="left">\u5DE6\u4FA7</option> <option value="right">\u53F3\u4FA7</option> <option value="bottom">\u5E95\u90E8</option> <option value="inside">\u5185\u90E8\u5C45\u4E2D</option> <option value="diy">\u81EA\u5B9A\u4E49</option> <option value="insideLeft">\u5185\u90E8\u5DE6\u4FA7</option> <option value="insideRight">\u5185\u90E8\u53F3\u4FA7</option> <option value="insideTop">\u5185\u90E8\u9876\u7AEF</option> <option value="insideBottom">\u5185\u90E8\u5E95\u7AEF</option> <option value="insideTopLeft">\u5185\u90E8\u5DE6\u4E0A</option> <option value="insideBottomLeft">\u5185\u90E8\u5DE6\u4E0B</option> <option value="insideTopRight">\u5185\u90E8\u53F3\u4E0A</option> <option value="insideBottomRight">\u5185\u90E8\u53F3\u4E0B</option> </select> </div> </div> <div class="luckysheet-datavisual-content-row" style="display:none;height:65px;"> <div data-tips="\u6ED1\u52A8\u4FEE\u6539\u70B9\u6587\u672C\u6C34\u5E73\u4F4D\u7F6E" id="scattersinglelabellabelplaceslider" data-bigclass="scattersingle" data-attr="label" data-func="labelplacediy" class="luckysheet-datavisual-config-slider" style="width:70%;" data-min="-100" data-max="100" data-step="1"></div> <input data-tips="\u81EA\u5B9A\u4E49\u70B9\u6587\u672C\u6C34\u5E73\u4F4D\u7F6E" data-sliderid="scattersinglelabellabelplaceslider" id="scattersinglelabellabelplacesliderdiy" type="text" class="luckysheet-datavisual-config-input" data-bigclass="scattersingle" data-attr="label" data-func="labelplacediy" placeholder="\u8BF7\u8F93\u5165" style="width:10%;margin-left:10px;text-align:center;margin-right: 2px;" /><label for="scattersinglelabellabelplacesliderdiy">px</label> <br /> <div data-tips="\u6ED1\u52A8\u4FEE\u6539\u70B9\u6587\u672C\u5782\u76F4\u4F4D\u7F6E" id="scattersinglelabellabelplaceslider1" data-bigclass="scattersingle" data-attr="label" data-func="labelplacediy" class="luckysheet-datavisual-config-slider" style="width:70%;" data-min="-100" data-max="100" data-step="1"></div> <input data-tips="\u81EA\u5B9A\u4E49\u70B9\u6587\u672C\u5782\u76F4\u4F4D\u7F6E" data-sliderid="scattersinglelabellabelplaceslider1" id="scattersinglelabellabelplaceslider1diy" type="text" class="luckysheet-datavisual-config-input" data-bigclass="scattersingle" data-attr="label" data-func="labelplacediy" placeholder="\u8BF7\u8F93\u5165" style="width:10%;margin-left:10px;text-align:center;margin-right: 2px;" /><label for="scattersinglelabellabelplaceslider1diy">px</label> </div> <div class="luckysheet-datavisual-content-row"> <label data-tips="\u52A0\u7C97" data-bigclass="scattersingle" data-attr="label" data-func="labelbold" for="scattersinglelabellabelbold" style="font-weight:bold;"><i class="fa fa-bold" aria-hidden="true"></i></label> <input type="checkbox" name="scattersinglelabellabelbold" id="scattersinglelabellabelbold" data-bigclass="scattersingle" data-attr="label" data-func="labelbold"> <label data-tips="\u659C\u4F53" data-bigclass="scattersingle" data-attr="label" data-func="labelitalic" for="scattersinglelabellabelitalic" class="luckysheet-datavisual-content-column-italic"><i class="fa fa-italic" aria-hidden="true"></i></label> <input type="checkbox" name="scattersinglelabellabelitalic" id="scattersinglelabellabelitalic" data-bigclass="scattersingle" data-attr="label" data-func="labelitalic"> <select data-sliderdiy="scattersinglelabellabelfontsizeslider" data-width="50" data-tips="\u5B57\u4F53\u5927\u5C0F" name="scattersinglelabellabelfontsize" id="scattersinglelabellabelfontsize" data-bigclass="scattersingle" data-attr="label" data-func="labelfontsize"> <option value="12">12px</option> <option value="14">14px</option> <option value="16">16px</option> <option value="18">18px</option> <option value="20">20px</option> <option value="22">22px</option> <option value="24">24px</option> <option value="30">30px</option> <option value="36">36px</option> <option value="diy">\u81EA\u5B9A\u4E49</option> </select> <input data-tips="\u5B57\u4F53\u989C\u8272" class="luckysheet-datavisual-config-color" id="scattersinglelinelabelcolor" type="text" data-bigclass="scattersingle" data-attr="label" data-func="labelcolor" /> </div> <div class="luckysheet-datavisual-content-row" style="display:none;"> <div data-tips="\u6ED1\u52A8\u4FEE\u6539\u5B57\u4F53\u5927\u5C0F" id="scattersinglelabellabelfontsizeslider" data-bigclass="scattersingle" data-attr="label" data-func="labelfontsize" class="luckysheet-datavisual-config-slider" style="width:70%;" data-min="12" data-max="100" data-step="1"></div> <input data-tips="\u81EA\u5B9A\u4E49\u5B57\u4F53\u5927\u5C0F" data-sliderid="scattersinglelabellabelfontsizeslider" id="scattersinglelabellabelfontsizesliderdiy" type="text" class="luckysheet-datavisual-config-input" data-bigclass="scattersingle" data-attr="label" data-func="labelfontsize" placeholder="\u8BF7\u8F93\u5165" style="width:10%;margin-left:10px;text-align:center;margin-right: 2px;" /><label for="scattersinglelabellabelfontsizesliderdiy">px</label> </div> </div> </div> </div> </div> <div class="luckysheet-chart-point-config-chart"> <div id="luckysheet-chart-point-config-chart-c" class="luckysheet-chart-point-config-chart-c"> </div> </div> </div>';
      luckysheetToolHTML = '<div id="luckysheet-tooltip-up" class="jfk-tooltip" role="tooltip" aria-hidden="true" style="left: 505px; top: 410px;"><div class="jfk-tooltip-contentId">\u7EC4\u5408\u56FE\u8868</div><div class="jfk-tooltip-arrow jfk-tooltip-arrowup" style="left: 35.5px;"><div class="jfk-tooltip-arrowimplbefore"></div><div class="jfk-tooltip-arrowimplafter"></div></div></div>';
      luckysheetloadingImage = function(config) {
        if (typeof config.image === "function") {
          return config.image();
        }
        const regE = new RegExp("^(image|path)://");
        const regResult = regE.exec(config.image);
        let imageHtml = "";
        if (regResult !== null) {
          const prefix = regResult[0];
          const type = regResult[1];
          const imageStr = regResult.input.substring(prefix.length);
          switch (type) {
            case "image":
              imageHtml = `<div class="image-type" style="background-image: url(${imageStr});"></div>`;
              break;
            case "path":
              const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
              svg.setAttribute("class", "path-type");
              svg.setAttribute("viewBox", config.viewBox);
              const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
              path.setAttribute("d", imageStr);
              path.setAttribute("fill", "currentColor");
              svg.appendChild(path);
              imageHtml = svg.outerHTML;
              break;
            default:
              break;
          }
        }
        return imageHtml;
      };
      luckysheetlodingHTML = function(target, coverConfig) {
        if (!target) {
          return;
        }
        const config = customLoadingConfig();
        if (coverConfig && JSON.stringify(coverConfig) !== "{}") {
          Object.assign(config, coverConfig);
        }
        if (typeof config.enable === "boolean" && config.enable === false) {
          return {
            el: "",
            show,
            close
          };
        }
        const imageHtml = luckysheetloadingImage(config);
        const id = "luckysheet-loading-" + uuid.v4();
        const loadingHtml = `
        <div class="luckysheet-loading-content"> 
            <div class="${config.imageClass} luckysheet-loading-image">
                ${imageHtml}
            </div>
            <div class="${config.textClass} luckysheet-loading-text">
            <span>${config.text}</span>
            </div>    
        </div>`;
        const loading = document.createElement("div");
        loading.id = id;
        loading.className = "luckysheet-loading-mask " + config.customClass;
        $(loading).html(loadingHtml);
        $(target).append(loading);
        function show() {
          if (id) {
            $("#" + id).show();
          }
        }
        function close() {
          if (id) {
            $("#" + id).hide();
          }
        }
        return {
          el: loading,
          show,
          close
        };
      };
      luckyColor = [
        "#c1232b",
        "#27727b",
        "#fcce10",
        "#e87c25",
        "#b5c334",
        "#fe8463",
        "#9bca63",
        "#fad860",
        "#f3a43b",
        "#60c0dd",
        "#d7504b",
        "#c6e579",
        "#f4e001",
        "#f0805a",
        "#26c0c0",
        "#c12e34",
        "#e6b600",
        "#0098d9",
        "#2b821d",
        "#005eaa",
        "#339ca8",
        "#cda819",
        "#32a487",
        "#3fb1e3",
        "#6be6c1",
        "#626c91",
        "#a0a7e6",
        "#c4ebad",
        "#96dee8"
      ];
      keycode = {
        BACKSPACE: 8,
        TAB: 9,
        ENTER: 13,
        SHIFT: 16,
        CTRL: 17,
        PAUSE: 19,
        CAPSLOCK: 20,
        ESC: 27,
        SPACE: 33,
        PAGEUP: 33,
        PAGEDOWN: 34,
        END: 35,
        HOME: 36,
        LEFT: 37,
        UP: 38,
        RIGHT: 39,
        DOWN: 40,
        INSERT: 45,
        DELETE: 46,
        WIN: 91,
        WIN_R: 92,
        MENU: 93,
        F1: 112,
        F2: 113,
        F3: 114,
        F4: 115,
        F5: 116,
        F6: 117,
        F7: 118,
        F8: 119,
        F9: 120,
        F10: 121,
        F11: 122,
        F12: 123,
        NUMLOCK: 144,
        SCROLLLOCK: 145
      };
      luckysheetdefaultstyle = {
        fillStyle: "#000000",
        textBaseline: "middle",
        strokeStyle: "#dfdfdf",
        rowFillStyle: "#5e5e5e",
        textAlign: "center"
      };
      luckysheetdefaultFont = function() {
        return "normal normal normal " + store_default.defaultFontSize + "pt " + locale_default().fontarray[0] + ', "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC",  "WenQuanYi Micro Hei", sans-serif';
      };
      luckysheet_CFiconsImg = new Image();
      luckysheet_CFiconsImg.src = "data:image/png;base64, ";
      iconfontObjects = {
        border: {
          "border-top": " iconfont luckysheet-iconfont-shangbiankuang",
          "border-bottom": " iconfont luckysheet-iconfont-xiabiankuang",
          "border-left": " iconfont luckysheet-iconfont-zuobiankuang",
          "border-right": " iconfont luckysheet-iconfont-youbiankuang",
          "border-none": " iconfont luckysheet-iconfont-wubiankuang",
          "border-all": " iconfont luckysheet-iconfont-quanjiabiankuang",
          "border-outside": " iconfont luckysheet-iconfont-sizhoujiabiankuang",
          "border-inside": " iconfont luckysheet-iconfont-neikuangxian",
          "border-horizontal": " iconfont luckysheet-iconfont-neikuanghengxian",
          "border-vertical": " iconfont luckysheet-iconfont-neikuangshuxian"
        },
        align: {
          "left": " iconfont luckysheet-iconfont-wenbenzuoduiqi",
          "center": " iconfont luckysheet-iconfont-wenbenjuzhongduiqi",
          "right": " iconfont luckysheet-iconfont-wenbenyouduiqi",
          "top": " iconfont luckysheet-iconfont-dingbuduiqi",
          "middle": " iconfont luckysheet-iconfont-shuipingduiqi",
          "bottom": " iconfont luckysheet-iconfont-dibuduiqi"
        },
        textWrap: {
          "overflow": " iconfont luckysheet-iconfont-yichu1",
          "wrap": " iconfont luckysheet-iconfont-zidonghuanhang",
          "clip": " iconfont luckysheet-iconfont-jieduan"
        },
        rotation: {
          "none": " iconfont luckysheet-iconfont-wuxuanzhuang",
          "angleup": " iconfont luckysheet-iconfont-xiangshangqingxie",
          "angledown": " iconfont luckysheet-iconfont-xiangxiaqingxie",
          "vertical": " iconfont luckysheet-iconfont-shupaiwenzi",
          "rotation-up": " iconfont luckysheet-iconfont-wenbenxiangshang",
          "rotation-down": " iconfont luckysheet-iconfont-xiangxia90"
        }
      };
    }
  });

  // src/methods/get.js
  function getSheetIndex(index2) {
    for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
      if (store_default.luckysheetfile[i2]["index"] == index2) {
        return i2;
      }
    }
    return null;
  }
  function getRangetxt(sheetIndex, range2, currentIndex) {
    let sheettxt = "";
    if (currentIndex == null) {
      currentIndex = store_default.currentSheetIndex;
    }
    if (sheetIndex != currentIndex) {
      sheettxt = store_default.luckysheetfile[getSheetIndex(sheetIndex)].name.replace(/'/g, "''");
      if (/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/.test(sheettxt)) {
        sheettxt = sheettxt + "!";
      } else {
        sheettxt = "'" + sheettxt + "'!";
      }
    }
    let row0 = range2["row"][0], row1 = range2["row"][1];
    let column0 = range2["column"][0], column1 = range2["column"][1];
    if (row0 == null && row1 == null) {
      return sheettxt + chatatABC(column0) + ":" + chatatABC(column1);
    } else if (column0 == null && column1 == null) {
      return sheettxt + (row0 + 1) + ":" + (row1 + 1);
    } else {
      if (column0 == column1 && row0 == row1) {
        return sheettxt + chatatABC(column0) + (row0 + 1);
      } else {
        return sheettxt + chatatABC(column0) + (row0 + 1) + ":" + chatatABC(column1) + (row1 + 1);
      }
    }
  }
  function getluckysheet_select_save() {
    return store_default.luckysheet_select_save;
  }
  function getluckysheetfile(plugin) {
    if (plugin) {
      store_default.luckysheetfile.forEach((file) => {
        if (!!file.chart) {
          file.chart.forEach((chartObj) => {
            const chartJson = store_default.getChartJson(chartObj.chart_id);
            chartObj.chartOptions = chartJson;
          });
        }
      });
    }
    return store_default.luckysheetfile;
  }
  function getconfig() {
    return store_default.config;
  }
  function getvisibledatarow() {
    return store_default.visibledatarow;
  }
  function getvisibledatacolumn() {
    return store_default.visibledatacolumn;
  }
  var init_get = __esm({
    "src/methods/get.js"() {
      init_util();
      init_store();
    }
  });

  // src/methods/set.js
  function setluckysheet_select_save(v) {
    store_default.luckysheet_select_save = v;
  }
  function setluckysheet_scroll_status(v) {
    store_default.luckysheet_scroll_status = v;
  }
  function setluckysheetfile(d) {
    store_default.luckysheetfile = d;
  }
  var init_set = __esm({
    "src/methods/set.js"() {
      init_get();
      init_store();
    }
  });

  // src/global/browser.js
  var browser, browser_default;
  var init_browser = __esm({
    "src/global/browser.js"() {
      browser = {
        mobilecheck: function() {
          var a = false;
          return function(b) {
            (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(b) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(b.substr(0, 4))) && (a = true);
          }(navigator.userAgent || navigator.vendor || window.opera), document.body && document.body.clientWidth && document.body.clientHeight && document.body.clientWidth < 350 && document.body.clientHeight < 500 && (a = true), a;
        },
        iphoneCheck: function() {
          var a = false;
          return /iPhone/i.test(navigator.userAgent) && (a = true), true;
        },
        isWeixin: function() {
          var a = navigator.userAgent.toLowerCase();
          return a.match(/MicroMessenger/i) == "micromessenger" ? true : false;
        },
        isAndroid: function() {
          var a = navigator.userAgent, b = (navigator.appVersion, a.indexOf("Android") > -1 || a.indexOf("Linux") > -1);
          return b;
        },
        tabletCheck: function() {
          var a = /ipad|android|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(navigator.userAgent.toLowerCase());
          return a;
        },
        BrowserType: function() {
          var userAgent = navigator.userAgent;
          var isOpera = userAgent.indexOf("Opera") > -1;
          var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera;
          var isIE11 = userAgent.indexOf("Trident") > -1 && userAgent.indexOf("rv:11.0") > -1;
          var isEdge = userAgent.indexOf("Edge") > -1;
          var isFF = userAgent.indexOf("Firefox") > -1;
          var isSafari = userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1;
          var isChrome = userAgent.indexOf("Chrome") > -1 && userAgent.indexOf("Safari") > -1;
          if (isIE) {
            var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
            reIE.test(userAgent);
            var fIEVersion = parseFloat(RegExp["$1"]);
            if (fIEVersion == 7) {
              return "IE7";
            } else if (fIEVersion == 8) {
              return "IE8";
            } else if (fIEVersion == 9) {
              return "IE9";
            } else if (fIEVersion == 10) {
              return "IE10";
            } else {
              return "0";
            }
          }
          if (isFF) {
            return "FF";
          }
          if (isOpera) {
            return "Opera";
          }
          if (isSafari) {
            return "Safari";
          }
          if (isChrome) {
            return "Chrome";
          }
          if (isEdge) {
            return "Edge";
          }
          if (isIE11) {
            return "IE11";
          }
        },
        isIE: function() {
          var userAgent = navigator.userAgent;
          var isOpera = userAgent.indexOf("Opera") > -1;
          var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera;
          var isIE11 = userAgent.indexOf("Trident") > -1 && userAgent.indexOf("rv:11.0") > -1;
          if (isIE || isIE11) {
            return "1";
          } else {
            return "-1";
          }
        },
        IEVersion: function() {
          var userAgent = navigator.userAgent;
          var isOpera = userAgent.indexOf("Opera") > -1;
          var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera;
          var isIE11 = userAgent.indexOf("Trident") > -1 && userAgent.indexOf("rv:11.0") > -1;
          var isEdge = userAgent.indexOf("Windows NT 6.1; Trident/7.0;") > -1 && !isIE;
          if (isIE) {
            var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
            reIE.test(userAgent);
            var fIEVersion = parseFloat(RegExp["$1"]);
            if (fIEVersion == 7) {
              return "IE7";
            } else if (fIEVersion == 8) {
              return "IE8";
            } else if (fIEVersion == 9) {
              return "IE9";
            } else if (fIEVersion == 10) {
              return "IE10";
            } else {
              return "0";
            }
          } else if (isEdge) {
            return "Edge";
          } else if (isIE11) {
            return "IE11";
          } else {
            return "-1";
          }
        },
        luckysheetrefreshfixednum: null,
        luckysheetrefreshfixed: function() {
          var _this = this;
          if (_this.luckysheetrefreshfixednum == null) {
            if (_this.BrowserType() == "FF") {
              _this.luckysheetrefreshfixednum = 5;
            } else {
              _this.luckysheetrefreshfixednum = 0;
            }
          }
          return _this.luckysheetrefreshfixednum;
        },
        detectOS() {
          var userAgent = navigator.userAgent;
          var isWin = navigator.platform == "Win32" || navigator.platform == "Windows";
          var isMac = navigator.platform == "Mac68K" || navigator.platform == "MacPPC" || navigator.platform == "Macintosh" || navigator.platform == "MacIntel";
          if (isMac)
            return "Mac";
          var isUnix = navigator.platform == "X11" && !isWin && !isMac;
          if (isUnix)
            return "Unix";
          var isLinux = String(navigator.platform).indexOf("Linux") > -1;
          if (isLinux)
            return "Linux";
          if (isWin) {
            var isWin2K = userAgent.indexOf("Windows NT 5.0") > -1 || userAgent.indexOf("Windows 2000") > -1;
            if (isWin2K)
              return "Win2000";
            var isWinXP = userAgent.indexOf("Windows NT 5.1") > -1 || userAgent.indexOf("Windows XP") > -1;
            if (isWinXP)
              return "WinXP";
            var isWin2003 = userAgent.indexOf("Windows NT 5.2") > -1 || userAgent.indexOf("Windows 2003") > -1;
            if (isWin2003)
              return "Win2003";
            var isWinVista = userAgent.indexOf("Windows NT 6.0") > -1 || userAgent.indexOf("Windows Vista") > -1;
            if (isWinVista)
              return "WinVista";
            var isWin7 = userAgent.indexOf("Windows NT 6.1") > -1 || userAgent.indexOf("Windows 7") > -1;
            if (isWin7)
              return "Win7";
          }
          return "other";
        }
      };
      browser_default = browser;
    }
  });

  // node_modules/pako/lib/utils/common.js
  var require_common = __commonJS({
    "node_modules/pako/lib/utils/common.js"(exports) {
      "use strict";
      var TYPED_OK = typeof Uint8Array !== "undefined" && typeof Uint16Array !== "undefined" && typeof Int32Array !== "undefined";
      function _has(obj, key) {
        return Object.prototype.hasOwnProperty.call(obj, key);
      }
      exports.assign = function(obj) {
        var sources = Array.prototype.slice.call(arguments, 1);
        while (sources.length) {
          var source = sources.shift();
          if (!source) {
            continue;
          }
          if (typeof source !== "object") {
            throw new TypeError(source + "must be non-object");
          }
          for (var p in source) {
            if (_has(source, p)) {
              obj[p] = source[p];
            }
          }
        }
        return obj;
      };
      exports.shrinkBuf = function(buf, size) {
        if (buf.length === size) {
          return buf;
        }
        if (buf.subarray) {
          return buf.subarray(0, size);
        }
        buf.length = size;
        return buf;
      };
      var fnTyped = {
        arraySet: function(dest, src, src_offs, len, dest_offs) {
          if (src.subarray && dest.subarray) {
            dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
            return;
          }
          for (var i2 = 0; i2 < len; i2++) {
            dest[dest_offs + i2] = src[src_offs + i2];
          }
        },
        flattenChunks: function(chunks) {
          var i2, l, len, pos, chunk, result;
          len = 0;
          for (i2 = 0, l = chunks.length; i2 < l; i2++) {
            len += chunks[i2].length;
          }
          result = new Uint8Array(len);
          pos = 0;
          for (i2 = 0, l = chunks.length; i2 < l; i2++) {
            chunk = chunks[i2];
            result.set(chunk, pos);
            pos += chunk.length;
          }
          return result;
        }
      };
      var fnUntyped = {
        arraySet: function(dest, src, src_offs, len, dest_offs) {
          for (var i2 = 0; i2 < len; i2++) {
            dest[dest_offs + i2] = src[src_offs + i2];
          }
        },
        flattenChunks: function(chunks) {
          return [].concat.apply([], chunks);
        }
      };
      exports.setTyped = function(on) {
        if (on) {
          exports.Buf8 = Uint8Array;
          exports.Buf16 = Uint16Array;
          exports.Buf32 = Int32Array;
          exports.assign(exports, fnTyped);
        } else {
          exports.Buf8 = Array;
          exports.Buf16 = Array;
          exports.Buf32 = Array;
          exports.assign(exports, fnUntyped);
        }
      };
      exports.setTyped(TYPED_OK);
    }
  });

  // node_modules/pako/lib/zlib/trees.js
  var require_trees = __commonJS({
    "node_modules/pako/lib/zlib/trees.js"(exports) {
      "use strict";
      var utils = require_common();
      var Z_FIXED = 4;
      var Z_BINARY = 0;
      var Z_TEXT = 1;
      var Z_UNKNOWN = 2;
      function zero(buf) {
        var len = buf.length;
        while (--len >= 0) {
          buf[len] = 0;
        }
      }
      var STORED_BLOCK = 0;
      var STATIC_TREES = 1;
      var DYN_TREES = 2;
      var MIN_MATCH = 3;
      var MAX_MATCH = 258;
      var LENGTH_CODES = 29;
      var LITERALS = 256;
      var L_CODES = LITERALS + 1 + LENGTH_CODES;
      var D_CODES = 30;
      var BL_CODES = 19;
      var HEAP_SIZE = 2 * L_CODES + 1;
      var MAX_BITS = 15;
      var Buf_size = 16;
      var MAX_BL_BITS = 7;
      var END_BLOCK = 256;
      var REP_3_6 = 16;
      var REPZ_3_10 = 17;
      var REPZ_11_138 = 18;
      var extra_lbits = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0];
      var extra_dbits = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13];
      var extra_blbits = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7];
      var bl_order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
      var DIST_CODE_LEN = 512;
      var static_ltree = new Array((L_CODES + 2) * 2);
      zero(static_ltree);
      var static_dtree = new Array(D_CODES * 2);
      zero(static_dtree);
      var _dist_code = new Array(DIST_CODE_LEN);
      zero(_dist_code);
      var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);
      zero(_length_code);
      var base_length = new Array(LENGTH_CODES);
      zero(base_length);
      var base_dist = new Array(D_CODES);
      zero(base_dist);
      function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {
        this.static_tree = static_tree;
        this.extra_bits = extra_bits;
        this.extra_base = extra_base;
        this.elems = elems;
        this.max_length = max_length;
        this.has_stree = static_tree && static_tree.length;
      }
      var static_l_desc;
      var static_d_desc;
      var static_bl_desc;
      function TreeDesc(dyn_tree, stat_desc) {
        this.dyn_tree = dyn_tree;
        this.max_code = 0;
        this.stat_desc = stat_desc;
      }
      function d_code(dist) {
        return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
      }
      function put_short(s, w) {
        s.pending_buf[s.pending++] = w & 255;
        s.pending_buf[s.pending++] = w >>> 8 & 255;
      }
      function send_bits(s, value, length) {
        if (s.bi_valid > Buf_size - length) {
          s.bi_buf |= value << s.bi_valid & 65535;
          put_short(s, s.bi_buf);
          s.bi_buf = value >> Buf_size - s.bi_valid;
          s.bi_valid += length - Buf_size;
        } else {
          s.bi_buf |= value << s.bi_valid & 65535;
          s.bi_valid += length;
        }
      }
      function send_code(s, c2, tree) {
        send_bits(s, tree[c2 * 2], tree[c2 * 2 + 1]);
      }
      function bi_reverse(code, len) {
        var res = 0;
        do {
          res |= code & 1;
          code >>>= 1;
          res <<= 1;
        } while (--len > 0);
        return res >>> 1;
      }
      function bi_flush(s) {
        if (s.bi_valid === 16) {
          put_short(s, s.bi_buf);
          s.bi_buf = 0;
          s.bi_valid = 0;
        } else if (s.bi_valid >= 8) {
          s.pending_buf[s.pending++] = s.bi_buf & 255;
          s.bi_buf >>= 8;
          s.bi_valid -= 8;
        }
      }
      function gen_bitlen(s, desc) {
        var tree = desc.dyn_tree;
        var max_code = desc.max_code;
        var stree = desc.stat_desc.static_tree;
        var has_stree = desc.stat_desc.has_stree;
        var extra = desc.stat_desc.extra_bits;
        var base = desc.stat_desc.extra_base;
        var max_length = desc.stat_desc.max_length;
        var h;
        var n, m;
        var bits;
        var xbits;
        var f;
        var overflow = 0;
        for (bits = 0; bits <= MAX_BITS; bits++) {
          s.bl_count[bits] = 0;
        }
        tree[s.heap[s.heap_max] * 2 + 1] = 0;
        for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {
          n = s.heap[h];
          bits = tree[tree[n * 2 + 1] * 2 + 1] + 1;
          if (bits > max_length) {
            bits = max_length;
            overflow++;
          }
          tree[n * 2 + 1] = bits;
          if (n > max_code) {
            continue;
          }
          s.bl_count[bits]++;
          xbits = 0;
          if (n >= base) {
            xbits = extra[n - base];
          }
          f = tree[n * 2];
          s.opt_len += f * (bits + xbits);
          if (has_stree) {
            s.static_len += f * (stree[n * 2 + 1] + xbits);
          }
        }
        if (overflow === 0) {
          return;
        }
        do {
          bits = max_length - 1;
          while (s.bl_count[bits] === 0) {
            bits--;
          }
          s.bl_count[bits]--;
          s.bl_count[bits + 1] += 2;
          s.bl_count[max_length]--;
          overflow -= 2;
        } while (overflow > 0);
        for (bits = max_length; bits !== 0; bits--) {
          n = s.bl_count[bits];
          while (n !== 0) {
            m = s.heap[--h];
            if (m > max_code) {
              continue;
            }
            if (tree[m * 2 + 1] !== bits) {
              s.opt_len += (bits - tree[m * 2 + 1]) * tree[m * 2];
              tree[m * 2 + 1] = bits;
            }
            n--;
          }
        }
      }
      function gen_codes(tree, max_code, bl_count) {
        var next_code = new Array(MAX_BITS + 1);
        var code = 0;
        var bits;
        var n;
        for (bits = 1; bits <= MAX_BITS; bits++) {
          next_code[bits] = code = code + bl_count[bits - 1] << 1;
        }
        for (n = 0; n <= max_code; n++) {
          var len = tree[n * 2 + 1];
          if (len === 0) {
            continue;
          }
          tree[n * 2] = bi_reverse(next_code[len]++, len);
        }
      }
      function tr_static_init() {
        var n;
        var bits;
        var length;
        var code;
        var dist;
        var bl_count = new Array(MAX_BITS + 1);
        length = 0;
        for (code = 0; code < LENGTH_CODES - 1; code++) {
          base_length[code] = length;
          for (n = 0; n < 1 << extra_lbits[code]; n++) {
            _length_code[length++] = code;
          }
        }
        _length_code[length - 1] = code;
        dist = 0;
        for (code = 0; code < 16; code++) {
          base_dist[code] = dist;
          for (n = 0; n < 1 << extra_dbits[code]; n++) {
            _dist_code[dist++] = code;
          }
        }
        dist >>= 7;
        for (; code < D_CODES; code++) {
          base_dist[code] = dist << 7;
          for (n = 0; n < 1 << extra_dbits[code] - 7; n++) {
            _dist_code[256 + dist++] = code;
          }
        }
        for (bits = 0; bits <= MAX_BITS; bits++) {
          bl_count[bits] = 0;
        }
        n = 0;
        while (n <= 143) {
          static_ltree[n * 2 + 1] = 8;
          n++;
          bl_count[8]++;
        }
        while (n <= 255) {
          static_ltree[n * 2 + 1] = 9;
          n++;
          bl_count[9]++;
        }
        while (n <= 279) {
          static_ltree[n * 2 + 1] = 7;
          n++;
          bl_count[7]++;
        }
        while (n <= 287) {
          static_ltree[n * 2 + 1] = 8;
          n++;
          bl_count[8]++;
        }
        gen_codes(static_ltree, L_CODES + 1, bl_count);
        for (n = 0; n < D_CODES; n++) {
          static_dtree[n * 2 + 1] = 5;
          static_dtree[n * 2] = bi_reverse(n, 5);
        }
        static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);
        static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);
        static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);
      }
      function init_block(s) {
        var n;
        for (n = 0; n < L_CODES; n++) {
          s.dyn_ltree[n * 2] = 0;
        }
        for (n = 0; n < D_CODES; n++) {
          s.dyn_dtree[n * 2] = 0;
        }
        for (n = 0; n < BL_CODES; n++) {
          s.bl_tree[n * 2] = 0;
        }
        s.dyn_ltree[END_BLOCK * 2] = 1;
        s.opt_len = s.static_len = 0;
        s.last_lit = s.matches = 0;
      }
      function bi_windup(s) {
        if (s.bi_valid > 8) {
          put_short(s, s.bi_buf);
        } else if (s.bi_valid > 0) {
          s.pending_buf[s.pending++] = s.bi_buf;
        }
        s.bi_buf = 0;
        s.bi_valid = 0;
      }
      function copy_block(s, buf, len, header) {
        bi_windup(s);
        if (header) {
          put_short(s, len);
          put_short(s, ~len);
        }
        utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
        s.pending += len;
      }
      function smaller(tree, n, m, depth) {
        var _n2 = n * 2;
        var _m2 = m * 2;
        return tree[_n2] < tree[_m2] || tree[_n2] === tree[_m2] && depth[n] <= depth[m];
      }
      function pqdownheap(s, tree, k) {
        var v = s.heap[k];
        var j = k << 1;
        while (j <= s.heap_len) {
          if (j < s.heap_len && smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {
            j++;
          }
          if (smaller(tree, v, s.heap[j], s.depth)) {
            break;
          }
          s.heap[k] = s.heap[j];
          k = j;
          j <<= 1;
        }
        s.heap[k] = v;
      }
      function compress_block(s, ltree, dtree) {
        var dist;
        var lc;
        var lx = 0;
        var code;
        var extra;
        if (s.last_lit !== 0) {
          do {
            dist = s.pending_buf[s.d_buf + lx * 2] << 8 | s.pending_buf[s.d_buf + lx * 2 + 1];
            lc = s.pending_buf[s.l_buf + lx];
            lx++;
            if (dist === 0) {
              send_code(s, lc, ltree);
            } else {
              code = _length_code[lc];
              send_code(s, code + LITERALS + 1, ltree);
              extra = extra_lbits[code];
              if (extra !== 0) {
                lc -= base_length[code];
                send_bits(s, lc, extra);
              }
              dist--;
              code = d_code(dist);
              send_code(s, code, dtree);
              extra = extra_dbits[code];
              if (extra !== 0) {
                dist -= base_dist[code];
                send_bits(s, dist, extra);
              }
            }
          } while (lx < s.last_lit);
        }
        send_code(s, END_BLOCK, ltree);
      }
      function build_tree(s, desc) {
        var tree = desc.dyn_tree;
        var stree = desc.stat_desc.static_tree;
        var has_stree = desc.stat_desc.has_stree;
        var elems = desc.stat_desc.elems;
        var n, m;
        var max_code = -1;
        var node;
        s.heap_len = 0;
        s.heap_max = HEAP_SIZE;
        for (n = 0; n < elems; n++) {
          if (tree[n * 2] !== 0) {
            s.heap[++s.heap_len] = max_code = n;
            s.depth[n] = 0;
          } else {
            tree[n * 2 + 1] = 0;
          }
        }
        while (s.heap_len < 2) {
          node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0;
          tree[node * 2] = 1;
          s.depth[node] = 0;
          s.opt_len--;
          if (has_stree) {
            s.static_len -= stree[node * 2 + 1];
          }
        }
        desc.max_code = max_code;
        for (n = s.heap_len >> 1; n >= 1; n--) {
          pqdownheap(s, tree, n);
        }
        node = elems;
        do {
          n = s.heap[1];
          s.heap[1] = s.heap[s.heap_len--];
          pqdownheap(s, tree, 1);
          m = s.heap[1];
          s.heap[--s.heap_max] = n;
          s.heap[--s.heap_max] = m;
          tree[node * 2] = tree[n * 2] + tree[m * 2];
          s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
          tree[n * 2 + 1] = tree[m * 2 + 1] = node;
          s.heap[1] = node++;
          pqdownheap(s, tree, 1);
        } while (s.heap_len >= 2);
        s.heap[--s.heap_max] = s.heap[1];
        gen_bitlen(s, desc);
        gen_codes(tree, max_code, s.bl_count);
      }
      function scan_tree(s, tree, max_code) {
        var n;
        var prevlen = -1;
        var curlen;
        var nextlen = tree[0 * 2 + 1];
        var count = 0;
        var max_count = 7;
        var min_count = 4;
        if (nextlen === 0) {
          max_count = 138;
          min_count = 3;
        }
        tree[(max_code + 1) * 2 + 1] = 65535;
        for (n = 0; n <= max_code; n++) {
          curlen = nextlen;
          nextlen = tree[(n + 1) * 2 + 1];
          if (++count < max_count && curlen === nextlen) {
            continue;
          } else if (count < min_count) {
            s.bl_tree[curlen * 2] += count;
          } else if (curlen !== 0) {
            if (curlen !== prevlen) {
              s.bl_tree[curlen * 2]++;
            }
            s.bl_tree[REP_3_6 * 2]++;
          } else if (count <= 10) {
            s.bl_tree[REPZ_3_10 * 2]++;
          } else {
            s.bl_tree[REPZ_11_138 * 2]++;
          }
          count = 0;
          prevlen = curlen;
          if (nextlen === 0) {
            max_count = 138;
            min_count = 3;
          } else if (curlen === nextlen) {
            max_count = 6;
            min_count = 3;
          } else {
            max_count = 7;
            min_count = 4;
          }
        }
      }
      function send_tree(s, tree, max_code) {
        var n;
        var prevlen = -1;
        var curlen;
        var nextlen = tree[0 * 2 + 1];
        var count = 0;
        var max_count = 7;
        var min_count = 4;
        if (nextlen === 0) {
          max_count = 138;
          min_count = 3;
        }
        for (n = 0; n <= max_code; n++) {
          curlen = nextlen;
          nextlen = tree[(n + 1) * 2 + 1];
          if (++count < max_count && curlen === nextlen) {
            continue;
          } else if (count < min_count) {
            do {
              send_code(s, curlen, s.bl_tree);
            } while (--count !== 0);
          } else if (curlen !== 0) {
            if (curlen !== prevlen) {
              send_code(s, curlen, s.bl_tree);
              count--;
            }
            send_code(s, REP_3_6, s.bl_tree);
            send_bits(s, count - 3, 2);
          } else if (count <= 10) {
            send_code(s, REPZ_3_10, s.bl_tree);
            send_bits(s, count - 3, 3);
          } else {
            send_code(s, REPZ_11_138, s.bl_tree);
            send_bits(s, count - 11, 7);
          }
          count = 0;
          prevlen = curlen;
          if (nextlen === 0) {
            max_count = 138;
            min_count = 3;
          } else if (curlen === nextlen) {
            max_count = 6;
            min_count = 3;
          } else {
            max_count = 7;
            min_count = 4;
          }
        }
      }
      function build_bl_tree(s) {
        var max_blindex;
        scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
        scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
        build_tree(s, s.bl_desc);
        for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {
          if (s.bl_tree[bl_order[max_blindex] * 2 + 1] !== 0) {
            break;
          }
        }
        s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
        return max_blindex;
      }
      function send_all_trees(s, lcodes, dcodes, blcodes) {
        var rank;
        send_bits(s, lcodes - 257, 5);
        send_bits(s, dcodes - 1, 5);
        send_bits(s, blcodes - 4, 4);
        for (rank = 0; rank < blcodes; rank++) {
          send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1], 3);
        }
        send_tree(s, s.dyn_ltree, lcodes - 1);
        send_tree(s, s.dyn_dtree, dcodes - 1);
      }
      function detect_data_type(s) {
        var black_mask = 4093624447;
        var n;
        for (n = 0; n <= 31; n++, black_mask >>>= 1) {
          if (black_mask & 1 && s.dyn_ltree[n * 2] !== 0) {
            return Z_BINARY;
          }
        }
        if (s.dyn_ltree[9 * 2] !== 0 || s.dyn_ltree[10 * 2] !== 0 || s.dyn_ltree[13 * 2] !== 0) {
          return Z_TEXT;
        }
        for (n = 32; n < LITERALS; n++) {
          if (s.dyn_ltree[n * 2] !== 0) {
            return Z_TEXT;
          }
        }
        return Z_BINARY;
      }
      var static_init_done = false;
      function _tr_init(s) {
        if (!static_init_done) {
          tr_static_init();
          static_init_done = true;
        }
        s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);
        s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);
        s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
        s.bi_buf = 0;
        s.bi_valid = 0;
        init_block(s);
      }
      function _tr_stored_block(s, buf, stored_len, last) {
        send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);
        copy_block(s, buf, stored_len, true);
      }
      function _tr_align(s) {
        send_bits(s, STATIC_TREES << 1, 3);
        send_code(s, END_BLOCK, static_ltree);
        bi_flush(s);
      }
      function _tr_flush_block(s, buf, stored_len, last) {
        var opt_lenb, static_lenb;
        var max_blindex = 0;
        if (s.level > 0) {
          if (s.strm.data_type === Z_UNKNOWN) {
            s.strm.data_type = detect_data_type(s);
          }
          build_tree(s, s.l_desc);
          build_tree(s, s.d_desc);
          max_blindex = build_bl_tree(s);
          opt_lenb = s.opt_len + 3 + 7 >>> 3;
          static_lenb = s.static_len + 3 + 7 >>> 3;
          if (static_lenb <= opt_lenb) {
            opt_lenb = static_lenb;
          }
        } else {
          opt_lenb = static_lenb = stored_len + 5;
        }
        if (stored_len + 4 <= opt_lenb && buf !== -1) {
          _tr_stored_block(s, buf, stored_len, last);
        } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {
          send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);
          compress_block(s, static_ltree, static_dtree);
        } else {
          send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);
          send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);
          compress_block(s, s.dyn_ltree, s.dyn_dtree);
        }
        init_block(s);
        if (last) {
          bi_windup(s);
        }
      }
      function _tr_tally(s, dist, lc) {
        s.pending_buf[s.d_buf + s.last_lit * 2] = dist >>> 8 & 255;
        s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 255;
        s.pending_buf[s.l_buf + s.last_lit] = lc & 255;
        s.last_lit++;
        if (dist === 0) {
          s.dyn_ltree[lc * 2]++;
        } else {
          s.matches++;
          dist--;
          s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]++;
          s.dyn_dtree[d_code(dist) * 2]++;
        }
        return s.last_lit === s.lit_bufsize - 1;
      }
      exports._tr_init = _tr_init;
      exports._tr_stored_block = _tr_stored_block;
      exports._tr_flush_block = _tr_flush_block;
      exports._tr_tally = _tr_tally;
      exports._tr_align = _tr_align;
    }
  });

  // node_modules/pako/lib/zlib/adler32.js
  var require_adler32 = __commonJS({
    "node_modules/pako/lib/zlib/adler32.js"(exports, module) {
      "use strict";
      function adler32(adler, buf, len, pos) {
        var s1 = adler & 65535 | 0, s2 = adler >>> 16 & 65535 | 0, n = 0;
        while (len !== 0) {
          n = len > 2e3 ? 2e3 : len;
          len -= n;
          do {
            s1 = s1 + buf[pos++] | 0;
            s2 = s2 + s1 | 0;
          } while (--n);
          s1 %= 65521;
          s2 %= 65521;
        }
        return s1 | s2 << 16 | 0;
      }
      module.exports = adler32;
    }
  });

  // node_modules/pako/lib/zlib/crc32.js
  var require_crc32 = __commonJS({
    "node_modules/pako/lib/zlib/crc32.js"(exports, module) {
      "use strict";
      function makeTable() {
        var c2, table = [];
        for (var n = 0; n < 256; n++) {
          c2 = n;
          for (var k = 0; k < 8; k++) {
            c2 = c2 & 1 ? 3988292384 ^ c2 >>> 1 : c2 >>> 1;
          }
          table[n] = c2;
        }
        return table;
      }
      var crcTable = makeTable();
      function crc32(crc, buf, len, pos) {
        var t = crcTable, end = pos + len;
        crc ^= -1;
        for (var i2 = pos; i2 < end; i2++) {
          crc = crc >>> 8 ^ t[(crc ^ buf[i2]) & 255];
        }
        return crc ^ -1;
      }
      module.exports = crc32;
    }
  });

  // node_modules/pako/lib/zlib/messages.js
  var require_messages = __commonJS({
    "node_modules/pako/lib/zlib/messages.js"(exports, module) {
      "use strict";
      module.exports = {
        2: "need dictionary",
        1: "stream end",
        0: "",
        "-1": "file error",
        "-2": "stream error",
        "-3": "data error",
        "-4": "insufficient memory",
        "-5": "buffer error",
        "-6": "incompatible version"
      };
    }
  });

  // node_modules/pako/lib/zlib/deflate.js
  var require_deflate = __commonJS({
    "node_modules/pako/lib/zlib/deflate.js"(exports) {
      "use strict";
      var utils = require_common();
      var trees = require_trees();
      var adler32 = require_adler32();
      var crc32 = require_crc32();
      var msg = require_messages();
      var Z_NO_FLUSH = 0;
      var Z_PARTIAL_FLUSH = 1;
      var Z_FULL_FLUSH = 3;
      var Z_FINISH = 4;
      var Z_BLOCK = 5;
      var Z_OK = 0;
      var Z_STREAM_END = 1;
      var Z_STREAM_ERROR = -2;
      var Z_DATA_ERROR = -3;
      var Z_BUF_ERROR = -5;
      var Z_DEFAULT_COMPRESSION = -1;
      var Z_FILTERED = 1;
      var Z_HUFFMAN_ONLY = 2;
      var Z_RLE = 3;
      var Z_FIXED = 4;
      var Z_DEFAULT_STRATEGY = 0;
      var Z_UNKNOWN = 2;
      var Z_DEFLATED = 8;
      var MAX_MEM_LEVEL = 9;
      var MAX_WBITS = 15;
      var DEF_MEM_LEVEL = 8;
      var LENGTH_CODES = 29;
      var LITERALS = 256;
      var L_CODES = LITERALS + 1 + LENGTH_CODES;
      var D_CODES = 30;
      var BL_CODES = 19;
      var HEAP_SIZE = 2 * L_CODES + 1;
      var MAX_BITS = 15;
      var MIN_MATCH = 3;
      var MAX_MATCH = 258;
      var MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1;
      var PRESET_DICT = 32;
      var INIT_STATE = 42;
      var EXTRA_STATE = 69;
      var NAME_STATE = 73;
      var COMMENT_STATE = 91;
      var HCRC_STATE = 103;
      var BUSY_STATE = 113;
      var FINISH_STATE = 666;
      var BS_NEED_MORE = 1;
      var BS_BLOCK_DONE = 2;
      var BS_FINISH_STARTED = 3;
      var BS_FINISH_DONE = 4;
      var OS_CODE = 3;
      function err(strm, errorCode) {
        strm.msg = msg[errorCode];
        return errorCode;
      }
      function rank(f) {
        return (f << 1) - (f > 4 ? 9 : 0);
      }
      function zero(buf) {
        var len = buf.length;
        while (--len >= 0) {
          buf[len] = 0;
        }
      }
      function flush_pending(strm) {
        var s = strm.state;
        var len = s.pending;
        if (len > strm.avail_out) {
          len = strm.avail_out;
        }
        if (len === 0) {
          return;
        }
        utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
        strm.next_out += len;
        s.pending_out += len;
        strm.total_out += len;
        strm.avail_out -= len;
        s.pending -= len;
        if (s.pending === 0) {
          s.pending_out = 0;
        }
      }
      function flush_block_only(s, last) {
        trees._tr_flush_block(s, s.block_start >= 0 ? s.block_start : -1, s.strstart - s.block_start, last);
        s.block_start = s.strstart;
        flush_pending(s.strm);
      }
      function put_byte(s, b) {
        s.pending_buf[s.pending++] = b;
      }
      function putShortMSB(s, b) {
        s.pending_buf[s.pending++] = b >>> 8 & 255;
        s.pending_buf[s.pending++] = b & 255;
      }
      function read_buf(strm, buf, start, size) {
        var len = strm.avail_in;
        if (len > size) {
          len = size;
        }
        if (len === 0) {
          return 0;
        }
        strm.avail_in -= len;
        utils.arraySet(buf, strm.input, strm.next_in, len, start);
        if (strm.state.wrap === 1) {
          strm.adler = adler32(strm.adler, buf, len, start);
        } else if (strm.state.wrap === 2) {
          strm.adler = crc32(strm.adler, buf, len, start);
        }
        strm.next_in += len;
        strm.total_in += len;
        return len;
      }
      function longest_match(s, cur_match) {
        var chain_length = s.max_chain_length;
        var scan = s.strstart;
        var match;
        var len;
        var best_len = s.prev_length;
        var nice_match = s.nice_match;
        var limit = s.strstart > s.w_size - MIN_LOOKAHEAD ? s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0;
        var _win = s.window;
        var wmask = s.w_mask;
        var prev = s.prev;
        var strend = s.strstart + MAX_MATCH;
        var scan_end1 = _win[scan + best_len - 1];
        var scan_end = _win[scan + best_len];
        if (s.prev_length >= s.good_match) {
          chain_length >>= 2;
        }
        if (nice_match > s.lookahead) {
          nice_match = s.lookahead;
        }
        do {
          match = cur_match;
          if (_win[match + best_len] !== scan_end || _win[match + best_len - 1] !== scan_end1 || _win[match] !== _win[scan] || _win[++match] !== _win[scan + 1]) {
            continue;
          }
          scan += 2;
          match++;
          do {
          } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && scan < strend);
          len = MAX_MATCH - (strend - scan);
          scan = strend - MAX_MATCH;
          if (len > best_len) {
            s.match_start = cur_match;
            best_len = len;
            if (len >= nice_match) {
              break;
            }
            scan_end1 = _win[scan + best_len - 1];
            scan_end = _win[scan + best_len];
          }
        } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
        if (best_len <= s.lookahead) {
          return best_len;
        }
        return s.lookahead;
      }
      function fill_window(s) {
        var _w_size = s.w_size;
        var p, n, m, more, str;
        do {
          more = s.window_size - s.lookahead - s.strstart;
          if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
            utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
            s.match_start -= _w_size;
            s.strstart -= _w_size;
            s.block_start -= _w_size;
            n = s.hash_size;
            p = n;
            do {
              m = s.head[--p];
              s.head[p] = m >= _w_size ? m - _w_size : 0;
            } while (--n);
            n = _w_size;
            p = n;
            do {
              m = s.prev[--p];
              s.prev[p] = m >= _w_size ? m - _w_size : 0;
            } while (--n);
            more += _w_size;
          }
          if (s.strm.avail_in === 0) {
            break;
          }
          n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
          s.lookahead += n;
          if (s.lookahead + s.insert >= MIN_MATCH) {
            str = s.strstart - s.insert;
            s.ins_h = s.window[str];
            s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + 1]) & s.hash_mask;
            while (s.insert) {
              s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
              s.prev[str & s.w_mask] = s.head[s.ins_h];
              s.head[s.ins_h] = str;
              str++;
              s.insert--;
              if (s.lookahead + s.insert < MIN_MATCH) {
                break;
              }
            }
          }
        } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
      }
      function deflate_stored(s, flush) {
        var max_block_size = 65535;
        if (max_block_size > s.pending_buf_size - 5) {
          max_block_size = s.pending_buf_size - 5;
        }
        for (; ; ) {
          if (s.lookahead <= 1) {
            fill_window(s);
            if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
              return BS_NEED_MORE;
            }
            if (s.lookahead === 0) {
              break;
            }
          }
          s.strstart += s.lookahead;
          s.lookahead = 0;
          var max_start = s.block_start + max_block_size;
          if (s.strstart === 0 || s.strstart >= max_start) {
            s.lookahead = s.strstart - max_start;
            s.strstart = max_start;
            flush_block_only(s, false);
            if (s.strm.avail_out === 0) {
              return BS_NEED_MORE;
            }
          }
          if (s.strstart - s.block_start >= s.w_size - MIN_LOOKAHEAD) {
            flush_block_only(s, false);
            if (s.strm.avail_out === 0) {
              return BS_NEED_MORE;
            }
          }
        }
        s.insert = 0;
        if (flush === Z_FINISH) {
          flush_block_only(s, true);
          if (s.strm.avail_out === 0) {
            return BS_FINISH_STARTED;
          }
          return BS_FINISH_DONE;
        }
        if (s.strstart > s.block_start) {
          flush_block_only(s, false);
          if (s.strm.avail_out === 0) {
            return BS_NEED_MORE;
          }
        }
        return BS_NEED_MORE;
      }
      function deflate_fast(s, flush) {
        var hash_head;
        var bflush;
        for (; ; ) {
          if (s.lookahead < MIN_LOOKAHEAD) {
            fill_window(s);
            if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
              return BS_NEED_MORE;
            }
            if (s.lookahead === 0) {
              break;
            }
          }
          hash_head = 0;
          if (s.lookahead >= MIN_MATCH) {
            s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
            hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
            s.head[s.ins_h] = s.strstart;
          }
          if (hash_head !== 0 && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) {
            s.match_length = longest_match(s, hash_head);
          }
          if (s.match_length >= MIN_MATCH) {
            bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
            s.lookahead -= s.match_length;
            if (s.match_length <= s.max_lazy_match && s.lookahead >= MIN_MATCH) {
              s.match_length--;
              do {
                s.strstart++;
                s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
                hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
                s.head[s.ins_h] = s.strstart;
              } while (--s.match_length !== 0);
              s.strstart++;
            } else {
              s.strstart += s.match_length;
              s.match_length = 0;
              s.ins_h = s.window[s.strstart];
              s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + 1]) & s.hash_mask;
            }
          } else {
            bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
            s.lookahead--;
            s.strstart++;
          }
          if (bflush) {
            flush_block_only(s, false);
            if (s.strm.avail_out === 0) {
              return BS_NEED_MORE;
            }
          }
        }
        s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
        if (flush === Z_FINISH) {
          flush_block_only(s, true);
          if (s.strm.avail_out === 0) {
            return BS_FINISH_STARTED;
          }
          return BS_FINISH_DONE;
        }
        if (s.last_lit) {
          flush_block_only(s, false);
          if (s.strm.avail_out === 0) {
            return BS_NEED_MORE;
          }
        }
        return BS_BLOCK_DONE;
      }
      function deflate_slow(s, flush) {
        var hash_head;
        var bflush;
        var max_insert;
        for (; ; ) {
          if (s.lookahead < MIN_LOOKAHEAD) {
            fill_window(s);
            if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
              return BS_NEED_MORE;
            }
            if (s.lookahead === 0) {
              break;
            }
          }
          hash_head = 0;
          if (s.lookahead >= MIN_MATCH) {
            s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
            hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
            s.head[s.ins_h] = s.strstart;
          }
          s.prev_length = s.match_length;
          s.prev_match = s.match_start;
          s.match_length = MIN_MATCH - 1;
          if (hash_head !== 0 && s.prev_length < s.max_lazy_match && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) {
            s.match_length = longest_match(s, hash_head);
            if (s.match_length <= 5 && (s.strategy === Z_FILTERED || s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096)) {
              s.match_length = MIN_MATCH - 1;
            }
          }
          if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
            max_insert = s.strstart + s.lookahead - MIN_MATCH;
            bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);
            s.lookahead -= s.prev_length - 1;
            s.prev_length -= 2;
            do {
              if (++s.strstart <= max_insert) {
                s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
                hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
                s.head[s.ins_h] = s.strstart;
              }
            } while (--s.prev_length !== 0);
            s.match_available = 0;
            s.match_length = MIN_MATCH - 1;
            s.strstart++;
            if (bflush) {
              flush_block_only(s, false);
              if (s.strm.avail_out === 0) {
                return BS_NEED_MORE;
              }
            }
          } else if (s.match_available) {
            bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
            if (bflush) {
              flush_block_only(s, false);
            }
            s.strstart++;
            s.lookahead--;
            if (s.strm.avail_out === 0) {
              return BS_NEED_MORE;
            }
          } else {
            s.match_available = 1;
            s.strstart++;
            s.lookahead--;
          }
        }
        if (s.match_available) {
          bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
          s.match_available = 0;
        }
        s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
        if (flush === Z_FINISH) {
          flush_block_only(s, true);
          if (s.strm.avail_out === 0) {
            return BS_FINISH_STARTED;
          }
          return BS_FINISH_DONE;
        }
        if (s.last_lit) {
          flush_block_only(s, false);
          if (s.strm.avail_out === 0) {
            return BS_NEED_MORE;
          }
        }
        return BS_BLOCK_DONE;
      }
      function deflate_rle(s, flush) {
        var bflush;
        var prev;
        var scan, strend;
        var _win = s.window;
        for (; ; ) {
          if (s.lookahead <= MAX_MATCH) {
            fill_window(s);
            if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
              return BS_NEED_MORE;
            }
            if (s.lookahead === 0) {
              break;
            }
          }
          s.match_length = 0;
          if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
            scan = s.strstart - 1;
            prev = _win[scan];
            if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
              strend = s.strstart + MAX_MATCH;
              do {
              } while (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && scan < strend);
              s.match_length = MAX_MATCH - (strend - scan);
              if (s.match_length > s.lookahead) {
                s.match_length = s.lookahead;
              }
            }
          }
          if (s.match_length >= MIN_MATCH) {
            bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);
            s.lookahead -= s.match_length;
            s.strstart += s.match_length;
            s.match_length = 0;
          } else {
            bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
            s.lookahead--;
            s.strstart++;
          }
          if (bflush) {
            flush_block_only(s, false);
            if (s.strm.avail_out === 0) {
              return BS_NEED_MORE;
            }
          }
        }
        s.insert = 0;
        if (flush === Z_FINISH) {
          flush_block_only(s, true);
          if (s.strm.avail_out === 0) {
            return BS_FINISH_STARTED;
          }
          return BS_FINISH_DONE;
        }
        if (s.last_lit) {
          flush_block_only(s, false);
          if (s.strm.avail_out === 0) {
            return BS_NEED_MORE;
          }
        }
        return BS_BLOCK_DONE;
      }
      function deflate_huff(s, flush) {
        var bflush;
        for (; ; ) {
          if (s.lookahead === 0) {
            fill_window(s);
            if (s.lookahead === 0) {
              if (flush === Z_NO_FLUSH) {
                return BS_NEED_MORE;
              }
              break;
            }
          }
          s.match_length = 0;
          bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
          s.lookahead--;
          s.strstart++;
          if (bflush) {
            flush_block_only(s, false);
            if (s.strm.avail_out === 0) {
              return BS_NEED_MORE;
            }
          }
        }
        s.insert = 0;
        if (flush === Z_FINISH) {
          flush_block_only(s, true);
          if (s.strm.avail_out === 0) {
            return BS_FINISH_STARTED;
          }
          return BS_FINISH_DONE;
        }
        if (s.last_lit) {
          flush_block_only(s, false);
          if (s.strm.avail_out === 0) {
            return BS_NEED_MORE;
          }
        }
        return BS_BLOCK_DONE;
      }
      function Config(good_length, max_lazy, nice_length, max_chain, func) {
        this.good_length = good_length;
        this.max_lazy = max_lazy;
        this.nice_length = nice_length;
        this.max_chain = max_chain;
        this.func = func;
      }
      var configuration_table;
      configuration_table = [
        new Config(0, 0, 0, 0, deflate_stored),
        new Config(4, 4, 8, 4, deflate_fast),
        new Config(4, 5, 16, 8, deflate_fast),
        new Config(4, 6, 32, 32, deflate_fast),
        new Config(4, 4, 16, 16, deflate_slow),
        new Config(8, 16, 32, 32, deflate_slow),
        new Config(8, 16, 128, 128, deflate_slow),
        new Config(8, 32, 128, 256, deflate_slow),
        new Config(32, 128, 258, 1024, deflate_slow),
        new Config(32, 258, 258, 4096, deflate_slow)
      ];
      function lm_init(s) {
        s.window_size = 2 * s.w_size;
        zero(s.head);
        s.max_lazy_match = configuration_table[s.level].max_lazy;
        s.good_match = configuration_table[s.level].good_length;
        s.nice_match = configuration_table[s.level].nice_length;
        s.max_chain_length = configuration_table[s.level].max_chain;
        s.strstart = 0;
        s.block_start = 0;
        s.lookahead = 0;
        s.insert = 0;
        s.match_length = s.prev_length = MIN_MATCH - 1;
        s.match_available = 0;
        s.ins_h = 0;
      }
      function DeflateState() {
        this.strm = null;
        this.status = 0;
        this.pending_buf = null;
        this.pending_buf_size = 0;
        this.pending_out = 0;
        this.pending = 0;
        this.wrap = 0;
        this.gzhead = null;
        this.gzindex = 0;
        this.method = Z_DEFLATED;
        this.last_flush = -1;
        this.w_size = 0;
        this.w_bits = 0;
        this.w_mask = 0;
        this.window = null;
        this.window_size = 0;
        this.prev = null;
        this.head = null;
        this.ins_h = 0;
        this.hash_size = 0;
        this.hash_bits = 0;
        this.hash_mask = 0;
        this.hash_shift = 0;
        this.block_start = 0;
        this.match_length = 0;
        this.prev_match = 0;
        this.match_available = 0;
        this.strstart = 0;
        this.match_start = 0;
        this.lookahead = 0;
        this.prev_length = 0;
        this.max_chain_length = 0;
        this.max_lazy_match = 0;
        this.level = 0;
        this.strategy = 0;
        this.good_match = 0;
        this.nice_match = 0;
        this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);
        this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);
        this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);
        zero(this.dyn_ltree);
        zero(this.dyn_dtree);
        zero(this.bl_tree);
        this.l_desc = null;
        this.d_desc = null;
        this.bl_desc = null;
        this.bl_count = new utils.Buf16(MAX_BITS + 1);
        this.heap = new utils.Buf16(2 * L_CODES + 1);
        zero(this.heap);
        this.heap_len = 0;
        this.heap_max = 0;
        this.depth = new utils.Buf16(2 * L_CODES + 1);
        zero(this.depth);
        this.l_buf = 0;
        this.lit_bufsize = 0;
        this.last_lit = 0;
        this.d_buf = 0;
        this.opt_len = 0;
        this.static_len = 0;
        this.matches = 0;
        this.insert = 0;
        this.bi_buf = 0;
        this.bi_valid = 0;
      }
      function deflateResetKeep(strm) {
        var s;
        if (!strm || !strm.state) {
          return err(strm, Z_STREAM_ERROR);
        }
        strm.total_in = strm.total_out = 0;
        strm.data_type = Z_UNKNOWN;
        s = strm.state;
        s.pending = 0;
        s.pending_out = 0;
        if (s.wrap < 0) {
          s.wrap = -s.wrap;
        }
        s.status = s.wrap ? INIT_STATE : BUSY_STATE;
        strm.adler = s.wrap === 2 ? 0 : 1;
        s.last_flush = Z_NO_FLUSH;
        trees._tr_init(s);
        return Z_OK;
      }
      function deflateReset(strm) {
        var ret = deflateResetKeep(strm);
        if (ret === Z_OK) {
          lm_init(strm.state);
        }
        return ret;
      }
      function deflateSetHeader(strm, head) {
        if (!strm || !strm.state) {
          return Z_STREAM_ERROR;
        }
        if (strm.state.wrap !== 2) {
          return Z_STREAM_ERROR;
        }
        strm.state.gzhead = head;
        return Z_OK;
      }
      function deflateInit2(strm, level, method2, windowBits, memLevel, strategy) {
        if (!strm) {
          return Z_STREAM_ERROR;
        }
        var wrap = 1;
        if (level === Z_DEFAULT_COMPRESSION) {
          level = 6;
        }
        if (windowBits < 0) {
          wrap = 0;
          windowBits = -windowBits;
        } else if (windowBits > 15) {
          wrap = 2;
          windowBits -= 16;
        }
        if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method2 !== Z_DEFLATED || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
          return err(strm, Z_STREAM_ERROR);
        }
        if (windowBits === 8) {
          windowBits = 9;
        }
        var s = new DeflateState();
        strm.state = s;
        s.strm = strm;
        s.wrap = wrap;
        s.gzhead = null;
        s.w_bits = windowBits;
        s.w_size = 1 << s.w_bits;
        s.w_mask = s.w_size - 1;
        s.hash_bits = memLevel + 7;
        s.hash_size = 1 << s.hash_bits;
        s.hash_mask = s.hash_size - 1;
        s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
        s.window = new utils.Buf8(s.w_size * 2);
        s.head = new utils.Buf16(s.hash_size);
        s.prev = new utils.Buf16(s.w_size);
        s.lit_bufsize = 1 << memLevel + 6;
        s.pending_buf_size = s.lit_bufsize * 4;
        s.pending_buf = new utils.Buf8(s.pending_buf_size);
        s.d_buf = 1 * s.lit_bufsize;
        s.l_buf = (1 + 2) * s.lit_bufsize;
        s.level = level;
        s.strategy = strategy;
        s.method = method2;
        return deflateReset(strm);
      }
      function deflateInit(strm, level) {
        return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
      }
      function deflate(strm, flush) {
        var old_flush, s;
        var beg, val;
        if (!strm || !strm.state || flush > Z_BLOCK || flush < 0) {
          return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
        }
        s = strm.state;
        if (!strm.output || !strm.input && strm.avail_in !== 0 || s.status === FINISH_STATE && flush !== Z_FINISH) {
          return err(strm, strm.avail_out === 0 ? Z_BUF_ERROR : Z_STREAM_ERROR);
        }
        s.strm = strm;
        old_flush = s.last_flush;
        s.last_flush = flush;
        if (s.status === INIT_STATE) {
          if (s.wrap === 2) {
            strm.adler = 0;
            put_byte(s, 31);
            put_byte(s, 139);
            put_byte(s, 8);
            if (!s.gzhead) {
              put_byte(s, 0);
              put_byte(s, 0);
              put_byte(s, 0);
              put_byte(s, 0);
              put_byte(s, 0);
              put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0);
              put_byte(s, OS_CODE);
              s.status = BUSY_STATE;
            } else {
              put_byte(s, (s.gzhead.text ? 1 : 0) + (s.gzhead.hcrc ? 2 : 0) + (!s.gzhead.extra ? 0 : 4) + (!s.gzhead.name ? 0 : 8) + (!s.gzhead.comment ? 0 : 16));
              put_byte(s, s.gzhead.time & 255);
              put_byte(s, s.gzhead.time >> 8 & 255);
              put_byte(s, s.gzhead.time >> 16 & 255);
              put_byte(s, s.gzhead.time >> 24 & 255);
              put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0);
              put_byte(s, s.gzhead.os & 255);
              if (s.gzhead.extra && s.gzhead.extra.length) {
                put_byte(s, s.gzhead.extra.length & 255);
                put_byte(s, s.gzhead.extra.length >> 8 & 255);
              }
              if (s.gzhead.hcrc) {
                strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
              }
              s.gzindex = 0;
              s.status = EXTRA_STATE;
            }
          } else {
            var header = Z_DEFLATED + (s.w_bits - 8 << 4) << 8;
            var level_flags = -1;
            if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
              level_flags = 0;
            } else if (s.level < 6) {
              level_flags = 1;
            } else if (s.level === 6) {
              level_flags = 2;
            } else {
              level_flags = 3;
            }
            header |= level_flags << 6;
            if (s.strstart !== 0) {
              header |= PRESET_DICT;
            }
            header += 31 - header % 31;
            s.status = BUSY_STATE;
            putShortMSB(s, header);
            if (s.strstart !== 0) {
              putShortMSB(s, strm.adler >>> 16);
              putShortMSB(s, strm.adler & 65535);
            }
            strm.adler = 1;
          }
        }
        if (s.status === EXTRA_STATE) {
          if (s.gzhead.extra) {
            beg = s.pending;
            while (s.gzindex < (s.gzhead.extra.length & 65535)) {
              if (s.pending === s.pending_buf_size) {
                if (s.gzhead.hcrc && s.pending > beg) {
                  strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
                }
                flush_pending(strm);
                beg = s.pending;
                if (s.pending === s.pending_buf_size) {
                  break;
                }
              }
              put_byte(s, s.gzhead.extra[s.gzindex] & 255);
              s.gzindex++;
            }
            if (s.gzhead.hcrc && s.pending > beg) {
              strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
            }
            if (s.gzindex === s.gzhead.extra.length) {
              s.gzindex = 0;
              s.status = NAME_STATE;
            }
          } else {
            s.status = NAME_STATE;
          }
        }
        if (s.status === NAME_STATE) {
          if (s.gzhead.name) {
            beg = s.pending;
            do {
              if (s.pending === s.pending_buf_size) {
                if (s.gzhead.hcrc && s.pending > beg) {
                  strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
                }
                flush_pending(strm);
                beg = s.pending;
                if (s.pending === s.pending_buf_size) {
                  val = 1;
                  break;
                }
              }
              if (s.gzindex < s.gzhead.name.length) {
                val = s.gzhead.name.charCodeAt(s.gzindex++) & 255;
              } else {
                val = 0;
              }
              put_byte(s, val);
            } while (val !== 0);
            if (s.gzhead.hcrc && s.pending > beg) {
              strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
            }
            if (val === 0) {
              s.gzindex = 0;
              s.status = COMMENT_STATE;
            }
          } else {
            s.status = COMMENT_STATE;
          }
        }
        if (s.status === COMMENT_STATE) {
          if (s.gzhead.comment) {
            beg = s.pending;
            do {
              if (s.pending === s.pending_buf_size) {
                if (s.gzhead.hcrc && s.pending > beg) {
                  strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
                }
                flush_pending(strm);
                beg = s.pending;
                if (s.pending === s.pending_buf_size) {
                  val = 1;
                  break;
                }
              }
              if (s.gzindex < s.gzhead.comment.length) {
                val = s.gzhead.comment.charCodeAt(s.gzindex++) & 255;
              } else {
                val = 0;
              }
              put_byte(s, val);
            } while (val !== 0);
            if (s.gzhead.hcrc && s.pending > beg) {
              strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
            }
            if (val === 0) {
              s.status = HCRC_STATE;
            }
          } else {
            s.status = HCRC_STATE;
          }
        }
        if (s.status === HCRC_STATE) {
          if (s.gzhead.hcrc) {
            if (s.pending + 2 > s.pending_buf_size) {
              flush_pending(strm);
            }
            if (s.pending + 2 <= s.pending_buf_size) {
              put_byte(s, strm.adler & 255);
              put_byte(s, strm.adler >> 8 & 255);
              strm.adler = 0;
              s.status = BUSY_STATE;
            }
          } else {
            s.status = BUSY_STATE;
          }
        }
        if (s.pending !== 0) {
          flush_pending(strm);
          if (strm.avail_out === 0) {
            s.last_flush = -1;
            return Z_OK;
          }
        } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && flush !== Z_FINISH) {
          return err(strm, Z_BUF_ERROR);
        }
        if (s.status === FINISH_STATE && strm.avail_in !== 0) {
          return err(strm, Z_BUF_ERROR);
        }
        if (strm.avail_in !== 0 || s.lookahead !== 0 || flush !== Z_NO_FLUSH && s.status !== FINISH_STATE) {
          var bstate = s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : s.strategy === Z_RLE ? deflate_rle(s, flush) : configuration_table[s.level].func(s, flush);
          if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
            s.status = FINISH_STATE;
          }
          if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
            if (strm.avail_out === 0) {
              s.last_flush = -1;
            }
            return Z_OK;
          }
          if (bstate === BS_BLOCK_DONE) {
            if (flush === Z_PARTIAL_FLUSH) {
              trees._tr_align(s);
            } else if (flush !== Z_BLOCK) {
              trees._tr_stored_block(s, 0, 0, false);
              if (flush === Z_FULL_FLUSH) {
                zero(s.head);
                if (s.lookahead === 0) {
                  s.strstart = 0;
                  s.block_start = 0;
                  s.insert = 0;
                }
              }
            }
            flush_pending(strm);
            if (strm.avail_out === 0) {
              s.last_flush = -1;
              return Z_OK;
            }
          }
        }
        if (flush !== Z_FINISH) {
          return Z_OK;
        }
        if (s.wrap <= 0) {
          return Z_STREAM_END;
        }
        if (s.wrap === 2) {
          put_byte(s, strm.adler & 255);
          put_byte(s, strm.adler >> 8 & 255);
          put_byte(s, strm.adler >> 16 & 255);
          put_byte(s, strm.adler >> 24 & 255);
          put_byte(s, strm.total_in & 255);
          put_byte(s, strm.total_in >> 8 & 255);
          put_byte(s, strm.total_in >> 16 & 255);
          put_byte(s, strm.total_in >> 24 & 255);
        } else {
          putShortMSB(s, strm.adler >>> 16);
          putShortMSB(s, strm.adler & 65535);
        }
        flush_pending(strm);
        if (s.wrap > 0) {
          s.wrap = -s.wrap;
        }
        return s.pending !== 0 ? Z_OK : Z_STREAM_END;
      }
      function deflateEnd(strm) {
        var status;
        if (!strm || !strm.state) {
          return Z_STREAM_ERROR;
        }
        status = strm.state.status;
        if (status !== INIT_STATE && status !== EXTRA_STATE && status !== NAME_STATE && status !== COMMENT_STATE && status !== HCRC_STATE && status !== BUSY_STATE && status !== FINISH_STATE) {
          return err(strm, Z_STREAM_ERROR);
        }
        strm.state = null;
        return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
      }
      function deflateSetDictionary(strm, dictionary) {
        var dictLength = dictionary.length;
        var s;
        var str, n;
        var wrap;
        var avail;
        var next;
        var input;
        var tmpDict;
        if (!strm || !strm.state) {
          return Z_STREAM_ERROR;
        }
        s = strm.state;
        wrap = s.wrap;
        if (wrap === 2 || wrap === 1 && s.status !== INIT_STATE || s.lookahead) {
          return Z_STREAM_ERROR;
        }
        if (wrap === 1) {
          strm.adler = adler32(strm.adler, dictionary, dictLength, 0);
        }
        s.wrap = 0;
        if (dictLength >= s.w_size) {
          if (wrap === 0) {
            zero(s.head);
            s.strstart = 0;
            s.block_start = 0;
            s.insert = 0;
          }
          tmpDict = new utils.Buf8(s.w_size);
          utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);
          dictionary = tmpDict;
          dictLength = s.w_size;
        }
        avail = strm.avail_in;
        next = strm.next_in;
        input = strm.input;
        strm.avail_in = dictLength;
        strm.next_in = 0;
        strm.input = dictionary;
        fill_window(s);
        while (s.lookahead >= MIN_MATCH) {
          str = s.strstart;
          n = s.lookahead - (MIN_MATCH - 1);
          do {
            s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
            s.prev[str & s.w_mask] = s.head[s.ins_h];
            s.head[s.ins_h] = str;
            str++;
          } while (--n);
          s.strstart = str;
          s.lookahead = MIN_MATCH - 1;
          fill_window(s);
        }
        s.strstart += s.lookahead;
        s.block_start = s.strstart;
        s.insert = s.lookahead;
        s.lookahead = 0;
        s.match_length = s.prev_length = MIN_MATCH - 1;
        s.match_available = 0;
        strm.next_in = next;
        strm.input = input;
        strm.avail_in = avail;
        s.wrap = wrap;
        return Z_OK;
      }
      exports.deflateInit = deflateInit;
      exports.deflateInit2 = deflateInit2;
      exports.deflateReset = deflateReset;
      exports.deflateResetKeep = deflateResetKeep;
      exports.deflateSetHeader = deflateSetHeader;
      exports.deflate = deflate;
      exports.deflateEnd = deflateEnd;
      exports.deflateSetDictionary = deflateSetDictionary;
      exports.deflateInfo = "pako deflate (from Nodeca project)";
    }
  });

  // node_modules/pako/lib/utils/strings.js
  var require_strings = __commonJS({
    "node_modules/pako/lib/utils/strings.js"(exports) {
      "use strict";
      var utils = require_common();
      var STR_APPLY_OK = true;
      var STR_APPLY_UIA_OK = true;
      try {
        String.fromCharCode.apply(null, [0]);
      } catch (__) {
        STR_APPLY_OK = false;
      }
      try {
        String.fromCharCode.apply(null, new Uint8Array(1));
      } catch (__) {
        STR_APPLY_UIA_OK = false;
      }
      var _utf8len = new utils.Buf8(256);
      for (var q = 0; q < 256; q++) {
        _utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1;
      }
      _utf8len[254] = _utf8len[254] = 1;
      exports.string2buf = function(str) {
        var buf, c2, c22, m_pos, i2, str_len = str.length, buf_len = 0;
        for (m_pos = 0; m_pos < str_len; m_pos++) {
          c2 = str.charCodeAt(m_pos);
          if ((c2 & 64512) === 55296 && m_pos + 1 < str_len) {
            c22 = str.charCodeAt(m_pos + 1);
            if ((c22 & 64512) === 56320) {
              c2 = 65536 + (c2 - 55296 << 10) + (c22 - 56320);
              m_pos++;
            }
          }
          buf_len += c2 < 128 ? 1 : c2 < 2048 ? 2 : c2 < 65536 ? 3 : 4;
        }
        buf = new utils.Buf8(buf_len);
        for (i2 = 0, m_pos = 0; i2 < buf_len; m_pos++) {
          c2 = str.charCodeAt(m_pos);
          if ((c2 & 64512) === 55296 && m_pos + 1 < str_len) {
            c22 = str.charCodeAt(m_pos + 1);
            if ((c22 & 64512) === 56320) {
              c2 = 65536 + (c2 - 55296 << 10) + (c22 - 56320);
              m_pos++;
            }
          }
          if (c2 < 128) {
            buf[i2++] = c2;
          } else if (c2 < 2048) {
            buf[i2++] = 192 | c2 >>> 6;
            buf[i2++] = 128 | c2 & 63;
          } else if (c2 < 65536) {
            buf[i2++] = 224 | c2 >>> 12;
            buf[i2++] = 128 | c2 >>> 6 & 63;
            buf[i2++] = 128 | c2 & 63;
          } else {
            buf[i2++] = 240 | c2 >>> 18;
            buf[i2++] = 128 | c2 >>> 12 & 63;
            buf[i2++] = 128 | c2 >>> 6 & 63;
            buf[i2++] = 128 | c2 & 63;
          }
        }
        return buf;
      };
      function buf2binstring(buf, len) {
        if (len < 65534) {
          if (buf.subarray && STR_APPLY_UIA_OK || !buf.subarray && STR_APPLY_OK) {
            return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));
          }
        }
        var result = "";
        for (var i2 = 0; i2 < len; i2++) {
          result += String.fromCharCode(buf[i2]);
        }
        return result;
      }
      exports.buf2binstring = function(buf) {
        return buf2binstring(buf, buf.length);
      };
      exports.binstring2buf = function(str) {
        var buf = new utils.Buf8(str.length);
        for (var i2 = 0, len = buf.length; i2 < len; i2++) {
          buf[i2] = str.charCodeAt(i2);
        }
        return buf;
      };
      exports.buf2string = function(buf, max) {
        var i2, out, c2, c_len;
        var len = max || buf.length;
        var utf16buf = new Array(len * 2);
        for (out = 0, i2 = 0; i2 < len; ) {
          c2 = buf[i2++];
          if (c2 < 128) {
            utf16buf[out++] = c2;
            continue;
          }
          c_len = _utf8len[c2];
          if (c_len > 4) {
            utf16buf[out++] = 65533;
            i2 += c_len - 1;
            continue;
          }
          c2 &= c_len === 2 ? 31 : c_len === 3 ? 15 : 7;
          while (c_len > 1 && i2 < len) {
            c2 = c2 << 6 | buf[i2++] & 63;
            c_len--;
          }
          if (c_len > 1) {
            utf16buf[out++] = 65533;
            continue;
          }
          if (c2 < 65536) {
            utf16buf[out++] = c2;
          } else {
            c2 -= 65536;
            utf16buf[out++] = 55296 | c2 >> 10 & 1023;
            utf16buf[out++] = 56320 | c2 & 1023;
          }
        }
        return buf2binstring(utf16buf, out);
      };
      exports.utf8border = function(buf, max) {
        var pos;
        max = max || buf.length;
        if (max > buf.length) {
          max = buf.length;
        }
        pos = max - 1;
        while (pos >= 0 && (buf[pos] & 192) === 128) {
          pos--;
        }
        if (pos < 0) {
          return max;
        }
        if (pos === 0) {
          return max;
        }
        return pos + _utf8len[buf[pos]] > max ? pos : max;
      };
    }
  });

  // node_modules/pako/lib/zlib/zstream.js
  var require_zstream = __commonJS({
    "node_modules/pako/lib/zlib/zstream.js"(exports, module) {
      "use strict";
      function ZStream() {
        this.input = null;
        this.next_in = 0;
        this.avail_in = 0;
        this.total_in = 0;
        this.output = null;
        this.next_out = 0;
        this.avail_out = 0;
        this.total_out = 0;
        this.msg = "";
        this.state = null;
        this.data_type = 2;
        this.adler = 0;
      }
      module.exports = ZStream;
    }
  });

  // node_modules/pako/lib/deflate.js
  var require_deflate2 = __commonJS({
    "node_modules/pako/lib/deflate.js"(exports) {
      "use strict";
      var zlib_deflate = require_deflate();
      var utils = require_common();
      var strings = require_strings();
      var msg = require_messages();
      var ZStream = require_zstream();
      var toString2 = Object.prototype.toString;
      var Z_NO_FLUSH = 0;
      var Z_FINISH = 4;
      var Z_OK = 0;
      var Z_STREAM_END = 1;
      var Z_SYNC_FLUSH = 2;
      var Z_DEFAULT_COMPRESSION = -1;
      var Z_DEFAULT_STRATEGY = 0;
      var Z_DEFLATED = 8;
      function Deflate(options) {
        if (!(this instanceof Deflate))
          return new Deflate(options);
        this.options = utils.assign({
          level: Z_DEFAULT_COMPRESSION,
          method: Z_DEFLATED,
          chunkSize: 16384,
          windowBits: 15,
          memLevel: 8,
          strategy: Z_DEFAULT_STRATEGY,
          to: ""
        }, options || {});
        var opt = this.options;
        if (opt.raw && opt.windowBits > 0) {
          opt.windowBits = -opt.windowBits;
        } else if (opt.gzip && opt.windowBits > 0 && opt.windowBits < 16) {
          opt.windowBits += 16;
        }
        this.err = 0;
        this.msg = "";
        this.ended = false;
        this.chunks = [];
        this.strm = new ZStream();
        this.strm.avail_out = 0;
        var status = zlib_deflate.deflateInit2(this.strm, opt.level, opt.method, opt.windowBits, opt.memLevel, opt.strategy);
        if (status !== Z_OK) {
          throw new Error(msg[status]);
        }
        if (opt.header) {
          zlib_deflate.deflateSetHeader(this.strm, opt.header);
        }
        if (opt.dictionary) {
          var dict;
          if (typeof opt.dictionary === "string") {
            dict = strings.string2buf(opt.dictionary);
          } else if (toString2.call(opt.dictionary) === "[object ArrayBuffer]") {
            dict = new Uint8Array(opt.dictionary);
          } else {
            dict = opt.dictionary;
          }
          status = zlib_deflate.deflateSetDictionary(this.strm, dict);
          if (status !== Z_OK) {
            throw new Error(msg[status]);
          }
          this._dict_set = true;
        }
      }
      Deflate.prototype.push = function(data, mode) {
        var strm = this.strm;
        var chunkSize = this.options.chunkSize;
        var status, _mode;
        if (this.ended) {
          return false;
        }
        _mode = mode === ~~mode ? mode : mode === true ? Z_FINISH : Z_NO_FLUSH;
        if (typeof data === "string") {
          strm.input = strings.string2buf(data);
        } else if (toString2.call(data) === "[object ArrayBuffer]") {
          strm.input = new Uint8Array(data);
        } else {
          strm.input = data;
        }
        strm.next_in = 0;
        strm.avail_in = strm.input.length;
        do {
          if (strm.avail_out === 0) {
            strm.output = new utils.Buf8(chunkSize);
            strm.next_out = 0;
            strm.avail_out = chunkSize;
          }
          status = zlib_deflate.deflate(strm, _mode);
          if (status !== Z_STREAM_END && status !== Z_OK) {
            this.onEnd(status);
            this.ended = true;
            return false;
          }
          if (strm.avail_out === 0 || strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH)) {
            if (this.options.to === "string") {
              this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));
            } else {
              this.onData(utils.shrinkBuf(strm.output, strm.next_out));
            }
          }
        } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);
        if (_mode === Z_FINISH) {
          status = zlib_deflate.deflateEnd(this.strm);
          this.onEnd(status);
          this.ended = true;
          return status === Z_OK;
        }
        if (_mode === Z_SYNC_FLUSH) {
          this.onEnd(Z_OK);
          strm.avail_out = 0;
          return true;
        }
        return true;
      };
      Deflate.prototype.onData = function(chunk) {
        this.chunks.push(chunk);
      };
      Deflate.prototype.onEnd = function(status) {
        if (status === Z_OK) {
          if (this.options.to === "string") {
            this.result = this.chunks.join("");
          } else {
            this.result = utils.flattenChunks(this.chunks);
          }
        }
        this.chunks = [];
        this.err = status;
        this.msg = this.strm.msg;
      };
      function deflate(input, options) {
        var deflator = new Deflate(options);
        deflator.push(input, true);
        if (deflator.err) {
          throw deflator.msg || msg[deflator.err];
        }
        return deflator.result;
      }
      function deflateRaw(input, options) {
        options = options || {};
        options.raw = true;
        return deflate(input, options);
      }
      function gzip(input, options) {
        options = options || {};
        options.gzip = true;
        return deflate(input, options);
      }
      exports.Deflate = Deflate;
      exports.deflate = deflate;
      exports.deflateRaw = deflateRaw;
      exports.gzip = gzip;
    }
  });

  // node_modules/pako/lib/zlib/inffast.js
  var require_inffast = __commonJS({
    "node_modules/pako/lib/zlib/inffast.js"(exports, module) {
      "use strict";
      var BAD = 30;
      var TYPE = 12;
      module.exports = function inflate_fast(strm, start) {
        var state;
        var _in;
        var last;
        var _out;
        var beg;
        var end;
        var dmax;
        var wsize;
        var whave;
        var wnext;
        var s_window;
        var hold;
        var bits;
        var lcode;
        var dcode;
        var lmask;
        var dmask;
        var here;
        var op;
        var len;
        var dist;
        var from;
        var from_source;
        var input, output;
        state = strm.state;
        _in = strm.next_in;
        input = strm.input;
        last = _in + (strm.avail_in - 5);
        _out = strm.next_out;
        output = strm.output;
        beg = _out - (start - strm.avail_out);
        end = _out + (strm.avail_out - 257);
        dmax = state.dmax;
        wsize = state.wsize;
        whave = state.whave;
        wnext = state.wnext;
        s_window = state.window;
        hold = state.hold;
        bits = state.bits;
        lcode = state.lencode;
        dcode = state.distcode;
        lmask = (1 << state.lenbits) - 1;
        dmask = (1 << state.distbits) - 1;
        top:
          do {
            if (bits < 15) {
              hold += input[_in++] << bits;
              bits += 8;
              hold += input[_in++] << bits;
              bits += 8;
            }
            here = lcode[hold & lmask];
            dolen:
              for (; ; ) {
                op = here >>> 24;
                hold >>>= op;
                bits -= op;
                op = here >>> 16 & 255;
                if (op === 0) {
                  output[_out++] = here & 65535;
                } else if (op & 16) {
                  len = here & 65535;
                  op &= 15;
                  if (op) {
                    if (bits < op) {
                      hold += input[_in++] << bits;
                      bits += 8;
                    }
                    len += hold & (1 << op) - 1;
                    hold >>>= op;
                    bits -= op;
                  }
                  if (bits < 15) {
                    hold += input[_in++] << bits;
                    bits += 8;
                    hold += input[_in++] << bits;
                    bits += 8;
                  }
                  here = dcode[hold & dmask];
                  dodist:
                    for (; ; ) {
                      op = here >>> 24;
                      hold >>>= op;
                      bits -= op;
                      op = here >>> 16 & 255;
                      if (op & 16) {
                        dist = here & 65535;
                        op &= 15;
                        if (bits < op) {
                          hold += input[_in++] << bits;
                          bits += 8;
                          if (bits < op) {
                            hold += input[_in++] << bits;
                            bits += 8;
                          }
                        }
                        dist += hold & (1 << op) - 1;
                        if (dist > dmax) {
                          strm.msg = "invalid distance too far back";
                          state.mode = BAD;
                          break top;
                        }
                        hold >>>= op;
                        bits -= op;
                        op = _out - beg;
                        if (dist > op) {
                          op = dist - op;
                          if (op > whave) {
                            if (state.sane) {
                              strm.msg = "invalid distance too far back";
                              state.mode = BAD;
                              break top;
                            }
                          }
                          from = 0;
                          from_source = s_window;
                          if (wnext === 0) {
                            from += wsize - op;
                            if (op < len) {
                              len -= op;
                              do {
                                output[_out++] = s_window[from++];
                              } while (--op);
                              from = _out - dist;
                              from_source = output;
                            }
                          } else if (wnext < op) {
                            from += wsize + wnext - op;
                            op -= wnext;
                            if (op < len) {
                              len -= op;
                              do {
                                output[_out++] = s_window[from++];
                              } while (--op);
                              from = 0;
                              if (wnext < len) {
                                op = wnext;
                                len -= op;
                                do {
                                  output[_out++] = s_window[from++];
                                } while (--op);
                                from = _out - dist;
                                from_source = output;
                              }
                            }
                          } else {
                            from += wnext - op;
                            if (op < len) {
                              len -= op;
                              do {
                                output[_out++] = s_window[from++];
                              } while (--op);
                              from = _out - dist;
                              from_source = output;
                            }
                          }
                          while (len > 2) {
                            output[_out++] = from_source[from++];
                            output[_out++] = from_source[from++];
                            output[_out++] = from_source[from++];
                            len -= 3;
                          }
                          if (len) {
                            output[_out++] = from_source[from++];
                            if (len > 1) {
                              output[_out++] = from_source[from++];
                            }
                          }
                        } else {
                          from = _out - dist;
                          do {
                            output[_out++] = output[from++];
                            output[_out++] = output[from++];
                            output[_out++] = output[from++];
                            len -= 3;
                          } while (len > 2);
                          if (len) {
                            output[_out++] = output[from++];
                            if (len > 1) {
                              output[_out++] = output[from++];
                            }
                          }
                        }
                      } else if ((op & 64) === 0) {
                        here = dcode[(here & 65535) + (hold & (1 << op) - 1)];
                        continue dodist;
                      } else {
                        strm.msg = "invalid distance code";
                        state.mode = BAD;
                        break top;
                      }
                      break;
                    }
                } else if ((op & 64) === 0) {
                  here = lcode[(here & 65535) + (hold & (1 << op) - 1)];
                  continue dolen;
                } else if (op & 32) {
                  state.mode = TYPE;
                  break top;
                } else {
                  strm.msg = "invalid literal/length code";
                  state.mode = BAD;
                  break top;
                }
                break;
              }
          } while (_in < last && _out < end);
        len = bits >> 3;
        _in -= len;
        bits -= len << 3;
        hold &= (1 << bits) - 1;
        strm.next_in = _in;
        strm.next_out = _out;
        strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last);
        strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end);
        state.hold = hold;
        state.bits = bits;
        return;
      };
    }
  });

  // node_modules/pako/lib/zlib/inftrees.js
  var require_inftrees = __commonJS({
    "node_modules/pako/lib/zlib/inftrees.js"(exports, module) {
      "use strict";
      var utils = require_common();
      var MAXBITS = 15;
      var ENOUGH_LENS = 852;
      var ENOUGH_DISTS = 592;
      var CODES = 0;
      var LENS = 1;
      var DISTS = 2;
      var lbase = [
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        13,
        15,
        17,
        19,
        23,
        27,
        31,
        35,
        43,
        51,
        59,
        67,
        83,
        99,
        115,
        131,
        163,
        195,
        227,
        258,
        0,
        0
      ];
      var lext = [
        16,
        16,
        16,
        16,
        16,
        16,
        16,
        16,
        17,
        17,
        17,
        17,
        18,
        18,
        18,
        18,
        19,
        19,
        19,
        19,
        20,
        20,
        20,
        20,
        21,
        21,
        21,
        21,
        16,
        72,
        78
      ];
      var dbase = [
        1,
        2,
        3,
        4,
        5,
        7,
        9,
        13,
        17,
        25,
        33,
        49,
        65,
        97,
        129,
        193,
        257,
        385,
        513,
        769,
        1025,
        1537,
        2049,
        3073,
        4097,
        6145,
        8193,
        12289,
        16385,
        24577,
        0,
        0
      ];
      var dext = [
        16,
        16,
        16,
        16,
        17,
        17,
        18,
        18,
        19,
        19,
        20,
        20,
        21,
        21,
        22,
        22,
        23,
        23,
        24,
        24,
        25,
        25,
        26,
        26,
        27,
        27,
        28,
        28,
        29,
        29,
        64,
        64
      ];
      module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) {
        var bits = opts.bits;
        var len = 0;
        var sym = 0;
        var min = 0, max = 0;
        var root = 0;
        var curr = 0;
        var drop = 0;
        var left = 0;
        var used = 0;
        var huff = 0;
        var incr;
        var fill;
        var low;
        var mask;
        var next;
        var base = null;
        var base_index = 0;
        var end;
        var count = new utils.Buf16(MAXBITS + 1);
        var offs = new utils.Buf16(MAXBITS + 1);
        var extra = null;
        var extra_index = 0;
        var here_bits, here_op, here_val;
        for (len = 0; len <= MAXBITS; len++) {
          count[len] = 0;
        }
        for (sym = 0; sym < codes; sym++) {
          count[lens[lens_index + sym]]++;
        }
        root = bits;
        for (max = MAXBITS; max >= 1; max--) {
          if (count[max] !== 0) {
            break;
          }
        }
        if (root > max) {
          root = max;
        }
        if (max === 0) {
          table[table_index++] = 1 << 24 | 64 << 16 | 0;
          table[table_index++] = 1 << 24 | 64 << 16 | 0;
          opts.bits = 1;
          return 0;
        }
        for (min = 1; min < max; min++) {
          if (count[min] !== 0) {
            break;
          }
        }
        if (root < min) {
          root = min;
        }
        left = 1;
        for (len = 1; len <= MAXBITS; len++) {
          left <<= 1;
          left -= count[len];
          if (left < 0) {
            return -1;
          }
        }
        if (left > 0 && (type === CODES || max !== 1)) {
          return -1;
        }
        offs[1] = 0;
        for (len = 1; len < MAXBITS; len++) {
          offs[len + 1] = offs[len] + count[len];
        }
        for (sym = 0; sym < codes; sym++) {
          if (lens[lens_index + sym] !== 0) {
            work[offs[lens[lens_index + sym]]++] = sym;
          }
        }
        if (type === CODES) {
          base = extra = work;
          end = 19;
        } else if (type === LENS) {
          base = lbase;
          base_index -= 257;
          extra = lext;
          extra_index -= 257;
          end = 256;
        } else {
          base = dbase;
          extra = dext;
          end = -1;
        }
        huff = 0;
        sym = 0;
        len = min;
        next = table_index;
        curr = root;
        drop = 0;
        low = -1;
        used = 1 << root;
        mask = used - 1;
        if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) {
          return 1;
        }
        for (; ; ) {
          here_bits = len - drop;
          if (work[sym] < end) {
            here_op = 0;
            here_val = work[sym];
          } else if (work[sym] > end) {
            here_op = extra[extra_index + work[sym]];
            here_val = base[base_index + work[sym]];
          } else {
            here_op = 32 + 64;
            here_val = 0;
          }
          incr = 1 << len - drop;
          fill = 1 << curr;
          min = fill;
          do {
            fill -= incr;
            table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0;
          } while (fill !== 0);
          incr = 1 << len - 1;
          while (huff & incr) {
            incr >>= 1;
          }
          if (incr !== 0) {
            huff &= incr - 1;
            huff += incr;
          } else {
            huff = 0;
          }
          sym++;
          if (--count[len] === 0) {
            if (len === max) {
              break;
            }
            len = lens[lens_index + work[sym]];
          }
          if (len > root && (huff & mask) !== low) {
            if (drop === 0) {
              drop = root;
            }
            next += min;
            curr = len - drop;
            left = 1 << curr;
            while (curr + drop < max) {
              left -= count[curr + drop];
              if (left <= 0) {
                break;
              }
              curr++;
              left <<= 1;
            }
            used += 1 << curr;
            if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) {
              return 1;
            }
            low = huff & mask;
            table[low] = root << 24 | curr << 16 | next - table_index | 0;
          }
        }
        if (huff !== 0) {
          table[next + huff] = len - drop << 24 | 64 << 16 | 0;
        }
        opts.bits = root;
        return 0;
      };
    }
  });

  // node_modules/pako/lib/zlib/inflate.js
  var require_inflate = __commonJS({
    "node_modules/pako/lib/zlib/inflate.js"(exports) {
      "use strict";
      var utils = require_common();
      var adler32 = require_adler32();
      var crc32 = require_crc32();
      var inflate_fast = require_inffast();
      var inflate_table = require_inftrees();
      var CODES = 0;
      var LENS = 1;
      var DISTS = 2;
      var Z_FINISH = 4;
      var Z_BLOCK = 5;
      var Z_TREES = 6;
      var Z_OK = 0;
      var Z_STREAM_END = 1;
      var Z_NEED_DICT = 2;
      var Z_STREAM_ERROR = -2;
      var Z_DATA_ERROR = -3;
      var Z_MEM_ERROR = -4;
      var Z_BUF_ERROR = -5;
      var Z_DEFLATED = 8;
      var HEAD = 1;
      var FLAGS = 2;
      var TIME = 3;
      var OS = 4;
      var EXLEN = 5;
      var EXTRA = 6;
      var NAME = 7;
      var COMMENT = 8;
      var HCRC = 9;
      var DICTID = 10;
      var DICT = 11;
      var TYPE = 12;
      var TYPEDO = 13;
      var STORED = 14;
      var COPY_ = 15;
      var COPY = 16;
      var TABLE = 17;
      var LENLENS = 18;
      var CODELENS = 19;
      var LEN_ = 20;
      var LEN = 21;
      var LENEXT = 22;
      var DIST = 23;
      var DISTEXT = 24;
      var MATCH = 25;
      var LIT = 26;
      var CHECK = 27;
      var LENGTH = 28;
      var DONE = 29;
      var BAD = 30;
      var MEM = 31;
      var SYNC = 32;
      var ENOUGH_LENS = 852;
      var ENOUGH_DISTS = 592;
      var MAX_WBITS = 15;
      var DEF_WBITS = MAX_WBITS;
      function zswap32(q) {
        return (q >>> 24 & 255) + (q >>> 8 & 65280) + ((q & 65280) << 8) + ((q & 255) << 24);
      }
      function InflateState() {
        this.mode = 0;
        this.last = false;
        this.wrap = 0;
        this.havedict = false;
        this.flags = 0;
        this.dmax = 0;
        this.check = 0;
        this.total = 0;
        this.head = null;
        this.wbits = 0;
        this.wsize = 0;
        this.whave = 0;
        this.wnext = 0;
        this.window = null;
        this.hold = 0;
        this.bits = 0;
        this.length = 0;
        this.offset = 0;
        this.extra = 0;
        this.lencode = null;
        this.distcode = null;
        this.lenbits = 0;
        this.distbits = 0;
        this.ncode = 0;
        this.nlen = 0;
        this.ndist = 0;
        this.have = 0;
        this.next = null;
        this.lens = new utils.Buf16(320);
        this.work = new utils.Buf16(288);
        this.lendyn = null;
        this.distdyn = null;
        this.sane = 0;
        this.back = 0;
        this.was = 0;
      }
      function inflateResetKeep(strm) {
        var state;
        if (!strm || !strm.state) {
          return Z_STREAM_ERROR;
        }
        state = strm.state;
        strm.total_in = strm.total_out = state.total = 0;
        strm.msg = "";
        if (state.wrap) {
          strm.adler = state.wrap & 1;
        }
        state.mode = HEAD;
        state.last = 0;
        state.havedict = 0;
        state.dmax = 32768;
        state.head = null;
        state.hold = 0;
        state.bits = 0;
        state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
        state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
        state.sane = 1;
        state.back = -1;
        return Z_OK;
      }
      function inflateReset(strm) {
        var state;
        if (!strm || !strm.state) {
          return Z_STREAM_ERROR;
        }
        state = strm.state;
        state.wsize = 0;
        state.whave = 0;
        state.wnext = 0;
        return inflateResetKeep(strm);
      }
      function inflateReset2(strm, windowBits) {
        var wrap;
        var state;
        if (!strm || !strm.state) {
          return Z_STREAM_ERROR;
        }
        state = strm.state;
        if (windowBits < 0) {
          wrap = 0;
          windowBits = -windowBits;
        } else {
          wrap = (windowBits >> 4) + 1;
          if (windowBits < 48) {
            windowBits &= 15;
          }
        }
        if (windowBits && (windowBits < 8 || windowBits > 15)) {
          return Z_STREAM_ERROR;
        }
        if (state.window !== null && state.wbits !== windowBits) {
          state.window = null;
        }
        state.wrap = wrap;
        state.wbits = windowBits;
        return inflateReset(strm);
      }
      function inflateInit2(strm, windowBits) {
        var ret;
        var state;
        if (!strm) {
          return Z_STREAM_ERROR;
        }
        state = new InflateState();
        strm.state = state;
        state.window = null;
        ret = inflateReset2(strm, windowBits);
        if (ret !== Z_OK) {
          strm.state = null;
        }
        return ret;
      }
      function inflateInit(strm) {
        return inflateInit2(strm, DEF_WBITS);
      }
      var virgin = true;
      var lenfix;
      var distfix;
      function fixedtables(state) {
        if (virgin) {
          var sym;
          lenfix = new utils.Buf32(512);
          distfix = new utils.Buf32(32);
          sym = 0;
          while (sym < 144) {
            state.lens[sym++] = 8;
          }
          while (sym < 256) {
            state.lens[sym++] = 9;
          }
          while (sym < 280) {
            state.lens[sym++] = 7;
          }
          while (sym < 288) {
            state.lens[sym++] = 8;
          }
          inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, {bits: 9});
          sym = 0;
          while (sym < 32) {
            state.lens[sym++] = 5;
          }
          inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, {bits: 5});
          virgin = false;
        }
        state.lencode = lenfix;
        state.lenbits = 9;
        state.distcode = distfix;
        state.distbits = 5;
      }
      function updatewindow(strm, src, end, copy) {
        var dist;
        var state = strm.state;
        if (state.window === null) {
          state.wsize = 1 << state.wbits;
          state.wnext = 0;
          state.whave = 0;
          state.window = new utils.Buf8(state.wsize);
        }
        if (copy >= state.wsize) {
          utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);
          state.wnext = 0;
          state.whave = state.wsize;
        } else {
          dist = state.wsize - state.wnext;
          if (dist > copy) {
            dist = copy;
          }
          utils.arraySet(state.window, src, end - copy, dist, state.wnext);
          copy -= dist;
          if (copy) {
            utils.arraySet(state.window, src, end - copy, copy, 0);
            state.wnext = copy;
            state.whave = state.wsize;
          } else {
            state.wnext += dist;
            if (state.wnext === state.wsize) {
              state.wnext = 0;
            }
            if (state.whave < state.wsize) {
              state.whave += dist;
            }
          }
        }
        return 0;
      }
      function inflate(strm, flush) {
        var state;
        var input, output;
        var next;
        var put;
        var have, left;
        var hold;
        var bits;
        var _in, _out;
        var copy;
        var from;
        var from_source;
        var here = 0;
        var here_bits, here_op, here_val;
        var last_bits, last_op, last_val;
        var len;
        var ret;
        var hbuf = new utils.Buf8(4);
        var opts;
        var n;
        var order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
        if (!strm || !strm.state || !strm.output || !strm.input && strm.avail_in !== 0) {
          return Z_STREAM_ERROR;
        }
        state = strm.state;
        if (state.mode === TYPE) {
          state.mode = TYPEDO;
        }
        put = strm.next_out;
        output = strm.output;
        left = strm.avail_out;
        next = strm.next_in;
        input = strm.input;
        have = strm.avail_in;
        hold = state.hold;
        bits = state.bits;
        _in = have;
        _out = left;
        ret = Z_OK;
        inf_leave:
          for (; ; ) {
            switch (state.mode) {
              case HEAD:
                if (state.wrap === 0) {
                  state.mode = TYPEDO;
                  break;
                }
                while (bits < 16) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                if (state.wrap & 2 && hold === 35615) {
                  state.check = 0;
                  hbuf[0] = hold & 255;
                  hbuf[1] = hold >>> 8 & 255;
                  state.check = crc32(state.check, hbuf, 2, 0);
                  hold = 0;
                  bits = 0;
                  state.mode = FLAGS;
                  break;
                }
                state.flags = 0;
                if (state.head) {
                  state.head.done = false;
                }
                if (!(state.wrap & 1) || (((hold & 255) << 8) + (hold >> 8)) % 31) {
                  strm.msg = "incorrect header check";
                  state.mode = BAD;
                  break;
                }
                if ((hold & 15) !== Z_DEFLATED) {
                  strm.msg = "unknown compression method";
                  state.mode = BAD;
                  break;
                }
                hold >>>= 4;
                bits -= 4;
                len = (hold & 15) + 8;
                if (state.wbits === 0) {
                  state.wbits = len;
                } else if (len > state.wbits) {
                  strm.msg = "invalid window size";
                  state.mode = BAD;
                  break;
                }
                state.dmax = 1 << len;
                strm.adler = state.check = 1;
                state.mode = hold & 512 ? DICTID : TYPE;
                hold = 0;
                bits = 0;
                break;
              case FLAGS:
                while (bits < 16) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                state.flags = hold;
                if ((state.flags & 255) !== Z_DEFLATED) {
                  strm.msg = "unknown compression method";
                  state.mode = BAD;
                  break;
                }
                if (state.flags & 57344) {
                  strm.msg = "unknown header flags set";
                  state.mode = BAD;
                  break;
                }
                if (state.head) {
                  state.head.text = hold >> 8 & 1;
                }
                if (state.flags & 512) {
                  hbuf[0] = hold & 255;
                  hbuf[1] = hold >>> 8 & 255;
                  state.check = crc32(state.check, hbuf, 2, 0);
                }
                hold = 0;
                bits = 0;
                state.mode = TIME;
              case TIME:
                while (bits < 32) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                if (state.head) {
                  state.head.time = hold;
                }
                if (state.flags & 512) {
                  hbuf[0] = hold & 255;
                  hbuf[1] = hold >>> 8 & 255;
                  hbuf[2] = hold >>> 16 & 255;
                  hbuf[3] = hold >>> 24 & 255;
                  state.check = crc32(state.check, hbuf, 4, 0);
                }
                hold = 0;
                bits = 0;
                state.mode = OS;
              case OS:
                while (bits < 16) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                if (state.head) {
                  state.head.xflags = hold & 255;
                  state.head.os = hold >> 8;
                }
                if (state.flags & 512) {
                  hbuf[0] = hold & 255;
                  hbuf[1] = hold >>> 8 & 255;
                  state.check = crc32(state.check, hbuf, 2, 0);
                }
                hold = 0;
                bits = 0;
                state.mode = EXLEN;
              case EXLEN:
                if (state.flags & 1024) {
                  while (bits < 16) {
                    if (have === 0) {
                      break inf_leave;
                    }
                    have--;
                    hold += input[next++] << bits;
                    bits += 8;
                  }
                  state.length = hold;
                  if (state.head) {
                    state.head.extra_len = hold;
                  }
                  if (state.flags & 512) {
                    hbuf[0] = hold & 255;
                    hbuf[1] = hold >>> 8 & 255;
                    state.check = crc32(state.check, hbuf, 2, 0);
                  }
                  hold = 0;
                  bits = 0;
                } else if (state.head) {
                  state.head.extra = null;
                }
                state.mode = EXTRA;
              case EXTRA:
                if (state.flags & 1024) {
                  copy = state.length;
                  if (copy > have) {
                    copy = have;
                  }
                  if (copy) {
                    if (state.head) {
                      len = state.head.extra_len - state.length;
                      if (!state.head.extra) {
                        state.head.extra = new Array(state.head.extra_len);
                      }
                      utils.arraySet(state.head.extra, input, next, copy, len);
                    }
                    if (state.flags & 512) {
                      state.check = crc32(state.check, input, copy, next);
                    }
                    have -= copy;
                    next += copy;
                    state.length -= copy;
                  }
                  if (state.length) {
                    break inf_leave;
                  }
                }
                state.length = 0;
                state.mode = NAME;
              case NAME:
                if (state.flags & 2048) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  copy = 0;
                  do {
                    len = input[next + copy++];
                    if (state.head && len && state.length < 65536) {
                      state.head.name += String.fromCharCode(len);
                    }
                  } while (len && copy < have);
                  if (state.flags & 512) {
                    state.check = crc32(state.check, input, copy, next);
                  }
                  have -= copy;
                  next += copy;
                  if (len) {
                    break inf_leave;
                  }
                } else if (state.head) {
                  state.head.name = null;
                }
                state.length = 0;
                state.mode = COMMENT;
              case COMMENT:
                if (state.flags & 4096) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  copy = 0;
                  do {
                    len = input[next + copy++];
                    if (state.head && len && state.length < 65536) {
                      state.head.comment += String.fromCharCode(len);
                    }
                  } while (len && copy < have);
                  if (state.flags & 512) {
                    state.check = crc32(state.check, input, copy, next);
                  }
                  have -= copy;
                  next += copy;
                  if (len) {
                    break inf_leave;
                  }
                } else if (state.head) {
                  state.head.comment = null;
                }
                state.mode = HCRC;
              case HCRC:
                if (state.flags & 512) {
                  while (bits < 16) {
                    if (have === 0) {
                      break inf_leave;
                    }
                    have--;
                    hold += input[next++] << bits;
                    bits += 8;
                  }
                  if (hold !== (state.check & 65535)) {
                    strm.msg = "header crc mismatch";
                    state.mode = BAD;
                    break;
                  }
                  hold = 0;
                  bits = 0;
                }
                if (state.head) {
                  state.head.hcrc = state.flags >> 9 & 1;
                  state.head.done = true;
                }
                strm.adler = state.check = 0;
                state.mode = TYPE;
                break;
              case DICTID:
                while (bits < 32) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                strm.adler = state.check = zswap32(hold);
                hold = 0;
                bits = 0;
                state.mode = DICT;
              case DICT:
                if (state.havedict === 0) {
                  strm.next_out = put;
                  strm.avail_out = left;
                  strm.next_in = next;
                  strm.avail_in = have;
                  state.hold = hold;
                  state.bits = bits;
                  return Z_NEED_DICT;
                }
                strm.adler = state.check = 1;
                state.mode = TYPE;
              case TYPE:
                if (flush === Z_BLOCK || flush === Z_TREES) {
                  break inf_leave;
                }
              case TYPEDO:
                if (state.last) {
                  hold >>>= bits & 7;
                  bits -= bits & 7;
                  state.mode = CHECK;
                  break;
                }
                while (bits < 3) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                state.last = hold & 1;
                hold >>>= 1;
                bits -= 1;
                switch (hold & 3) {
                  case 0:
                    state.mode = STORED;
                    break;
                  case 1:
                    fixedtables(state);
                    state.mode = LEN_;
                    if (flush === Z_TREES) {
                      hold >>>= 2;
                      bits -= 2;
                      break inf_leave;
                    }
                    break;
                  case 2:
                    state.mode = TABLE;
                    break;
                  case 3:
                    strm.msg = "invalid block type";
                    state.mode = BAD;
                }
                hold >>>= 2;
                bits -= 2;
                break;
              case STORED:
                hold >>>= bits & 7;
                bits -= bits & 7;
                while (bits < 32) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                if ((hold & 65535) !== (hold >>> 16 ^ 65535)) {
                  strm.msg = "invalid stored block lengths";
                  state.mode = BAD;
                  break;
                }
                state.length = hold & 65535;
                hold = 0;
                bits = 0;
                state.mode = COPY_;
                if (flush === Z_TREES) {
                  break inf_leave;
                }
              case COPY_:
                state.mode = COPY;
              case COPY:
                copy = state.length;
                if (copy) {
                  if (copy > have) {
                    copy = have;
                  }
                  if (copy > left) {
                    copy = left;
                  }
                  if (copy === 0) {
                    break inf_leave;
                  }
                  utils.arraySet(output, input, next, copy, put);
                  have -= copy;
                  next += copy;
                  left -= copy;
                  put += copy;
                  state.length -= copy;
                  break;
                }
                state.mode = TYPE;
                break;
              case TABLE:
                while (bits < 14) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                state.nlen = (hold & 31) + 257;
                hold >>>= 5;
                bits -= 5;
                state.ndist = (hold & 31) + 1;
                hold >>>= 5;
                bits -= 5;
                state.ncode = (hold & 15) + 4;
                hold >>>= 4;
                bits -= 4;
                if (state.nlen > 286 || state.ndist > 30) {
                  strm.msg = "too many length or distance symbols";
                  state.mode = BAD;
                  break;
                }
                state.have = 0;
                state.mode = LENLENS;
              case LENLENS:
                while (state.have < state.ncode) {
                  while (bits < 3) {
                    if (have === 0) {
                      break inf_leave;
                    }
                    have--;
                    hold += input[next++] << bits;
                    bits += 8;
                  }
                  state.lens[order[state.have++]] = hold & 7;
                  hold >>>= 3;
                  bits -= 3;
                }
                while (state.have < 19) {
                  state.lens[order[state.have++]] = 0;
                }
                state.lencode = state.lendyn;
                state.lenbits = 7;
                opts = {bits: state.lenbits};
                ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
                state.lenbits = opts.bits;
                if (ret) {
                  strm.msg = "invalid code lengths set";
                  state.mode = BAD;
                  break;
                }
                state.have = 0;
                state.mode = CODELENS;
              case CODELENS:
                while (state.have < state.nlen + state.ndist) {
                  for (; ; ) {
                    here = state.lencode[hold & (1 << state.lenbits) - 1];
                    here_bits = here >>> 24;
                    here_op = here >>> 16 & 255;
                    here_val = here & 65535;
                    if (here_bits <= bits) {
                      break;
                    }
                    if (have === 0) {
                      break inf_leave;
                    }
                    have--;
                    hold += input[next++] << bits;
                    bits += 8;
                  }
                  if (here_val < 16) {
                    hold >>>= here_bits;
                    bits -= here_bits;
                    state.lens[state.have++] = here_val;
                  } else {
                    if (here_val === 16) {
                      n = here_bits + 2;
                      while (bits < n) {
                        if (have === 0) {
                          break inf_leave;
                        }
                        have--;
                        hold += input[next++] << bits;
                        bits += 8;
                      }
                      hold >>>= here_bits;
                      bits -= here_bits;
                      if (state.have === 0) {
                        strm.msg = "invalid bit length repeat";
                        state.mode = BAD;
                        break;
                      }
                      len = state.lens[state.have - 1];
                      copy = 3 + (hold & 3);
                      hold >>>= 2;
                      bits -= 2;
                    } else if (here_val === 17) {
                      n = here_bits + 3;
                      while (bits < n) {
                        if (have === 0) {
                          break inf_leave;
                        }
                        have--;
                        hold += input[next++] << bits;
                        bits += 8;
                      }
                      hold >>>= here_bits;
                      bits -= here_bits;
                      len = 0;
                      copy = 3 + (hold & 7);
                      hold >>>= 3;
                      bits -= 3;
                    } else {
                      n = here_bits + 7;
                      while (bits < n) {
                        if (have === 0) {
                          break inf_leave;
                        }
                        have--;
                        hold += input[next++] << bits;
                        bits += 8;
                      }
                      hold >>>= here_bits;
                      bits -= here_bits;
                      len = 0;
                      copy = 11 + (hold & 127);
                      hold >>>= 7;
                      bits -= 7;
                    }
                    if (state.have + copy > state.nlen + state.ndist) {
                      strm.msg = "invalid bit length repeat";
                      state.mode = BAD;
                      break;
                    }
                    while (copy--) {
                      state.lens[state.have++] = len;
                    }
                  }
                }
                if (state.mode === BAD) {
                  break;
                }
                if (state.lens[256] === 0) {
                  strm.msg = "invalid code -- missing end-of-block";
                  state.mode = BAD;
                  break;
                }
                state.lenbits = 9;
                opts = {bits: state.lenbits};
                ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
                state.lenbits = opts.bits;
                if (ret) {
                  strm.msg = "invalid literal/lengths set";
                  state.mode = BAD;
                  break;
                }
                state.distbits = 6;
                state.distcode = state.distdyn;
                opts = {bits: state.distbits};
                ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
                state.distbits = opts.bits;
                if (ret) {
                  strm.msg = "invalid distances set";
                  state.mode = BAD;
                  break;
                }
                state.mode = LEN_;
                if (flush === Z_TREES) {
                  break inf_leave;
                }
              case LEN_:
                state.mode = LEN;
              case LEN:
                if (have >= 6 && left >= 258) {
                  strm.next_out = put;
                  strm.avail_out = left;
                  strm.next_in = next;
                  strm.avail_in = have;
                  state.hold = hold;
                  state.bits = bits;
                  inflate_fast(strm, _out);
                  put = strm.next_out;
                  output = strm.output;
                  left = strm.avail_out;
                  next = strm.next_in;
                  input = strm.input;
                  have = strm.avail_in;
                  hold = state.hold;
                  bits = state.bits;
                  if (state.mode === TYPE) {
                    state.back = -1;
                  }
                  break;
                }
                state.back = 0;
                for (; ; ) {
                  here = state.lencode[hold & (1 << state.lenbits) - 1];
                  here_bits = here >>> 24;
                  here_op = here >>> 16 & 255;
                  here_val = here & 65535;
                  if (here_bits <= bits) {
                    break;
                  }
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                if (here_op && (here_op & 240) === 0) {
                  last_bits = here_bits;
                  last_op = here_op;
                  last_val = here_val;
                  for (; ; ) {
                    here = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)];
                    here_bits = here >>> 24;
                    here_op = here >>> 16 & 255;
                    here_val = here & 65535;
                    if (last_bits + here_bits <= bits) {
                      break;
                    }
                    if (have === 0) {
                      break inf_leave;
                    }
                    have--;
                    hold += input[next++] << bits;
                    bits += 8;
                  }
                  hold >>>= last_bits;
                  bits -= last_bits;
                  state.back += last_bits;
                }
                hold >>>= here_bits;
                bits -= here_bits;
                state.back += here_bits;
                state.length = here_val;
                if (here_op === 0) {
                  state.mode = LIT;
                  break;
                }
                if (here_op & 32) {
                  state.back = -1;
                  state.mode = TYPE;
                  break;
                }
                if (here_op & 64) {
                  strm.msg = "invalid literal/length code";
                  state.mode = BAD;
                  break;
                }
                state.extra = here_op & 15;
                state.mode = LENEXT;
              case LENEXT:
                if (state.extra) {
                  n = state.extra;
                  while (bits < n) {
                    if (have === 0) {
                      break inf_leave;
                    }
                    have--;
                    hold += input[next++] << bits;
                    bits += 8;
                  }
                  state.length += hold & (1 << state.extra) - 1;
                  hold >>>= state.extra;
                  bits -= state.extra;
                  state.back += state.extra;
                }
                state.was = state.length;
                state.mode = DIST;
              case DIST:
                for (; ; ) {
                  here = state.distcode[hold & (1 << state.distbits) - 1];
                  here_bits = here >>> 24;
                  here_op = here >>> 16 & 255;
                  here_val = here & 65535;
                  if (here_bits <= bits) {
                    break;
                  }
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                if ((here_op & 240) === 0) {
                  last_bits = here_bits;
                  last_op = here_op;
                  last_val = here_val;
                  for (; ; ) {
                    here = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)];
                    here_bits = here >>> 24;
                    here_op = here >>> 16 & 255;
                    here_val = here & 65535;
                    if (last_bits + here_bits <= bits) {
                      break;
                    }
                    if (have === 0) {
                      break inf_leave;
                    }
                    have--;
                    hold += input[next++] << bits;
                    bits += 8;
                  }
                  hold >>>= last_bits;
                  bits -= last_bits;
                  state.back += last_bits;
                }
                hold >>>= here_bits;
                bits -= here_bits;
                state.back += here_bits;
                if (here_op & 64) {
                  strm.msg = "invalid distance code";
                  state.mode = BAD;
                  break;
                }
                state.offset = here_val;
                state.extra = here_op & 15;
                state.mode = DISTEXT;
              case DISTEXT:
                if (state.extra) {
                  n = state.extra;
                  while (bits < n) {
                    if (have === 0) {
                      break inf_leave;
                    }
                    have--;
                    hold += input[next++] << bits;
                    bits += 8;
                  }
                  state.offset += hold & (1 << state.extra) - 1;
                  hold >>>= state.extra;
                  bits -= state.extra;
                  state.back += state.extra;
                }
                if (state.offset > state.dmax) {
                  strm.msg = "invalid distance too far back";
                  state.mode = BAD;
                  break;
                }
                state.mode = MATCH;
              case MATCH:
                if (left === 0) {
                  break inf_leave;
                }
                copy = _out - left;
                if (state.offset > copy) {
                  copy = state.offset - copy;
                  if (copy > state.whave) {
                    if (state.sane) {
                      strm.msg = "invalid distance too far back";
                      state.mode = BAD;
                      break;
                    }
                  }
                  if (copy > state.wnext) {
                    copy -= state.wnext;
                    from = state.wsize - copy;
                  } else {
                    from = state.wnext - copy;
                  }
                  if (copy > state.length) {
                    copy = state.length;
                  }
                  from_source = state.window;
                } else {
                  from_source = output;
                  from = put - state.offset;
                  copy = state.length;
                }
                if (copy > left) {
                  copy = left;
                }
                left -= copy;
                state.length -= copy;
                do {
                  output[put++] = from_source[from++];
                } while (--copy);
                if (state.length === 0) {
                  state.mode = LEN;
                }
                break;
              case LIT:
                if (left === 0) {
                  break inf_leave;
                }
                output[put++] = state.length;
                left--;
                state.mode = LEN;
                break;
              case CHECK:
                if (state.wrap) {
                  while (bits < 32) {
                    if (have === 0) {
                      break inf_leave;
                    }
                    have--;
                    hold |= input[next++] << bits;
                    bits += 8;
                  }
                  _out -= left;
                  strm.total_out += _out;
                  state.total += _out;
                  if (_out) {
                    strm.adler = state.check = state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out);
                  }
                  _out = left;
                  if ((state.flags ? hold : zswap32(hold)) !== state.check) {
                    strm.msg = "incorrect data check";
                    state.mode = BAD;
                    break;
                  }
                  hold = 0;
                  bits = 0;
                }
                state.mode = LENGTH;
              case LENGTH:
                if (state.wrap && state.flags) {
                  while (bits < 32) {
                    if (have === 0) {
                      break inf_leave;
                    }
                    have--;
                    hold += input[next++] << bits;
                    bits += 8;
                  }
                  if (hold !== (state.total & 4294967295)) {
                    strm.msg = "incorrect length check";
                    state.mode = BAD;
                    break;
                  }
                  hold = 0;
                  bits = 0;
                }
                state.mode = DONE;
              case DONE:
                ret = Z_STREAM_END;
                break inf_leave;
              case BAD:
                ret = Z_DATA_ERROR;
                break inf_leave;
              case MEM:
                return Z_MEM_ERROR;
              case SYNC:
              default:
                return Z_STREAM_ERROR;
            }
          }
        strm.next_out = put;
        strm.avail_out = left;
        strm.next_in = next;
        strm.avail_in = have;
        state.hold = hold;
        state.bits = bits;
        if (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush !== Z_FINISH)) {
          if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
            state.mode = MEM;
            return Z_MEM_ERROR;
          }
        }
        _in -= strm.avail_in;
        _out -= strm.avail_out;
        strm.total_in += _in;
        strm.total_out += _out;
        state.total += _out;
        if (state.wrap && _out) {
          strm.adler = state.check = state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out);
        }
        strm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
        if ((_in === 0 && _out === 0 || flush === Z_FINISH) && ret === Z_OK) {
          ret = Z_BUF_ERROR;
        }
        return ret;
      }
      function inflateEnd(strm) {
        if (!strm || !strm.state) {
          return Z_STREAM_ERROR;
        }
        var state = strm.state;
        if (state.window) {
          state.window = null;
        }
        strm.state = null;
        return Z_OK;
      }
      function inflateGetHeader(strm, head) {
        var state;
        if (!strm || !strm.state) {
          return Z_STREAM_ERROR;
        }
        state = strm.state;
        if ((state.wrap & 2) === 0) {
          return Z_STREAM_ERROR;
        }
        state.head = head;
        head.done = false;
        return Z_OK;
      }
      function inflateSetDictionary(strm, dictionary) {
        var dictLength = dictionary.length;
        var state;
        var dictid;
        var ret;
        if (!strm || !strm.state) {
          return Z_STREAM_ERROR;
        }
        state = strm.state;
        if (state.wrap !== 0 && state.mode !== DICT) {
          return Z_STREAM_ERROR;
        }
        if (state.mode === DICT) {
          dictid = 1;
          dictid = adler32(dictid, dictionary, dictLength, 0);
          if (dictid !== state.check) {
            return Z_DATA_ERROR;
          }
        }
        ret = updatewindow(strm, dictionary, dictLength, dictLength);
        if (ret) {
          state.mode = MEM;
          return Z_MEM_ERROR;
        }
        state.havedict = 1;
        return Z_OK;
      }
      exports.inflateReset = inflateReset;
      exports.inflateReset2 = inflateReset2;
      exports.inflateResetKeep = inflateResetKeep;
      exports.inflateInit = inflateInit;
      exports.inflateInit2 = inflateInit2;
      exports.inflate = inflate;
      exports.inflateEnd = inflateEnd;
      exports.inflateGetHeader = inflateGetHeader;
      exports.inflateSetDictionary = inflateSetDictionary;
      exports.inflateInfo = "pako inflate (from Nodeca project)";
    }
  });

  // node_modules/pako/lib/zlib/constants.js
  var require_constants = __commonJS({
    "node_modules/pako/lib/zlib/constants.js"(exports, module) {
      "use strict";
      module.exports = {
        Z_NO_FLUSH: 0,
        Z_PARTIAL_FLUSH: 1,
        Z_SYNC_FLUSH: 2,
        Z_FULL_FLUSH: 3,
        Z_FINISH: 4,
        Z_BLOCK: 5,
        Z_TREES: 6,
        Z_OK: 0,
        Z_STREAM_END: 1,
        Z_NEED_DICT: 2,
        Z_ERRNO: -1,
        Z_STREAM_ERROR: -2,
        Z_DATA_ERROR: -3,
        Z_BUF_ERROR: -5,
        Z_NO_COMPRESSION: 0,
        Z_BEST_SPEED: 1,
        Z_BEST_COMPRESSION: 9,
        Z_DEFAULT_COMPRESSION: -1,
        Z_FILTERED: 1,
        Z_HUFFMAN_ONLY: 2,
        Z_RLE: 3,
        Z_FIXED: 4,
        Z_DEFAULT_STRATEGY: 0,
        Z_BINARY: 0,
        Z_TEXT: 1,
        Z_UNKNOWN: 2,
        Z_DEFLATED: 8
      };
    }
  });

  // node_modules/pako/lib/zlib/gzheader.js
  var require_gzheader = __commonJS({
    "node_modules/pako/lib/zlib/gzheader.js"(exports, module) {
      "use strict";
      function GZheader() {
        this.text = 0;
        this.time = 0;
        this.xflags = 0;
        this.os = 0;
        this.extra = null;
        this.extra_len = 0;
        this.name = "";
        this.comment = "";
        this.hcrc = 0;
        this.done = false;
      }
      module.exports = GZheader;
    }
  });

  // node_modules/pako/lib/inflate.js
  var require_inflate2 = __commonJS({
    "node_modules/pako/lib/inflate.js"(exports) {
      "use strict";
      var zlib_inflate = require_inflate();
      var utils = require_common();
      var strings = require_strings();
      var c2 = require_constants();
      var msg = require_messages();
      var ZStream = require_zstream();
      var GZheader = require_gzheader();
      var toString2 = Object.prototype.toString;
      function Inflate(options) {
        if (!(this instanceof Inflate))
          return new Inflate(options);
        this.options = utils.assign({
          chunkSize: 16384,
          windowBits: 0,
          to: ""
        }, options || {});
        var opt = this.options;
        if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {
          opt.windowBits = -opt.windowBits;
          if (opt.windowBits === 0) {
            opt.windowBits = -15;
          }
        }
        if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) {
          opt.windowBits += 32;
        }
        if (opt.windowBits > 15 && opt.windowBits < 48) {
          if ((opt.windowBits & 15) === 0) {
            opt.windowBits |= 15;
          }
        }
        this.err = 0;
        this.msg = "";
        this.ended = false;
        this.chunks = [];
        this.strm = new ZStream();
        this.strm.avail_out = 0;
        var status = zlib_inflate.inflateInit2(this.strm, opt.windowBits);
        if (status !== c2.Z_OK) {
          throw new Error(msg[status]);
        }
        this.header = new GZheader();
        zlib_inflate.inflateGetHeader(this.strm, this.header);
        if (opt.dictionary) {
          if (typeof opt.dictionary === "string") {
            opt.dictionary = strings.string2buf(opt.dictionary);
          } else if (toString2.call(opt.dictionary) === "[object ArrayBuffer]") {
            opt.dictionary = new Uint8Array(opt.dictionary);
          }
          if (opt.raw) {
            status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);
            if (status !== c2.Z_OK) {
              throw new Error(msg[status]);
            }
          }
        }
      }
      Inflate.prototype.push = function(data, mode) {
        var strm = this.strm;
        var chunkSize = this.options.chunkSize;
        var dictionary = this.options.dictionary;
        var status, _mode;
        var next_out_utf8, tail, utf8str;
        var allowBufError = false;
        if (this.ended) {
          return false;
        }
        _mode = mode === ~~mode ? mode : mode === true ? c2.Z_FINISH : c2.Z_NO_FLUSH;
        if (typeof data === "string") {
          strm.input = strings.binstring2buf(data);
        } else if (toString2.call(data) === "[object ArrayBuffer]") {
          strm.input = new Uint8Array(data);
        } else {
          strm.input = data;
        }
        strm.next_in = 0;
        strm.avail_in = strm.input.length;
        do {
          if (strm.avail_out === 0) {
            strm.output = new utils.Buf8(chunkSize);
            strm.next_out = 0;
            strm.avail_out = chunkSize;
          }
          status = zlib_inflate.inflate(strm, c2.Z_NO_FLUSH);
          if (status === c2.Z_NEED_DICT && dictionary) {
            status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);
          }
          if (status === c2.Z_BUF_ERROR && allowBufError === true) {
            status = c2.Z_OK;
            allowBufError = false;
          }
          if (status !== c2.Z_STREAM_END && status !== c2.Z_OK) {
            this.onEnd(status);
            this.ended = true;
            return false;
          }
          if (strm.next_out) {
            if (strm.avail_out === 0 || status === c2.Z_STREAM_END || strm.avail_in === 0 && (_mode === c2.Z_FINISH || _mode === c2.Z_SYNC_FLUSH)) {
              if (this.options.to === "string") {
                next_out_utf8 = strings.utf8border(strm.output, strm.next_out);
                tail = strm.next_out - next_out_utf8;
                utf8str = strings.buf2string(strm.output, next_out_utf8);
                strm.next_out = tail;
                strm.avail_out = chunkSize - tail;
                if (tail) {
                  utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0);
                }
                this.onData(utf8str);
              } else {
                this.onData(utils.shrinkBuf(strm.output, strm.next_out));
              }
            }
          }
          if (strm.avail_in === 0 && strm.avail_out === 0) {
            allowBufError = true;
          }
        } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c2.Z_STREAM_END);
        if (status === c2.Z_STREAM_END) {
          _mode = c2.Z_FINISH;
        }
        if (_mode === c2.Z_FINISH) {
          status = zlib_inflate.inflateEnd(this.strm);
          this.onEnd(status);
          this.ended = true;
          return status === c2.Z_OK;
        }
        if (_mode === c2.Z_SYNC_FLUSH) {
          this.onEnd(c2.Z_OK);
          strm.avail_out = 0;
          return true;
        }
        return true;
      };
      Inflate.prototype.onData = function(chunk) {
        this.chunks.push(chunk);
      };
      Inflate.prototype.onEnd = function(status) {
        if (status === c2.Z_OK) {
          if (this.options.to === "string") {
            this.result = this.chunks.join("");
          } else {
            this.result = utils.flattenChunks(this.chunks);
          }
        }
        this.chunks = [];
        this.err = status;
        this.msg = this.strm.msg;
      };
      function inflate(input, options) {
        var inflator = new Inflate(options);
        inflator.push(input, true);
        if (inflator.err) {
          throw inflator.msg || msg[inflator.err];
        }
        return inflator.result;
      }
      function inflateRaw(input, options) {
        options = options || {};
        options.raw = true;
        return inflate(input, options);
      }
      exports.Inflate = Inflate;
      exports.inflate = inflate;
      exports.inflateRaw = inflateRaw;
      exports.ungzip = inflate;
    }
  });

  // node_modules/pako/index.js
  var require_pako = __commonJS({
    "node_modules/pako/index.js"(exports, module) {
      "use strict";
      var assign = require_common().assign;
      var deflate = require_deflate2();
      var inflate = require_inflate2();
      var constants = require_constants();
      var pako2 = {};
      assign(pako2, deflate, inflate, constants);
      module.exports = pako2;
    }
  });

  // src/global/loading.js
  function showloading(txt) {
    $("#luckysheet-cell-loading").find("span").text(txt).end().show();
  }
  function hideloading() {
    $("#luckysheet-cell-loading").hide();
  }
  var init_loading = __esm({
    "src/global/loading.js"() {
    }
  });

  // src/global/editor.js
  var editor, editor_default;
  var init_editor = __esm({
    "src/global/editor.js"() {
      init_browser();
      init_formula();
      init_getdata();
      init_refresh();
      init_get();
      init_store();
      editor = {
        deepCopyFlowDataState: false,
        deepCopyFlowDataCache: "",
        deepCopyFlowDataWorker: null,
        deepCopyFlowData: function(flowData) {
          let _this = this;
          if (_this.deepCopyFlowDataState) {
            if (_this.deepCopyFlowDataWorker != null) {
              _this.deepCopyFlowDataWorker.terminate();
            }
            return _this.deepCopyFlowDataCache;
          } else {
            if (flowData == null) {
              flowData = store_default.flowdata;
            }
            return $.extend(true, [], flowData);
          }
        },
        webWorkerFlowDataCache: function(flowData) {
          let _this = this;
          try {
            if (_this.deepCopyFlowDataWorker != null) {
              _this.deepCopyFlowDataWorker.terminate();
            }
            let funcTxt = "data:text/javascript;chartset=US-ASCII,onmessage = function (e) { postMessage(e.data); };";
            _this.deepCopyFlowDataState = false;
            let worker;
            if (browser_default.isIE() == 1) {
              let response = "self.onmessage=function(e){postMessage(e.data);}";
              worker = new Worker("./plugins/Worker-helper.js");
              worker.postMessage(response);
            } else {
              worker = new Worker(funcTxt);
            }
            _this.deepCopyFlowDataWorker = worker;
            worker.postMessage(flowData);
            worker.onmessage = function(e) {
              _this.deepCopyFlowDataCache = e.data;
              _this.deepCopyFlowDataState = true;
            };
          } catch (e) {
            _this.deepCopyFlowDataCache = $.extend(true, [], flowData);
          }
        },
        controlHandler: function(dataChe, range2) {
          let _this = this;
          let d = _this.deepCopyFlowData(store_default.flowdata);
          let last = range2 || store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
          let curR = last["row"] == null ? 0 : last["row"][0];
          let curC = last["column"] == null ? 0 : last["column"][0];
          let rlen = dataChe.length, clen = dataChe[0].length;
          let addr = curR + rlen - d.length, addc = curC + clen - d[0].length;
          if (addr > 0 || addc > 0) {
            d = datagridgrowth([].concat(d), addr, addc, true);
          }
          for (let r2 = 0; r2 < rlen; r2++) {
            let x = [].concat(d[r2 + curR]);
            for (let c2 = 0; c2 < clen; c2++) {
              let value = "";
              if (dataChe[r2] != null && dataChe[r2][c2] != null) {
                value = dataChe[r2][c2];
              }
              x[c2 + curC] = value;
            }
            d[r2 + curR] = x;
          }
          if (addr > 0 || addc > 0) {
            jfrefreshgridall(d[0].length, d.length, d, null, store_default.luckysheet_select_save, "datachangeAll");
          } else {
            jfrefreshrange(d, store_default.luckysheet_select_save);
          }
        },
        clearRangeByindex: function(st_r, ed_r, st_c, ed_c, sheetIndex) {
          let index2 = getSheetIndex(sheetIndex);
          let d = $.extend(true, [], store_default.luckysheetfile[index2]["data"]);
          for (let r2 = st_r; r2 <= ed_r; r2++) {
            let x = [].concat(d[r2]);
            for (let c2 = st_c; c2 <= ed_c; c2++) {
              formula_default.delFunctionGroup(r2, c2);
              formula_default.execFunctionGroup(r2, c2, "");
              x[c2] = null;
            }
            d[r2] = x;
          }
          if (sheetIndex == store_default.currentSheetIndex) {
            let rlen = ed_r - st_r + 1, clen = ed_c - st_c + 1;
            if (rlen > 5e3) {
              jfrefreshgrid(d, [{"row": [st_r, ed_r], "column": [st_c, ed_c]}]);
            } else {
              jfrefreshrange(d, {"row": [st_r, ed_r], "column": [st_c, ed_c]});
            }
          } else {
            store_default.luckysheetfile[index2]["data"] = d;
          }
        },
        controlHandlerD: function(dataChe) {
          let _this = this;
          let d = _this.deepCopyFlowData(store_default.flowdata);
          let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
          let r1 = last["row"][0], r2 = last["row"][1];
          let c1 = last["column"][0], c2 = last["column"][1];
          let rlen = dataChe.length, clen = dataChe[0].length;
          let addr = r1 + rlen - d.length, addc = c1 + clen - d[0].length;
          if (addr > 0 || addc > 0) {
            d = datagridgrowth([].concat(d), addr, addc, true);
          }
          for (let r3 = r1; r3 <= r2; r3++) {
            for (let c3 = c1; c3 <= c2; c3++) {
              d[r3][c3] = null;
            }
          }
          for (let i2 = 0; i2 < rlen; i2++) {
            for (let j = 0; j < clen; j++) {
              d[r1 + i2][c1 + j] = dataChe[i2][j];
            }
          }
          let range2 = [
            {"row": [r1, r2], "column": [c1, c2]},
            {"row": [r1, r1 + rlen - 1], "column": [c1, c1 + clen - 1]}
          ];
          jfrefreshgrid(d, range2);
        }
      };
      editor_default = editor;
    }
  });

  // src/global/dynamicArray.js
  function dynamicArrayCompute(dynamicArray) {
    let dynamicArray_compute = {};
    if (getObjType(dynamicArray) == "array") {
      for (let i2 = 0; i2 < dynamicArray.length; i2++) {
        let d_row = dynamicArray[i2].r;
        let d_col = dynamicArray[i2].c;
        let d_f = dynamicArray[i2].f;
        if (store_default.flowdata[d_row][d_col] != null && store_default.flowdata[d_row][d_col].f != null && store_default.flowdata[d_row][d_col].f == d_f) {
          if (d_row + "_" + d_col in dynamicArray_compute) {
            dynamicArray_compute = dynamicArraySpillEditCompute(dynamicArray_compute, d_row, d_col);
          }
          let d_data = dynamicArray[i2].data;
          let d_rowlen = d_data.length;
          let d_collen = 1;
          if (getObjType(d_data[0]) == "array") {
            d_collen = d_data[0].length;
          }
          if (dynamicArrayRangeIsAllNull({"row": [d_row, d_row + d_rowlen - 1], "column": [d_col, d_col + d_collen - 1]}, store_default.flowdata)) {
            for (let x = 0; x < d_rowlen; x++) {
              for (let y = 0; y < d_collen; y++) {
                let rowIndex = d_row + x;
                let colIndex = d_col + y;
                if (getObjType(d_data[0]) == "array") {
                  dynamicArray_compute[rowIndex + "_" + colIndex] = {"v": d_data[x][y], "r": d_row, "c": d_col};
                } else {
                  dynamicArray_compute[rowIndex + "_" + colIndex] = {"v": d_data[x], "r": d_row, "c": d_col};
                }
              }
            }
          } else {
            dynamicArray_compute[d_row + "_" + d_col] = {"v": "#SPILL!", "r": d_row, "c": d_col};
          }
        }
      }
    }
    return dynamicArray_compute;
  }
  function dynamicArraySpillEditCompute(computeObj, r2, c2) {
    let rowIndex = computeObj[r2 + "_" + c2].r;
    let colIndex = computeObj[r2 + "_" + c2].c;
    for (let x in computeObj) {
      if (x == rowIndex + "_" + colIndex) {
        computeObj[x].v = "#SPILL!";
      } else if (computeObj[x].r == rowIndex && computeObj[x].c == colIndex) {
        delete computeObj[x];
      }
    }
    return computeObj;
  }
  function dynamicArrayRangeIsAllNull(range2, data) {
    let r1 = range2["row"][0], r2 = range2["row"][1];
    let c1 = range2["column"][0], c2 = range2["column"][1];
    let isAllNull = true;
    for (let r3 = r1; r3 <= r2; r3++) {
      for (let c3 = c1; c3 <= c2; c3++) {
        if (!(r3 == r1 && c3 == c1) && data[r3][c3] != null && data[r3][c3].v != null && data[r3][c3].v.toString() != "") {
          isAllNull = false;
          break;
        }
      }
    }
    return isAllNull;
  }
  function dynamicArrayHightShow(r2, c2) {
    let dynamicArray = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["dynamicArray"] == null ? [] : store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["dynamicArray"];
    let dynamicArray_compute = dynamicArrayCompute(dynamicArray);
    if (r2 + "_" + c2 in dynamicArray_compute && dynamicArray_compute[r2 + "_" + c2].v != "#SPILL!") {
      let d_row = dynamicArray_compute[r2 + "_" + c2].r;
      let d_col = dynamicArray_compute[r2 + "_" + c2].c;
      let d_f = store_default.flowdata[d_row][d_col].f;
      let rlen, clen;
      for (let i2 = 0; i2 < dynamicArray.length; i2++) {
        if (dynamicArray[i2].f == d_f) {
          rlen = dynamicArray[i2].data.length;
          if (getObjType(dynamicArray[i2].data[0]) == "array") {
            clen = dynamicArray[i2].data[0].length;
          } else {
            clen = 1;
          }
        }
      }
      let d_row_end = d_row + rlen - 1;
      let d_col_end = d_col + clen - 1;
      let row = store_default.visibledatarow[d_row_end], row_pre = d_row - 1 == -1 ? 0 : store_default.visibledatarow[d_row - 1];
      let col = store_default.visibledatacolumn[d_col_end], col_pre = d_col - 1 == -1 ? 0 : store_default.visibledatacolumn[d_col - 1];
      $("#luckysheet-dynamicArray-hightShow").css({
        "left": col_pre,
        "width": col - col_pre - 1,
        "top": row_pre,
        "height": row - row_pre - 1,
        "display": "block"
      });
    } else {
      $("#luckysheet-dynamicArray-hightShow").hide();
    }
  }
  var init_dynamicArray = __esm({
    "src/global/dynamicArray.js"() {
      init_util();
      init_get();
      init_store();
    }
  });

  // src/global/cursorPos.js
  function luckysheetRangeLast(obj) {
    let range2;
    if (document.createRange) {
      if (obj.innerHTML != obj.innerText || obj.innerHTML == "") {
        obj.focus();
        range2 = window.getSelection();
        range2.selectAllChildren(obj);
        range2.collapseToEnd();
      } else {
        let len = obj.innerText.length;
        range2 = document.createRange();
        range2.selectNodeContents(obj);
        range2.setStart(obj.childNodes[0], len);
        range2.collapse(true);
        let selection2 = window.getSelection();
        selection2.removeAllRanges();
        selection2.addRange(range2);
      }
    } else if (document.selection) {
      range2 = document.body.createTextRange();
      range2.moveToElementText(obj);
      range2.collapse(false);
      range2.select();
    }
  }
  function hideMenuByCancel(event2) {
    if (event2.target.classList && (event2.target.classList.contains("luckysheet-cols-rows-shift-left") || event2.target.classList.contains("luckysheet-cols-rows-shift-right"))) {
      return;
    }
    if (!$(event2.target).hasClass("luckysheet-mousedown-cancel") && $(event2.target).filter("[class*='sp-palette']").length == 0 && $(event2.target).filter("[class*='sp-thumb']").length == 0 && $(event2.target).filter("[class*='sp-']").length == 0) {
      $("#luckysheet-rightclick-menu").hide();
      $("#luckysheet-cols-h-hover").hide();
      $("#luckysheet-cols-menu-btn").hide();
      $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu, #luckysheet-user-menu").hide();
      $("body > .luckysheet-filter-menu, body > .luckysheet-filter-submenu, body > .luckysheet-cols-menu").hide();
      store_default.luckysheet_cols_menu_status = false;
    }
  }
  function selectTextDom(ele) {
    if (window.getSelection) {
      let range2 = document.createRange();
      range2.selectNodeContents(ele);
      if (range2.startContainer && isInPage(range2.startContainer)) {
        window.getSelection().removeAllRanges();
        window.getSelection().addRange(range2);
      }
    } else if (document.selection) {
      let range2 = document.body.createTextRange();
      range2.moveToElementText(ele);
      range2.select();
    }
  }
  function selectTextContent(ele) {
    if (window.getSelection) {
      let range2 = document.createRange();
      var content = ele.firstChild;
      range2.setStart(content, 0);
      range2.setEnd(content, content.length);
      if (range2.startContainer && isInPage(range2.startContainer)) {
        window.getSelection().removeAllRanges();
        window.getSelection().addRange(range2);
      }
    } else if (document.selection) {
      let range2 = document.body.createTextRange();
      range2.moveToElementText(ele);
      range2.select();
    }
  }
  function selectTextContentCross(sEle, eEle) {
    if (window.getSelection) {
      let range2 = document.createRange();
      var sContent = sEle.firstChild, eContent = eEle.firstChild;
      range2.setStart(sContent, 0);
      range2.setEnd(eContent, eContent.length);
      if (range2.startContainer && isInPage(range2.startContainer)) {
        window.getSelection().removeAllRanges();
        window.getSelection().addRange(range2);
      }
    }
  }
  function selectTextContentCollapse(sEle, index2) {
    if (window.getSelection) {
      let range2 = document.createRange();
      var sContent = sEle.firstChild;
      if (index2 > sContent.length) {
        index2 = sContent.length;
      } else if (index2 < 0) {
        index2 = 0;
      }
      range2.setStart(sContent, index2);
      range2.collapse(true);
      if (range2.startContainer && isInPage(range2.startContainer)) {
        window.getSelection().removeAllRanges();
        window.getSelection().addRange(range2);
      }
    }
  }
  function isInPage(node) {
    return node === document.body ? false : document.body.contains(node);
  }
  var init_cursorPos = __esm({
    "src/global/cursorPos.js"() {
      init_store();
    }
  });

  // src/controllers/inlineString.js
  function isInlineStringCell(cell) {
    let isIs = cell && cell.ct != null && cell.ct.t == "inlineStr" && cell.ct.s != null && cell.ct.s.length > 0;
    return isIs;
  }
  function isInlineStringCT(ct) {
    let isIs = ct != null && ct.t == "inlineStr" && ct.s != null && ct.s.length > 0;
    return isIs;
  }
  function updateInlineStringFormat(cell, attr, value, $input) {
    var w = window.getSelection();
    var range2;
    if (w.type == "None") {
      range2 = store_default.inlineStringEditRange;
    } else {
      range2 = w.getRangeAt(0);
    }
    let cac = range2.commonAncestorContainer;
    let $textEditor;
    if (cac.id == "luckysheet-rich-text-editor") {
      $textEditor = $(cac);
    } else {
      $textEditor = $(cac).closest("#luckysheet-rich-text-editor");
    }
    let $functionbox = $(cac).closest("#luckysheet-functionbox-cell");
    if ($textEditor.length == 0 && $functionbox.length == 0 && store_default.inlineStringEditRange != null) {
      range2 = store_default.inlineStringEditRange;
      cac = range2.commonAncestorContainer;
      if (cac.id == "luckysheet-rich-text-editor") {
        $textEditor = $(cac);
      } else {
        $textEditor = $(cac).closest("#luckysheet-rich-text-editor");
      }
      $functionbox = $(cac).closest("#luckysheet-functionbox-cell");
    }
    if (range2.collapsed === true) {
      return;
    }
    let endContainer = range2.endContainer, startContainer = range2.startContainer;
    let endOffset = range2.endOffset, startOffset = range2.startOffset;
    if ($textEditor.length > 0) {
      if (startContainer === endContainer) {
        let span = startContainer.parentNode, spanIndex, inherit = false;
        let content = span.innerText;
        let fullContent = $textEditor.html();
        if (fullContent.substr(0, 5) != "<span") {
          inherit = true;
        }
        let left = "", mid = "", right = "";
        let s1 = 0, s2 = startOffset, s3 = endOffset, s4 = content.length;
        left = content.substring(s1, s2);
        mid = content.substring(s2, s3);
        right = content.substring(s3, s4);
        let cont = "";
        if (left != "") {
          let cssText = span.style.cssText;
          if (inherit) {
            let box = $(span).closest("#luckysheet-input-box").get(0);
            if (box != null) {
              cssText = extendCssText(box.style.cssText, cssText);
            }
          }
          cont += "<span style='" + cssText + "'>" + left + "</span>";
        }
        if (mid != "") {
          let cssText = getCssText(span.style.cssText, attr, value);
          if (inherit) {
            let box = $(span).closest("#luckysheet-input-box").get(0);
            if (box != null) {
              cssText = extendCssText(box.style.cssText, cssText);
            }
          }
          cont += "<span style='" + cssText + "'>" + mid + "</span>";
        }
        if (right != "") {
          let cssText = span.style.cssText;
          if (inherit) {
            let box = $(span).closest("#luckysheet-input-box").get(0);
            if (box != null) {
              cssText = extendCssText(box.style.cssText, cssText);
            }
          }
          cont += "<span style='" + cssText + "'>" + right + "</span>";
        }
        if (startContainer.parentNode.tagName == "SPAN") {
          spanIndex = $textEditor.find("span").index(span);
          $(span).replaceWith(cont);
        } else {
          spanIndex = 0;
          $(span).html(cont);
        }
        let seletedNodeIndex = 0;
        if (s1 == s2) {
          seletedNodeIndex = spanIndex;
        } else {
          seletedNodeIndex = spanIndex + 1;
        }
        selectTextContent($textEditor.find("span").get(seletedNodeIndex));
      } else {
        if (startContainer.parentNode.tagName == "SPAN" && endContainer.parentNode.tagName == "SPAN") {
          let startSpan = startContainer.parentNode, startSpanIndex;
          let endSpan = endContainer.parentNode, endSpanIndex;
          startSpanIndex = $textEditor.find("span").index(startSpan);
          endSpanIndex = $textEditor.find("span").index(endSpan);
          let startContent = startSpan.innerHTML, endContent = endSpan.innerHTML;
          let sleft = "", sright = "", eleft = "", eright = "";
          let s1 = 0, s2 = startOffset, s3 = endOffset, s4 = endContent.length;
          sleft = startContent.substring(s1, s2);
          sright = startContent.substring(s2, startContent.length);
          eleft = endContent.substring(0, s3);
          eright = endContent.substring(s3, s4);
          let spans = $textEditor.find("span");
          let replaceSpans = spans.slice(startSpanIndex, endSpanIndex + 1);
          let cont = "";
          for (let i2 = 0; i2 < startSpanIndex; i2++) {
            let span = spans.get(i2), content = span.innerHTML;
            cont += "<span style='" + span.style.cssText + "'>" + content + "</span>";
          }
          if (sleft != "") {
            cont += "<span style='" + startSpan.style.cssText + "'>" + sleft + "</span>";
          }
          if (sright != "") {
            let cssText = getCssText(startSpan.style.cssText, attr, value);
            cont += "<span style='" + cssText + "'>" + sright + "</span>";
          }
          if (startSpanIndex < endSpanIndex) {
            for (let i2 = startSpanIndex + 1; i2 < endSpanIndex; i2++) {
              let span = spans.get(i2), content = span.innerHTML;
              let cssText = getCssText(span.style.cssText, attr, value);
              cont += "<span style='" + cssText + "'>" + content + "</span>";
            }
          }
          if (eleft != "") {
            let cssText = getCssText(endSpan.style.cssText, attr, value);
            cont += "<span style='" + cssText + "'>" + eleft + "</span>";
          }
          if (eright != "") {
            cont += "<span style='" + endSpan.style.cssText + "'>" + eright + "</span>";
          }
          for (let i2 = endSpanIndex + 1; i2 < spans.length; i2++) {
            let span = spans.get(i2), content = span.innerHTML;
            cont += "<span style='" + span.style.cssText + "'>" + content + "</span>";
          }
          $textEditor.html(cont);
          let startSeletedNodeIndex, endSeletedNodeIndex;
          if (s1 == s2) {
            startSeletedNodeIndex = startSpanIndex;
            endSeletedNodeIndex = endSpanIndex;
          } else {
            startSeletedNodeIndex = startSpanIndex + 1;
            endSeletedNodeIndex = endSpanIndex + 1;
          }
          spans = $textEditor.find("span");
          selectTextContentCross(spans.get(startSeletedNodeIndex), spans.get(endSeletedNodeIndex));
        }
      }
    } else if ($functionbox.length > 0) {
    }
  }
  function enterKeyControll(cell) {
    var w = window.getSelection();
    if (w.type == "None") {
      return;
    }
    var range2 = w.getRangeAt(0);
    let cac = range2.commonAncestorContainer;
    let $textEditor;
    if (cac.id == "luckysheet-rich-text-editor") {
      $textEditor = $(cac);
    } else {
      $textEditor = $(cac).closest("#luckysheet-rich-text-editor");
    }
    let $functionbox = $(cac).closest("#luckysheet-functionbox-cell");
    let endContainer = range2.endContainer, startContainer = range2.startContainer;
    let endOffset = range2.endOffset, startOffset = range2.startOffset;
    if ($textEditor.length > 0) {
      let startSpan = startContainer.parentNode;
      if (startContainer.id == "luckysheet-rich-text-editor") {
        startSpan = $(startContainer).find("span");
        if (startSpan.length == 0) {
          startContainer.innerHTML = `<span>${startContainer.innerText}</span>`;
          startSpan = $(startContainer).find("span");
        }
        startSpan = startSpan.get(startSpan.length - 1);
        startOffset = startSpan.innerHTML.length;
      }
      if (range2.collapsed === false) {
        range2.deleteContents();
      }
      let startContent = startSpan.innerText;
      let sleft = "", sright = "";
      let s1 = 0, s2 = startOffset;
      sleft = startContent.substring(s1, s2);
      sright = startContent.substring(s2, startContent.length);
      let spanIndex, cont;
      if (startContainer.parentNode.tagName == "SPAN") {
        let textSpan = $textEditor.find("span");
        spanIndex = textSpan.index(startSpan);
        if (spanIndex == textSpan.length - 1 && sright == "") {
          let txt = textSpan[spanIndex].innerHTML;
          if (txt.substr(txt.length - 1, 1) == "\n") {
            cont = "<span style='" + startSpan.style.cssText + "'>" + sleft + "\n</span>";
          } else {
            cont = "<span style='" + startSpan.style.cssText + "'>" + sleft + "\n\n</span>";
          }
        } else {
          cont = "<span style='" + startSpan.style.cssText + "'>" + sleft + "\n" + sright + "</span>";
        }
        $(startSpan).replaceWith(cont);
      } else {
        let cssText = startSpan.style.cssText;
        if (sright == "") {
          cont = "<span style='" + cssText + "'>" + sleft + "\n\n</span>";
        } else {
          cont = "<span style='" + cssText + "'>" + sleft + "\n" + sright + "</span>";
        }
        if (startContainer.id == "luckysheet-rich-text-editor") {
          $(startSpan).replaceWith(cont);
          let textSpan = $textEditor.find("span");
          spanIndex = textSpan.length - 1;
          startOffset = textSpan.get(spanIndex).innerHTML.length - 1;
        } else {
          $(startSpan).html(cont);
          spanIndex = 0;
        }
      }
      selectTextContentCollapse($textEditor.find("span").get(spanIndex), startOffset + 1);
    } else if ($functionbox.length > 0) {
    }
  }
  function updateInlineStringFormatOutside(cell, key, value) {
    if (cell.ct == null) {
      return;
    }
    let s = cell.ct.s;
    if (s == null) {
      return;
    }
    for (let i2 = 0; i2 < s.length; i2++) {
      let item2 = s[i2];
      item2[key] = value;
    }
  }
  function convertSpanToShareString($dom) {
    let styles = [], preStyleList, preStyleListString = null;
    for (let i2 = 0; i2 < $dom.length; i2++) {
      let span = $dom.get(i2);
      let styleList = convertCssToStyleList(span.style.cssText);
      let curStyleListString = JSON.stringify(styleList);
      let v = span.innerText;
      v = v.replace(/\n/g, "\r\n");
      if (curStyleListString == preStyleListString) {
        preStyleList.v += v;
      } else {
        styleList.v = v;
        styles.push(styleList);
        preStyleListString = curStyleListString;
        preStyleList = styleList;
      }
    }
    return styles;
  }
  function convertCssToStyleList(cssText) {
    if (cssText == null || cssText.length == 0) {
      return {};
    }
    let cssTextArray = cssText.split(";");
    const _locale = locale_default();
    const locale_fontarray = _locale.fontarray;
    const locale_fontjson = _locale.fontjson;
    let styleList = {
      "ff": locale_fontarray[0],
      "fc": "#000000",
      "fs": 10,
      "cl": 0,
      "un": 0,
      "bl": 0,
      "it": 0
    };
    cssTextArray.forEach((s) => {
      s = s.toLowerCase();
      let key = textTrim(s.substr(0, s.indexOf(":")));
      let value = textTrim(s.substr(s.indexOf(":") + 1));
      if (key == "font-weight") {
        if (value == "bold") {
          styleList["bl"] = 1;
        } else {
          styleList["bl"] = 0;
        }
      }
      if (key == "font-style") {
        if (value == "italic") {
          styleList["it"] = 1;
        } else {
          styleList["it"] = 0;
        }
      }
      if (key == "font-family") {
        let ff = locale_fontjson[value];
        if (ff == null) {
          styleList["ff"] = value;
        } else {
          styleList["ff"] = ff;
        }
      }
      if (key == "font-size") {
        styleList["fs"] = parseInt(value);
      }
      if (key == "color") {
        styleList["fc"] = value;
      }
      if (key == "text-decoration") {
        styleList["cl"] = 1;
      }
      if (key == "border-bottom") {
        styleList["un"] = 1;
      }
      if (key == "lucky-strike") {
        styleList["cl"] = value;
      }
      if (key == "lucky-underline") {
        styleList["un"] = value;
      }
    });
    return styleList;
  }
  function getClassWithcss(cssText, ukey) {
    let cssTextArray = cssText.split(";");
    if (ukey == null || ukey.length == 0) {
      return cssText;
    }
    if (cssText.indexOf(ukey) > -1) {
      for (let i2 = 0; i2 < cssTextArray.length; i2++) {
        let s = cssTextArray[i2];
        s = s.toLowerCase();
        let key = textTrim(s.substr(0, s.indexOf(":")));
        let value = textTrim(s.substr(s.indexOf(":") + 1));
        if (key == ukey) {
          return value;
        }
      }
    }
    return "";
  }
  function upsetClassWithCss(cssText, ukey, uvalue) {
    let cssTextArray = cssText.split(";");
    let newCss = "";
    if (ukey == null || ukey.length == 0) {
      return cssText;
    }
    if (cssText.indexOf(ukey) > -1) {
      for (let i2 = 0; i2 < cssTextArray.length; i2++) {
        let s = cssTextArray[i2];
        s = s.toLowerCase();
        let key = textTrim(s.substr(0, s.indexOf(":")));
        let value = textTrim(s.substr(s.indexOf(":") + 1));
        if (key == ukey) {
          newCss += key + ":" + uvalue + ";";
        } else if (key.length > 0) {
          newCss += key + ":" + value + ";";
        }
      }
    } else if (ukey.length > 0) {
      cssText += ukey + ":" + uvalue + ";";
      newCss = cssText;
    }
    return newCss;
  }
  function removeClassWidthCss(cssText, ukey) {
    let cssTextArray = cssText.split(";");
    let newCss = "";
    let oUkey = ukey;
    if (ukey == null || ukey.length == 0) {
      return cssText;
    }
    if (ukey in luckyToCssName) {
      ukey = luckyToCssName[ukey];
    }
    if (cssText.indexOf(ukey) > -1) {
      for (let i2 = 0; i2 < cssTextArray.length; i2++) {
        let s = cssTextArray[i2];
        s = s.toLowerCase();
        let key = textTrim(s.substr(0, s.indexOf(":")));
        let value = textTrim(s.substr(s.indexOf(":") + 1));
        if (key == ukey || oUkey == "cl" && key == "lucky-strike" || oUkey == "un" && key == "lucky-underline") {
          continue;
        } else if (key.length > 0) {
          newCss += key + ":" + value + ";";
        }
      }
    } else {
      newCss = cssText;
    }
    return newCss;
  }
  function getCssText(cssText, attr, value) {
    let styleObj = {};
    styleObj[attr] = value;
    if (attr == "un") {
      let fontColor = getClassWithcss(cssText, "color");
      if (fontColor == "") {
        fontColor = "#000000";
      }
      let fs = getClassWithcss(cssText, "font-size");
      if (fs == "") {
        fs = 11;
      }
      fs = parseInt(fs);
      styleObj["_fontSize"] = fs;
      styleObj["_color"] = fontColor;
    }
    let s = getFontStyleByCell(styleObj, void 0, void 0, false);
    let ukey = textTrim(s.substr(0, s.indexOf(":")));
    let uvalue = textTrim(s.substr(s.indexOf(":") + 1));
    uvalue = uvalue.substr(0, uvalue.length - 1);
    cssText = removeClassWidthCss(cssText, attr);
    cssText = upsetClassWithCss(cssText, ukey, uvalue);
    return cssText;
  }
  function extendCssText(origin, cover, isLimit = true) {
    let originArray = origin.split(";");
    let coverArray = cover.split(";");
    let newCss = "";
    let addKeyList = {};
    for (let i2 = 0; i2 < originArray.length; i2++) {
      let so = originArray[i2], isAdd = true;
      so = so.toLowerCase();
      let okey = textTrim(so.substr(0, so.indexOf(":")));
      if (okey == "font-size") {
        continue;
      }
      let ovalue = textTrim(so.substr(so.indexOf(":") + 1));
      if (isLimit) {
        if (!(okey in inlineStyleAffectCssName)) {
          continue;
        }
      }
      for (let a = 0; a < coverArray.length; a++) {
        let sc = coverArray[a];
        sc = sc.toLowerCase();
        let ckey = textTrim(sc.substr(0, sc.indexOf(":")));
        let cvalue = textTrim(sc.substr(sc.indexOf(":") + 1));
        if (okey == ckey) {
          newCss += ckey + ":" + cvalue + ";";
          isAdd = false;
          continue;
        }
      }
      if (isAdd) {
        newCss += okey + ":" + ovalue + ";";
      }
      addKeyList[okey] = 1;
    }
    for (let a = 0; a < coverArray.length; a++) {
      let sc = coverArray[a];
      sc = sc.toLowerCase();
      let ckey = textTrim(sc.substr(0, sc.indexOf(":")));
      let cvalue = textTrim(sc.substr(sc.indexOf(":") + 1));
      if (isLimit) {
        if (!(ckey in inlineStyleAffectCssName)) {
          continue;
        }
      }
      if (!(ckey in addKeyList)) {
        newCss += ckey + ":" + cvalue + ";";
      }
    }
    return newCss;
  }
  var inlineStyleAffectAttribute, inlineStyleAffectCssName, luckyToCssName;
  var init_inlineString = __esm({
    "src/controllers/inlineString.js"() {
      init_getdata();
      init_cursorPos();
      init_locale();
      init_store();
      inlineStyleAffectAttribute = {"bl": 1, "it": 1, "ff": 1, "cl": 1, "un": 1, "fs": 1, "fc": 1};
      inlineStyleAffectCssName = {"font-weight": 1, "font-style": 1, "font-family": 1, "text-decoration": 1, "border-bottom": 1, "font-size": 1, "color": 1};
      luckyToCssName = {
        "bl": "font-weight",
        "it": "font-style",
        "ff": "font-family",
        "fs": "font-size",
        "fc": "color",
        "cl": "text-decoration",
        "un": "border-bottom"
      };
    }
  });

  // src/global/getdata.js
  function getdatabyselection(range2, sheetIndex) {
    if (range2 == null) {
      range2 = store_default.luckysheet_select_save[0];
    }
    if (range2["row"] == null || range2["row"].length == 0) {
      return [];
    }
    let d, cfg;
    if (sheetIndex != null && sheetIndex != store_default.currentSheetIndex) {
      d = store_default.luckysheetfile[getSheetIndex(sheetIndex)]["data"];
      cfg = store_default.luckysheetfile[getSheetIndex(sheetIndex)]["config"];
    } else {
      d = editor_default.deepCopyFlowData(store_default.flowdata);
      cfg = store_default.config;
    }
    let data = [];
    for (let r2 = range2["row"][0]; r2 <= range2["row"][1]; r2++) {
      if (d[r2] == null) {
        continue;
      }
      if (cfg["rowhidden"] != null && cfg["rowhidden"][r2] != null) {
        continue;
      }
      let row = [];
      for (let c2 = range2["column"][0]; c2 <= range2["column"][1]; c2++) {
        row.push(d[r2][c2]);
      }
      data.push(row);
    }
    return data;
  }
  function getdatabyselectionD(d, range2) {
    if (range2 == null || range2["row"] == null || range2["row"].length == 0) {
      return [];
    }
    let dynamicArray_compute = dynamicArrayCompute(store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["dynamicArray"]);
    let data = [];
    if (d == null) {
      return data;
    }
    for (let r2 = range2["row"][0]; r2 <= range2["row"][1]; r2++) {
      if (d[r2] == null) {
        continue;
      }
      let row = [];
      for (let c2 = range2["column"][0]; c2 <= range2["column"][1]; c2++) {
        let value;
        if (r2 + "_" + c2 in dynamicArray_compute) {
          value = dynamicArray_compute[r2 + "_" + c2];
        } else {
          value = d[r2][c2];
        }
        row.push(value);
      }
      data.push(row);
    }
    return data;
  }
  function getdatabyselectionNoCopy(range2) {
    if (range2 == null || range2["row"] == null || range2["row"].length == 0) {
      return [];
    }
    let data = [];
    for (let r2 = range2["row"][0]; r2 <= range2["row"][1]; r2++) {
      let row = [];
      if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][r2] != null) {
        continue;
      }
      for (let c2 = range2["column"][0]; c2 <= range2["column"][1]; c2++) {
        let value = "";
        if (store_default.flowdata[r2] != null && store_default.flowdata[r2][c2] != null) {
          value = store_default.flowdata[r2][c2];
        }
        row.push(value);
      }
      data.push(row);
    }
    return data;
  }
  function getcellvalue(r2, c2, data, type) {
    if (type == null) {
      type = "v";
    }
    if (data == null) {
      data = store_default.flowdata;
    }
    let d_value;
    if (r2 != null && c2 != null) {
      d_value = data[r2][c2];
    } else if (r2 != null) {
      d_value = data[r2];
    } else if (c2 != null) {
      let newData = data[0].map(function(col, i2) {
        return data.map(function(row) {
          return row[i2];
        });
      });
      d_value = newData[c2];
    } else {
      return data;
    }
    let retv = d_value;
    if (getObjType(d_value) == "object") {
      retv = d_value[type];
      if (type == "f" && retv != null) {
        retv = formula_default.functionHTMLGenerate(retv);
      } else if (type == "f") {
        retv = d_value["v"];
      } else if (d_value && d_value.ct && d_value.ct.t == "d") {
        retv = d_value.m;
      }
    }
    if (retv == void 0) {
      retv = null;
    }
    return retv;
  }
  function datagridgrowth(data, addr, addc, iscallback) {
    if (addr <= 0 && addc <= 0) {
      return data;
    }
    if (addr <= 0) {
      addr = 0;
    }
    if (addc <= 0) {
      addc = 0;
    }
    let dataClen = 0;
    if (data.length == 0) {
      data = [];
      dataClen = 0;
    } else {
      dataClen = data[0].length;
    }
    let coladd = [];
    for (let c2 = 0; c2 < addc; c2++) {
      coladd.push(null);
    }
    let rowadd = [];
    for (let r2 = 0; r2 < dataClen + addc; r2++) {
      rowadd.push(null);
    }
    for (let r2 = 0; r2 < data.length; r2++) {
      data[r2] = [].concat(data[r2].concat(coladd));
    }
    for (let r2 = 0; r2 < addr; r2++) {
      data.push([].concat(rowadd));
    }
    if (!!iscallback) {
      server_default.saveParam("all", store_default.currentSheetIndex, data.length, {"k": "row"});
      server_default.saveParam("all", store_default.currentSheetIndex, data[0].length, {"k": "column"});
    }
    return data;
  }
  function getcellFormula(r2, c2, i2, data) {
    let cell;
    if (data != null) {
      cell = data[r2][c2];
    } else {
      cell = getOrigincell(r2, c2, i2);
    }
    if (cell == null) {
      return null;
    }
    return cell.f;
  }
  function getOrigincell(r2, c2, i2) {
    if (r2 == null || c2 == null) {
      return;
    }
    let data;
    if (i2 == null) {
      data = store_default.flowdata;
    } else {
      let sheet = sheetmanage_default.getSheetByIndex(i2);
      data = sheet.data;
    }
    if (!data || !data[r2] || !data[r2][c2]) {
      return;
    }
    return data[r2][c2];
  }
  function getRealCellValue(r2, c2) {
    let value = getcellvalue(r2, c2, null, "m");
    if (value == null) {
      value = getcellvalue(r2, c2);
      if (value == null) {
        let ct = getcellvalue(r2, c2, null, "ct");
        if (isInlineStringCT(ct)) {
          value = ct.s;
        }
      }
    }
    return value;
  }
  function getInlineStringNoStyle(r2, c2) {
    let ct = getcellvalue(r2, c2, null, "ct");
    if (isInlineStringCT(ct)) {
      let strings = ct.s, value = "";
      for (let i2 = 0; i2 < strings.length; i2++) {
        let strObj = strings[i2];
        if (strObj.v != null) {
          value += strObj.v;
        }
      }
      return value;
    }
    return "";
  }
  function getInlineStringStyle(r2, c2, data) {
    let ct = getcellvalue(r2, c2, data, "ct");
    if (data == null) {
      data = store_default.flowdata;
    }
    let cell = data[r2][c2];
    if (isInlineStringCT(ct)) {
      let strings = ct.s, value = "";
      for (let i2 = 0; i2 < strings.length; i2++) {
        let strObj = strings[i2];
        if (strObj.v != null) {
          let style = getFontStyleByCell(strObj);
          value += "<span index='" + i2 + "' style='" + style + "'>" + strObj.v + "</span>";
        }
      }
      return value;
    }
    return "";
  }
  function getFontStyleByCell(cell, checksAF, checksCF, isCheck = true) {
    if (cell == null) {
      return;
    }
    let style = "";
    const _locale = locale_default();
    const locale_fontarray = _locale.fontarray;
    for (let key in cell) {
      let value = cell[key];
      if (isCheck) {
        value = checkstatusByCell(cell, key);
      }
      if (key == "bl" && value != "0") {
        style += "font-weight: bold;";
      }
      if (key == "it" && value != "0") {
        style += "font-style:italic;";
      }
      if (key == "ff") {
        let f = value;
        if (!isNaN(parseInt(value))) {
          f = locale_fontarray[parseInt(value)];
        } else {
          f = value;
        }
        style += "font-family: " + f + ";";
      }
      if (key == "fs") {
        style += "font-size: " + value + "pt;";
      }
      if (key == "fc" && value != "#000000" || checksAF != null || checksCF != null && checksCF["textColor"] != null) {
        if (checksCF != null && checksCF["textColor"] != null) {
          style += "color: " + checksCF["textColor"] + ";";
        } else if (checksAF != null) {
          style += "color: " + checksAF[0] + ";";
        } else {
          style += "color: " + value + ";";
        }
      }
      if (key == "cl" && value != "0") {
        style += "text-decoration: line-through;";
      }
    }
    return style;
  }
  function checkstatusByCell(cell, a) {
    let foucsStatus = cell;
    let tf = {"bl": 1, "it": 1, "ff": 1, "cl": 1, "un": 1};
    if (a in tf || a == "fs" && isInlineStringCell(cell)) {
      if (foucsStatus == null) {
        foucsStatus = "0";
      } else {
        foucsStatus = foucsStatus[a];
        if (foucsStatus == null) {
          foucsStatus = "0";
        }
      }
    } else if (a == "fc") {
      if (foucsStatus == null) {
        foucsStatus = "#000000";
      } else {
        foucsStatus = foucsStatus[a];
        if (foucsStatus == null) {
          foucsStatus = "#000000";
        }
        if (foucsStatus.indexOf("rgba") > -1) {
          foucsStatus = rgbTohex(foucsStatus);
        }
      }
    } else if (a == "bg") {
      if (foucsStatus == null) {
        foucsStatus = null;
      } else {
        foucsStatus = foucsStatus[a];
        if (foucsStatus == null) {
          foucsStatus = null;
        } else if (foucsStatus.toString().indexOf("rgba") > -1) {
          foucsStatus = rgbTohex(foucsStatus);
        }
      }
    } else if (a.substr(0, 2) == "bs") {
      if (foucsStatus == null) {
        foucsStatus = "none";
      } else {
        foucsStatus = foucsStatus[a];
        if (foucsStatus == null) {
          foucsStatus = "none";
        }
      }
    } else if (a.substr(0, 2) == "bc") {
      if (foucsStatus == null) {
        foucsStatus = "#000000";
      } else {
        foucsStatus = foucsStatus[a];
        if (foucsStatus == null) {
          foucsStatus = "#000000";
        }
      }
    } else if (a == "ht") {
      if (foucsStatus == null) {
        foucsStatus = "1";
      } else {
        foucsStatus = foucsStatus[a];
        if (foucsStatus == null) {
          foucsStatus = "1";
        }
      }
      if (["0", "1", "2"].indexOf(foucsStatus.toString()) == -1) {
        foucsStatus = "1";
      }
    } else if (a == "vt") {
      if (foucsStatus == null) {
        foucsStatus = "0";
      } else {
        foucsStatus = foucsStatus[a];
        if (foucsStatus == null) {
          foucsStatus = "0";
        }
      }
      if (["0", "1", "2"].indexOf(foucsStatus.toString()) == -1) {
        foucsStatus = "0";
      }
    } else if (a == "ct") {
      if (foucsStatus == null) {
        foucsStatus = null;
      } else {
        foucsStatus = foucsStatus[a];
        if (foucsStatus == null) {
          foucsStatus = null;
        }
      }
    } else if (a == "fs") {
      if (foucsStatus == null) {
        foucsStatus = String(store_default.defaultFontSize);
      } else {
        foucsStatus = foucsStatus[a];
        if (foucsStatus == null) {
          foucsStatus = String(store_default.defaultFontSize);
        }
      }
    } else if (a == "tb") {
      if (foucsStatus == null) {
        foucsStatus = "0";
      } else {
        foucsStatus = foucsStatus[a];
        if (foucsStatus == null) {
          foucsStatus = "0";
        }
      }
    } else if (a == "tr") {
      if (foucsStatus == null) {
        foucsStatus = "0";
      } else {
        foucsStatus = foucsStatus[a];
        if (foucsStatus == null) {
          foucsStatus = "0";
        }
      }
    } else if (a == "rt") {
      if (foucsStatus == null) {
        foucsStatus = null;
      } else {
        foucsStatus = foucsStatus[a];
        if (foucsStatus == null) {
          foucsStatus = null;
        }
      }
    }
    return foucsStatus;
  }
  function textTrim(x) {
    if (x == null || x.length == 0) {
      return x;
    }
    return x.replace(/^\s+|\s+$/gm, "");
  }
  var init_getdata = __esm({
    "src/global/getdata.js"() {
      init_util();
      init_get();
      init_server();
      init_formula();
      init_editor();
      init_dynamicArray();
      init_sheetmanage();
      init_inlineString();
      init_locale();
      init_store();
    }
  });

  // src/controllers/sheetSearch.js
  function luckysheetbinary_search(arr, key) {
    let low = 0, high = arr.length - 1;
    while (low <= high) {
      let mid = parseInt((high + low) / 2);
      if (key < arr[mid] && (mid == 0 || key >= arr[mid - 1])) {
        return mid;
      } else if (key >= arr[mid]) {
        low = mid + 1;
      } else if (key < arr[mid]) {
        high = mid - 1;
      } else {
        return -1;
      }
    }
  }
  function luckysheetorder_search(arr, y) {
    let i2 = 0, row = 0, row_pre = 0, row_index = -1, i_ed = arr.length - 1;
    while (i2 < arr.length && i_ed >= 0 && i_ed >= i2) {
      row = arr[i_ed];
      if (i_ed == 0) {
        row_pre = 0;
      } else {
        row_pre = arr[i_ed - 1];
      }
      if (y >= row_pre && y < row) {
        row_index = i_ed;
        break;
      }
      row = arr[i2];
      if (i2 == 0) {
        row_pre = 0;
      } else {
        row_pre = arr[i2 - 1];
      }
      if (y >= row_pre && y < row) {
        row_index = i2;
        break;
      }
      i2++;
      i_ed--;
    }
    return row_index;
  }
  function luckysheet_searcharray(arr, y) {
    let index2 = arr.length - 1;
    if (arr.length < 40 || y <= arr[20] || y >= arr[index2 - 20]) {
      index2 = luckysheetorder_search(arr, y);
    } else {
      index2 = luckysheetbinary_search(arr, y);
    }
    return index2;
  }
  var init_sheetSearch = __esm({
    "src/controllers/sheetSearch.js"() {
    }
  });

  // src/global/location.js
  function rowLocationByIndex(row_index) {
    let row = 0, row_pre = 0;
    row = store_default.visibledatarow[row_index];
    if (row_index == 0) {
      row_pre = 0;
    } else {
      row_pre = store_default.visibledatarow[row_index - 1];
    }
    return [row_pre, row, row_index];
  }
  function rowLocation(y) {
    let row_index = luckysheet_searcharray(store_default.visibledatarow, y);
    if (row_index == -1 && y > 0) {
      row_index = store_default.visibledatarow.length - 1;
    } else if (row_index == -1 && y <= 0) {
      row_index = 0;
    }
    return rowLocationByIndex(row_index);
  }
  function colLocationByIndex(col_index) {
    let col = 0, col_pre = 0;
    col = store_default.visibledatacolumn[col_index];
    if (col_index == 0) {
      col_pre = 0;
    } else {
      col_pre = store_default.visibledatacolumn[col_index - 1];
    }
    return [col_pre, col, col_index];
  }
  function colSpanLocationByIndex(col_index, span) {
    let col = 0, col_pre = 0;
    col = store_default.visibledatacolumn[col_index + span - 1];
    if (col_index == 0) {
      col_pre = 0;
    } else {
      col_pre = store_default.visibledatacolumn[col_index - 1];
    }
    return [col_pre, col, col_index];
  }
  function colLocation(x) {
    let col_index = luckysheet_searcharray(store_default.visibledatacolumn, x);
    if (col_index == -1 && x > 0) {
      col_index = store_default.visibledatacolumn.length - 1;
    } else if (col_index == -1 && x <= 0) {
      col_index = 0;
    }
    return colLocationByIndex(col_index);
  }
  function mouseposition(x, y) {
    let container_offset = $("#" + store_default.container).offset();
    let newX = x - container_offset.left - store_default.rowHeaderWidth, newY = y - container_offset.top - store_default.infobarHeight - store_default.toolbarHeight - store_default.calculatebarHeight - store_default.columnHeaderHeight;
    return [newX, newY];
  }
  var init_location = __esm({
    "src/global/location.js"() {
      init_sheetSearch();
      init_store();
    }
  });

  // src/global/getRowlen.js
  function rowlenByRange(d, r1, r2, cfg) {
    var _a;
    let cfg_clone = $.extend(true, {}, cfg);
    if (cfg_clone["rowlen"] == null) {
      cfg_clone["rowlen"] = {};
    }
    if (cfg_clone["customHeight"] == null) {
      cfg_clone["customHeight"] = {};
    }
    let canvas = $("#luckysheetTableContent").get(0).getContext("2d");
    canvas.textBaseline = "top";
    for (let r3 = r1; r3 <= r2; r3++) {
      if (cfg_clone["rowhidden"] != null && cfg_clone["rowhidden"][r3] != null) {
        continue;
      }
      let currentRowLen = store_default.defaultrowlen;
      if (cfg_clone["customHeight"][r3] == 1) {
        continue;
      }
      delete cfg_clone["rowlen"][r3];
      for (let c2 = 0; c2 < d[r3].length; c2++) {
        let cell = d[r3][c2];
        if (cell == null) {
          continue;
        }
        if (cell != null && (cell.v != null || isInlineStringCell(cell))) {
          let cellWidth;
          if (cell.mc) {
            if (c2 === cell.mc.c) {
              let st_cellWidth = colLocationByIndex(c2)[0];
              let ed_cellWidth = colLocationByIndex(cell.mc.c + cell.mc.cs - 1)[1];
              cellWidth = ed_cellWidth - st_cellWidth - 2;
            } else {
              continue;
            }
          } else {
            cellWidth = colLocationByIndex(c2)[1] - colLocationByIndex(c2)[0] - 2;
          }
          let textInfo = getCellTextInfo(cell, canvas, {
            r: r3,
            c: c2,
            cellWidth
          });
          let computeRowlen = 0;
          if (textInfo != null) {
            computeRowlen = textInfo.textHeightAll + 2;
          }
          if (computeRowlen > currentRowLen) {
            currentRowLen = computeRowlen;
          }
        }
      }
      currentRowLen = currentRowLen / store_default.zoomRatio;
      if (currentRowLen != store_default.defaultrowlen) {
        cfg_clone["rowlen"][r3] = currentRowLen;
      } else {
        if ((_a = cfg["rowlen"]) == null ? void 0 : _a[r3]) {
          cfg_clone["rowlen"][r3] = cfg["rowlen"][r3];
        }
      }
    }
    return cfg_clone;
  }
  function computeRowlenByContent(d, r2) {
    let currentRowLen = 0;
    let canvas = $("#luckysheetTableContent").get(0).getContext("2d");
    canvas.textBaseline = "top";
    for (let c2 = 0; c2 < d[r2].length; c2++) {
      let cell = d[r2][c2];
      if (cell == null) {
        continue;
      }
      if (cell.mc != null) {
        if (cell.mc.rs !== 1) {
          continue;
        }
      }
      if (store_default.config["colhidden"] != null && store_default.config["colhidden"][c2] != null) {
        continue;
      }
      if (cell != null && (cell.v != null || isInlineStringCell(cell))) {
        let cellWidth = computeCellWidth(cell, c2);
        let textInfo = getCellTextInfo(cell, canvas, {
          r: r2,
          c: c2,
          cellWidth
        });
        let computeRowlen = 0;
        if (textInfo != null) {
          computeRowlen = textInfo.textHeightAll + 2;
        }
        if (computeRowlen > currentRowLen) {
          currentRowLen = computeRowlen;
        }
      }
    }
    return currentRowLen;
  }
  function computeCellWidth(cell, col_index) {
    let colLocationArr = colLocationByIndex(col_index);
    if (cell.mc && cell.mc.cs !== 1) {
      colLocationArr = colSpanLocationByIndex(col_index, cell.mc.cs);
    }
    return colLocationArr[1] - colLocationArr[0] - 2;
  }
  function computeColWidthByContent(d, c2, rh) {
    let currentColLen = 0;
    let rowlenArr = computeRowlenArr(rh, c2);
    let canvas = $("#luckysheetTableContent").get(0).getContext("2d");
    canvas.textBaseline = "top";
    for (var i2 = 0; i2 < d.length; i2++) {
      var cell = d[i2][c2];
      if (cell != null && (cell.v != null || isInlineStringCell(cell))) {
        let cellHeight = rowlenArr[c2];
        let textInfo = getCellTextInfo(cell, canvas, {
          r: i2,
          c: c2,
          cellHeight
        });
        let computeCollen = 0;
        if (textInfo != null) {
          computeCollen = textInfo.textWidthAll + 2;
        }
        if (computeCollen > currentColLen) {
          currentColLen = computeCollen;
        }
      }
    }
    return currentColLen;
  }
  function computeRowlenArr(rowHeight, cfg) {
    let rowlenArr = [];
    let rh_height = 0;
    for (let i2 = 0; i2 < rowHeight; i2++) {
      let rowlen = store_default.defaultrowlen;
      if (cfg["rowlen"] != null && cfg["rowlen"][i2] != null) {
        rowlen = cfg["rowlen"][i2];
      }
      if (cfg["rowhidden"] != null && cfg["rowhidden"][i2] != null) {
        rowlen = cfg["rowhidden"][i2];
        rowlenArr.push(rh_height);
        continue;
      } else {
        rh_height += rowlen + 1;
      }
      rowlenArr.push(rh_height);
    }
    return rowlenArr;
  }
  function getMeasureText(value, ctx, fontset) {
    let mtc = store_default.measureTextCache[value + "_" + ctx.font];
    if (fontset != null) {
      mtc = store_default.measureTextCache[value + "_" + fontset];
    }
    if (mtc != null) {
      return mtc;
    } else {
      if (fontset != null) {
        let preFont = ctx.font;
        ctx.font = fontset;
      }
      let measureText = ctx.measureText(value), cache = {};
      cache.width = measureText.width;
      if (fontset != null) {
        ctx.font = fontset;
      }
      cache.actualBoundingBoxDescent = measureText.actualBoundingBoxDescent;
      cache.actualBoundingBoxAscent = measureText.actualBoundingBoxAscent;
      if (cache.actualBoundingBoxDescent == null || cache.actualBoundingBoxAscent == null || isNaN(cache.actualBoundingBoxDescent) || isNaN(cache.actualBoundingBoxAscent)) {
        let commonWord = "M";
        if (hasChinaword(value)) {
          commonWord = "\u7530";
        }
        let oneLineTextHeight = menuButton_default.getTextSize(commonWord, ctx.font)[1] * 0.8;
        if (ctx.textBaseline == "top") {
          cache.actualBoundingBoxDescent = oneLineTextHeight;
          cache.actualBoundingBoxAscent = 0;
        } else if (ctx.textBaseline == "middle") {
          cache.actualBoundingBoxDescent = oneLineTextHeight / 2;
          cache.actualBoundingBoxAscent = oneLineTextHeight / 2;
        } else {
          cache.actualBoundingBoxDescent = 0;
          cache.actualBoundingBoxAscent = oneLineTextHeight;
        }
      }
      if (ctx.textBaseline == "alphabetic") {
        let descText = "gjpqy", matchText = "abcdABCD";
        let descTextMeasure = store_default.measureTextCache[descText + "_" + ctx.font];
        if (fontset != null) {
          descTextMeasure = store_default.measureTextCache[descText + "_" + fontset];
        }
        let matchTextMeasure = store_default.measureTextCache[matchText + "_" + ctx.font];
        if (fontset != null) {
          matchTextMeasure = store_default.measureTextCache[matchText + "_" + fontset];
        }
        if (descTextMeasure == null) {
          descTextMeasure = ctx.measureText(descText);
        }
        if (matchTextMeasure == null) {
          matchTextMeasure = ctx.measureText(matchText);
        }
        if (cache.actualBoundingBoxDescent <= matchTextMeasure.actualBoundingBoxDescent) {
          cache.actualBoundingBoxDescent = descTextMeasure.actualBoundingBoxDescent;
          if (cache.actualBoundingBoxDescent == null) {
            cache.actualBoundingBoxDescent = 0;
          }
        }
      }
      cache.width *= store_default.zoomRatio;
      cache.actualBoundingBoxDescent *= store_default.zoomRatio;
      cache.actualBoundingBoxAscent *= store_default.zoomRatio;
      store_default.measureTextCache[value + "_" + store_default.zoomRatio + "_" + ctx.font] = cache;
      return cache;
    }
  }
  function isSupportBoundingBox(ctx) {
    let measureText = ctx.measureText("\u7530");
    if (measureText.actualBoundingBoxAscent == null) {
      return false;
    }
    return true;
  }
  function getCellTextInfo(cell, ctx, option) {
    let cellWidth = option.cellWidth;
    let cellHeight = option.cellHeight;
    let isMode = "", isModeSplit = "";
    if (cellWidth == null) {
      isMode = "onlyWidth";
      isModeSplit = "_";
    }
    let textInfo = store_default.measureTextCellInfoCache[option.r + "_" + option.c + isModeSplit + isMode];
    if (textInfo != null) {
      return textInfo;
    }
    let space_width = option.space_width, space_height = option.space_height;
    if (space_width == null) {
      space_width = 2;
    }
    if (space_height == null) {
      space_height = 2;
    }
    let horizonAlign = checkstatusByCell(cell, "ht");
    let verticalAlign = checkstatusByCell(cell, "vt");
    let tb = checkstatusByCell(cell, "tb");
    let tr = checkstatusByCell(cell, "tr");
    let rt = checkstatusByCell(cell, "rt");
    let isRotateUp = 1, isRotateDown = 0;
    if (rt == null) {
      if (tr == "0") {
        rt = 0;
      } else if (tr == "1") {
        rt = 45;
      } else if (tr == "4") {
        rt = 90;
      } else if (tr == "2") {
        rt = 135;
      } else if (tr == "5") {
        rt = 180;
      }
      if (rt == null) {
        rt = 0;
      }
    }
    if (rt > 180 || rt < 0) {
      rt = 0;
    }
    rt = parseInt(rt);
    if (rt > 90) {
      rt = 90 - rt;
      isRotateUp = 0;
      isRotateDown = 1;
    }
    ctx.textAlign = "start";
    let textContent = {};
    textContent.values = [];
    let fontset, cancelLine = "0", underLine = "0", fontSize = 11, isInline = false, value, inlineStringArr = [];
    if (isInlineStringCell(cell)) {
      let sharedStrings = cell.ct.s, similarIndex = 0;
      for (let i2 = 0; i2 < sharedStrings.length; i2++) {
        let shareCell = sharedStrings[i2];
        let scfontset = luckysheetfontformat(shareCell);
        let fc = shareCell.fc, cl = shareCell.cl, un = shareCell.un, v = shareCell.v, fs = shareCell.fs;
        v = v.replace(/\r\n/g, "_x000D_").replace(/&#13;&#10;/g, "_x000D_").replace(/\r/g, "_x000D_").replace(/\n/g, "_x000D_");
        let splitArr = v.split("_x000D_");
        for (let x = 0; x < splitArr.length; x++) {
          let newValue = splitArr[x];
          if (newValue == "" && x != splitArr.length - 1) {
            inlineStringArr.push({
              fontset: scfontset,
              fc: fc == null ? "#000" : fc,
              cl: cl == null ? 0 : cl,
              un: un == null ? 0 : un,
              wrap: true,
              fs: fs == null ? 11 : fs
            });
            similarIndex++;
          } else {
            let newValueArray = newValue.split("");
            for (let n = 0; n < newValueArray.length; n++) {
              let nv = newValueArray[n];
              inlineStringArr.push({
                fontset: scfontset,
                fc: fc == null ? "#000" : fc,
                cl: cl == null ? 0 : cl,
                un: un == null ? 0 : un,
                v: nv,
                si: similarIndex,
                fs: fs == null ? 11 : fs
              });
            }
            if (x != splitArr.length - 1) {
              inlineStringArr.push({
                fontset: scfontset,
                fc: fc == null ? "#000" : fc,
                cl: cl == null ? 0 : cl,
                un: un == null ? 0 : un,
                wrap: true,
                fs: fs == null ? 11 : fs
              });
              similarIndex++;
            }
          }
        }
        similarIndex++;
      }
      isInline = true;
    } else {
      fontset = luckysheetfontformat(cell);
      ctx.font = fontset;
      cancelLine = checkstatusByCell(cell, "cl");
      underLine = checkstatusByCell(cell, "un");
      fontSize = checkstatusByCell(cell, "fs");
      if (cell instanceof Object) {
        value = cell.m;
        if (value == null) {
          value = cell.v;
        }
      } else {
        value = cell;
      }
      if (isRealNull(value)) {
        return null;
      }
    }
    if (tr == "3") {
      ctx.textBaseline = "top";
      let textW_all = 0;
      let textH_all = 0;
      let colIndex = 0, textH_all_cache = 0, textH_all_Column = {}, textH_all_ColumnHeight = [];
      if (isInline) {
        let preShareCell = null;
        for (let i2 = 0; i2 < inlineStringArr.length; i2++) {
          let shareCell = inlineStringArr[i2];
          let value2 = shareCell.v, showValue = shareCell.v;
          if (shareCell.wrap === true) {
            value2 = "M";
            showValue = "";
            if (preShareCell != null && preShareCell.wrap !== true && i2 < inlineStringArr.length - 1) {
              textH_all_ColumnHeight.push(textH_all_cache);
              textH_all_cache = 0;
              colIndex += 1;
              preShareCell = shareCell;
              continue;
            }
          }
          let measureText = getMeasureText(value2, ctx, shareCell.fontset);
          let textW = measureText.width + space_width;
          let textH = measureText.actualBoundingBoxAscent + measureText.actualBoundingBoxDescent + space_height;
          textH_all_cache += textH;
          if (tb == "2" && !shareCell.wrap) {
            if (textH_all_cache > cellHeight && textH_all_Column[colIndex] != null) {
              textH_all_ColumnHeight.push(textH_all_cache - textH);
              textH_all_cache = textH;
              colIndex += 1;
            }
          }
          if (i2 == inlineStringArr.length - 1) {
            textH_all_ColumnHeight.push(textH_all_cache);
          }
          if (textH_all_Column[colIndex] == null) {
            textH_all_Column[colIndex] = [];
          }
          let item2 = {
            content: showValue,
            style: shareCell,
            width: textW,
            height: textH,
            left: 0,
            top: 0,
            colIndex,
            asc: measureText.actualBoundingBoxAscent,
            desc: measureText.actualBoundingBoxDescent,
            inline: true
          };
          if (shareCell.wrap === true) {
            item2.wrap = true;
          }
          textH_all_Column[colIndex].push(item2);
          console.log("normal", i2, colIndex, shareCell, preShareCell, textH_all_Column);
          preShareCell = shareCell;
        }
      } else {
        let measureText = getMeasureText(value, ctx);
        let textHeight = measureText.actualBoundingBoxDescent + measureText.actualBoundingBoxAscent;
        value = value.toString();
        let vArr = [];
        if (value.length > 1) {
          vArr = value.split("");
        } else {
          vArr.push(value);
        }
        let oneWordWidth = getMeasureText(vArr[0], ctx).width;
        for (let i2 = 0; i2 < vArr.length; i2++) {
          let textW = oneWordWidth + space_width;
          let textH = textHeight + space_height;
          textH_all_cache += textH;
          if (tb == "2") {
            if (textH_all_cache > cellHeight && textH_all_Column[colIndex] != null) {
              textH_all_ColumnHeight.push(textH_all_cache - textH);
              textH_all_cache = textH;
              colIndex += 1;
            }
          }
          if (i2 == vArr.length - 1) {
            textH_all_ColumnHeight.push(textH_all_cache);
          }
          if (textH_all_Column[colIndex] == null) {
            textH_all_Column[colIndex] = [];
          }
          textH_all_Column[colIndex].push({
            content: vArr[i2],
            style: fontset,
            width: textW,
            height: textH,
            left: 0,
            top: 0,
            colIndex,
            asc: measureText.actualBoundingBoxAscent,
            desc: measureText.actualBoundingBoxDescent
          });
        }
      }
      let textH_all_ColumWidth = [];
      for (let i2 = 0; i2 < textH_all_ColumnHeight.length; i2++) {
        let columnHeight = textH_all_ColumnHeight[i2];
        let col = textH_all_Column[i2], colMaxW = 0;
        for (let c2 = 0; c2 < col.length; c2++) {
          let word = col[c2];
          colMaxW = Math.max(colMaxW, word.width);
        }
        textH_all_ColumWidth.push(colMaxW);
        textW_all += colMaxW;
        textH_all = Math.max(textH_all, columnHeight);
      }
      textContent.type = "verticalWrap";
      textContent.textWidthAll = textW_all;
      textContent.textHeightAll = textH_all;
      if (isMode == "onlyWidth") {
        return textContent;
      }
      let cumColumnWidth = 0;
      for (let i2 = 0; i2 < textH_all_ColumnHeight.length; i2++) {
        let columnHeight = textH_all_ColumnHeight[i2];
        let columnWidth = textH_all_ColumWidth[i2];
        let col = textH_all_Column[i2];
        let cumWordHeight = 0;
        for (let c2 = 0; c2 < col.length; c2++) {
          let word = col[c2];
          let left = space_width + cumColumnWidth;
          if (horizonAlign == "0") {
            left = cellWidth / 2 + cumColumnWidth - textW_all / 2 + space_width * textH_all_ColumnHeight.length;
          } else if (horizonAlign == "2") {
            left = cellWidth + cumColumnWidth - textW_all + space_width;
          }
          let top = cellHeight - space_height + cumWordHeight - columnHeight;
          if (verticalAlign == "0") {
            top = cellHeight / 2 + cumWordHeight - columnHeight / 2;
          } else if (verticalAlign == "1") {
            top = space_height + cumWordHeight;
          }
          cumWordHeight += word.height;
          word.left = left;
          word.top = top;
          drawLineInfo(word, cancelLine, underLine, {
            width: columnWidth,
            height: word.height,
            left,
            top: top + word.height - space_height,
            asc: word.height,
            desc: 0,
            fs: fontSize
          });
          textContent.values.push(word);
        }
        cumColumnWidth += columnWidth;
      }
    } else {
      let supportBoundBox = isSupportBoundingBox(ctx);
      if (supportBoundBox) {
        ctx.textBaseline = "alphabetic";
      } else {
        ctx.textBaseline = "bottom";
      }
      if (tb == "2" || isInline) {
        let textW_all = 0;
        let textH_all = 0;
        let textW_all_inner = 0;
        let splitIndex = 0, text_all_cache = 0, text_all_split = {}, text_all_splitLen = [];
        textContent.rotate = rt;
        rt = Math.abs(rt);
        let anchor = 0, preHeight = 0, preWidth = 0, preStr, preTextHeight, preTextWidth, preMeasureText, i2 = 1, wrapStyle = {}, spaceOrTwoByte = null, spaceOrTwoByteIndex = null;
        if (isInline) {
          while (i2 <= inlineStringArr.length) {
            let shareCells = inlineStringArr.slice(anchor, i2);
            if (shareCells[shareCells.length - 1].wrap === true) {
              anchor = i2;
              if (shareCells.length > 1) {
                for (let s = 0; s < shareCells.length - 1; s++) {
                  let sc = shareCells[s];
                  let item2 = {
                    content: sc.v,
                    style: sc,
                    width: sc.measureText.width,
                    height: sc.measureText.actualBoundingBoxAscent + sc.measureText.actualBoundingBoxDescent,
                    left: 0,
                    top: 0,
                    splitIndex,
                    asc: sc.measureText.actualBoundingBoxAscent,
                    desc: sc.measureText.actualBoundingBoxDescent,
                    inline: true,
                    fs: sc.fs
                  };
                  text_all_split[splitIndex].push(item2);
                }
              }
              if (shareCells.length == 1 || i2 == inlineStringArr.length) {
                let sc = shareCells[0];
                let measureText = getMeasureText("M", ctx, sc.fontset);
                if (text_all_split[splitIndex] == null) {
                  text_all_split[splitIndex] = [];
                }
                text_all_split[splitIndex].push({
                  content: "",
                  style: sc,
                  width: measureText.width,
                  height: measureText.actualBoundingBoxAscent + measureText.actualBoundingBoxDescent,
                  left: 0,
                  top: 0,
                  splitIndex,
                  asc: measureText.actualBoundingBoxAscent,
                  desc: measureText.actualBoundingBoxDescent,
                  inline: true,
                  wrap: true,
                  fs: sc.fs
                });
              }
              splitIndex += 1;
              i2++;
              continue;
            }
            let textWidth = 0, textHeight = 0;
            for (let s = 0; s < shareCells.length; s++) {
              let sc = shareCells[s];
              if (sc.measureText == null) {
                sc.measureText = getMeasureText(sc.v, ctx, sc.fontset);
              }
              textWidth += sc.measureText.width;
              textHeight = Math.max(sc.measureText.actualBoundingBoxAscent + sc.measureText.actualBoundingBoxDescent);
            }
            let width = textWidth * Math.cos(rt * Math.PI / 180) + textHeight * Math.sin(rt * Math.PI / 180);
            let height = textWidth * Math.sin(rt * Math.PI / 180) + textHeight * Math.cos(rt * Math.PI / 180);
            let lastWord = shareCells[shareCells.length - 1];
            if (lastWord.v == " " || checkWordByteLength(lastWord.v) == 2) {
              spaceOrTwoByteIndex = i2;
            }
            if (rt != 0) {
              console.log(height, space_height, cellHeight, shareCells, height + space_height > cellHeight);
              if (height + space_height > cellHeight && text_all_split[splitIndex] != null && tb == "2" && i2 != inlineStringArr.length) {
                if (spaceOrTwoByteIndex != null && spaceOrTwoByteIndex < i2) {
                  for (let s = 0; s < spaceOrTwoByteIndex - anchor; s++) {
                    let sc = shareCells[s];
                    text_all_split[splitIndex].push({
                      content: sc.v,
                      style: sc,
                      width: sc.measureText.width,
                      height: sc.measureText.actualBoundingBoxAscent + sc.measureText.actualBoundingBoxDescent,
                      left: 0,
                      top: 0,
                      splitIndex,
                      asc: sc.measureText.actualBoundingBoxAscent,
                      desc: sc.measureText.actualBoundingBoxDescent,
                      inline: true,
                      fs: sc.fs
                    });
                  }
                  anchor = spaceOrTwoByteIndex;
                  i2 = spaceOrTwoByteIndex + 1;
                  splitIndex += 1;
                  spaceOrTwoByteIndex = null;
                } else {
                  anchor = i2 - 1;
                  for (let s = 0; s < shareCells.length - 1; s++) {
                    let sc = shareCells[s];
                    text_all_split[splitIndex].push({
                      content: sc.v,
                      style: sc,
                      width: sc.measureText.width,
                      height: sc.measureText.actualBoundingBoxAscent + sc.measureText.actualBoundingBoxDescent,
                      left: 0,
                      top: 0,
                      splitIndex,
                      asc: sc.measureText.actualBoundingBoxAscent,
                      desc: sc.measureText.actualBoundingBoxDescent,
                      inline: true,
                      fs: sc.fs
                    });
                  }
                  splitIndex += 1;
                }
              } else if (i2 == inlineStringArr.length) {
                if (text_all_split[splitIndex] == null) {
                  text_all_split[splitIndex] = [];
                }
                for (let s = 0; s < shareCells.length; s++) {
                  let sc = shareCells[s];
                  text_all_split[splitIndex].push({
                    content: sc.v,
                    style: sc,
                    width: sc.measureText.width,
                    height: sc.measureText.actualBoundingBoxAscent + sc.measureText.actualBoundingBoxDescent,
                    left: 0,
                    top: 0,
                    splitIndex,
                    asc: sc.measureText.actualBoundingBoxAscent,
                    desc: sc.measureText.actualBoundingBoxDescent,
                    inline: true,
                    fs: sc.fs
                  });
                }
                break;
              } else {
                if (text_all_split[splitIndex] == null) {
                  text_all_split[splitIndex] = [];
                }
                i2++;
              }
            } else {
              if (width + space_width > cellWidth && text_all_split[splitIndex] != null && tb == "2" && i2 != inlineStringArr.length) {
                if (spaceOrTwoByteIndex != null && spaceOrTwoByteIndex < i2) {
                  for (let s = 0; s < spaceOrTwoByteIndex - anchor; s++) {
                    let sc = shareCells[s];
                    text_all_split[splitIndex].push({
                      content: sc.v,
                      style: sc,
                      width: sc.measureText.width,
                      height: sc.measureText.actualBoundingBoxAscent + sc.measureText.actualBoundingBoxDescent,
                      left: 0,
                      top: 0,
                      splitIndex,
                      asc: sc.measureText.actualBoundingBoxAscent,
                      desc: sc.measureText.actualBoundingBoxDescent,
                      inline: true,
                      fs: sc.fs
                    });
                  }
                  anchor = spaceOrTwoByteIndex;
                  i2 = spaceOrTwoByteIndex + 1;
                  splitIndex += 1;
                  spaceOrTwoByteIndex = null;
                } else {
                  anchor = i2 - 1;
                  for (let s = 0; s < shareCells.length - 1; s++) {
                    let sc = shareCells[s];
                    text_all_split[splitIndex].push({
                      content: sc.v,
                      style: sc,
                      width: sc.measureText.width,
                      height: sc.measureText.actualBoundingBoxAscent + sc.measureText.actualBoundingBoxDescent,
                      left: 0,
                      top: 0,
                      splitIndex,
                      asc: sc.measureText.actualBoundingBoxAscent,
                      desc: sc.measureText.actualBoundingBoxDescent,
                      inline: true,
                      fs: sc.fs
                    });
                  }
                  splitIndex += 1;
                }
              } else if (i2 == inlineStringArr.length) {
                if (text_all_split[splitIndex] == null) {
                  text_all_split[splitIndex] = [];
                }
                for (let s = 0; s < shareCells.length; s++) {
                  let sc = shareCells[s];
                  text_all_split[splitIndex].push({
                    content: sc.v,
                    style: sc,
                    width: sc.measureText.width,
                    height: sc.measureText.actualBoundingBoxAscent + sc.measureText.actualBoundingBoxDescent,
                    left: 0,
                    top: 0,
                    splitIndex,
                    asc: sc.measureText.actualBoundingBoxAscent,
                    desc: sc.measureText.actualBoundingBoxDescent,
                    inline: true,
                    fs: sc.fs
                  });
                }
                break;
              } else {
                if (text_all_split[splitIndex] == null) {
                  text_all_split[splitIndex] = [];
                }
                i2++;
              }
            }
          }
        } else {
          value = value.toString();
          while (i2 <= value.length) {
            let str = value.substring(anchor, i2);
            let measureText = getMeasureText(str, ctx);
            let textWidth = measureText.width;
            let textHeight = measureText.actualBoundingBoxAscent + measureText.actualBoundingBoxDescent;
            let width = textWidth * Math.cos(rt * Math.PI / 180) + textHeight * Math.sin(rt * Math.PI / 180);
            let height = textWidth * Math.sin(rt * Math.PI / 180) + textHeight * Math.cos(rt * Math.PI / 180);
            let lastWord = str.substr(str.length - 1, 1);
            if (lastWord == " " || checkWordByteLength(lastWord) == 2) {
              if (preMeasureText != null) {
                spaceOrTwoByte = {
                  index: i2,
                  str: preStr + lastWord,
                  width: preTextWidth,
                  height: preTextHeight,
                  asc: preMeasureText.actualBoundingBoxAscent,
                  desc: preMeasureText.actualBoundingBoxDescent
                };
              }
            }
            if (rt != 0) {
              if (height + space_height > cellHeight && text_all_split[splitIndex] != null && i2 != value.length) {
                if (spaceOrTwoByte != null && spaceOrTwoByte.index < i2) {
                  anchor = spaceOrTwoByte.index;
                  i2 = spaceOrTwoByte.index + 1;
                  text_all_split[splitIndex].push({
                    content: spaceOrTwoByte.str,
                    style: fontset,
                    width: spaceOrTwoByte.width,
                    height: spaceOrTwoByte.height,
                    left: 0,
                    top: 0,
                    splitIndex,
                    asc: spaceOrTwoByte.asc,
                    desc: spaceOrTwoByte.desc,
                    fs: fontSize
                  });
                  splitIndex += 1;
                  spaceOrTwoByte = null;
                } else {
                  anchor = i2 - 1;
                  text_all_split[splitIndex].push({
                    content: preStr,
                    style: fontset,
                    left: 0,
                    top: 0,
                    splitIndex,
                    height: preTextHeight,
                    width: preTextWidth,
                    asc: measureText.actualBoundingBoxAscent,
                    desc: measureText.actualBoundingBoxDescent,
                    fs: fontSize
                  });
                  splitIndex += 1;
                }
              } else if (i2 == value.length) {
                if (text_all_split[splitIndex] == null) {
                  text_all_split[splitIndex] = [];
                }
                text_all_split[splitIndex].push({
                  content: str,
                  style: fontset,
                  left: 0,
                  top: 0,
                  splitIndex,
                  height: textHeight,
                  width: textWidth,
                  asc: measureText.actualBoundingBoxAscent,
                  desc: measureText.actualBoundingBoxDescent,
                  fs: fontSize
                });
                break;
              } else {
                if (text_all_split[splitIndex] == null) {
                  text_all_split[splitIndex] = [];
                }
                i2++;
              }
            } else {
              if (width + space_width > cellWidth && text_all_split[splitIndex] != null && i2 != value.length) {
                if (spaceOrTwoByte != null && spaceOrTwoByte.index < i2) {
                  anchor = spaceOrTwoByte.index;
                  i2 = spaceOrTwoByte.index + 1;
                  text_all_split[splitIndex].push({
                    content: spaceOrTwoByte.str,
                    style: fontset,
                    width: spaceOrTwoByte.width,
                    height: spaceOrTwoByte.height,
                    left: 0,
                    top: 0,
                    splitIndex,
                    asc: spaceOrTwoByte.asc,
                    desc: spaceOrTwoByte.desc,
                    fs: fontSize
                  });
                  splitIndex += 1;
                  spaceOrTwoByte = null;
                } else {
                  spaceOrTwoByte = null;
                  anchor = i2 - 1;
                  text_all_split[splitIndex].push({
                    content: preStr,
                    style: fontset,
                    width: preTextWidth,
                    height: preTextHeight,
                    left: 0,
                    top: 0,
                    splitIndex,
                    asc: measureText.actualBoundingBoxAscent,
                    desc: measureText.actualBoundingBoxDescent,
                    fs: fontSize
                  });
                  splitIndex += 1;
                }
              } else if (i2 == value.length) {
                if (text_all_split[splitIndex] == null) {
                  text_all_split[splitIndex] = [];
                }
                text_all_split[splitIndex].push({
                  content: str,
                  style: fontset,
                  width: textWidth,
                  height: textHeight,
                  left: 0,
                  top: 0,
                  splitIndex,
                  asc: measureText.actualBoundingBoxAscent,
                  desc: measureText.actualBoundingBoxDescent,
                  fs: fontSize
                });
                break;
              } else {
                if (text_all_split[splitIndex] == null) {
                  text_all_split[splitIndex] = [];
                }
                i2++;
              }
            }
            preStr = str;
            preTextHeight = textHeight;
            preTextWidth = textWidth;
            preMeasureText = measureText;
          }
        }
        let split_all_size = [], oneLinemaxWordCount = 0;
        let splitLen = Object.keys(text_all_split).length;
        for (let i3 = 0; i3 < splitLen; i3++) {
          let splitLists = text_all_split[i3];
          if (splitLists == null) {
            continue;
          }
          let sWidth = 0, sHeight = 0, maxDesc = 0, maxAsc = 0, lineHeight = 0, maxWordCount = 0;
          for (let s = 0; s < splitLists.length; s++) {
            let sp = splitLists[s];
            if (rt != 0) {
              sWidth += sp.width;
              sHeight = Math.max(sHeight, sp.height - (supportBoundBox ? sp.desc : 0));
            } else {
              sWidth += sp.width;
              sHeight = Math.max(sHeight, sp.height - (supportBoundBox ? sp.desc : 0));
            }
            maxDesc = Math.max(maxDesc, supportBoundBox ? sp.desc : 0);
            maxAsc = Math.max(maxAsc, sp.asc);
            maxWordCount++;
          }
          lineHeight = sHeight / 2;
          oneLinemaxWordCount = Math.max(oneLinemaxWordCount, maxWordCount);
          if (rt != 0) {
            sHeight += lineHeight;
            textW_all_inner = Math.max(textW_all_inner, sWidth);
            textH_all += sHeight;
          } else {
            sHeight += lineHeight;
            textW_all = Math.max(textW_all, sWidth);
            textH_all += sHeight;
          }
          split_all_size.push({
            width: sWidth,
            height: sHeight,
            desc: maxDesc,
            asc: maxAsc,
            lineHeight,
            wordCount: maxWordCount
          });
        }
        let cumWordHeight = 0, cumColumnWidth = 0;
        let rtPI = rt * Math.PI / 180;
        let lastLine = split_all_size[splitLen - 1];
        let lastLineSpaceHeight = lastLine.lineHeight;
        textH_all = textH_all - lastLineSpaceHeight + lastLine.desc;
        let rw = textH_all / Math.sin(rtPI) + textW_all_inner * Math.cos(rtPI);
        let rh = textW_all_inner * Math.sin(rtPI), fixOneLineLeft = 0;
        if (rt != 0) {
          if (splitLen == 1) {
            textW_all = textW_all_inner + 2 * (textH_all / Math.tan(rtPI));
            fixOneLineLeft = textH_all / Math.tan(rtPI);
          } else {
            textW_all = textW_all_inner + textH_all / Math.tan(rtPI);
          }
          textContent.textWidthAll = rw;
          textContent.textHeightAll = rh;
        } else {
          textContent.textWidthAll = textW_all;
          textContent.textHeightAll = textH_all;
        }
        if (isMode == "onlyWidth") {
          return textContent;
        }
        if (rt != 0 && isRotateUp == "1") {
          ctx.textAlign = "end";
          for (let i3 = 0; i3 < splitLen; i3++) {
            let splitLists = text_all_split[i3];
            if (splitLists == null) {
              continue;
            }
            let size = split_all_size[i3];
            cumColumnWidth = 0;
            for (let c2 = splitLists.length - 1; c2 >= 0; c2--) {
              let wordGroup = splitLists[c2];
              let left, top;
              if (rt != 0) {
                let x, y = cumWordHeight + size.asc;
                x = cumWordHeight / Math.tan(rtPI) - cumColumnWidth + textW_all_inner;
                if (horizonAlign == "0") {
                  let sh = textH_all / Math.sin(rtPI);
                  if (verticalAlign == "0") {
                    left = x + cellWidth / 2 - textW_all / 2 + lastLineSpaceHeight * Math.cos(rtPI) / 2;
                    top = y + cellHeight / 2 - textH_all / 2 - lastLineSpaceHeight * Math.cos(rtPI) / 2;
                  } else if (verticalAlign == "1") {
                    left = x + cellWidth / 2 - textW_all / 2;
                    top = y - (textH_all / 2 - rh / 2);
                  } else if (verticalAlign == "2") {
                    left = x + cellWidth / 2 - textW_all / 2 + lastLineSpaceHeight * Math.cos(rtPI);
                    top = y + cellHeight - rh / 2 - textH_all / 2 - lastLineSpaceHeight * Math.cos(rtPI);
                  }
                } else if (horizonAlign == "1") {
                  if (verticalAlign == "0") {
                    left = x - rh * Math.sin(rtPI) / 2 + lastLineSpaceHeight * Math.cos(rtPI) / 2;
                    top = y + cellHeight / 2 + rh * Math.cos(rtPI) / 2 - lastLineSpaceHeight * Math.cos(rtPI) / 2;
                  } else if (verticalAlign == "1") {
                    left = x - rh * Math.sin(rtPI);
                    top = y + rh * Math.cos(rtPI);
                  } else if (verticalAlign == "2") {
                    left = x + lastLineSpaceHeight * Math.cos(rtPI);
                    top = y + cellHeight - lastLineSpaceHeight * Math.cos(rtPI);
                  }
                } else if (horizonAlign == "2") {
                  if (verticalAlign == "0") {
                    left = x + cellWidth - rw / 2 - (textW_all_inner / 2 + textH_all / 2 / Math.tan(rtPI)) + lastLineSpaceHeight * Math.cos(rtPI) / 2;
                    top = y + cellHeight / 2 - textH_all / 2 - lastLineSpaceHeight * Math.cos(rtPI) / 2;
                  } else if (verticalAlign == "1") {
                    left = x + cellWidth - textW_all + fixOneLineLeft;
                    top = y - textH_all;
                  } else if (verticalAlign == "2") {
                    left = x + cellWidth - rw * Math.cos(rtPI) + lastLineSpaceHeight * Math.cos(rtPI);
                    top = y + cellHeight - rw * Math.sin(rtPI) - lastLineSpaceHeight * Math.cos(rtPI);
                  }
                }
              }
              wordGroup.left = left;
              wordGroup.top = top;
              drawLineInfo(wordGroup, cancelLine, underLine, {
                width: wordGroup.width,
                height: wordGroup.height,
                left: left - wordGroup.width,
                top,
                asc: size.asc,
                desc: size.desc,
                fs: wordGroup.fs
              });
              textContent.values.push(wordGroup);
              cumColumnWidth += wordGroup.width;
            }
            cumWordHeight += size.height;
          }
        } else {
          for (let i3 = 0; i3 < splitLen; i3++) {
            let splitLists = text_all_split[i3];
            if (splitLists == null) {
              continue;
            }
            let size = split_all_size[i3];
            cumColumnWidth = 0;
            for (let c2 = 0; c2 < splitLists.length; c2++) {
              let wordGroup = splitLists[c2];
              let left, top;
              if (rt != 0) {
                let x, y = cumWordHeight + size.asc;
                x = (textH_all - cumWordHeight) / Math.tan(rtPI) + cumColumnWidth;
                if (horizonAlign == "0") {
                  let sh = textH_all / Math.sin(rtPI);
                  if (verticalAlign == "0") {
                    left = x + cellWidth / 2 - textW_all / 2 - lastLineSpaceHeight * Math.cos(rtPI) / 2;
                    top = y + cellHeight / 2 - textH_all / 2 + lastLineSpaceHeight * Math.cos(rtPI) / 2;
                  } else if (verticalAlign == "1") {
                    left = x + cellWidth / 2 - textW_all / 2 - lastLineSpaceHeight * Math.cos(rtPI) / 2;
                    top = y - (textH_all / 2 - rh / 2) + lastLineSpaceHeight * Math.cos(rtPI) / 2;
                  } else if (verticalAlign == "2") {
                    left = x + cellWidth / 2 - textW_all / 2 - lastLineSpaceHeight * Math.cos(rtPI);
                    top = y + cellHeight - rh / 2 - textH_all / 2 - lastLineSpaceHeight * Math.cos(rtPI);
                  }
                } else if (horizonAlign == "1") {
                  if (verticalAlign == "0") {
                    left = x - rh * Math.sin(rtPI) / 2 - lastLineSpaceHeight * Math.cos(rtPI) / 2;
                    top = y - textH_all + cellHeight / 2 - rh * Math.cos(rtPI) / 2 - lastLineSpaceHeight * Math.cos(rtPI) / 2;
                  } else if (verticalAlign == "1") {
                    left = x;
                    top = y - textH_all;
                  } else if (verticalAlign == "2") {
                    left = x - rh * Math.sin(rtPI) - lastLineSpaceHeight * Math.cos(rtPI);
                    top = y - textH_all + cellHeight - rh * Math.cos(rtPI) - lastLineSpaceHeight * Math.cos(rtPI);
                  }
                } else if (horizonAlign == "2") {
                  if (verticalAlign == "0") {
                    left = x + cellWidth - rw / 2 - textW_all / 2 - lastLineSpaceHeight * Math.cos(rtPI) / 2;
                    top = y + cellHeight / 2 - textH_all / 2 - lastLineSpaceHeight * Math.cos(rtPI) / 2;
                  } else if (verticalAlign == "1") {
                    left = x + cellWidth - rw * Math.cos(rtPI);
                    top = y + rh * Math.cos(rtPI);
                  } else if (verticalAlign == "2") {
                    left = x + cellWidth - textW_all - lastLineSpaceHeight * Math.cos(rtPI) + fixOneLineLeft;
                    top = y + cellHeight - lastLineSpaceHeight * Math.cos(rtPI);
                  }
                }
                drawLineInfo(wordGroup, cancelLine, underLine, {
                  width: wordGroup.width,
                  height: wordGroup.height,
                  left,
                  top,
                  asc: size.asc,
                  desc: size.desc,
                  fs: wordGroup.fs
                });
              } else {
                left = space_width + cumColumnWidth;
                if (horizonAlign == "0") {
                  left = cellWidth / 2 + cumColumnWidth - size.width / 2;
                } else if (horizonAlign == "2") {
                  left = cellWidth + cumColumnWidth - size.width;
                }
                top = cellHeight - space_height + cumWordHeight + size.asc - textH_all;
                if (verticalAlign == "0") {
                  top = cellHeight / 2 + cumWordHeight - textH_all / 2 + size.asc;
                } else if (verticalAlign == "1") {
                  top = space_height + cumWordHeight + size.asc;
                }
                drawLineInfo(wordGroup, cancelLine, underLine, {
                  width: wordGroup.width,
                  height: wordGroup.height,
                  left,
                  top,
                  asc: size.asc,
                  desc: size.desc,
                  fs: wordGroup.fs
                });
              }
              wordGroup.left = left;
              wordGroup.top = top;
              textContent.values.push(wordGroup);
              cumColumnWidth += wordGroup.width;
            }
            cumWordHeight += size.height;
          }
        }
        textContent.type = "plainWrap";
        if (rt != 0) {
          if (horizonAlign == "0") {
            if (verticalAlign == "0") {
              textContent.textLeftAll = cellWidth / 2;
              textContent.textTopAll = cellHeight / 2;
            } else if (verticalAlign == "1") {
              textContent.textLeftAll = cellWidth / 2;
              textContent.textTopAll = rh / 2;
            } else if (verticalAlign == "2") {
              textContent.textLeftAll = cellWidth / 2;
              textContent.textTopAll = cellHeight - rh / 2;
            }
          } else if (horizonAlign == "1") {
            if (verticalAlign == "0") {
              textContent.textLeftAll = 0;
              textContent.textTopAll = cellHeight / 2;
            } else if (verticalAlign == "1") {
              textContent.textLeftAll = 0;
              textContent.textTopAll = 0;
            } else if (verticalAlign == "2") {
              textContent.textLeftAll = 0;
              textContent.textTopAll = cellHeight;
            }
          } else if (horizonAlign == "2") {
            if (verticalAlign == "0") {
              textContent.textLeftAll = cellWidth - rw / 2;
              textContent.textTopAll = cellHeight / 2;
            } else if (verticalAlign == "1") {
              textContent.textLeftAll = cellWidth;
              textContent.textTopAll = 0;
            } else if (verticalAlign == "2") {
              textContent.textLeftAll = cellWidth;
              textContent.textTopAll = cellHeight;
            }
          }
        }
      } else {
        let measureText = getMeasureText(value, ctx);
        let textWidth = measureText.width;
        let textHeight = measureText.actualBoundingBoxDescent + measureText.actualBoundingBoxAscent;
        textContent.rotate = rt;
        rt = Math.abs(rt);
        let rtPI = rt * Math.PI / 180;
        let textWidthAll = textWidth * Math.cos(rtPI) + textHeight * Math.sin(rtPI);
        let textHeightAll = textWidth * Math.sin(rtPI) + textHeight * Math.cos(rtPI);
        if (rt != 0) {
          textContent.textHeightAll = textHeightAll;
        } else {
          textContent.textHeightAll = textHeightAll + textHeight / 2 - measureText.actualBoundingBoxDescent - space_height;
        }
        textContent.textWidthAll = textWidthAll;
        if (isMode == "onlyWidth") {
          return textContent;
        }
        let width = textWidthAll, height = textHeightAll;
        let left = space_width + textHeight * Math.sin(rtPI) * isRotateUp;
        if (horizonAlign == "0") {
          left = cellWidth / 2 - width / 2 + textHeight * Math.sin(rtPI) * isRotateUp;
        } else if (horizonAlign == "2") {
          left = cellWidth - space_width - width + textHeight * Math.sin(rtPI) * isRotateUp;
        }
        let top = cellHeight - space_height - height + measureText.actualBoundingBoxAscent * Math.cos(rtPI) + textWidth * Math.sin(rtPI) * isRotateUp;
        if (verticalAlign == "0") {
          top = cellHeight / 2 - height / 2 + measureText.actualBoundingBoxAscent * Math.cos(rtPI) + textWidth * Math.sin(rtPI) * isRotateUp;
        } else if (verticalAlign == "1") {
          top = space_height + measureText.actualBoundingBoxAscent * Math.cos(rtPI) + textWidth * Math.sin(rtPI) * isRotateUp;
        }
        textContent.type = "plain";
        let wordGroup = {
          content: value,
          style: fontset,
          width,
          height,
          left,
          top
        };
        drawLineInfo(wordGroup, cancelLine, underLine, {
          width: textWidth,
          height: textHeight,
          left,
          top,
          asc: measureText.actualBoundingBoxAscent,
          desc: measureText.actualBoundingBoxDescent,
          fs: fontSize
        });
        textContent.values.push(wordGroup);
        textContent.textLeftAll = left;
        textContent.textTopAll = top;
        textContent.asc = measureText.actualBoundingBoxAscent;
        textContent.desc = measureText.actualBoundingBoxDescent;
      }
    }
    return textContent;
  }
  function drawLineInfo(wordGroup, cancelLine, underLine, option) {
    let left = option.left, top = option.top, width = option.width, height = option.height, asc = option.asc, desc = option.desc, fs = option.fs;
    if (wordGroup.wrap === true) {
      return;
    }
    if (wordGroup.inline == true && wordGroup.style != null) {
      cancelLine = wordGroup.style.cl;
      underLine = wordGroup.style.un;
    }
    if (cancelLine != "0") {
      wordGroup.cancelLine = {};
      wordGroup.cancelLine.startX = left;
      wordGroup.cancelLine.startY = top - asc / 2 + 1;
      wordGroup.cancelLine.endX = left + width;
      wordGroup.cancelLine.endY = top - asc / 2 + 1;
      wordGroup.cancelLine.fs = fs;
    }
    if (underLine != "0") {
      wordGroup.underLine = [];
      if (underLine == "1" || underLine == "2") {
        let item2 = {};
        item2.startX = left;
        item2.startY = top + 3;
        item2.endX = left + width;
        item2.endY = top + 3;
        item2.fs = fs;
        wordGroup.underLine.push(item2);
      }
      if (underLine == "2") {
        let item2 = {};
        item2.startX = left;
        item2.startY = top + desc;
        item2.endX = left + width;
        item2.endY = top + desc;
        item2.fs = fs;
        wordGroup.underLine.push(item2);
      }
      if (underLine == "3" || underLine == "4") {
        let item2 = {};
        item2.startX = left;
        item2.startY = top + desc;
        item2.endX = left + width;
        item2.endY = top + desc;
        item2.fs = fs;
        wordGroup.underLine.push(item2);
      }
      if (underLine == "4") {
        let item2 = {};
        item2.startX = left;
        item2.startY = top + desc + 2;
        item2.endX = left + width;
        item2.endY = top + desc + 2;
        item2.fs = fs;
        wordGroup.underLine.push(item2);
      }
    }
  }
  var init_getRowlen = __esm({
    "src/global/getRowlen.js"() {
      init_util();
      init_menuButton();
      init_getdata();
      init_location();
      init_validate();
      init_inlineString();
      init_store();
    }
  });

  // src/global/rhchInit.js
  function rhchInit(rowheight, colwidth) {
    zoomSetting();
    if (rowheight != null) {
      store_default.visibledatarow = [];
      store_default.rh_height = 0;
      for (let r2 = 0; r2 < rowheight; r2++) {
        let rowlen = store_default.defaultrowlen;
        if (store_default.config["rowlen"] != null && store_default.config["rowlen"][r2] != null) {
          rowlen = store_default.config["rowlen"][r2];
        }
        if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][r2] != null) {
          store_default.visibledatarow.push(store_default.rh_height);
          continue;
        }
        if (rowlen === "auto") {
          rowlen = computeRowlenByContent(store_default.flowdata, r2);
        }
        store_default.rh_height += Math.round((rowlen + 1) * store_default.zoomRatio);
        store_default.visibledatarow.push(store_default.rh_height);
      }
      if (!luckysheetConfigsetting_default.enableAddRow && !luckysheetConfigsetting_default.enableAddBackTop) {
        store_default.rh_height += 29;
      } else {
        store_default.rh_height += 80;
      }
    }
    if (colwidth != null) {
      store_default.visibledatacolumn = [];
      store_default.ch_width = 0;
      let maxColumnlen = 120;
      for (let c2 = 0; c2 < colwidth; c2++) {
        let firstcolumnlen = store_default.defaultcollen;
        if (store_default.config["columnlen"] != null && store_default.config["columnlen"][c2] != null) {
          firstcolumnlen = store_default.config["columnlen"][c2];
        } else {
          if (store_default.flowdata[0] != null && store_default.flowdata[0][c2] != null) {
            if (firstcolumnlen > 300) {
              firstcolumnlen = 300;
            } else if (firstcolumnlen < store_default.defaultcollen) {
              firstcolumnlen = store_default.defaultcollen;
            }
            if (firstcolumnlen != store_default.defaultcollen) {
              if (store_default.config["columnlen"] == null) {
                store_default.config["columnlen"] = {};
              }
              store_default.config["columnlen"][c2] = firstcolumnlen;
            }
          }
        }
        if (store_default.config["colhidden"] != null && store_default.config["colhidden"][c2] != null) {
          store_default.visibledatacolumn.push(store_default.ch_width);
          continue;
        }
        if (firstcolumnlen === "auto") {
          firstcolumnlen = computeColWidthByContent(store_default.flowdata, c2, rowheight);
        }
        store_default.ch_width += Math.round((firstcolumnlen + 1) * store_default.zoomRatio);
        store_default.visibledatacolumn.push(store_default.ch_width);
      }
      store_default.ch_width += maxColumnlen;
    }
  }
  function zoomSetting() {
    store_default.rowHeaderWidth = luckysheetConfigsetting_default.rowHeaderWidth * store_default.zoomRatio;
    store_default.columnHeaderHeight = luckysheetConfigsetting_default.columnHeaderHeight * store_default.zoomRatio;
    $("#luckysheet-rows-h").width(store_default.rowHeaderWidth - 1.5);
    $("#luckysheet-cols-h-c").height(store_default.columnHeaderHeight - 1.5);
    $("#luckysheet-left-top").css({width: store_default.rowHeaderWidth - 1.5, height: store_default.columnHeaderHeight - 1.5});
  }
  var init_rhchInit = __esm({
    "src/global/rhchInit.js"() {
      init_store();
      init_getRowlen();
      init_luckysheetConfigsetting();
    }
  });

  // node_modules/dayjs/dayjs.min.js
  var require_dayjs_min = __commonJS({
    "node_modules/dayjs/dayjs.min.js"(exports, module) {
      !function(t, e) {
        typeof exports == "object" && typeof module != "undefined" ? module.exports = e() : typeof define == "function" && define.amd ? define(e) : t.dayjs = e();
      }(exports, function() {
        "use strict";
        var t = "millisecond", e = "second", n = "minute", r2 = "hour", i2 = "day", s = "week", u = "month", a = "quarter", o = "year", f = "date", h = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, c2 = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, d = {name: "en", weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_")}, $2 = function(t2, e2, n2) {
          var r3 = String(t2);
          return !r3 || r3.length >= e2 ? t2 : "" + Array(e2 + 1 - r3.length).join(n2) + t2;
        }, l = {s: $2, z: function(t2) {
          var e2 = -t2.utcOffset(), n2 = Math.abs(e2), r3 = Math.floor(n2 / 60), i3 = n2 % 60;
          return (e2 <= 0 ? "+" : "-") + $2(r3, 2, "0") + ":" + $2(i3, 2, "0");
        }, m: function t2(e2, n2) {
          if (e2.date() < n2.date())
            return -t2(n2, e2);
          var r3 = 12 * (n2.year() - e2.year()) + (n2.month() - e2.month()), i3 = e2.clone().add(r3, u), s2 = n2 - i3 < 0, a2 = e2.clone().add(r3 + (s2 ? -1 : 1), u);
          return +(-(r3 + (n2 - i3) / (s2 ? i3 - a2 : a2 - i3)) || 0);
        }, a: function(t2) {
          return t2 < 0 ? Math.ceil(t2) || 0 : Math.floor(t2);
        }, p: function(h2) {
          return {M: u, y: o, w: s, d: i2, D: f, h: r2, m: n, s: e, ms: t, Q: a}[h2] || String(h2 || "").toLowerCase().replace(/s$/, "");
        }, u: function(t2) {
          return t2 === void 0;
        }}, y = "en", M = {};
        M[y] = d;
        var m = function(t2) {
          return t2 instanceof S;
        }, D = function(t2, e2, n2) {
          var r3;
          if (!t2)
            return y;
          if (typeof t2 == "string")
            M[t2] && (r3 = t2), e2 && (M[t2] = e2, r3 = t2);
          else {
            var i3 = t2.name;
            M[i3] = t2, r3 = i3;
          }
          return !n2 && r3 && (y = r3), r3 || !n2 && y;
        }, v = function(t2, e2) {
          if (m(t2))
            return t2.clone();
          var n2 = typeof e2 == "object" ? e2 : {};
          return n2.date = t2, n2.args = arguments, new S(n2);
        }, g = l;
        g.l = D, g.i = m, g.w = function(t2, e2) {
          return v(t2, {locale: e2.$L, utc: e2.$u, x: e2.$x, $offset: e2.$offset});
        };
        var S = function() {
          function d2(t2) {
            this.$L = D(t2.locale, null, true), this.parse(t2);
          }
          var $3 = d2.prototype;
          return $3.parse = function(t2) {
            this.$d = function(t3) {
              var e2 = t3.date, n2 = t3.utc;
              if (e2 === null)
                return new Date(NaN);
              if (g.u(e2))
                return new Date();
              if (e2 instanceof Date)
                return new Date(e2);
              if (typeof e2 == "string" && !/Z$/i.test(e2)) {
                var r3 = e2.match(h);
                if (r3) {
                  var i3 = r3[2] - 1 || 0, s2 = (r3[7] || "0").substring(0, 3);
                  return n2 ? new Date(Date.UTC(r3[1], i3, r3[3] || 1, r3[4] || 0, r3[5] || 0, r3[6] || 0, s2)) : new Date(r3[1], i3, r3[3] || 1, r3[4] || 0, r3[5] || 0, r3[6] || 0, s2);
                }
              }
              return new Date(e2);
            }(t2), this.$x = t2.x || {}, this.init();
          }, $3.init = function() {
            var t2 = this.$d;
            this.$y = t2.getFullYear(), this.$M = t2.getMonth(), this.$D = t2.getDate(), this.$W = t2.getDay(), this.$H = t2.getHours(), this.$m = t2.getMinutes(), this.$s = t2.getSeconds(), this.$ms = t2.getMilliseconds();
          }, $3.$utils = function() {
            return g;
          }, $3.isValid = function() {
            return !(this.$d.toString() === "Invalid Date");
          }, $3.isSame = function(t2, e2) {
            var n2 = v(t2);
            return this.startOf(e2) <= n2 && n2 <= this.endOf(e2);
          }, $3.isAfter = function(t2, e2) {
            return v(t2) < this.startOf(e2);
          }, $3.isBefore = function(t2, e2) {
            return this.endOf(e2) < v(t2);
          }, $3.$g = function(t2, e2, n2) {
            return g.u(t2) ? this[e2] : this.set(n2, t2);
          }, $3.unix = function() {
            return Math.floor(this.valueOf() / 1e3);
          }, $3.valueOf = function() {
            return this.$d.getTime();
          }, $3.startOf = function(t2, a2) {
            var h2 = this, c3 = !!g.u(a2) || a2, d3 = g.p(t2), $4 = function(t3, e2) {
              var n2 = g.w(h2.$u ? Date.UTC(h2.$y, e2, t3) : new Date(h2.$y, e2, t3), h2);
              return c3 ? n2 : n2.endOf(i2);
            }, l2 = function(t3, e2) {
              return g.w(h2.toDate()[t3].apply(h2.toDate("s"), (c3 ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e2)), h2);
            }, y2 = this.$W, M2 = this.$M, m2 = this.$D, D2 = "set" + (this.$u ? "UTC" : "");
            switch (d3) {
              case o:
                return c3 ? $4(1, 0) : $4(31, 11);
              case u:
                return c3 ? $4(1, M2) : $4(0, M2 + 1);
              case s:
                var v2 = this.$locale().weekStart || 0, S2 = (y2 < v2 ? y2 + 7 : y2) - v2;
                return $4(c3 ? m2 - S2 : m2 + (6 - S2), M2);
              case i2:
              case f:
                return l2(D2 + "Hours", 0);
              case r2:
                return l2(D2 + "Minutes", 1);
              case n:
                return l2(D2 + "Seconds", 2);
              case e:
                return l2(D2 + "Milliseconds", 3);
              default:
                return this.clone();
            }
          }, $3.endOf = function(t2) {
            return this.startOf(t2, false);
          }, $3.$set = function(s2, a2) {
            var h2, c3 = g.p(s2), d3 = "set" + (this.$u ? "UTC" : ""), $4 = (h2 = {}, h2[i2] = d3 + "Date", h2[f] = d3 + "Date", h2[u] = d3 + "Month", h2[o] = d3 + "FullYear", h2[r2] = d3 + "Hours", h2[n] = d3 + "Minutes", h2[e] = d3 + "Seconds", h2[t] = d3 + "Milliseconds", h2)[c3], l2 = c3 === i2 ? this.$D + (a2 - this.$W) : a2;
            if (c3 === u || c3 === o) {
              var y2 = this.clone().set(f, 1);
              y2.$d[$4](l2), y2.init(), this.$d = y2.set(f, Math.min(this.$D, y2.daysInMonth())).$d;
            } else
              $4 && this.$d[$4](l2);
            return this.init(), this;
          }, $3.set = function(t2, e2) {
            return this.clone().$set(t2, e2);
          }, $3.get = function(t2) {
            return this[g.p(t2)]();
          }, $3.add = function(t2, a2) {
            var f2, h2 = this;
            t2 = Number(t2);
            var c3 = g.p(a2), d3 = function(e2) {
              var n2 = v(h2);
              return g.w(n2.date(n2.date() + Math.round(e2 * t2)), h2);
            };
            if (c3 === u)
              return this.set(u, this.$M + t2);
            if (c3 === o)
              return this.set(o, this.$y + t2);
            if (c3 === i2)
              return d3(1);
            if (c3 === s)
              return d3(7);
            var $4 = (f2 = {}, f2[n] = 6e4, f2[r2] = 36e5, f2[e] = 1e3, f2)[c3] || 1, l2 = this.$d.getTime() + t2 * $4;
            return g.w(l2, this);
          }, $3.subtract = function(t2, e2) {
            return this.add(-1 * t2, e2);
          }, $3.format = function(t2) {
            var e2 = this;
            if (!this.isValid())
              return "Invalid Date";
            var n2 = t2 || "YYYY-MM-DDTHH:mm:ssZ", r3 = g.z(this), i3 = this.$locale(), s2 = this.$H, u2 = this.$m, a2 = this.$M, o2 = i3.weekdays, f2 = i3.months, h2 = function(t3, r4, i4, s3) {
              return t3 && (t3[r4] || t3(e2, n2)) || i4[r4].substr(0, s3);
            }, d3 = function(t3) {
              return g.s(s2 % 12 || 12, t3, "0");
            }, $4 = i3.meridiem || function(t3, e3, n3) {
              var r4 = t3 < 12 ? "AM" : "PM";
              return n3 ? r4.toLowerCase() : r4;
            }, l2 = {YY: String(this.$y).slice(-2), YYYY: this.$y, M: a2 + 1, MM: g.s(a2 + 1, 2, "0"), MMM: h2(i3.monthsShort, a2, f2, 3), MMMM: h2(f2, a2), D: this.$D, DD: g.s(this.$D, 2, "0"), d: String(this.$W), dd: h2(i3.weekdaysMin, this.$W, o2, 2), ddd: h2(i3.weekdaysShort, this.$W, o2, 3), dddd: o2[this.$W], H: String(s2), HH: g.s(s2, 2, "0"), h: d3(1), hh: d3(2), a: $4(s2, u2, true), A: $4(s2, u2, false), m: String(u2), mm: g.s(u2, 2, "0"), s: String(this.$s), ss: g.s(this.$s, 2, "0"), SSS: g.s(this.$ms, 3, "0"), Z: r3};
            return n2.replace(c2, function(t3, e3) {
              return e3 || l2[t3] || r3.replace(":", "");
            });
          }, $3.utcOffset = function() {
            return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
          }, $3.diff = function(t2, f2, h2) {
            var c3, d3 = g.p(f2), $4 = v(t2), l2 = 6e4 * ($4.utcOffset() - this.utcOffset()), y2 = this - $4, M2 = g.m(this, $4);
            return M2 = (c3 = {}, c3[o] = M2 / 12, c3[u] = M2, c3[a] = M2 / 3, c3[s] = (y2 - l2) / 6048e5, c3[i2] = (y2 - l2) / 864e5, c3[r2] = y2 / 36e5, c3[n] = y2 / 6e4, c3[e] = y2 / 1e3, c3)[d3] || y2, h2 ? M2 : g.a(M2);
          }, $3.daysInMonth = function() {
            return this.endOf(u).$D;
          }, $3.$locale = function() {
            return M[this.$L];
          }, $3.locale = function(t2, e2) {
            if (!t2)
              return this.$L;
            var n2 = this.clone(), r3 = D(t2, e2, true);
            return r3 && (n2.$L = r3), n2;
          }, $3.clone = function() {
            return g.w(this.$d, this);
          }, $3.toDate = function() {
            return new Date(this.valueOf());
          }, $3.toJSON = function() {
            return this.isValid() ? this.toISOString() : null;
          }, $3.toISOString = function() {
            return this.$d.toISOString();
          }, $3.toString = function() {
            return this.$d.toUTCString();
          }, d2;
        }(), p = S.prototype;
        return v.prototype = p, [["$ms", t], ["$s", e], ["$m", n], ["$H", r2], ["$W", i2], ["$M", u], ["$y", o], ["$D", f]].forEach(function(t2) {
          p[t2[1]] = function(e2) {
            return this.$g(e2, t2[0], t2[1]);
          };
        }), v.extend = function(t2, e2) {
          return t2.$i || (t2(e2, S, v), t2.$i = true), v;
        }, v.locale = D, v.isDayjs = m, v.unix = function(t2) {
          return v(1e3 * t2);
        }, v.en = M[y], v.Ls = M, v.p = {}, v;
      });
    }
  });

  // src/global/datecontroll.js
  function isdatetime(s) {
    if (s == null || s.toString().length < 5) {
      return false;
    } else if (checkDateTime(s)) {
      return true;
    } else {
      return false;
    }
    function checkDateTime(str) {
      var reg1 = /^(\d{4})-(\d{1,2})-(\d{1,2})(\s(\d{1,2}):(\d{1,2})(:(\d{1,2}))?)?$/;
      var reg2 = /^(\d{4})\/(\d{1,2})\/(\d{1,2})(\s(\d{1,2}):(\d{1,2})(:(\d{1,2}))?)?$/;
      if (!reg1.test(str) && !reg2.test(str)) {
        return false;
      }
      var year = RegExp.$1, month = RegExp.$2, day = RegExp.$3;
      if (year < 1900) {
        return false;
      }
      if (month > 12) {
        return false;
      }
      if (day > 31) {
        return false;
      }
      if (month == 2) {
        if (new Date(year, 1, 29).getDate() == 29 && day > 29) {
          return false;
        } else if (new Date(year, 1, 29).getDate() != 29 && day > 28) {
          return false;
        }
      }
      return true;
    }
  }
  function diff(now, then) {
    return (0, import_dayjs.default)(now).diff((0, import_dayjs.default)(then));
  }
  function isdatatypemulti(s) {
    let type = {};
    if (isdatetime(s)) {
      type["date"] = true;
    }
    if (!isNaN(parseFloat(s)) && !hasChinaword(s)) {
      type["num"] = true;
    }
    return type;
  }
  function isdatatype(s) {
    let type = "string";
    if (isdatetime(s)) {
      type = "date";
    } else if (!isNaN(parseFloat(s)) && !hasChinaword(s)) {
      type = "num";
    }
    return type;
  }
  var import_dayjs;
  var init_datecontroll = __esm({
    "src/global/datecontroll.js"() {
      init_validate();
      import_dayjs = __toModule(require_dayjs_min());
    }
  });

  // node_modules/numeral/numeral.js
  var require_numeral = __commonJS({
    "node_modules/numeral/numeral.js"(exports, module) {
      (function(global, factory) {
        if (typeof define === "function" && define.amd) {
          define(factory);
        } else if (typeof module === "object" && module.exports) {
          module.exports = factory();
        } else {
          global.numeral = factory();
        }
      })(exports, function() {
        var numeral7, _, VERSION = "2.0.6", formats2 = {}, locales2 = {}, defaults2 = {
          currentLocale: "en",
          zeroFormat: null,
          nullFormat: null,
          defaultFormat: "0,0",
          scalePercentBy100: true
        }, options = {
          currentLocale: defaults2.currentLocale,
          zeroFormat: defaults2.zeroFormat,
          nullFormat: defaults2.nullFormat,
          defaultFormat: defaults2.defaultFormat,
          scalePercentBy100: defaults2.scalePercentBy100
        };
        function Numeral(input, number) {
          this._input = input;
          this._value = number;
        }
        numeral7 = function(input) {
          var value, kind, unformatFunction, regexp;
          if (numeral7.isNumeral(input)) {
            value = input.value();
          } else if (input === 0 || typeof input === "undefined") {
            value = 0;
          } else if (input === null || _.isNaN(input)) {
            value = null;
          } else if (typeof input === "string") {
            if (options.zeroFormat && input === options.zeroFormat) {
              value = 0;
            } else if (options.nullFormat && input === options.nullFormat || !input.replace(/[^0-9]+/g, "").length) {
              value = null;
            } else {
              for (kind in formats2) {
                regexp = typeof formats2[kind].regexps.unformat === "function" ? formats2[kind].regexps.unformat() : formats2[kind].regexps.unformat;
                if (regexp && input.match(regexp)) {
                  unformatFunction = formats2[kind].unformat;
                  break;
                }
              }
              unformatFunction = unformatFunction || numeral7._.stringToNumber;
              value = unformatFunction(input);
            }
          } else {
            value = Number(input) || null;
          }
          return new Numeral(input, value);
        };
        numeral7.version = VERSION;
        numeral7.isNumeral = function(obj) {
          return obj instanceof Numeral;
        };
        numeral7._ = _ = {
          numberToFormat: function(value, format, roundingFunction) {
            var locale2 = locales2[numeral7.options.currentLocale], negP = false, optDec = false, leadingCount = 0, abbr = "", trillion = 1e12, billion = 1e9, million = 1e6, thousand = 1e3, decimal = "", neg = false, abbrForce, abs, min, max, power, int2, precision, signed, thousands, output;
            value = value || 0;
            abs = Math.abs(value);
            if (numeral7._.includes(format, "(")) {
              negP = true;
              format = format.replace(/[\(|\)]/g, "");
            } else if (numeral7._.includes(format, "+") || numeral7._.includes(format, "-")) {
              signed = numeral7._.includes(format, "+") ? format.indexOf("+") : value < 0 ? format.indexOf("-") : -1;
              format = format.replace(/[\+|\-]/g, "");
            }
            if (numeral7._.includes(format, "a")) {
              abbrForce = format.match(/a(k|m|b|t)?/);
              abbrForce = abbrForce ? abbrForce[1] : false;
              if (numeral7._.includes(format, " a")) {
                abbr = " ";
              }
              format = format.replace(new RegExp(abbr + "a[kmbt]?"), "");
              if (abs >= trillion && !abbrForce || abbrForce === "t") {
                abbr += locale2.abbreviations.trillion;
                value = value / trillion;
              } else if (abs < trillion && abs >= billion && !abbrForce || abbrForce === "b") {
                abbr += locale2.abbreviations.billion;
                value = value / billion;
              } else if (abs < billion && abs >= million && !abbrForce || abbrForce === "m") {
                abbr += locale2.abbreviations.million;
                value = value / million;
              } else if (abs < million && abs >= thousand && !abbrForce || abbrForce === "k") {
                abbr += locale2.abbreviations.thousand;
                value = value / thousand;
              }
            }
            if (numeral7._.includes(format, "[.]")) {
              optDec = true;
              format = format.replace("[.]", ".");
            }
            int2 = value.toString().split(".")[0];
            precision = format.split(".")[1];
            thousands = format.indexOf(",");
            leadingCount = (format.split(".")[0].split(",")[0].match(/0/g) || []).length;
            if (precision) {
              if (numeral7._.includes(precision, "[")) {
                precision = precision.replace("]", "");
                precision = precision.split("[");
                decimal = numeral7._.toFixed(value, precision[0].length + precision[1].length, roundingFunction, precision[1].length);
              } else {
                decimal = numeral7._.toFixed(value, precision.length, roundingFunction);
              }
              int2 = decimal.split(".")[0];
              if (numeral7._.includes(decimal, ".")) {
                decimal = locale2.delimiters.decimal + decimal.split(".")[1];
              } else {
                decimal = "";
              }
              if (optDec && Number(decimal.slice(1)) === 0) {
                decimal = "";
              }
            } else {
              int2 = numeral7._.toFixed(value, 0, roundingFunction);
            }
            if (abbr && !abbrForce && Number(int2) >= 1e3 && abbr !== locale2.abbreviations.trillion) {
              int2 = String(Number(int2) / 1e3);
              switch (abbr) {
                case locale2.abbreviations.thousand:
                  abbr = locale2.abbreviations.million;
                  break;
                case locale2.abbreviations.million:
                  abbr = locale2.abbreviations.billion;
                  break;
                case locale2.abbreviations.billion:
                  abbr = locale2.abbreviations.trillion;
                  break;
              }
            }
            if (numeral7._.includes(int2, "-")) {
              int2 = int2.slice(1);
              neg = true;
            }
            if (int2.length < leadingCount) {
              for (var i2 = leadingCount - int2.length; i2 > 0; i2--) {
                int2 = "0" + int2;
              }
            }
            if (thousands > -1) {
              int2 = int2.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1" + locale2.delimiters.thousands);
            }
            if (format.indexOf(".") === 0) {
              int2 = "";
            }
            output = int2 + decimal + (abbr ? abbr : "");
            if (negP) {
              output = (negP && neg ? "(" : "") + output + (negP && neg ? ")" : "");
            } else {
              if (signed >= 0) {
                output = signed === 0 ? (neg ? "-" : "+") + output : output + (neg ? "-" : "+");
              } else if (neg) {
                output = "-" + output;
              }
            }
            return output;
          },
          stringToNumber: function(string) {
            var locale2 = locales2[options.currentLocale], stringOriginal = string, abbreviations = {
              thousand: 3,
              million: 6,
              billion: 9,
              trillion: 12
            }, abbreviation, value, i2, regexp;
            if (options.zeroFormat && string === options.zeroFormat) {
              value = 0;
            } else if (options.nullFormat && string === options.nullFormat || !string.replace(/[^0-9]+/g, "").length) {
              value = null;
            } else {
              value = 1;
              if (locale2.delimiters.decimal !== ".") {
                string = string.replace(/\./g, "").replace(locale2.delimiters.decimal, ".");
              }
              for (abbreviation in abbreviations) {
                regexp = new RegExp("[^a-zA-Z]" + locale2.abbreviations[abbreviation] + "(?:\\)|(\\" + locale2.currency.symbol + ")?(?:\\))?)?$");
                if (stringOriginal.match(regexp)) {
                  value *= Math.pow(10, abbreviations[abbreviation]);
                  break;
                }
              }
              value *= (string.split("-").length + Math.min(string.split("(").length - 1, string.split(")").length - 1)) % 2 ? 1 : -1;
              string = string.replace(/[^0-9\.]+/g, "");
              value *= Number(string);
            }
            return value;
          },
          isNaN: function(value) {
            return typeof value === "number" && isNaN(value);
          },
          includes: function(string, search) {
            return string.indexOf(search) !== -1;
          },
          insert: function(string, subString, start) {
            return string.slice(0, start) + subString + string.slice(start);
          },
          reduce: function(array, callback) {
            if (this === null) {
              throw new TypeError("Array.prototype.reduce called on null or undefined");
            }
            if (typeof callback !== "function") {
              throw new TypeError(callback + " is not a function");
            }
            var t = Object(array), len = t.length >>> 0, k = 0, value;
            if (arguments.length === 3) {
              value = arguments[2];
            } else {
              while (k < len && !(k in t)) {
                k++;
              }
              if (k >= len) {
                throw new TypeError("Reduce of empty array with no initial value");
              }
              value = t[k++];
            }
            for (; k < len; k++) {
              if (k in t) {
                value = callback(value, t[k], k, t);
              }
            }
            return value;
          },
          multiplier: function(x) {
            var parts = x.toString().split(".");
            return parts.length < 2 ? 1 : Math.pow(10, parts[1].length);
          },
          correctionFactor: function() {
            var args = Array.prototype.slice.call(arguments);
            return args.reduce(function(accum, next) {
              var mn = _.multiplier(next);
              return accum > mn ? accum : mn;
            }, 1);
          },
          toFixed: function(value, maxDecimals, roundingFunction, optionals) {
            var splitValue = value.toString().split("."), minDecimals = maxDecimals - (optionals || 0), boundedPrecision, optionalsRegExp, power, output;
            if (splitValue.length === 2) {
              boundedPrecision = Math.min(Math.max(splitValue[1].length, minDecimals), maxDecimals);
            } else {
              boundedPrecision = minDecimals;
            }
            power = Math.pow(10, boundedPrecision);
            output = (roundingFunction(value + "e+" + boundedPrecision) / power).toFixed(boundedPrecision);
            if (optionals > maxDecimals - boundedPrecision) {
              optionalsRegExp = new RegExp("\\.?0{1," + (optionals - (maxDecimals - boundedPrecision)) + "}$");
              output = output.replace(optionalsRegExp, "");
            }
            return output;
          }
        };
        numeral7.options = options;
        numeral7.formats = formats2;
        numeral7.locales = locales2;
        numeral7.locale = function(key) {
          if (key) {
            options.currentLocale = key.toLowerCase();
          }
          return options.currentLocale;
        };
        numeral7.localeData = function(key) {
          if (!key) {
            return locales2[options.currentLocale];
          }
          key = key.toLowerCase();
          if (!locales2[key]) {
            throw new Error("Unknown locale : " + key);
          }
          return locales2[key];
        };
        numeral7.reset = function() {
          for (var property in defaults2) {
            options[property] = defaults2[property];
          }
        };
        numeral7.zeroFormat = function(format) {
          options.zeroFormat = typeof format === "string" ? format : null;
        };
        numeral7.nullFormat = function(format) {
          options.nullFormat = typeof format === "string" ? format : null;
        };
        numeral7.defaultFormat = function(format) {
          options.defaultFormat = typeof format === "string" ? format : "0.0";
        };
        numeral7.register = function(type, name2, format) {
          name2 = name2.toLowerCase();
          if (this[type + "s"][name2]) {
            throw new TypeError(name2 + " " + type + " already registered.");
          }
          this[type + "s"][name2] = format;
          return format;
        };
        numeral7.validate = function(val, culture) {
          var _decimalSep, _thousandSep, _currSymbol, _valArray, _abbrObj, _thousandRegEx, localeData, temp;
          if (typeof val !== "string") {
            val += "";
            if (console.warn) {
              console.warn("Numeral.js: Value is not string. It has been co-erced to: ", val);
            }
          }
          val = val.trim();
          if (!!val.match(/^\d+$/)) {
            return true;
          }
          if (val === "") {
            return false;
          }
          try {
            localeData = numeral7.localeData(culture);
          } catch (e) {
            localeData = numeral7.localeData(numeral7.locale());
          }
          _currSymbol = localeData.currency.symbol;
          _abbrObj = localeData.abbreviations;
          _decimalSep = localeData.delimiters.decimal;
          if (localeData.delimiters.thousands === ".") {
            _thousandSep = "\\.";
          } else {
            _thousandSep = localeData.delimiters.thousands;
          }
          temp = val.match(/^[^\d]+/);
          if (temp !== null) {
            val = val.substr(1);
            if (temp[0] !== _currSymbol) {
              return false;
            }
          }
          temp = val.match(/[^\d]+$/);
          if (temp !== null) {
            val = val.slice(0, -1);
            if (temp[0] !== _abbrObj.thousand && temp[0] !== _abbrObj.million && temp[0] !== _abbrObj.billion && temp[0] !== _abbrObj.trillion) {
              return false;
            }
          }
          _thousandRegEx = new RegExp(_thousandSep + "{2}");
          if (!val.match(/[^\d.,]/g)) {
            _valArray = val.split(_decimalSep);
            if (_valArray.length > 2) {
              return false;
            } else {
              if (_valArray.length < 2) {
                return !!_valArray[0].match(/^\d+.*\d$/) && !_valArray[0].match(_thousandRegEx);
              } else {
                if (_valArray[0].length === 1) {
                  return !!_valArray[0].match(/^\d+$/) && !_valArray[0].match(_thousandRegEx) && !!_valArray[1].match(/^\d+$/);
                } else {
                  return !!_valArray[0].match(/^\d+.*\d$/) && !_valArray[0].match(_thousandRegEx) && !!_valArray[1].match(/^\d+$/);
                }
              }
            }
          }
          return false;
        };
        numeral7.fn = Numeral.prototype = {
          clone: function() {
            return numeral7(this);
          },
          format: function(inputString, roundingFunction) {
            var value = this._value, format = inputString || options.defaultFormat, kind, output, formatFunction;
            roundingFunction = roundingFunction || Math.round;
            if (value === 0 && options.zeroFormat !== null) {
              output = options.zeroFormat;
            } else if (value === null && options.nullFormat !== null) {
              output = options.nullFormat;
            } else {
              for (kind in formats2) {
                if (format.match(formats2[kind].regexps.format)) {
                  formatFunction = formats2[kind].format;
                  break;
                }
              }
              formatFunction = formatFunction || numeral7._.numberToFormat;
              output = formatFunction(value, format, roundingFunction);
            }
            return output;
          },
          value: function() {
            return this._value;
          },
          input: function() {
            return this._input;
          },
          set: function(value) {
            this._value = Number(value);
            return this;
          },
          add: function(value) {
            var corrFactor = _.correctionFactor.call(null, this._value, value);
            function cback(accum, curr, currI, O) {
              return accum + Math.round(corrFactor * curr);
            }
            this._value = _.reduce([this._value, value], cback, 0) / corrFactor;
            return this;
          },
          subtract: function(value) {
            var corrFactor = _.correctionFactor.call(null, this._value, value);
            function cback(accum, curr, currI, O) {
              return accum - Math.round(corrFactor * curr);
            }
            this._value = _.reduce([value], cback, Math.round(this._value * corrFactor)) / corrFactor;
            return this;
          },
          multiply: function(value) {
            function cback(accum, curr, currI, O) {
              var corrFactor = _.correctionFactor(accum, curr);
              return Math.round(accum * corrFactor) * Math.round(curr * corrFactor) / Math.round(corrFactor * corrFactor);
            }
            this._value = _.reduce([this._value, value], cback, 1);
            return this;
          },
          divide: function(value) {
            function cback(accum, curr, currI, O) {
              var corrFactor = _.correctionFactor(accum, curr);
              return Math.round(accum * corrFactor) / Math.round(curr * corrFactor);
            }
            this._value = _.reduce([this._value, value], cback);
            return this;
          },
          difference: function(value) {
            return Math.abs(numeral7(this._value).subtract(value).value());
          }
        };
        numeral7.register("locale", "en", {
          delimiters: {
            thousands: ",",
            decimal: "."
          },
          abbreviations: {
            thousand: "k",
            million: "m",
            billion: "b",
            trillion: "t"
          },
          ordinal: function(number) {
            var b = number % 10;
            return ~~(number % 100 / 10) === 1 ? "th" : b === 1 ? "st" : b === 2 ? "nd" : b === 3 ? "rd" : "th";
          },
          currency: {
            symbol: "$"
          }
        });
        (function() {
          numeral7.register("format", "bps", {
            regexps: {
              format: /(BPS)/,
              unformat: /(BPS)/
            },
            format: function(value, format, roundingFunction) {
              var space = numeral7._.includes(format, " BPS") ? " " : "", output;
              value = value * 1e4;
              format = format.replace(/\s?BPS/, "");
              output = numeral7._.numberToFormat(value, format, roundingFunction);
              if (numeral7._.includes(output, ")")) {
                output = output.split("");
                output.splice(-1, 0, space + "BPS");
                output = output.join("");
              } else {
                output = output + space + "BPS";
              }
              return output;
            },
            unformat: function(string) {
              return +(numeral7._.stringToNumber(string) * 1e-4).toFixed(15);
            }
          });
        })();
        (function() {
          var decimal = {
            base: 1e3,
            suffixes: ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]
          }, binary = {
            base: 1024,
            suffixes: ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"]
          };
          var allSuffixes = decimal.suffixes.concat(binary.suffixes.filter(function(item2) {
            return decimal.suffixes.indexOf(item2) < 0;
          }));
          var unformatRegex = allSuffixes.join("|");
          unformatRegex = "(" + unformatRegex.replace("B", "B(?!PS)") + ")";
          numeral7.register("format", "bytes", {
            regexps: {
              format: /([0\s]i?b)/,
              unformat: new RegExp(unformatRegex)
            },
            format: function(value, format, roundingFunction) {
              var output, bytes = numeral7._.includes(format, "ib") ? binary : decimal, suffix = numeral7._.includes(format, " b") || numeral7._.includes(format, " ib") ? " " : "", power, min, max;
              format = format.replace(/\s?i?b/, "");
              for (power = 0; power <= bytes.suffixes.length; power++) {
                min = Math.pow(bytes.base, power);
                max = Math.pow(bytes.base, power + 1);
                if (value === null || value === 0 || value >= min && value < max) {
                  suffix += bytes.suffixes[power];
                  if (min > 0) {
                    value = value / min;
                  }
                  break;
                }
              }
              output = numeral7._.numberToFormat(value, format, roundingFunction);
              return output + suffix;
            },
            unformat: function(string) {
              var value = numeral7._.stringToNumber(string), power, bytesMultiplier;
              if (value) {
                for (power = decimal.suffixes.length - 1; power >= 0; power--) {
                  if (numeral7._.includes(string, decimal.suffixes[power])) {
                    bytesMultiplier = Math.pow(decimal.base, power);
                    break;
                  }
                  if (numeral7._.includes(string, binary.suffixes[power])) {
                    bytesMultiplier = Math.pow(binary.base, power);
                    break;
                  }
                }
                value *= bytesMultiplier || 1;
              }
              return value;
            }
          });
        })();
        (function() {
          numeral7.register("format", "currency", {
            regexps: {
              format: /(\$)/
            },
            format: function(value, format, roundingFunction) {
              var locale2 = numeral7.locales[numeral7.options.currentLocale], symbols = {
                before: format.match(/^([\+|\-|\(|\s|\$]*)/)[0],
                after: format.match(/([\+|\-|\)|\s|\$]*)$/)[0]
              }, output, symbol, i2;
              format = format.replace(/\s?\$\s?/, "");
              output = numeral7._.numberToFormat(value, format, roundingFunction);
              if (value >= 0) {
                symbols.before = symbols.before.replace(/[\-\(]/, "");
                symbols.after = symbols.after.replace(/[\-\)]/, "");
              } else if (value < 0 && (!numeral7._.includes(symbols.before, "-") && !numeral7._.includes(symbols.before, "("))) {
                symbols.before = "-" + symbols.before;
              }
              for (i2 = 0; i2 < symbols.before.length; i2++) {
                symbol = symbols.before[i2];
                switch (symbol) {
                  case "$":
                    output = numeral7._.insert(output, locale2.currency.symbol, i2);
                    break;
                  case " ":
                    output = numeral7._.insert(output, " ", i2 + locale2.currency.symbol.length - 1);
                    break;
                }
              }
              for (i2 = symbols.after.length - 1; i2 >= 0; i2--) {
                symbol = symbols.after[i2];
                switch (symbol) {
                  case "$":
                    output = i2 === symbols.after.length - 1 ? output + locale2.currency.symbol : numeral7._.insert(output, locale2.currency.symbol, -(symbols.after.length - (1 + i2)));
                    break;
                  case " ":
                    output = i2 === symbols.after.length - 1 ? output + " " : numeral7._.insert(output, " ", -(symbols.after.length - (1 + i2) + locale2.currency.symbol.length - 1));
                    break;
                }
              }
              return output;
            }
          });
        })();
        (function() {
          numeral7.register("format", "exponential", {
            regexps: {
              format: /(e\+|e-)/,
              unformat: /(e\+|e-)/
            },
            format: function(value, format, roundingFunction) {
              var output, exponential = typeof value === "number" && !numeral7._.isNaN(value) ? value.toExponential() : "0e+0", parts = exponential.split("e");
              format = format.replace(/e[\+|\-]{1}0/, "");
              output = numeral7._.numberToFormat(Number(parts[0]), format, roundingFunction);
              return output + "e" + parts[1];
            },
            unformat: function(string) {
              var parts = numeral7._.includes(string, "e+") ? string.split("e+") : string.split("e-"), value = Number(parts[0]), power = Number(parts[1]);
              power = numeral7._.includes(string, "e-") ? power *= -1 : power;
              function cback(accum, curr, currI, O) {
                var corrFactor = numeral7._.correctionFactor(accum, curr), num = accum * corrFactor * (curr * corrFactor) / (corrFactor * corrFactor);
                return num;
              }
              return numeral7._.reduce([value, Math.pow(10, power)], cback, 1);
            }
          });
        })();
        (function() {
          numeral7.register("format", "ordinal", {
            regexps: {
              format: /(o)/
            },
            format: function(value, format, roundingFunction) {
              var locale2 = numeral7.locales[numeral7.options.currentLocale], output, ordinal = numeral7._.includes(format, " o") ? " " : "";
              format = format.replace(/\s?o/, "");
              ordinal += locale2.ordinal(value);
              output = numeral7._.numberToFormat(value, format, roundingFunction);
              return output + ordinal;
            }
          });
        })();
        (function() {
          numeral7.register("format", "percentage", {
            regexps: {
              format: /(%)/,
              unformat: /(%)/
            },
            format: function(value, format, roundingFunction) {
              var space = numeral7._.includes(format, " %") ? " " : "", output;
              if (numeral7.options.scalePercentBy100) {
                value = value * 100;
              }
              format = format.replace(/\s?\%/, "");
              output = numeral7._.numberToFormat(value, format, roundingFunction);
              if (numeral7._.includes(output, ")")) {
                output = output.split("");
                output.splice(-1, 0, space + "%");
                output = output.join("");
              } else {
                output = output + space + "%";
              }
              return output;
            },
            unformat: function(string) {
              var number = numeral7._.stringToNumber(string);
              if (numeral7.options.scalePercentBy100) {
                return number * 0.01;
              }
              return number;
            }
          });
        })();
        (function() {
          numeral7.register("format", "time", {
            regexps: {
              format: /(:)/,
              unformat: /(:)/
            },
            format: function(value, format, roundingFunction) {
              var hours = Math.floor(value / 60 / 60), minutes = Math.floor((value - hours * 60 * 60) / 60), seconds = Math.round(value - hours * 60 * 60 - minutes * 60);
              return hours + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds < 10 ? "0" + seconds : seconds);
            },
            unformat: function(string) {
              var timeArray = string.split(":"), seconds = 0;
              if (timeArray.length === 3) {
                seconds = seconds + Number(timeArray[0]) * 60 * 60;
                seconds = seconds + Number(timeArray[1]) * 60;
                seconds = seconds + Number(timeArray[2]);
              } else if (timeArray.length === 2) {
                seconds = seconds + Number(timeArray[0]) * 60;
                seconds = seconds + Number(timeArray[1]);
              }
              return Number(seconds);
            }
          });
        })();
        return numeral7;
      });
    }
  });

  // src/global/format.js
  function datenum_local(v, date1904) {
    var epoch = Date.UTC(v.getFullYear(), v.getMonth(), v.getDate(), v.getHours(), v.getMinutes(), v.getSeconds());
    var dnthresh_utc = Date.UTC(1899, 11, 31, 0, 0, 0);
    if (date1904)
      epoch -= 1461 * 24 * 60 * 60 * 1e3;
    else if (v >= base1904)
      epoch += 24 * 60 * 60 * 1e3;
    return (epoch - dnthresh_utc) / (24 * 60 * 60 * 1e3);
  }
  function parseDate(str, fixdate) {
    var d = new Date(str);
    if (good_pd) {
      if (fixdate > 0)
        d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1e3);
      else if (fixdate < 0)
        d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1e3);
      return d;
    }
    if (str instanceof Date)
      return str;
    if (good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {
      var s = d.getFullYear();
      if (str.indexOf("" + s) > -1)
        return d;
      d.setFullYear(d.getFullYear() + 100);
      return d;
    }
    var n = str.match(/\d+/g) || ["2017", "2", "19", "0", "0", "0"];
    var out = new Date(+n[0], +n[1] - 1, +n[2], +n[3] || 0, +n[4] || 0, +n[5] || 0);
    if (str.indexOf("Z") > -1)
      out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1e3);
    return out;
  }
  function fuzzynum(s) {
    var v = Number(s);
    if (typeof s == "number") {
      return s;
    }
    if (!isNaN(v))
      return v;
    var wt = 1;
    var ss = s.replace(/([\d]),([\d])/g, "$1$2").replace(/[$]/g, "").replace(/[%]/g, function() {
      wt *= 100;
      return "";
    });
    if (!isNaN(v = Number(ss)))
      return v / wt;
    ss = ss.replace(/[(](.*)[)]/, function($$2, $1) {
      wt = -wt;
      return $1;
    });
    if (!isNaN(v = Number(ss)))
      return v / wt;
    return v;
  }
  function genarate(value) {
    var ret = [];
    var m = null, ct = {}, v = value;
    if (value == null) {
      return null;
    }
    if (/^-?[0-9]{1,}[,][0-9]{3}(.[0-9]{1,2})?$/.test(value)) {
      m = value;
      v = Number(value.split(".")[0].replace(",", ""));
      let fa = "#,##0";
      if (value.split(".")[1]) {
        fa = "#,##0.";
        for (let i3 = 0; i3 < value.split(".")[1].length; i3++) {
          fa += 0;
        }
      }
      ct = {fa, t: "n"};
    } else if (value.toString().substr(0, 1) === "'") {
      m = value.toString().substr(1);
      ct = {"fa": "@", "t": "s"};
    } else if (value.toString().toUpperCase() === "TRUE") {
      m = "TRUE";
      ct = {"fa": "General", "t": "b"};
      v = true;
    } else if (value.toString().toUpperCase() === "FALSE") {
      m = "FALSE";
      ct = {"fa": "General", "t": "b"};
      v = false;
    } else if (valueIsError(value)) {
      m = value.toString();
      ct = {"fa": "General", "t": "e"};
    } else if (/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(value)) {
      m = value.toString();
      ct = {"fa": "@", "t": "s"};
    } else if (isRealNum(value) && Math.abs(parseFloat(value)) > 0 && (Math.abs(parseFloat(value)) >= 1e11 || Math.abs(parseFloat(value)) < 1e-9)) {
      v = (0, import_numeral.default)(value).value();
      var str = v.toExponential();
      if (str.indexOf(".") > -1) {
        var strlen = str.split(".")[1].split("e")[0].length;
        if (strlen > 5) {
          strlen = 5;
        }
        ct = {"fa": "#0." + new Array(strlen + 1).join("0") + "E+00", "t": "n"};
      } else {
        ct = {"fa": "#0.E+00", "t": "n"};
      }
      m = SSF.format(ct.fa, v);
    } else if (value.toString().indexOf("%") > -1) {
      var index2 = value.toString().indexOf("%");
      var value2 = value.toString().substr(0, index2);
      var value3 = value2.replace(/,/g, "");
      if (index2 == value.toString().length - 1 && isRealNum(value3)) {
        if (value2.indexOf(".") > -1) {
          if (value2.indexOf(".") == value2.lastIndexOf(".")) {
            var value4 = value2.split(".")[0];
            var value5 = value2.split(".")[1];
            var len = value5.length;
            if (len > 9) {
              len = 9;
            }
            if (value4.indexOf(",") > -1) {
              var isThousands = true;
              var ThousandsArr = value4.split(",");
              for (var i2 = 1; i2 < ThousandsArr.length; i2++) {
                if (ThousandsArr[i2].length < 3) {
                  isThousands = false;
                  break;
                }
              }
              if (isThousands) {
                ct = {"fa": "#,##0." + new Array(len + 1).join("0") + "%", "t": "n"};
                v = (0, import_numeral.default)(value).value();
                m = SSF.format(ct.fa, v);
              } else {
                m = value.toString();
                ct = {"fa": "@", "t": "s"};
              }
            } else {
              ct = {"fa": "0." + new Array(len + 1).join("0") + "%", "t": "n"};
              v = (0, import_numeral.default)(value).value();
              m = SSF.format(ct.fa, v);
            }
          } else {
            m = value.toString();
            ct = {"fa": "@", "t": "s"};
          }
        } else if (value2.indexOf(",") > -1) {
          var isThousands = true;
          var ThousandsArr = value2.split(",");
          for (var i2 = 1; i2 < ThousandsArr.length; i2++) {
            if (ThousandsArr[i2].length < 3) {
              isThousands = false;
              break;
            }
          }
          if (isThousands) {
            ct = {"fa": "#,##0%", "t": "n"};
            v = (0, import_numeral.default)(value).value();
            m = SSF.format(ct.fa, v);
          } else {
            m = value.toString();
            ct = {"fa": "@", "t": "s"};
          }
        } else {
          ct = {"fa": "0%", "t": "n"};
          v = (0, import_numeral.default)(value).value();
          m = SSF.format(ct.fa, v);
        }
      } else {
        m = value.toString();
        ct = {"fa": "@", "t": "s"};
      }
    } else if (value.toString().indexOf(".") > -1) {
      if (value.toString().indexOf(".") == value.toString().lastIndexOf(".")) {
        var value1 = value.toString().split(".")[0];
        var value2 = value.toString().split(".")[1];
        var len = value2.length;
        if (len > 9) {
          len = 9;
        }
        if (value1.indexOf(",") > -1) {
          var isThousands = true;
          var ThousandsArr = value1.split(",");
          for (var i2 = 1; i2 < ThousandsArr.length; i2++) {
            if (!isRealNum(ThousandsArr[i2]) || ThousandsArr[i2].length < 3) {
              isThousands = false;
              break;
            }
          }
          if (isThousands) {
            ct = {"fa": "#,##0." + new Array(len + 1).join("0"), "t": "n"};
            v = (0, import_numeral.default)(value).value();
            m = SSF.format(ct.fa, v);
          } else {
            m = value.toString();
            ct = {"fa": "@", "t": "s"};
          }
        } else {
          if (isRealNum(value1) && isRealNum(value2)) {
            ct = {"fa": "0." + new Array(len + 1).join("0"), "t": "n"};
            v = (0, import_numeral.default)(value).value();
            m = SSF.format(ct.fa, v);
          } else {
            m = value.toString();
            ct = {"fa": "@", "t": "s"};
          }
        }
      } else {
        m = value.toString();
        ct = {"fa": "@", "t": "s"};
      }
    } else if (isRealNum(value)) {
      m = value.toString();
      ct = {"fa": "General", "t": "n"};
      v = parseFloat(value);
    } else if (isdatetime(value) && (value.toString().indexOf(".") > -1 || value.toString().indexOf(":") > -1 || value.toString().length < 16)) {
      v = datenum_local(parseDate(value.toString().replace(/-/g, "/")));
      if (v.toString().indexOf(".") > -1) {
        if (value.toString().length > 18) {
          ct.fa = "yyyy-MM-dd hh:mm:ss";
        } else if (value.toString().length > 11) {
          ct.fa = "yyyy-MM-dd hh:mm";
        } else {
          ct.fa = "yyyy-MM-dd";
        }
      } else {
        ct.fa = "yyyy-MM-dd";
      }
      ct.t = "d";
      m = SSF.format(ct.fa, v);
    } else {
      m = value;
      ct.fa = "General";
      ct.t = "g";
    }
    return [m, ct, v];
  }
  function update(fmt, v) {
    return SSF.format(fmt, v);
  }
  function is_date(fmt, v) {
    return SSF.is_date(fmt, v);
  }
  function valueShowEs(r2, c2, d) {
    var value = getcellvalue(r2, c2, d, "m");
    if (value == null) {
      value = getcellvalue(r2, c2, d, "v");
    } else {
      if (!isNaN(fuzzynum(value))) {
        if (typeof value == "string" && value.indexOf("%") > -1) {
        } else {
          value = getcellvalue(r2, c2, d, "v");
        }
      } else if (d[r2][c2].ct != null && d[r2][c2].ct.t == "d") {
      } else if (d[r2][c2].ct != null && d[r2][c2].ct.t == "b") {
      } else {
        value = getcellvalue(r2, c2, d, "v");
      }
    }
    return value;
  }
  var import_numeral, SSF, make_ssf, XLMLFormatMap, unescapexml, basedate, dnthresh, base1904, good_pd_date, good_pd;
  var init_format = __esm({
    "src/global/format.js"() {
      init_validate();
      init_datecontroll();
      init_getdata();
      import_numeral = __toModule(require_numeral());
      SSF = {};
      make_ssf = function make_ssf2(SSF2) {
        SSF2.version = "0.11.2";
        function _strrev(x) {
          var o = "", i2 = x.length - 1;
          while (i2 >= 0)
            o += x.charAt(i2--);
          return o;
        }
        function fill(c2, l) {
          var o = "";
          while (o.length < l)
            o += c2;
          return o;
        }
        function pad0(v, d) {
          var t = "" + v;
          return t.length >= d ? t : fill("0", d - t.length) + t;
        }
        function pad_(v, d) {
          var t = "" + v;
          return t.length >= d ? t : fill(" ", d - t.length) + t;
        }
        function rpad_(v, d) {
          var t = "" + v;
          return t.length >= d ? t : t + fill(" ", d - t.length);
        }
        function pad0r1(v, d) {
          var t = "" + Math.round(v);
          return t.length >= d ? t : fill("0", d - t.length) + t;
        }
        function pad0r2(v, d) {
          var t = "" + v;
          return t.length >= d ? t : fill("0", d - t.length) + t;
        }
        var p2_32 = Math.pow(2, 32);
        function pad0r(v, d) {
          if (v > p2_32 || v < -p2_32)
            return pad0r1(v, d);
          var i2 = Math.round(v);
          return pad0r2(i2, d);
        }
        function isgeneral(s, i2) {
          i2 = i2 || 0;
          return s.length >= 7 + i2 && (s.charCodeAt(i2) | 32) === 103 && (s.charCodeAt(i2 + 1) | 32) === 101 && (s.charCodeAt(i2 + 2) | 32) === 110 && (s.charCodeAt(i2 + 3) | 32) === 101 && (s.charCodeAt(i2 + 4) | 32) === 114 && (s.charCodeAt(i2 + 5) | 32) === 97 && (s.charCodeAt(i2 + 6) | 32) === 108;
        }
        var days = [
          ["Sun", "Sunday"],
          ["Mon", "Monday"],
          ["Tue", "Tuesday"],
          ["Wed", "Wednesday"],
          ["Thu", "Thursday"],
          ["Fri", "Friday"],
          ["Sat", "Saturday"]
        ];
        var months = [
          ["J", "Jan", "January"],
          ["F", "Feb", "February"],
          ["M", "Mar", "March"],
          ["A", "Apr", "April"],
          ["M", "May", "May"],
          ["J", "Jun", "June"],
          ["J", "Jul", "July"],
          ["A", "Aug", "August"],
          ["S", "Sep", "September"],
          ["O", "Oct", "October"],
          ["N", "Nov", "November"],
          ["D", "Dec", "December"]
        ];
        function init_table(t) {
          t[0] = "General";
          t[1] = "0";
          t[2] = "0.00";
          t[3] = "#,##0";
          t[4] = "#,##0.00";
          t[9] = "0%";
          t[10] = "0.00%";
          t[11] = "0.00E+00";
          t[12] = "# ?/?";
          t[13] = "# ??/??";
          t[14] = "m/d/yy";
          t[15] = "d-mmm-yy";
          t[16] = "d-mmm";
          t[17] = "mmm-yy";
          t[18] = "h:mm AM/PM";
          t[19] = "h:mm:ss AM/PM";
          t[20] = "h:mm";
          t[21] = "h:mm:ss";
          t[22] = "m/d/yy h:mm";
          t[37] = "#,##0 ;(#,##0)";
          t[38] = "#,##0 ;[Red](#,##0)";
          t[39] = "#,##0.00;(#,##0.00)";
          t[40] = "#,##0.00;[Red](#,##0.00)";
          t[45] = "mm:ss";
          t[46] = "[h]:mm:ss";
          t[47] = "mmss.0";
          t[48] = "##0.0E+0";
          t[49] = "@";
          t[56] = '"\u4E0A\u5348/\u4E0B\u5348 "hh"\u6642"mm"\u5206"ss"\u79D2 "';
          t[65535] = "General";
        }
        var table_fmt = {};
        init_table(table_fmt);
        var default_map = [];
        var defi = 0;
        for (defi = 5; defi <= 8; ++defi)
          default_map[defi] = 32 + defi;
        for (defi = 23; defi <= 26; ++defi)
          default_map[defi] = 0;
        for (defi = 27; defi <= 31; ++defi)
          default_map[defi] = 14;
        for (defi = 50; defi <= 58; ++defi)
          default_map[defi] = 14;
        for (defi = 59; defi <= 62; ++defi)
          default_map[defi] = defi - 58;
        for (defi = 67; defi <= 68; ++defi)
          default_map[defi] = defi - 58;
        for (defi = 72; defi <= 75; ++defi)
          default_map[defi] = defi - 58;
        for (defi = 67; defi <= 68; ++defi)
          default_map[defi] = defi - 57;
        for (defi = 76; defi <= 78; ++defi)
          default_map[defi] = defi - 56;
        for (defi = 79; defi <= 81; ++defi)
          default_map[defi] = defi - 34;
        var default_str = [];
        default_str[5] = default_str[63] = '"$"#,##0_);\\("$"#,##0\\)';
        default_str[6] = default_str[64] = '"$"#,##0_);[Red]\\("$"#,##0\\)';
        default_str[7] = default_str[65] = '"$"#,##0.00_);\\("$"#,##0.00\\)';
        default_str[8] = default_str[66] = '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)';
        default_str[41] = '_(* #,##0_);_(* \\(#,##0\\);_(* "-"_);_(@_)';
        default_str[42] = '_("$"* #,##0_);_("$"* \\(#,##0\\);_("$"* "-"_);_(@_)';
        default_str[43] = '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* "-"??_);_(@_)';
        default_str[44] = '_("$"* #,##0.00_);_("$"* \\(#,##0.00\\);_("$"* "-"??_);_(@_)';
        function frac(x, D, mixed) {
          var sgn = x < 0 ? -1 : 1;
          var B = x * sgn;
          var P_2 = 0, P_1 = 1, P = 0;
          var Q_2 = 1, Q_1 = 0, Q = 0;
          var A = Math.floor(B);
          while (Q_1 < D) {
            A = Math.floor(B);
            P = A * P_1 + P_2;
            Q = A * Q_1 + Q_2;
            if (B - A < 5e-8)
              break;
            B = 1 / (B - A);
            P_2 = P_1;
            P_1 = P;
            Q_2 = Q_1;
            Q_1 = Q;
          }
          if (Q > D) {
            if (Q_1 > D) {
              Q = Q_2;
              P = P_2;
            } else {
              Q = Q_1;
              P = P_1;
            }
          }
          if (!mixed)
            return [0, sgn * P, Q];
          var q = Math.floor(sgn * P / Q);
          return [q, sgn * P - q * Q, Q];
        }
        function parse_date_code(v, opts, b2) {
          if (v > 2958465 || v < 0)
            return null;
          var date = v | 0, time = Math.floor(86400 * (v - date)), dow = 0;
          var dout = [];
          var out = {
            D: date,
            T: time,
            u: 86400 * (v - date) - time,
            y: 0,
            m: 0,
            d: 0,
            H: 0,
            M: 0,
            S: 0,
            q: 0
          };
          if (Math.abs(out.u) < 1e-6)
            out.u = 0;
          if (opts && opts.date1904)
            date += 1462;
          if (out.u > 0.9999) {
            out.u = 0;
            if (++time == 86400) {
              out.T = time = 0;
              ++date;
              ++out.D;
            }
          }
          if (date === 60) {
            dout = b2 ? [1317, 10, 29] : [1900, 2, 29];
            dow = 3;
          } else if (date === 0) {
            dout = b2 ? [1317, 8, 29] : [1900, 1, 0];
            dow = 6;
          } else {
            if (date > 60)
              --date;
            var d = new Date(1900, 0, 1);
            d.setDate(d.getDate() + date - 1);
            dout = [d.getFullYear(), d.getMonth() + 1, d.getDate()];
            dow = d.getDay();
            if (date < 60)
              dow = (dow + 6) % 7;
            if (b2)
              dow = fix_hijri(d, dout);
          }
          out.y = dout[0];
          out.m = dout[1];
          out.d = dout[2];
          out.S = time % 60;
          time = Math.floor(time / 60);
          out.M = time % 60;
          time = Math.floor(time / 60);
          out.H = time;
          out.q = dow;
          return out;
        }
        SSF2.parse_date_code = parse_date_code;
        var basedate2 = new Date(1899, 11, 31, 0, 0, 0);
        var dnthresh2 = basedate2.getTime();
        var base19042 = new Date(1900, 2, 1, 0, 0, 0);
        function datenum_local2(v, date1904) {
          var epoch = v.getTime();
          if (date1904)
            epoch -= 1461 * 24 * 60 * 60 * 1e3;
          else if (v >= base19042)
            epoch += 24 * 60 * 60 * 1e3;
          return (epoch - (dnthresh2 + (v.getTimezoneOffset() - basedate2.getTimezoneOffset()) * 6e4)) / (24 * 60 * 60 * 1e3);
        }
        function general_fmt_int(v) {
          return v.toString(10);
        }
        SSF2._general_int = general_fmt_int;
        var general_fmt_num = function make_general_fmt_num() {
          var trailing_zeroes_and_decimal = /(?:\.0*|(\.\d*[1-9])0+)$/;
          function strip_decimal(o) {
            return o.indexOf(".") == -1 ? o : o.replace(trailing_zeroes_and_decimal, "$1");
          }
          var mantissa_zeroes_and_decimal = /(?:\.0*|(\.\d*[1-9])0+)[Ee]/;
          var exp_with_single_digit = /(E[+-])(\d)$/;
          function normalize_exp(o) {
            if (o.indexOf("E") == -1)
              return o;
            return o.replace(mantissa_zeroes_and_decimal, "$1E").replace(exp_with_single_digit, "$10$2");
          }
          function small_exp(v) {
            var w = v < 0 ? 12 : 11;
            var o = strip_decimal(v.toFixed(12));
            if (o.length <= w)
              return o;
            o = v.toPrecision(10);
            if (o.length <= w)
              return o;
            return v.toExponential(5);
          }
          function large_exp(v) {
            var o = strip_decimal(v.toFixed(11));
            return o.length > (v < 0 ? 12 : 11) || o === "0" || o === "-0" ? v.toPrecision(6) : o;
          }
          function general_fmt_num_base(v) {
            var V = Math.floor(Math.log(Math.abs(v)) * Math.LOG10E), o;
            if (V >= -4 && V <= -1)
              o = v.toPrecision(10 + V);
            else if (Math.abs(V) <= 9)
              o = small_exp(v);
            else if (V === 10)
              o = v.toFixed(10).substr(0, 12);
            else
              o = large_exp(v);
            return strip_decimal(normalize_exp(o.toUpperCase()));
          }
          return general_fmt_num_base;
        }();
        SSF2._general_num = general_fmt_num;
        function general_fmt(v, opts) {
          switch (typeof v) {
            case "string":
              return v;
            case "boolean":
              return v ? "TRUE" : "FALSE";
            case "number":
              return (v | 0) === v ? v.toString(10) : general_fmt_num(v);
            case "undefined":
              return "";
            case "object":
              if (v == null)
                return "";
              if (v instanceof Date)
                return format(14, datenum_local2(v, opts && opts.date1904), opts);
          }
          throw new Error("unsupported value in General format: " + v);
        }
        SSF2._general = general_fmt;
        function fix_hijri(date, o) {
          o[0] -= 581;
          var dow = date.getDay();
          if (date < 60)
            dow = (dow + 6) % 7;
          return dow;
        }
        var THAI_DIGITS = "\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59".split("");
        function write_date(type, fmt, val, ss0) {
          var o = "", ss = 0, tt = 0, y = val.y, out, outl = 0;
          switch (type) {
            case 98:
              y = val.y + 543;
            case 121:
              switch (fmt.length) {
                case 1:
                case 2:
                  out = y % 100;
                  outl = 2;
                  break;
                default:
                  out = y % 1e4;
                  outl = 4;
                  break;
              }
              break;
            case 109:
              switch (fmt.length) {
                case 1:
                case 2:
                  out = val.m;
                  outl = fmt.length;
                  break;
                case 3:
                  return months[val.m - 1][1];
                case 5:
                  return months[val.m - 1][0];
                default:
                  return months[val.m - 1][2];
              }
              break;
            case 100:
              switch (fmt.length) {
                case 1:
                case 2:
                  out = val.d;
                  outl = fmt.length;
                  break;
                case 3:
                  return days[val.q][0];
                default:
                  return days[val.q][1];
              }
              break;
            case 104:
              switch (fmt.length) {
                case 1:
                case 2:
                  out = 1 + (val.H + 11) % 12;
                  outl = fmt.length;
                  break;
                default:
                  throw "bad hour format: " + fmt;
              }
              break;
            case 72:
              switch (fmt.length) {
                case 1:
                case 2:
                  out = val.H;
                  outl = fmt.length;
                  break;
                default:
                  throw "bad hour format: " + fmt;
              }
              break;
            case 77:
              switch (fmt.length) {
                case 1:
                case 2:
                  out = val.M;
                  outl = fmt.length;
                  break;
                default:
                  throw "bad minute format: " + fmt;
              }
              break;
            case 115:
              if (fmt != "s" && fmt != "ss" && fmt != ".0" && fmt != ".00" && fmt != ".000")
                throw "bad second format: " + fmt;
              if (val.u === 0 && (fmt == "s" || fmt == "ss"))
                return pad0(val.S, fmt.length);
              if (ss0 >= 2)
                tt = ss0 === 3 ? 1e3 : 100;
              else
                tt = ss0 === 1 ? 10 : 1;
              ss = Math.round(tt * (val.S + val.u));
              if (ss >= 60 * tt)
                ss = 0;
              if (fmt === "s")
                return ss === 0 ? "0" : "" + ss / tt;
              o = pad0(ss, 2 + ss0);
              if (fmt === "ss")
                return o.substr(0, 2);
              return "." + o.substr(2, fmt.length - 1);
            case 90:
              switch (fmt) {
                case "[h]":
                case "[hh]":
                  out = val.D * 24 + val.H;
                  break;
                case "[m]":
                case "[mm]":
                  out = (val.D * 24 + val.H) * 60 + val.M;
                  break;
                case "[s]":
                case "[ss]":
                  out = ((val.D * 24 + val.H) * 60 + val.M) * 60 + Math.round(val.S + val.u);
                  break;
                default:
                  throw "bad abstime format: " + fmt;
              }
              outl = fmt.length === 3 ? 1 : 2;
              break;
            case 101:
              out = y;
              outl = 1;
              break;
          }
          var outstr = outl > 0 ? pad0(out, outl) : "";
          return outstr;
        }
        function commaify(s) {
          var w = 3;
          if (s.length <= w)
            return s;
          var j = s.length % w, o = s.substr(0, j);
          for (; j != s.length; j += w)
            o += (o.length > 0 ? "," : "") + s.substr(j, w);
          return o;
        }
        var write_num = function make_write_num() {
          var pct1 = /%/g;
          function write_num_pct(type, fmt, val) {
            var sfmt = fmt.replace(pct1, ""), mul = fmt.length - sfmt.length;
            return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill("%", mul);
          }
          function write_num_cm(type, fmt, val) {
            var idx = fmt.length - 1;
            while (fmt.charCodeAt(idx - 1) === 44)
              --idx;
            return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));
          }
          function write_num_exp(fmt, val) {
            var o;
            var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
            if (fmt.match(/^#+0.0E\+0$/)) {
              if (val == 0)
                return "0.0E+0";
              else if (val < 0)
                return "-" + write_num_exp(fmt, -val);
              var period = fmt.indexOf(".");
              if (period === -1)
                period = fmt.indexOf("E");
              var ee = Math.floor(Math.log(val) * Math.LOG10E) % period;
              if (ee < 0)
                ee += period;
              o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);
              if (o.indexOf("e") === -1) {
                var fakee = Math.floor(Math.log(val) * Math.LOG10E);
                if (o.indexOf(".") === -1)
                  o = o.charAt(0) + "." + o.substr(1) + "E+" + (fakee - o.length + ee);
                else
                  o += "E+" + (fakee - ee);
                while (o.substr(0, 2) === "0.") {
                  o = o.charAt(0) + o.substr(2, period) + "." + o.substr(2 + period);
                  o = o.replace(/^0+([1-9])/, "$1").replace(/^0+\./, "0.");
                }
                o = o.replace(/\+-/, "-");
              }
              o = o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/, function($$2, $1, $2, $3) {
                return $1 + $2 + $3.substr(0, (period + ee) % period) + "." + $3.substr(ee) + "E";
              });
            } else
              o = val.toExponential(idx);
            if (fmt.match(/E\+00$/) && o.match(/e[+-]\d$/))
              o = o.substr(0, o.length - 1) + "0" + o.charAt(o.length - 1);
            if (fmt.match(/E\-/) && o.match(/e\+/))
              o = o.replace(/e\+/, "e");
            return o.replace("e", "E");
          }
          var frac1 = /# (\?+)( ?)\/( ?)(\d+)/;
          function write_num_f1(r2, aval, sign) {
            var den = parseInt(r2[4], 10), rr = Math.round(aval * den), base = Math.floor(rr / den);
            var myn = rr - base * den, myd = den;
            return sign + (base === 0 ? "" : "" + base) + " " + (myn === 0 ? fill(" ", r2[1].length + 1 + r2[4].length) : pad_(myn, r2[1].length) + r2[2] + "/" + r2[3] + pad0(myd, r2[4].length));
          }
          function write_num_f2(r2, aval, sign) {
            return sign + (aval === 0 ? "" : "" + aval) + fill(" ", r2[1].length + 2 + r2[4].length);
          }
          var dec1 = /^#*0*\.([0#]+)/;
          var closeparen = /\).*[0#]/;
          var phone = /\(###\) ###\\?-####/;
          function hashq(str) {
            var o = "", cc;
            for (var i2 = 0; i2 != str.length; ++i2)
              switch (cc = str.charCodeAt(i2)) {
                case 35:
                  break;
                case 63:
                  o += " ";
                  break;
                case 48:
                  o += "0";
                  break;
                default:
                  o += String.fromCharCode(cc);
              }
            return o;
          }
          function rnd(val, d) {
            var dd = Math.pow(10, d);
            return "" + Math.round(val * dd) / dd;
          }
          function dec(val, d) {
            var _frac = val - Math.floor(val), dd = Math.pow(10, d);
            if (d < ("" + Math.round(_frac * dd)).length)
              return 0;
            return Math.round(_frac * dd);
          }
          function carry(val, d) {
            if (d < ("" + Math.round((val - Math.floor(val)) * Math.pow(10, d))).length) {
              return 1;
            }
            return 0;
          }
          function flr(val) {
            if (val < 2147483647 && val > -2147483648)
              return "" + (val >= 0 ? val | 0 : val - 1 | 0);
            return "" + Math.floor(val);
          }
          function write_num_flt(type, fmt, val) {
            if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {
              var ffmt = fmt.replace(/\( */, "").replace(/ \)/, "").replace(/\)/, "");
              if (val >= 0)
                return write_num_flt("n", ffmt, val);
              return "(" + write_num_flt("n", ffmt, -val) + ")";
            }
            if (fmt.charCodeAt(fmt.length - 1) === 44)
              return write_num_cm(type, fmt, val);
            if (fmt.indexOf("%") !== -1)
              return write_num_pct(type, fmt, val);
            if (fmt.indexOf("E") !== -1)
              return write_num_exp(fmt, val);
            if (fmt.charCodeAt(0) === 36)
              return "$" + write_num_flt(type, fmt.substr(fmt.charAt(1) == " " ? 2 : 1), val);
            var o;
            var r2, ri, ff, aval = Math.abs(val), sign = val < 0 ? "-" : "";
            if (fmt.match(/^00+$/))
              return sign + pad0r(aval, fmt.length);
            if (fmt.match(/^[#?]+$/)) {
              o = pad0r(val, 0);
              if (o === "0")
                o = "";
              return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;
            }
            if (r2 = fmt.match(frac1))
              return write_num_f1(r2, aval, sign);
            if (fmt.match(/^#+0+$/))
              return sign + pad0r(aval, fmt.length - fmt.indexOf("0"));
            if (r2 = fmt.match(dec1)) {
              o = rnd(val, r2[1].length).replace(/^([^\.]+)$/, "$1." + hashq(r2[1])).replace(/\.$/, "." + hashq(r2[1])).replace(/\.(\d*)$/, function($$2, $1) {
                return "." + $1 + fill("0", hashq(r2[1]).length - $1.length);
              });
              return fmt.indexOf("0.") !== -1 ? o : o.replace(/^0\./, ".");
            }
            fmt = fmt.replace(/^#+([0.])/, "$1");
            if (r2 = fmt.match(/^(0*)\.(#*)$/)) {
              return sign + rnd(aval, r2[2].length).replace(/\.(\d*[1-9])0*$/, ".$1").replace(/^(-?\d*)$/, "$1.").replace(/^0\./, r2[1].length ? "0." : ".");
            }
            if (r2 = fmt.match(/^#{1,3},##0(\.?)$/))
              return sign + commaify(pad0r(aval, 0));
            if (r2 = fmt.match(/^#,##0\.([#0]*0)$/)) {
              return val < 0 ? "-" + write_num_flt(type, fmt, -val) : commaify("" + (Math.floor(val) + carry(val, r2[1].length))) + "." + pad0(dec(val, r2[1].length), r2[1].length);
            }
            if (r2 = fmt.match(/^#,#*,#0/))
              return write_num_flt(type, fmt.replace(/^#,#*,/, ""), val);
            if (r2 = fmt.match(/^([0#]+)(\\?-([0#]+))+$/)) {
              o = _strrev(write_num_flt(type, fmt.replace(/[\\-]/g, ""), val));
              ri = 0;
              return _strrev(_strrev(fmt.replace(/\\/g, "")).replace(/[0#]/g, function(x2) {
                return ri < o.length ? o.charAt(ri++) : x2 === "0" ? "0" : "";
              }));
            }
            if (fmt.match(phone)) {
              o = write_num_flt(type, "##########", val);
              return "(" + o.substr(0, 3) + ") " + o.substr(3, 3) + "-" + o.substr(6);
            }
            var oa = "";
            if (r2 = fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/)) {
              ri = Math.min(r2[4].length, 7);
              ff = frac(aval, Math.pow(10, ri) - 1, false);
              o = "" + sign;
              oa = write_num("n", r2[1], ff[1]);
              if (oa.charAt(oa.length - 1) == " ")
                oa = oa.substr(0, oa.length - 1) + "0";
              o += oa + r2[2] + "/" + r2[3];
              oa = rpad_(ff[2], ri);
              if (oa.length < r2[4].length)
                oa = hashq(r2[4].substr(r2[4].length - oa.length)) + oa;
              o += oa;
              return o;
            }
            if (r2 = fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/)) {
              ri = Math.min(Math.max(r2[1].length, r2[4].length), 7);
              ff = frac(aval, Math.pow(10, ri) - 1, true);
              return sign + (ff[0] || (ff[1] ? "" : "0")) + " " + (ff[1] ? pad_(ff[1], ri) + r2[2] + "/" + r2[3] + rpad_(ff[2], ri) : fill(" ", 2 * ri + 1 + r2[2].length + r2[3].length));
            }
            if (r2 = fmt.match(/^[#0?]+$/)) {
              o = pad0r(val, 0);
              if (fmt.length <= o.length)
                return o;
              return hashq(fmt.substr(0, fmt.length - o.length)) + o;
            }
            if (r2 = fmt.match(/^([#0?]+)\.([#0]+)$/)) {
              o = "" + val.toFixed(Math.min(r2[2].length, 10)).replace(/([^0])0+$/, "$1");
              ri = o.indexOf(".");
              var lres = fmt.indexOf(".") - ri, rres = fmt.length - o.length - lres;
              return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));
            }
            if (r2 = fmt.match(/^00,000\.([#0]*0)$/)) {
              ri = dec(val, r2[1].length);
              return val < 0 ? "-" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\d,\d{3}$/, "0$&").replace(/^\d*$/, function($$2) {
                return "00," + ($$2.length < 3 ? pad0(0, 3 - $$2.length) : "") + $$2;
              }) + "." + pad0(ri, r2[1].length);
            }
            switch (fmt) {
              case "###,##0.00":
                return write_num_flt(type, "#,##0.00", val);
              case "###,###":
              case "##,###":
              case "#,###":
                var x = commaify(pad0r(aval, 0));
                return x !== "0" ? sign + x : "";
              case "###,###.00":
                return write_num_flt(type, "###,##0.00", val).replace(/^0\./, ".");
              case "#,###.00":
                return write_num_flt(type, "#,##0.00", val).replace(/^0\./, ".");
              default:
            }
            throw new Error("unsupported format |" + fmt + "|");
          }
          function write_num_cm2(type, fmt, val) {
            var idx = fmt.length - 1;
            while (fmt.charCodeAt(idx - 1) === 44)
              --idx;
            return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));
          }
          function write_num_pct2(type, fmt, val) {
            var sfmt = fmt.replace(pct1, ""), mul = fmt.length - sfmt.length;
            return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill("%", mul);
          }
          function write_num_exp2(fmt, val) {
            var o;
            var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
            if (fmt.match(/^#+0.0E\+0$/)) {
              if (val == 0)
                return "0.0E+0";
              else if (val < 0)
                return "-" + write_num_exp2(fmt, -val);
              var period = fmt.indexOf(".");
              if (period === -1)
                period = fmt.indexOf("E");
              var ee = Math.floor(Math.log(val) * Math.LOG10E) % period;
              if (ee < 0)
                ee += period;
              o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);
              if (!o.match(/[Ee]/)) {
                var fakee = Math.floor(Math.log(val) * Math.LOG10E);
                if (o.indexOf(".") === -1)
                  o = o.charAt(0) + "." + o.substr(1) + "E+" + (fakee - o.length + ee);
                else
                  o += "E+" + (fakee - ee);
                o = o.replace(/\+-/, "-");
              }
              o = o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/, function($$2, $1, $2, $3) {
                return $1 + $2 + $3.substr(0, (period + ee) % period) + "." + $3.substr(ee) + "E";
              });
            } else
              o = val.toExponential(idx);
            if (fmt.match(/E\+00$/) && o.match(/e[+-]\d$/))
              o = o.substr(0, o.length - 1) + "0" + o.charAt(o.length - 1);
            if (fmt.match(/E\-/) && o.match(/e\+/))
              o = o.replace(/e\+/, "e");
            return o.replace("e", "E");
          }
          function write_num_int(type, fmt, val) {
            if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {
              var ffmt = fmt.replace(/\( */, "").replace(/ \)/, "").replace(/\)/, "");
              if (val >= 0)
                return write_num_int("n", ffmt, val);
              return "(" + write_num_int("n", ffmt, -val) + ")";
            }
            if (fmt.charCodeAt(fmt.length - 1) === 44)
              return write_num_cm2(type, fmt, val);
            if (fmt.indexOf("%") !== -1)
              return write_num_pct2(type, fmt, val);
            if (fmt.indexOf("E") !== -1)
              return write_num_exp2(fmt, val);
            if (fmt.charCodeAt(0) === 36)
              return "$" + write_num_int(type, fmt.substr(fmt.charAt(1) == " " ? 2 : 1), val);
            var o;
            var r2, ri, ff, aval = Math.abs(val), sign = val < 0 ? "-" : "";
            if (fmt.match(/^00+$/))
              return sign + pad0(aval, fmt.length);
            if (fmt.match(/^[#?]+$/)) {
              o = "" + val;
              if (val === 0)
                o = "";
              return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;
            }
            if (r2 = fmt.match(frac1))
              return write_num_f2(r2, aval, sign);
            if (fmt.match(/^#+0+$/))
              return sign + pad0(aval, fmt.length - fmt.indexOf("0"));
            if (r2 = fmt.match(dec1)) {
              o = ("" + val).replace(/^([^\.]+)$/, "$1." + hashq(r2[1])).replace(/\.$/, "." + hashq(r2[1]));
              o = o.replace(/\.(\d*)$/, function($$2, $1) {
                return "." + $1 + fill("0", hashq(r2[1]).length - $1.length);
              });
              return fmt.indexOf("0.") !== -1 ? o : o.replace(/^0\./, ".");
            }
            fmt = fmt.replace(/^#+([0.])/, "$1");
            if (r2 = fmt.match(/^(0*)\.(#*)$/)) {
              return sign + ("" + aval).replace(/\.(\d*[1-9])0*$/, ".$1").replace(/^(-?\d*)$/, "$1.").replace(/^0\./, r2[1].length ? "0." : ".");
            }
            if (r2 = fmt.match(/^#{1,3},##0(\.?)$/))
              return sign + commaify("" + aval);
            if (r2 = fmt.match(/^#,##0\.([#0]*0)$/)) {
              return val < 0 ? "-" + write_num_int(type, fmt, -val) : commaify("" + val) + "." + fill("0", r2[1].length);
            }
            if (r2 = fmt.match(/^#,#*,#0/))
              return write_num_int(type, fmt.replace(/^#,#*,/, ""), val);
            if (r2 = fmt.match(/^([0#]+)(\\?-([0#]+))+$/)) {
              o = _strrev(write_num_int(type, fmt.replace(/[\\-]/g, ""), val));
              ri = 0;
              return _strrev(_strrev(fmt.replace(/\\/g, "")).replace(/[0#]/g, function(x2) {
                return ri < o.length ? o.charAt(ri++) : x2 === "0" ? "0" : "";
              }));
            }
            if (fmt.match(phone)) {
              o = write_num_int(type, "##########", val);
              return "(" + o.substr(0, 3) + ") " + o.substr(3, 3) + "-" + o.substr(6);
            }
            var oa = "";
            if (r2 = fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/)) {
              ri = Math.min(r2[4].length, 7);
              ff = frac(aval, Math.pow(10, ri) - 1, false);
              o = "" + sign;
              oa = write_num("n", r2[1], ff[1]);
              if (oa.charAt(oa.length - 1) == " ")
                oa = oa.substr(0, oa.length - 1) + "0";
              o += oa + r2[2] + "/" + r2[3];
              oa = rpad_(ff[2], ri);
              if (oa.length < r2[4].length)
                oa = hashq(r2[4].substr(r2[4].length - oa.length)) + oa;
              o += oa;
              return o;
            }
            if (r2 = fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/)) {
              ri = Math.min(Math.max(r2[1].length, r2[4].length), 7);
              ff = frac(aval, Math.pow(10, ri) - 1, true);
              return sign + (ff[0] || (ff[1] ? "" : "0")) + " " + (ff[1] ? pad_(ff[1], ri) + r2[2] + "/" + r2[3] + rpad_(ff[2], ri) : fill(" ", 2 * ri + 1 + r2[2].length + r2[3].length));
            }
            if (r2 = fmt.match(/^[#0?]+$/)) {
              o = "" + val;
              if (fmt.length <= o.length)
                return o;
              return hashq(fmt.substr(0, fmt.length - o.length)) + o;
            }
            if (r2 = fmt.match(/^([#0]+)\.([#0]+)$/)) {
              o = "" + val.toFixed(Math.min(r2[2].length, 10)).replace(/([^0])0+$/, "$1");
              ri = o.indexOf(".");
              var lres = fmt.indexOf(".") - ri, rres = fmt.length - o.length - lres;
              return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));
            }
            if (r2 = fmt.match(/^00,000\.([#0]*0)$/)) {
              return val < 0 ? "-" + write_num_int(type, fmt, -val) : commaify("" + val).replace(/^\d,\d{3}$/, "0$&").replace(/^\d*$/, function($$2) {
                return "00," + ($$2.length < 3 ? pad0(0, 3 - $$2.length) : "") + $$2;
              }) + "." + pad0(0, r2[1].length);
            }
            switch (fmt) {
              case "###,###":
              case "##,###":
              case "#,###":
                var x = commaify("" + aval);
                return x !== "0" ? sign + x : "";
              default:
                if (fmt.match(/\.[0#?]*$/))
                  return write_num_int(type, fmt.slice(0, fmt.lastIndexOf(".")), val) + hashq(fmt.slice(fmt.lastIndexOf(".")));
            }
            throw new Error("unsupported format |" + fmt + "|");
          }
          return function write_num2(type, fmt, val) {
            return (val | 0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);
          };
        }();
        function split_fmt(fmt) {
          var out = [];
          var in_str = false;
          for (var i2 = 0, j = 0; i2 < fmt.length; ++i2)
            switch (fmt.charCodeAt(i2)) {
              case 34:
                in_str = !in_str;
                break;
              case 95:
              case 42:
              case 92:
                ++i2;
                break;
              case 59:
                out[out.length] = fmt.substr(j, i2 - j);
                j = i2 + 1;
            }
          out[out.length] = fmt.substr(j);
          if (in_str === true)
            throw new Error("Format |" + fmt + "| unterminated string ");
          return out;
        }
        SSF2._split = split_fmt;
        var abstime = /\[[HhMmSs\u0E0A\u0E19\u0E17]*\]/;
        function fmt_is_date(fmt) {
          var i2 = 0, c2 = "", o = "";
          while (i2 < fmt.length) {
            switch (c2 = fmt.charAt(i2)) {
              case "G":
                if (isgeneral(fmt, i2))
                  i2 += 6;
                i2++;
                break;
              case '"':
                for (; fmt.charCodeAt(++i2) !== 34 && i2 < fmt.length; ) {
                }
                ++i2;
                break;
              case "\\":
                i2 += 2;
                break;
              case "_":
                i2 += 2;
                break;
              case "@":
                ++i2;
                break;
              case "B":
              case "b":
                if (fmt.charAt(i2 + 1) === "1" || fmt.charAt(i2 + 1) === "2")
                  return true;
              case "M":
              case "D":
              case "Y":
              case "H":
              case "S":
              case "E":
              case "m":
              case "d":
              case "y":
              case "h":
              case "s":
              case "e":
              case "g":
                return true;
              case "A":
              case "a":
              case "\u4E0A":
                if (fmt.substr(i2, 3).toUpperCase() === "A/P")
                  return true;
                if (fmt.substr(i2, 5).toUpperCase() === "AM/PM")
                  return true;
                if (fmt.substr(i2, 5).toUpperCase() === "\u4E0A\u5348/\u4E0B\u5348")
                  return true;
                ++i2;
                break;
              case "[":
                o = c2;
                while (fmt.charAt(i2++) !== "]" && i2 < fmt.length)
                  o += fmt.charAt(i2);
                if (o.match(abstime))
                  return true;
                break;
              case ".":
              case "0":
              case "#":
                while (i2 < fmt.length && ("0#?.,E+-%".indexOf(c2 = fmt.charAt(++i2)) > -1 || c2 == "\\" && fmt.charAt(i2 + 1) == "-" && "0#".indexOf(fmt.charAt(i2 + 2)) > -1)) {
                }
                break;
              case "?":
                while (fmt.charAt(++i2) === c2) {
                }
                break;
              case "*":
                ++i2;
                if (fmt.charAt(i2) == " " || fmt.charAt(i2) == "*")
                  ++i2;
                break;
              case "(":
              case ")":
                ++i2;
                break;
              case "1":
              case "2":
              case "3":
              case "4":
              case "5":
              case "6":
              case "7":
              case "8":
              case "9":
                while (i2 < fmt.length && "0123456789".indexOf(fmt.charAt(++i2)) > -1) {
                }
                break;
              case " ":
                ++i2;
                break;
              default:
                ++i2;
                break;
            }
          }
          return false;
        }
        SSF2.is_date = fmt_is_date;
        function eval_fmt(fmt, v, opts, flen) {
          var out = [], o = "", i2 = 0, c2 = "", lst = "t", dt, j, cc;
          var hr = "H";
          while (i2 < fmt.length) {
            switch (c2 = fmt.charAt(i2)) {
              case "G":
                if (!isgeneral(fmt, i2))
                  throw new Error("unrecognized character " + c2 + " in " + fmt);
                out[out.length] = {
                  t: "G",
                  v: "General"
                };
                i2 += 7;
                break;
              case '"':
                for (o = ""; (cc = fmt.charCodeAt(++i2)) !== 34 && i2 < fmt.length; )
                  o += String.fromCharCode(cc);
                out[out.length] = {
                  t: "t",
                  v: o
                };
                ++i2;
                break;
              case "\\":
                var w = fmt.charAt(++i2), t = w === "(" || w === ")" ? w : "t";
                out[out.length] = {
                  t,
                  v: w
                };
                ++i2;
                break;
              case "_":
                out[out.length] = {
                  t: "t",
                  v: " "
                };
                i2 += 2;
                break;
              case "@":
                out[out.length] = {
                  t: "T",
                  v
                };
                ++i2;
                break;
              case "B":
              case "b":
                if (fmt.charAt(i2 + 1) === "1" || fmt.charAt(i2 + 1) === "2") {
                  if (dt == null) {
                    dt = parse_date_code(v, opts, fmt.charAt(i2 + 1) === "2");
                    if (dt == null)
                      return "";
                  }
                  out[out.length] = {
                    t: "X",
                    v: fmt.substr(i2, 2)
                  };
                  lst = c2;
                  i2 += 2;
                  break;
                }
              case "M":
              case "D":
              case "Y":
              case "H":
              case "S":
              case "E":
                c2 = c2.toLowerCase();
              case "m":
              case "d":
              case "y":
              case "h":
              case "s":
              case "e":
              case "g":
                if (v < 0)
                  return "";
                if (dt == null) {
                  dt = parse_date_code(v, opts);
                  if (dt == null)
                    return "#####";
                }
                o = c2;
                while (++i2 < fmt.length && fmt.charAt(i2).toLowerCase() === c2)
                  o += c2;
                if (c2 === "m" && lst.toLowerCase() === "h")
                  c2 = "M";
                if (c2 === "h")
                  c2 = hr;
                out[out.length] = {
                  t: c2,
                  v: o
                };
                lst = c2;
                break;
              case "A":
              case "a":
              case "\u4E0A":
                var q = {
                  t: c2,
                  v: c2
                };
                if (dt == null)
                  dt = parse_date_code(v, opts);
                if (fmt.substr(i2, 3).toUpperCase() === "A/P") {
                  if (dt != null)
                    q.v = dt.H >= 12 ? "P" : "A";
                  q.t = "T";
                  hr = "h";
                  i2 += 3;
                } else if (fmt.substr(i2, 5).toUpperCase() === "AM/PM") {
                  if (dt != null)
                    q.v = dt.H >= 12 ? "PM" : "AM";
                  q.t = "T";
                  i2 += 5;
                  hr = "h";
                } else if (fmt.substr(i2, 5).toUpperCase() === "\u4E0A\u5348/\u4E0B\u5348") {
                  if (dt != null)
                    q.v = dt.H >= 12 ? "\u4E0B\u5348" : "\u4E0A\u5348";
                  q.t = "T";
                  i2 += 5;
                  hr = "h";
                } else {
                  q.t = "t";
                  ++i2;
                }
                if (dt == null && q.t === "T")
                  return "";
                out[out.length] = q;
                lst = c2;
                break;
              case "[":
                o = c2;
                while (fmt.charAt(i2++) !== "]" && i2 < fmt.length)
                  o += fmt.charAt(i2);
                if (o.slice(-1) !== "]")
                  throw 'unterminated "[" block: |' + o + "|";
                if (o.match(abstime)) {
                  if (dt == null) {
                    dt = parse_date_code(v, opts);
                    if (dt == null)
                      return "";
                  }
                  out[out.length] = {
                    t: "Z",
                    v: o.toLowerCase()
                  };
                  lst = o.charAt(1);
                } else if (o.indexOf("$") > -1) {
                  o = (o.match(/\$([^-\[\]]*)/) || [])[1] || "$";
                  if (!fmt_is_date(fmt))
                    out[out.length] = {
                      t: "t",
                      v: o
                    };
                }
                break;
              case ".":
                if (dt != null) {
                  o = c2;
                  while (++i2 < fmt.length && (c2 = fmt.charAt(i2)) === "0")
                    o += c2;
                  out[out.length] = {
                    t: "s",
                    v: o
                  };
                  break;
                }
              case "0":
              case "#":
                o = c2;
                while (++i2 < fmt.length && "0#?.,E+-%".indexOf(c2 = fmt.charAt(i2)) > -1)
                  o += c2;
                out[out.length] = {
                  t: "n",
                  v: o
                };
                break;
              case "?":
                o = c2;
                while (fmt.charAt(++i2) === c2)
                  o += c2;
                out[out.length] = {
                  t: c2,
                  v: o
                };
                lst = c2;
                break;
              case "*":
                ++i2;
                if (fmt.charAt(i2) == " " || fmt.charAt(i2) == "*")
                  ++i2;
                break;
              case "(":
              case ")":
                out[out.length] = {
                  t: flen === 1 ? "t" : c2,
                  v: c2
                };
                ++i2;
                break;
              case "1":
              case "2":
              case "3":
              case "4":
              case "5":
              case "6":
              case "7":
              case "8":
              case "9":
                o = c2;
                while (i2 < fmt.length && "0123456789".indexOf(fmt.charAt(++i2)) > -1)
                  o += fmt.charAt(i2);
                out[out.length] = {
                  t: "D",
                  v: o
                };
                break;
              case " ":
                out[out.length] = {
                  t: c2,
                  v: c2
                };
                ++i2;
                break;
              case "$":
                out[out.length] = {
                  t: "t",
                  v: "$"
                };
                ++i2;
                break;
              default:
                if ("\xA4\u0E3FBsBr\u20B5\u20A1\u20AB\u0192FtRs.\u20ADkr\xA3\u20A4Lm\u20A5\u20A6\u20B1PQRSkRp\u09F2\u09F3R$S/.\u3012\u20AE\u20A9\xA5NT\uFFE5z\u0142\u20B4\u20AA\u17DB\u0440\u0443\u0431\u20AC\uFF04,$-+/():!^&'~{}<>=\u20ACacfijklopqrtuvwxzP$\uFFE5LekdinAf$dhAflRial?\uFFE1BirrKzMOPPGKRsGsB/R$\u0440\u0440levkrKMzBsPNuFBuKPkrRD$NfkCFA?CVEGMDFrCDHTGNAfLFdjKGSFGGHSRielKCFknKshLSLL\uFFE1LtRFRONArRfMWKRMMURsMROS/KMDLMTnRC$kr\u20ACGELCHFSLLSCRDbSZLSDGSOSSomFCFPTShT$VUVQUGX\u0433\u0440\u043DsomWSTNT$FtDramRpZMWFCFA".indexOf(c2) === -1)
                  throw new Error("unrecognized character " + c2 + " in " + fmt);
                out[out.length] = {
                  t: "t",
                  v: c2
                };
                ++i2;
                break;
            }
          }
          var bt = 0, ss0 = 0, ssm;
          for (i2 = out.length - 1, lst = "t"; i2 >= 0; --i2) {
            switch (out[i2].t) {
              case "h":
              case "H":
                out[i2].t = hr;
                lst = "h";
                if (bt < 1)
                  bt = 1;
                break;
              case "s":
                if (ssm = out[i2].v.match(/\.0+$/))
                  ss0 = Math.max(ss0, ssm[0].length - 1);
                if (bt < 3)
                  bt = 3;
              case "d":
              case "y":
              case "M":
              case "e":
                lst = out[i2].t;
                break;
              case "m":
                if (lst === "s") {
                  out[i2].t = "M";
                  if (bt < 2)
                    bt = 2;
                }
                break;
              case "X":
                break;
              case "Z":
                if (bt < 1 && out[i2].v.match(/[Hh]/))
                  bt = 1;
                if (bt < 2 && out[i2].v.match(/[Mm]/))
                  bt = 2;
                if (bt < 3 && out[i2].v.match(/[Ss]/))
                  bt = 3;
            }
          }
          switch (bt) {
            case 0:
              break;
            case 1:
              if (dt.u >= 0.5) {
                dt.u = 0;
                ++dt.S;
              }
              if (dt.S >= 60) {
                dt.S = 0;
                ++dt.M;
              }
              if (dt.M >= 60) {
                dt.M = 0;
                ++dt.H;
              }
              break;
            case 2:
              if (dt.u >= 0.5) {
                dt.u = 0;
                ++dt.S;
              }
              if (dt.S >= 60) {
                dt.S = 0;
                ++dt.M;
              }
              break;
          }
          var nstr = "", jj;
          for (i2 = 0; i2 < out.length; ++i2) {
            switch (out[i2].t) {
              case "t":
              case "T":
              case " ":
              case "D":
                break;
              case "X":
                out[i2].v = "";
                out[i2].t = ";";
                break;
              case "d":
              case "m":
              case "y":
              case "h":
              case "H":
              case "M":
              case "s":
              case "e":
              case "b":
              case "Z":
                out[i2].v = write_date(out[i2].t.charCodeAt(0), out[i2].v, dt, ss0);
                out[i2].t = "t";
                break;
              case "n":
              case "?":
                jj = i2 + 1;
                while (out[jj] != null && ((c2 = out[jj].t) === "?" || c2 === "D" || (c2 === " " || c2 === "t") && out[jj + 1] != null && (out[jj + 1].t === "?" || out[jj + 1].t === "t" && out[jj + 1].v === "/") || out[i2].t === "(" && (c2 === " " || c2 === "n" || c2 === ")") || c2 === "t" && (out[jj].v === "/" || out[jj].v === " " && out[jj + 1] != null && out[jj + 1].t == "?"))) {
                  out[i2].v += out[jj].v;
                  out[jj] = {
                    v: "",
                    t: ";"
                  };
                  ++jj;
                }
                nstr += out[i2].v;
                i2 = jj - 1;
                break;
              case "G":
                out[i2].t = "t";
                out[i2].v = general_fmt(v, opts);
                break;
            }
          }
          var vv = "", myv, ostr;
          if (nstr.length > 0) {
            if (nstr.charCodeAt(0) == 40) {
              myv = v < 0 && nstr.charCodeAt(0) === 45 ? -v : v;
              ostr = write_num("n", nstr, myv);
            } else {
              myv = v < 0 && flen > 1 ? -v : v;
              ostr = write_num("n", nstr, myv);
              if (myv < 0 && out[0] && out[0].t == "t") {
                ostr = ostr.substr(1);
                out[0].v = "-" + out[0].v;
              }
            }
            jj = ostr.length - 1;
            var decpt = out.length;
            for (i2 = 0; i2 < out.length; ++i2)
              if (out[i2] != null && out[i2].t != "t" && out[i2].v.indexOf(".") > -1) {
                decpt = i2;
                break;
              }
            var lasti = out.length;
            if (decpt === out.length && ostr.indexOf("E") === -1) {
              for (i2 = out.length - 1; i2 >= 0; --i2) {
                if (out[i2] == null || "n?".indexOf(out[i2].t) === -1)
                  continue;
                if (jj >= out[i2].v.length - 1) {
                  jj -= out[i2].v.length;
                  out[i2].v = ostr.substr(jj + 1, out[i2].v.length);
                } else if (jj < 0)
                  out[i2].v = "";
                else {
                  out[i2].v = ostr.substr(0, jj + 1);
                  jj = -1;
                }
                out[i2].t = "t";
                lasti = i2;
              }
              if (jj >= 0 && lasti < out.length)
                out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;
            } else if (decpt !== out.length && ostr.indexOf("E") === -1) {
              jj = ostr.indexOf(".") - 1;
              for (i2 = decpt; i2 >= 0; --i2) {
                if (out[i2] == null || "n?".indexOf(out[i2].t) === -1)
                  continue;
                j = out[i2].v.indexOf(".") > -1 && i2 === decpt ? out[i2].v.indexOf(".") - 1 : out[i2].v.length - 1;
                vv = out[i2].v.substr(j + 1);
                for (; j >= 0; --j) {
                  if (jj >= 0 && (out[i2].v.charAt(j) === "0" || out[i2].v.charAt(j) === "#"))
                    vv = ostr.charAt(jj--) + vv;
                }
                out[i2].v = vv;
                out[i2].t = "t";
                lasti = i2;
              }
              if (jj >= 0 && lasti < out.length)
                out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;
              jj = ostr.indexOf(".") + 1;
              for (i2 = decpt; i2 < out.length; ++i2) {
                if (out[i2] == null || "n?(".indexOf(out[i2].t) === -1 && i2 !== decpt)
                  continue;
                j = out[i2].v.indexOf(".") > -1 && i2 === decpt ? out[i2].v.indexOf(".") + 1 : 0;
                vv = out[i2].v.substr(0, j);
                for (; j < out[i2].v.length; ++j) {
                  if (jj < ostr.length)
                    vv += ostr.charAt(jj++);
                }
                out[i2].v = vv;
                out[i2].t = "t";
                lasti = i2;
              }
            }
          }
          for (i2 = 0; i2 < out.length; ++i2)
            if (out[i2] != null && "n?".indexOf(out[i2].t) > -1) {
              myv = flen > 1 && v < 0 && i2 > 0 && out[i2 - 1].v === "-" ? -v : v;
              out[i2].v = write_num(out[i2].t, out[i2].v, myv);
              out[i2].t = "t";
            }
          var retval = "";
          for (i2 = 0; i2 !== out.length; ++i2)
            if (out[i2] != null)
              retval += out[i2].v;
          return retval;
        }
        SSF2._eval = eval_fmt;
        var cfregex = /\[[=<>]/;
        var cfregex2 = /\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;
        function chkcond(v, rr) {
          if (rr == null)
            return false;
          var thresh = parseFloat(rr[2]);
          switch (rr[1]) {
            case "=":
              if (v == thresh)
                return true;
              break;
            case ">":
              if (v > thresh)
                return true;
              break;
            case "<":
              if (v < thresh)
                return true;
              break;
            case "<>":
              if (v != thresh)
                return true;
              break;
            case ">=":
              if (v >= thresh)
                return true;
              break;
            case "<=":
              if (v <= thresh)
                return true;
              break;
          }
          return false;
        }
        function choose_fmt(f, v) {
          var fmt = split_fmt(f);
          var l = fmt.length, lat = fmt[l - 1].indexOf("@");
          if (l < 4 && lat > -1)
            --l;
          if (fmt.length > 4)
            throw new Error("cannot find right format for |" + fmt.join("|") + "|");
          if (typeof v !== "number")
            return [4, fmt.length === 4 || lat > -1 ? fmt[fmt.length - 1] : "@"];
          switch (fmt.length) {
            case 1:
              fmt = lat > -1 ? ["General", "General", "General", fmt[0]] : [fmt[0], fmt[0], fmt[0], "@"];
              break;
            case 2:
              fmt = lat > -1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], "@"];
              break;
            case 3:
              fmt = lat > -1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], "@"];
              break;
            case 4:
              break;
          }
          var ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];
          if (fmt[0].indexOf("[") === -1 && fmt[1].indexOf("[") === -1)
            return [l, ff];
          if (fmt[0].match(cfregex) != null || fmt[1].match(cfregex) != null) {
            var m1 = fmt[0].match(cfregex2);
            var m2 = fmt[1].match(cfregex2);
            return chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];
          }
          return [l, ff];
        }
        function format(fmt, v, o) {
          if (o == null)
            o = {};
          var sfmt = "";
          switch (typeof fmt) {
            case "string":
              if (fmt == "m/d/yy" && o.dateNF)
                sfmt = o.dateNF;
              else
                sfmt = fmt;
              break;
            case "number":
              if (fmt == 14 && o.dateNF)
                sfmt = o.dateNF;
              else
                sfmt = (o.table != null ? o.table : table_fmt)[fmt];
              if (sfmt == null)
                sfmt = o.table && o.table[default_map[fmt]] || table_fmt[default_map[fmt]];
              if (sfmt == null)
                sfmt = default_str[fmt] || "General";
              break;
          }
          var reg = /^(w|W)((0?)|(0\.0+))$/;
          if (!!sfmt.match(reg)) {
            if (isNaN(v)) {
              return v;
            }
            var acc = sfmt.slice(1);
            var isNegative = false;
            if (!isNaN(v) && Number(v) < 0) {
              isNegative = true;
              v = Math.abs(v);
            }
            var vInt = parseInt(v);
            var vlength = vInt.toString().length;
            if (vlength > 4) {
              if (vlength > 8) {
                var y = parseInt(v / 1e8);
                var w = parseInt(parseFloat(v).subtract(y * 1e8) / 1e4);
                var q = parseFloat(v).subtract(y * 1e8 + w * 1e4);
                if (acc != "") {
                  q = (0, import_numeral.default)(q).format(acc);
                }
                v = y + "\u4EBF" + w + "\u4E07" + q;
              } else {
                var w = parseInt(v / 1e4);
                var q = parseFloat(v).subtract(w * 1e4);
                if (acc != "") {
                  q = (0, import_numeral.default)(q).format(acc);
                }
                v = w + "\u4E07" + q;
              }
              if (v.indexOf("\u4EBF0\u4E070") != -1) {
                v = v.replace("0\u4E070", "");
              } else if (v.indexOf("\u4EBF0\u4E07") != -1) {
                v = v.replace("0\u4E07", "");
              } else if (v.indexOf("\u4E070") != -1) {
                v = v.replace("\u4E070", "\u4E07");
              }
              if (v.indexOf("\u4EBF") != -1 && v.indexOf("\u4E07") == -1) {
                var afterYi = v.substring(v.indexOf("\u4EBF") + 1);
                if (afterYi.substring(0, 1) !== "." && afterYi != "") {
                  switch ((parseInt(afterYi) + "").length) {
                    case 1:
                      afterYi = "000" + afterYi;
                      break;
                    case 2:
                      afterYi = "00" + afterYi;
                      break;
                    case 3:
                      afterYi = "0" + afterYi;
                      break;
                  }
                  v = v.substring(0, v.indexOf("\u4EBF") + 1) + afterYi;
                }
              } else if (v.indexOf("\u4EBF") == -1 && v.indexOf("\u4E07") != -1) {
                var afterWan = v.substring(v.indexOf("\u4E07") + 1);
                if (afterWan.substring(0, 1) !== "." && afterWan != "") {
                  switch ((parseInt(afterWan) + "").length) {
                    case 1:
                      afterWan = "000" + afterWan;
                      break;
                    case 2:
                      afterWan = "00" + afterWan;
                      break;
                    case 3:
                      afterWan = "0" + afterWan;
                      break;
                  }
                  v = v.substring(0, v.indexOf("\u4E07") + 1) + afterWan;
                }
              } else if (v.indexOf("\u4EBF") != -1 && v.indexOf("\u4E07") != -1) {
                var afterYi = v.substring(v.indexOf("\u4EBF") + 1, v.indexOf("\u4E07")), afterWan = v.substring(v.indexOf("\u4E07") + 1);
                switch ((parseInt(afterYi) + "").length) {
                  case 1:
                    afterYi = "000" + afterYi;
                    break;
                  case 2:
                    afterYi = "00" + afterYi;
                    break;
                  case 3:
                    afterYi = "0" + afterYi;
                    break;
                }
                v = v.substring(0, v.indexOf("\u4EBF") + 1) + afterYi + v.substring(v.indexOf("\u4E07"));
                if (afterWan.substring(0, 1) !== "." && afterWan != "") {
                  switch ((parseInt(afterWan) + "").length) {
                    case 1:
                      afterWan = "000" + afterWan;
                      break;
                    case 2:
                      afterWan = "00" + afterWan;
                      break;
                    case 3:
                      afterWan = "0" + afterWan;
                      break;
                  }
                  v = v.substring(0, v.indexOf("\u4E07") + 1) + afterWan;
                }
              }
            } else {
              if (acc != "") {
                v = (0, import_numeral.default)(v).format(acc);
              }
            }
            if (isNegative) {
              return "-" + v;
            } else {
              return v;
            }
          }
          if (isgeneral(sfmt, 0))
            return general_fmt(v, o);
          if (v instanceof Date)
            v = datenum_local2(v, o.date1904);
          var f = choose_fmt(sfmt, v);
          if (isgeneral(f[1]))
            return general_fmt(v, o);
          if (v === true)
            v = "TRUE";
          else if (v === false)
            v = "FALSE";
          else if (v === "" || v == null)
            return "";
          return eval_fmt(f[1], v, o, f[0]);
        }
        function load_entry(fmt, idx) {
          if (typeof idx != "number") {
            idx = +idx || -1;
            for (var i2 = 0; i2 < 392; ++i2) {
              if (table_fmt[i2] == void 0) {
                if (idx < 0)
                  idx = i2;
                continue;
              }
              if (table_fmt[i2] == fmt) {
                idx = i2;
                break;
              }
            }
            if (idx < 0)
              idx = 391;
          }
          table_fmt[idx] = fmt;
          return idx;
        }
        SSF2.load = load_entry;
        SSF2._table = table_fmt;
        SSF2.get_table = function get_table() {
          return table_fmt;
        };
        SSF2.load_table = function load_table(tbl) {
          for (var i2 = 0; i2 != 392; ++i2)
            if (tbl[i2] !== void 0)
              load_entry(tbl[i2], i2);
        };
        SSF2.init_table = init_table;
        SSF2.format = format;
      };
      make_ssf(SSF);
      XLMLFormatMap = {
        "General Number": "General",
        "General Date": SSF._table[22],
        "Long Date": "dddd, mmmm dd, yyyy",
        "Medium Date": SSF._table[15],
        "Short Date": SSF._table[14],
        "Long Time": SSF._table[19],
        "Medium Time": SSF._table[18],
        "Short Time": SSF._table[20],
        "Currency": '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',
        "Fixed": SSF._table[2],
        "Standard": SSF._table[4],
        "Percent": SSF._table[10],
        "Scientific": SSF._table[11],
        "Yes/No": '"Yes";"Yes";"No";@',
        "True/False": '"True";"True";"False";@',
        "On/Off": '"Yes";"Yes";"No";@'
      };
      unescapexml = function() {
        var encregex = /&(?:quot|apos|gt|lt|amp|#x?([\da-fA-F]+));/g, coderegex = /_x([\da-fA-F]{4})_/g;
        return function unescapexml2(text) {
          var s = text + "", i2 = s.indexOf("<![CDATA[");
          if (i2 == -1)
            return s.replace(encregex, function($$2, $1) {
              return encodings[$$2] || String.fromCharCode(parseInt($1, $$2.indexOf("x") > -1 ? 16 : 10)) || $$2;
            }).replace(coderegex, function(m, c2) {
              return String.fromCharCode(parseInt(c2, 16));
            });
          var j = s.indexOf("]]>");
          return unescapexml2(s.slice(0, i2)) + s.slice(i2 + 9, j) + unescapexml2(s.slice(j + 3));
        };
      }();
      basedate = new Date(1899, 11, 31, 0, 0, 0);
      dnthresh = basedate.getTime();
      base1904 = new Date(1900, 2, 1, 0, 0, 0);
      good_pd_date = new Date("2017-02-19T19:06:09.000Z");
      if (isNaN(good_pd_date.getFullYear()))
        good_pd_date = new Date("2/19/17");
      good_pd = good_pd_date.getFullYear() == 2017;
    }
  });

  // src/global/setdata.js
  function setcellvalue(r2, c2, d, v) {
    if (d == null) {
      d = store_default.flowdata;
    }
    let cell = d[r2][c2];
    let vupdate;
    if (getObjType(v) == "object") {
      if (cell == null) {
        cell = v;
      } else {
        if (v.f != null) {
          cell.f = v.f;
        } else if (cell.hasOwnProperty("f")) {
          delete cell.f;
        }
        if (v.spl != null) {
          cell.spl = v.spl;
        }
        if (v.ct != null) {
          cell.ct = v.ct;
        }
      }
      if (getObjType(v.v) == "object") {
        vupdate = v.v.v;
      } else {
        vupdate = v.v;
      }
    } else {
      vupdate = v;
    }
    if (isRealNull(vupdate)) {
      if (getObjType(cell) == "object") {
        delete cell.m;
        delete cell.v;
      } else {
        cell = null;
      }
      d[r2][c2] = cell;
      return;
    }
    if (isRealNull(cell) || (getObjType(cell) === "string" || getObjType(cell) === "number") && cell === v) {
      cell = {};
    }
    let vupdateStr = vupdate.toString();
    if (vupdateStr.substr(0, 1) == "'") {
      cell.m = vupdateStr.substr(1);
      cell.ct = {"fa": "@", "t": "s"};
      cell.v = vupdateStr.substr(1);
      cell.qp = 1;
    } else if (cell.qp == 1) {
      cell.m = vupdateStr;
      cell.ct = {"fa": "@", "t": "s"};
      cell.v = vupdateStr;
    } else if (vupdateStr.toUpperCase() === "TRUE") {
      cell.m = "TRUE";
      cell.ct = {"fa": "General", "t": "b"};
      cell.v = true;
    } else if (vupdateStr.toUpperCase() === "FALSE") {
      cell.m = "FALSE";
      cell.ct = {"fa": "General", "t": "b"};
      cell.v = false;
    } else if (vupdateStr.substr(-1) === "%" && isRealNum(vupdateStr.substring(0, vupdateStr.length - 1))) {
      cell.ct = {fa: "0%", t: "n"};
      cell.v = vupdateStr.substring(0, vupdateStr.length - 1) / 100;
      cell.m = vupdate;
    } else if (valueIsError(vupdate)) {
      cell.m = vupdateStr;
      if (cell.ct != null) {
        cell.ct.t = "e";
      } else {
        cell.ct = {"fa": "General", "t": "e"};
      }
      cell.v = vupdate;
    } else {
      if (cell.f != null && isRealNum(vupdate) && !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(vupdate)) {
        cell.v = parseFloat(vupdate);
        if (cell.ct == null) {
          cell.ct = {"fa": "General", "t": "n"};
        }
        if (cell.v == Infinity || cell.v == -Infinity) {
          cell.m = cell.v.toString();
        } else {
          if (cell.v.toString().indexOf("e") > -1) {
            let len;
            if (cell.v.toString().split(".").length == 1) {
              len = 0;
            } else {
              len = cell.v.toString().split(".")[1].split("e")[0].length;
            }
            if (len > 5) {
              len = 5;
            }
            cell.m = cell.v.toExponential(len).toString();
          } else {
            let v_p = Math.round(cell.v * 1e9) / 1e9;
            if (cell.ct == null) {
              let mask = genarate(v_p);
              cell.m = mask[0].toString();
            } else {
              let mask = update(cell.ct.fa, v_p);
              cell.m = mask.toString();
            }
          }
        }
      } else if (cell.ct != null && cell.ct.fa == "@") {
        cell.m = vupdateStr;
        cell.v = vupdate;
      } else if (cell.ct != null && cell.ct.fa != null && cell.ct.fa != "General") {
        if (isRealNum(vupdate)) {
          vupdate = parseFloat(vupdate);
        }
        let mask = update(cell.ct.fa, vupdate);
        if (mask === vupdate) {
          mask = genarate(vupdate);
          cell.m = mask[0].toString();
          cell.ct = mask[1];
          cell.v = mask[2];
        } else {
          cell.m = mask.toString();
          cell.v = vupdate;
        }
      } else {
        if (isRealNum(vupdate) && !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(vupdate)) {
          if (typeof vupdate === "string") {
            let flag = vupdate.split("").every((ele) => ele == "0" || ele == ".");
            if (flag) {
              vupdate = parseFloat(vupdate);
            }
          }
          cell.v = vupdate;
          cell.ct = {"fa": "General", "t": "n"};
          if (cell.v == Infinity || cell.v == -Infinity) {
            cell.m = cell.v.toString();
          } else {
            let mask = genarate(cell.v);
            cell.m = mask[0].toString();
          }
        } else {
          let mask = genarate(vupdate);
          cell.m = mask[0].toString();
          cell.ct = mask[1];
          cell.v = mask[2];
        }
      }
    }
    if (!server_default.allowUpdate && !luckysheetConfigsetting_default.pointEdit) {
      if (cell.ct != null && /^(w|W)((0?)|(0\.0+))$/.test(cell.ct.fa) == false && cell.ct.t == "n" && cell.v != null && parseInt(cell.v).toString().length > 4) {
        let autoFormatw = luckysheetConfigsetting_default.autoFormatw.toString().toUpperCase();
        let accuracy = luckysheetConfigsetting_default.accuracy;
        let sfmt = setAccuracy(autoFormatw, accuracy);
        if (sfmt != "General") {
          cell.ct.fa = sfmt;
          cell.m = update(sfmt, cell.v);
        }
      }
    }
    d[r2][c2] = cell;
  }
  function setAccuracy(autoFormatw, accuracy) {
    let acc = "0.";
    let fmt;
    if (autoFormatw == "TRUE") {
      if (accuracy == void 0) {
        return "w";
      } else {
        let alength = parseInt(accuracy);
        if (alength == 0) {
          return "w0";
        } else {
          acc = "w0.";
          for (let i2 = 0; i2 < alength; i2++) {
            acc += "0";
          }
          fmt = acc;
        }
      }
    } else {
      if (accuracy == void 0) {
        return "General";
      } else {
        let alength = parseInt(accuracy);
        if (alength == 0) {
          return "0";
        } else {
          for (let i2 = 0; i2 < alength; i2++) {
            acc += "0";
          }
          fmt = acc;
        }
      }
    }
    return fmt.toString();
  }
  var init_setdata = __esm({
    "src/global/setdata.js"() {
      init_util();
      init_validate();
      init_format();
      init_server();
      init_luckysheetConfigsetting();
      init_store();
    }
  });

  // src/global/count.js
  function countfunc() {
    if (store_default.luckysheet_select_save.length == 0) {
      return;
    }
    let min = Infinity, max = -Infinity, sum = 0, count = 0, mean = 0;
    for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
      let data = getdatabyselectionNoCopy(store_default.luckysheet_select_save[s]);
      for (let r2 = 0; r2 < data.length; r2++) {
        for (let c2 = 0; c2 < data[0].length; c2++) {
          if (isRealNull(data[r2][c2])) {
            continue;
          }
          count++;
          if (data[r2][c2].ct != null && data[r2][c2].ct.t == "d") {
            continue;
          }
          let value = data[r2][c2].v;
          if (!isRealNum(value)) {
            continue;
          }
          value = parseFloat(value);
          sum += value;
          if (value < min) {
            min = value;
          }
          if (value > max) {
            max = value;
          }
        }
      }
    }
    let locale_formula = locale_default().formula;
    let ret = "";
    ret += "<span>" + locale_formula.count + ":" + count + "</span>";
    if (isFinite(max) || isFinite(min)) {
      ret += "<span>" + locale_formula.sum + ":" + update("w", sum) + "</span>";
      ret += "<span>" + locale_formula.average + ":" + update("w", Math.round(sum / count * 1e4) / 1e4) + "</span>";
    }
    if (isFinite(max)) {
      ret += "<span>" + locale_formula.max + ":" + update("w", max) + "</span>";
    }
    if (isFinite(min)) {
      ret += "<span>" + locale_formula.min + ":" + update("w", min) + "</span>";
    }
    $("#luckysheet-sta-content").html(ret);
  }
  var init_count = __esm({
    "src/global/count.js"() {
      init_store();
      init_getdata();
      init_validate();
      init_format();
      init_locale();
    }
  });

  // src/controllers/sheetMove.js
  function luckysheetMoveEndCell(postion, type, isScroll, terminal, onlyvalue) {
    if (isScroll == null) {
      isScroll = true;
    }
    if (!postion) {
      postion = "down";
    }
    if (!type) {
      type = "cell";
    }
    if (onlyvalue == null) {
      onlyvalue = false;
    }
    let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
    let curR = last["row"] == null ? 0 : last["row"][0];
    let curC = last["column"] == null ? 0 : last["column"][0];
    let startR = last["row"] == null ? 0 : last["row"][0];
    let startC = last["column"] == null ? 0 : last["column"][0];
    let endR = last["row"] == null ? 0 : last["row"][1];
    let endC = last["column"] == null ? 0 : last["column"][1];
    formula_default.fucntionboxshow(curR, curC);
    if (type == "range") {
      var p_startR = store_default.luckysheet_shiftpositon["row"][0];
      var p_startC = store_default.luckysheet_shiftpositon["column"][0];
      let p_endR2 = store_default.luckysheet_shiftpositon["row"][1];
      let p_endC2 = store_default.luckysheet_shiftpositon["column"][1];
      if (postion == "down" || postion == "up") {
        if (p_endR2 < endR) {
          curR = last["row"] == null ? 0 : last["row"][1];
        } else if (p_startR > startR) {
          curR = last["row"] == null ? 0 : last["row"][0];
        } else if (p_endR2 == endR && p_startR == startR) {
          if (postion == "down") {
            curR = last["row"] == null ? 0 : last["row"][1];
          } else {
            curR = last["row"] == null ? 0 : last["row"][0];
          }
        }
      } else if (postion == "right" || postion == "left") {
        if (p_endC2 < endC) {
          curC = last["column"] == null ? 0 : last["column"][1];
        } else if (p_startC > startC) {
          curC = last["column"] == null ? 0 : last["column"][0];
        } else if (p_endC2 == endC && p_startC == startC) {
          if (postion == "right") {
            curC = last["column"] == null ? 0 : last["column"][1];
          } else {
            curC = last["column"] == null ? 0 : last["column"][0];
          }
        }
      }
    }
    let datarowlen = store_default.flowdata.length, datacolumnlen = store_default.flowdata[0].length;
    let data = store_default.flowdata, moveP = "", moveV = 0;
    if (postion == "up") {
      if (curR == 0) {
        return;
      } else {
        let stvalue = [], p = null, i2 = 0, p_pre = null;
        for (let c2 = startC; c2 <= endC; c2++) {
          stvalue = [];
          i2 = 0;
          for (let r2 = curR - 1; r2 >= 0; r2--) {
            let cell = data[r2][c2];
            if (getObjType(cell) == "object" && isRealNull(cell.v)) {
              stvalue.push(false);
            } else if (isRealNull(cell)) {
              stvalue.push(false);
            } else {
              stvalue.push(true);
            }
            if (stvalue.length > 1) {
              if (stvalue[i2] == true && stvalue[i2 - 1] == false) {
                p = r2;
                break;
              } else if (stvalue[i2] == false && stvalue[i2 - 1] == true) {
                p = r2 + 1;
                break;
              }
            }
            i2++;
          }
          if (p == null) {
            p = 0;
          }
          if (p_pre == null || p < p_pre) {
            p_pre = p;
          }
        }
        moveP = "down";
        moveV = p_pre - curR;
      }
    } else if (postion == "down") {
      if (curR == datarowlen - 1) {
        return;
      } else {
        let stvalue = [], p = null, i2 = 0, p_pre = null;
        for (let c2 = startC; c2 <= endC; c2++) {
          stvalue = [];
          i2 = 0;
          for (let r2 = curR + 1; r2 < data.length; r2++) {
            let cell = data[r2][c2];
            if (getObjType(cell) == "object" && isRealNull(cell.v)) {
              stvalue.push(false);
            } else if (isRealNull(cell)) {
              stvalue.push(false);
            } else {
              stvalue.push(true);
            }
            if (stvalue.length > 1) {
              if (stvalue[i2] == true && stvalue[i2 - 1] == false) {
                p = r2;
                break;
              } else if (stvalue[i2] == false && stvalue[i2 - 1] == true) {
                p = r2 - 1;
                break;
              }
            }
            i2++;
          }
          if (p == null) {
            p = data.length - 1;
          }
          if (p_pre == null || p > p_pre) {
            p_pre = p;
          }
        }
        moveP = "down";
        moveV = p_pre - curR;
      }
    } else if (postion == "left") {
      if (curC == 0) {
        return;
      } else {
        let stvalue = [], p = null, i2 = 0, p_pre = null;
        for (let r2 = startR; r2 <= endR; r2++) {
          stvalue = [];
          i2 = 0;
          for (let c2 = curC - 1; c2 >= 0; c2--) {
            let cell = data[r2][c2];
            if (getObjType(cell) == "object" && isRealNull(cell.v)) {
              stvalue.push(false);
            } else if (isRealNull(cell)) {
              stvalue.push(false);
            } else {
              stvalue.push(true);
            }
            if (stvalue.length > 1) {
              if (stvalue[i2] == true && stvalue[i2 - 1] == false) {
                p = c2;
                break;
              } else if (stvalue[i2] == false && stvalue[i2 - 1] == true) {
                p = c2 + 1;
                break;
              }
            }
            i2++;
          }
          if (p == null) {
            p = 0;
          }
          if (p_pre == null || p < p_pre) {
            p_pre = p;
          }
        }
        moveP = "right";
        moveV = p_pre - curC;
      }
    } else if (postion == "right") {
      if (curC == datacolumnlen - 1) {
        return;
      } else {
        let stvalue = [], p = null, i2 = 0, p_pre = null;
        for (let r2 = startR; r2 <= endR; r2++) {
          stvalue = [];
          i2 = 0;
          for (let c2 = curC + 1; c2 < data[0].length; c2++) {
            let cell = data[r2][c2];
            if (getObjType(cell) == "object" && isRealNull(cell.v)) {
              stvalue.push(false);
            } else if (isRealNull(cell)) {
              stvalue.push(false);
            } else {
              stvalue.push(true);
            }
            if (stvalue.length > 1) {
              if (stvalue[i2] == true && stvalue[i2 - 1] == false) {
                p = c2;
                break;
              } else if (stvalue[i2] == false && stvalue[i2 - 1] == true) {
                p = c2 - 1;
                break;
              }
            }
            i2++;
          }
          if (p == null) {
            p = data[0].length - 1;
          }
          if (p_pre == null || p > p_pre) {
            p_pre = p;
          }
        }
        moveP = "right";
        moveV = p_pre - curC;
      }
    }
    if (type == "range") {
      if (postion == "up") {
        if (p_endR < endR) {
          if (moveV + curR < p_endR) {
            moveV = p_endR - curR;
          }
        }
      } else if (postion == "down") {
        if (p_startR > startR) {
          if (moveV + curR > p_startR) {
            moveV = p_startR - curR;
          }
        }
      } else if (postion == "left") {
        if (p_endC < endC) {
          if (moveV + curC < p_endC) {
            moveV = p_endC - curC;
          }
        }
      } else if (postion == "right") {
        if (p_startC > startC) {
          if (moveV + curC > p_startC) {
            moveV = p_startC - curC;
          }
        }
      }
      if (terminal != null && Math.abs(moveV) > Math.abs(terminal)) {
        moveV = terminal;
      }
    }
    if (!onlyvalue) {
      if (type == "cell") {
        luckysheetMoveHighlightCell(moveP, moveV, "rangeOfSelect", isScroll);
      } else if (type == "range") {
        luckysheetMoveHighlightRange(moveP, moveV, "rangeOfSelect", isScroll);
      }
    } else {
      return moveV;
    }
  }
  function luckysheetMoveHighlightCell(postion, index2, type, isScroll) {
    if (isScroll == null) {
      isScroll = true;
    }
    if (!postion) {
      postion == "down";
    }
    let datarowlen = store_default.flowdata.length, datacolumnlen = store_default.flowdata[0].length;
    let row, row_pre, row_index, row_index_ed;
    let col, col_pre, col_index, col_index_ed;
    if (type == "rangeOfSelect") {
      let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
      let curR;
      if (last["row_focus"] == null) {
        curR = last["row"][0];
      } else {
        curR = last["row_focus"];
      }
      let curC;
      if (last["column_focus"] == null) {
        curC = last["column"][0];
      } else {
        curC = last["column_focus"];
      }
      let margeset = menuButton_default.mergeborer(store_default.flowdata, curR, curC);
      if (!!margeset) {
        let str_r = margeset.row[2];
        let end_r = margeset.row[3];
        let str_c = margeset.column[2];
        let end_c = margeset.column[3];
        if (index2 > 0) {
          if (postion == "down") {
            curR = end_r;
            curC = str_c;
          } else if (postion == "right") {
            curR = str_r;
            curC = end_c;
          }
        } else {
          curR = str_r;
          curC = str_c;
        }
      }
      let moveX = last["moveXY"] == null ? curR : last["moveXY"].x;
      let moveY = last["moveXY"] == null ? curC : last["moveXY"].y;
      if (postion == "down") {
        curR += index2;
        moveX = curR;
      } else if (postion == "right") {
        curC += index2;
        moveY = curC;
      }
      if (curR >= datarowlen) {
        curR = datarowlen - 1;
        moveX = curR;
      }
      if (curR < 0) {
        curR = 0;
        moveX = curR;
      }
      if (curC >= datacolumnlen) {
        curC = datacolumnlen - 1;
        moveY = curC;
      }
      if (curC < 0) {
        curC = 0;
        moveY = curC;
      }
      let margeset2 = menuButton_default.mergeborer(store_default.flowdata, curR, curC);
      if (!!margeset2) {
        row = margeset2.row[1];
        row_pre = margeset2.row[0];
        row_index = margeset2.row[2];
        row_index_ed = margeset2.row[3];
        col = margeset2.column[1];
        col_pre = margeset2.column[0];
        col_index = margeset2.column[2];
        col_index_ed = margeset2.column[3];
      } else {
        row = store_default.visibledatarow[moveX];
        row_pre = moveX - 1 == -1 ? 0 : store_default.visibledatarow[moveX - 1];
        col = store_default.visibledatacolumn[moveY];
        col_pre = moveY - 1 == -1 ? 0 : store_default.visibledatacolumn[moveY - 1];
        row_index = row_index_ed = curR;
        col_index = col_index_ed = curC;
      }
      last["row"] = [row_index, row_index_ed];
      last["column"] = [col_index, col_index_ed];
      last["row_focus"] = row_index;
      last["column_focus"] = col_index;
      last["moveXY"] = {"x": moveX, "y": moveY};
      selectHightlightShow();
      pivotTable_default.pivotclick(row_index, col_index);
      formula_default.fucntionboxshow(row_index, col_index);
    } else if (type == "rangeOfFormula") {
      let last = formula_default.func_selectedrange;
      let curR;
      if (last["row_focus"] == null) {
        curR = last["row"][0];
      } else {
        curR = last["row_focus"];
      }
      let curC;
      if (last["column_focus"] == null) {
        curC = last["column"][0];
      } else {
        curC = last["column_focus"];
      }
      let margeset = menuButton_default.mergeborer(store_default.flowdata, curR, curC);
      if (!!margeset) {
        let str_r = margeset.row[2];
        let end_r = margeset.row[3];
        let str_c = margeset.column[2];
        let end_c = margeset.column[3];
        if (index2 > 0) {
          if (postion == "down") {
            curR = end_r;
            curC = str_c;
          } else if (postion == "right") {
            curR = str_r;
            curC = end_c;
          }
        } else {
          curR = str_r;
          curC = str_c;
        }
      }
      let moveX = last["moveXY"] == null ? curR : last["moveXY"].x;
      let moveY = last["moveXY"] == null ? curC : last["moveXY"].y;
      if (postion == "down") {
        curR += index2;
        moveX = curR;
      } else if (postion == "right") {
        curC += index2;
        moveY = curC;
      }
      if (curR >= datarowlen) {
        curR = datarowlen - 1;
        moveX = curR;
      }
      if (curR < 0) {
        curR = 0;
        moveX = curR;
      }
      if (curC >= datacolumnlen) {
        curC = datacolumnlen - 1;
        moveY = curC;
      }
      if (curC < 0) {
        curC = 0;
        moveY = curC;
      }
      let margeset2 = menuButton_default.mergeborer(store_default.flowdata, curR, curC);
      if (!!margeset2) {
        row = margeset2.row[1];
        row_pre = margeset2.row[0];
        row_index = margeset2.row[2];
        row_index_ed = margeset2.row[3];
        col = margeset2.column[1];
        col_pre = margeset2.column[0];
        col_index = margeset2.column[2];
        col_index_ed = margeset2.column[3];
      } else {
        row = store_default.visibledatarow[moveX];
        row_pre = moveX - 1 == -1 ? 0 : store_default.visibledatarow[moveX - 1];
        row_index = moveX;
        row_index_ed = moveX;
        col = store_default.visibledatacolumn[moveY];
        col_pre = moveY - 1 == -1 ? 0 : store_default.visibledatacolumn[moveY - 1];
        col_index = moveY;
        col_index_ed = moveY;
      }
      formula_default.func_selectedrange = {
        "left": col_pre,
        "width": col - col_pre - 1,
        "top": row_pre,
        "height": row - row_pre - 1,
        "left_move": col_pre,
        "width_move": col - col_pre - 1,
        "top_move": row_pre,
        "height_move": row - row_pre - 1,
        "row": [row_index, row_index_ed],
        "column": [col_index, col_index_ed],
        "row_focus": row_index,
        "column_focus": col_index,
        "moveXY": {"x": moveX, "y": moveY}
      };
      $("#luckysheet-formula-functionrange-select").css({
        "left": col_pre,
        "width": col - col_pre - 1,
        "top": row_pre,
        "height": row - row_pre - 1
      }).show();
      formula_default.rangeSetValue({
        "row": [row_index, row_index_ed],
        "column": [col_index, col_index_ed]
      });
    }
    let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
    let scrollTop = $("#luckysheet-cell-main").scrollTop();
    let winH = $("#luckysheet-cell-main").height(), winW = $("#luckysheet-cell-main").width();
    let sleft = 0, stop = 0;
    if (col - scrollLeft - winW + 20 > 0) {
      sleft = col - winW + 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-x").scrollLeft(sleft);
      }
    } else if (col_pre - scrollLeft - 20 < 0) {
      sleft = col_pre - 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-x").scrollLeft(sleft);
      }
    }
    if (row - scrollTop - winH + 20 > 0) {
      stop = row - winH + 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-y").scrollTop(stop);
      }
    } else if (row_pre - scrollTop - 20 < 0) {
      stop = row_pre - 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-y").scrollTop(stop);
      }
    }
    clearTimeout(store_default.countfuncTimeout);
    countfunc();
    server_default.saveParam("mv", store_default.currentSheetIndex, store_default.luckysheet_select_save);
  }
  function luckysheetMoveHighlightCell2(postion, type, isScroll) {
    if (!isScroll) {
      isScroll = true;
    }
    let row, row_pre;
    let col, col_pre;
    if (type == "rangeOfSelect") {
      let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
      let rf = last["row_focus"], cf = last["column_focus"];
      let focusIsMerge = false, mc = {};
      if (store_default.config["merge"] != null && rf + "_" + cf in store_default.config["merge"]) {
        focusIsMerge = true;
        mc = store_default.config["merge"][rf + "_" + cf];
      }
      if (postion == "down") {
        if (rf == store_default.flowdata.length - 1) {
          return;
        }
        if (focusIsMerge) {
          rf = getNextIndex("down", cf, mc.r + mc.rs - 1, store_default.flowdata.length - 1);
        } else {
          rf = getNextIndex("down", cf, rf, store_default.flowdata.length - 1);
        }
      } else if (postion == "up") {
        if (rf == 0) {
          return;
        }
        if (focusIsMerge) {
          rf = getNextIndex("up", cf, 0, mc.r);
        } else {
          rf = getNextIndex("up", cf, 0, rf);
        }
      } else if (postion == "right") {
        if (cf == store_default.flowdata[0].length - 1) {
          return;
        }
        if (focusIsMerge) {
          cf = getNextIndex("right", rf, mc.c + mc.cs - 1, store_default.flowdata[0].length - 1);
        } else {
          cf = getNextIndex("right", rf, cf, store_default.flowdata[0].length - 1);
        }
      } else if (postion == "left") {
        if (cf == 0) {
          return;
        }
        if (focusIsMerge) {
          cf = getNextIndex("left", rf, 0, mc.c);
        } else {
          cf = getNextIndex("left", rf, 0, cf);
        }
      }
      let rowseleted = [rf, rf];
      let columnseleted = [cf, cf];
      row = store_default.visibledatarow[rf];
      row_pre = rf - 1 == -1 ? 0 : store_default.visibledatarow[rf - 1];
      col = store_default.visibledatacolumn[cf];
      col_pre = cf - 1 == -1 ? 0 : store_default.visibledatacolumn[cf - 1];
      let changeparam = menuButton_default.mergeMoveMain(columnseleted, rowseleted, last, row_pre, row - row_pre - 1, col_pre, col - col_pre - 1);
      if (changeparam != null) {
        columnseleted = changeparam[0];
        rowseleted = changeparam[1];
      }
      store_default.luckysheet_select_save = [{"row": rowseleted, "column": columnseleted}];
      selectHightlightShow();
      pivotTable_default.pivotclick(rf, cf);
      formula_default.fucntionboxshow(rf, cf);
    } else if (type == "rangeOfFormula") {
      let last = formula_default.func_selectedrange;
      let rf = last["row_focus"], cf = last["column_focus"];
      let focusIsMerge = false, mc = {};
      if (store_default.config["merge"] != null && rf + "_" + cf in store_default.config["merge"]) {
        focusIsMerge = true;
        mc = store_default.config["merge"][rf + "_" + cf];
      }
      if (postion == "down") {
        if (rf == store_default.flowdata.length - 1) {
          return;
        }
        if (focusIsMerge) {
          rf = getNextIndex("down", cf, mc.r + mc.rs - 1, store_default.flowdata.length - 1);
        } else {
          rf = getNextIndex("down", cf, rf, store_default.flowdata.length - 1);
        }
      } else if (postion == "up") {
        if (rf == 0) {
          return;
        }
        if (focusIsMerge) {
          rf = getNextIndex("up", cf, 0, mc.r);
        } else {
          rf = getNextIndex("up", cf, 0, rf);
        }
      } else if (postion == "right") {
        if (cf == store_default.flowdata[0].length - 1) {
          return;
        }
        if (focusIsMerge) {
          cf = getNextIndex("right", rf, mc.c + mc.cs - 1, store_default.flowdata[0].length - 1);
        } else {
          cf = getNextIndex("right", rf, cf, store_default.flowdata[0].length - 1);
        }
      } else if (postion == "left") {
        if (cf == 0) {
          return;
        }
        if (focusIsMerge) {
          cf = getNextIndex("left", rf, 0, mc.c);
        } else {
          cf = getNextIndex("left", rf, 0, cf);
        }
      }
      let rowseleted = [rf, rf];
      let columnseleted = [cf, cf];
      row = store_default.visibledatarow[rf];
      row_pre = rf - 1 == -1 ? 0 : store_default.visibledatarow[rf - 1];
      col = store_default.visibledatacolumn[cf];
      col_pre = cf - 1 == -1 ? 0 : store_default.visibledatacolumn[cf - 1];
      let top = row_pre, height = row - row_pre - 1;
      let left = col_pre, width = col - col_pre - 1;
      let changeparam = menuButton_default.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width);
      if (changeparam != null) {
        columnseleted = changeparam[0];
        rowseleted = changeparam[1];
        top = changeparam[2];
        height = changeparam[3];
        left = changeparam[4];
        width = changeparam[5];
      }
      formula_default.func_selectedrange = {
        "left": left,
        "width": width,
        "top": top,
        "height": height,
        "left_move": left,
        "width_move": width,
        "top_move": top,
        "height_move": height,
        "row": rowseleted,
        "column": columnseleted,
        "row_focus": rf,
        "column_focus": cf
      };
      $("#luckysheet-formula-functionrange-select").css({
        "left": left,
        "width": width,
        "top": top,
        "height": height
      }).show();
      formula_default.rangeSetValue({
        "row": rowseleted,
        "column": columnseleted
      });
    }
    let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
    let scrollTop = $("#luckysheet-cell-main").scrollTop();
    let winH = $("#luckysheet-cell-main").height(), winW = $("#luckysheet-cell-main").width();
    let sleft = 0, stop = 0;
    if (col - scrollLeft - winW + 20 > 0) {
      sleft = col - winW + 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-x").scrollLeft(sleft);
      }
    } else if (col_pre - scrollLeft - 20 < 0) {
      sleft = col_pre - 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-x").scrollLeft(sleft);
      }
    }
    if (row - scrollTop - winH + 20 > 0) {
      stop = row - winH + 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-y").scrollTop(stop);
      }
    } else if (row_pre - scrollTop - 20 < 0) {
      stop = row_pre - 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-y").scrollTop(stop);
      }
    }
    clearTimeout(store_default.countfuncTimeout);
    countfunc();
  }
  function luckysheetMoveHighlightRange(postion, index2, type, isScroll) {
    if (isScroll == null) {
      isScroll = true;
    }
    if (!postion) {
      postion == "down";
    }
    let row, row_pre;
    let col, col_pre;
    if (type == "rangeOfSelect") {
      let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
      let curR = last["row"][0], endR = last["row"][1];
      let curC = last["column"][0], endC = last["column"][1];
      let rf = last["row_focus"], cf = last["column_focus"];
      let datarowlen = store_default.flowdata.length, datacolumnlen = store_default.flowdata[0].length;
      if (postion == "down") {
        if (rowHasMerge(rf, curC, endC)) {
          let rfMerge = getRowMerge(rf, curC, endC);
          let rf_str = rfMerge[0], rf_end = rfMerge[1];
          if (rf_str > curR && rf_end == endR) {
            if (index2 > 0 && rowHasMerge(curR, curC, endC)) {
              curR = getRowMerge(curR, curC, endC)[1];
            }
            curR += index2;
          } else if (rf_end < endR && rf_str == curR) {
            if (index2 < 0 && rowHasMerge(endR, curC, endC)) {
              endR = getRowMerge(endR, curC, endC)[0];
            }
            endR += index2;
          } else {
            if (index2 > 0) {
              endR += index2;
            } else {
              curR += index2;
            }
          }
        } else {
          if (rf > curR && rf == endR) {
            if (index2 > 0 && rowHasMerge(curR, curC, endC)) {
              curR = getRowMerge(curR, curC, endC)[1];
            }
            curR += index2;
          } else if (rf < endR && rf == curR) {
            if (index2 < 0 && rowHasMerge(endR, curC, endC)) {
              endR = getRowMerge(endR, curC, endC)[0];
            }
            endR += index2;
          } else if (rf == curR && rf == endR) {
            if (index2 > 0) {
              endR += index2;
            } else {
              curR += index2;
            }
          }
        }
        if (endR >= datarowlen) {
          endR = datarowlen - 1;
        }
        if (endR < 0) {
          endR = 0;
        }
        if (curR >= datarowlen) {
          curR = datarowlen - 1;
        }
        if (curR < 0) {
          curR = 0;
        }
      } else {
        if (colHasMerge(cf, curR, endR)) {
          let cfMerge = getColMerge(cf, curR, endR);
          let cf_str = cfMerge[0], cf_end = cfMerge[1];
          if (cf_str > curC && cf_end == endC) {
            if (index2 > 0 && colHasMerge(curC, curR, endR)) {
              curC = getColMerge(curC, curR, endR)[1];
            }
            curC += index2;
          } else if (cf_end < endC && cf_str == curC) {
            if (index2 < 0 && colHasMerge(endC, curR, endR)) {
              endC = getColMerge(endC, curR, endR)[0];
            }
            endC += index2;
          } else {
            if (index2 > 0) {
              endC += index2;
            } else {
              curC += index2;
            }
          }
        } else {
          if (cf > curC && cf == endC) {
            if (index2 > 0 && colHasMerge(curC, curR, endR)) {
              curC = getColMerge(curC, curR, endR)[1];
            }
            curC += index2;
          } else if (cf < endC && cf == curC) {
            if (index2 < 0 && colHasMerge(endC, curR, endR)) {
              endC = getColMerge(endC, curR, endR)[0];
            }
            endC += index2;
          } else if (cf == curC && cf == endC) {
            if (index2 > 0) {
              endC += index2;
            } else {
              curC += index2;
            }
          }
        }
        if (endC >= datacolumnlen) {
          endC = datacolumnlen - 1;
        }
        if (endC < 0) {
          endC = 0;
        }
        if (curC >= datacolumnlen) {
          curC = datacolumnlen - 1;
        }
        if (curC < 0) {
          curC = 0;
        }
      }
      let rowseleted = [curR, endR];
      let columnseleted = [curC, endC];
      row = store_default.visibledatarow[endR];
      row_pre = curR - 1 == -1 ? 0 : store_default.visibledatarow[curR - 1];
      col = store_default.visibledatacolumn[endC];
      col_pre = curC - 1 == -1 ? 0 : store_default.visibledatacolumn[curC - 1];
      let changeparam = menuButton_default.mergeMoveMain(columnseleted, rowseleted, last, row_pre, row - row_pre - 1, col_pre, col - col_pre - 1);
      if (changeparam != null) {
        columnseleted = changeparam[0];
        rowseleted = changeparam[1];
      }
      last["row"] = rowseleted;
      last["column"] = columnseleted;
      selectHightlightShow();
    } else if (type == "rangeOfFormula") {
      let last = formula_default.func_selectedrange;
      let curR = last["row"][0], endR = last["row"][1];
      let curC = last["column"][0], endC = last["column"][1];
      let rf = last["row_focus"], cf = last["column_focus"];
      let datarowlen = store_default.flowdata.length, datacolumnlen = store_default.flowdata[0].length;
      if (postion == "down") {
        if (rowHasMerge(rf, curC, endC)) {
          let rfMerge = getRowMerge(rf, curC, endC);
          let rf_str = rfMerge[0], rf_end = rfMerge[1];
          if (rf_str > curR && rf_end == endR) {
            if (index2 > 0 && rowHasMerge(curR, curC, endC)) {
              curR = getRowMerge(curR, curC, endC)[1];
            }
            curR += index2;
          } else if (rf_end < endR && rf_str == curR) {
            if (index2 < 0 && rowHasMerge(endR, curC, endC)) {
              endR = getRowMerge(endR, curC, endC)[0];
            }
            endR += index2;
          } else {
            if (index2 > 0) {
              endR += index2;
            } else {
              curR += index2;
            }
          }
        } else {
          if (rf > curR && rf == endR) {
            if (index2 > 0 && rowHasMerge(curR, curC, endC)) {
              curR = getRowMerge(curR, curC, endC)[1];
            }
            curR += index2;
          } else if (rf < endR && rf == curR) {
            if (index2 < 0 && rowHasMerge(endR, curC, endC)) {
              endR = getRowMerge(endR, curC, endC)[0];
            }
            endR += index2;
          } else if (rf == curR && rf == endR) {
            if (index2 > 0) {
              endR += index2;
            } else {
              curR += index2;
            }
          }
        }
        if (endR >= datarowlen) {
          endR = datarowlen - 1;
        }
        if (endR < 0) {
          endR = 0;
        }
        if (curR >= datarowlen) {
          curR = datarowlen - 1;
        }
        if (curR < 0) {
          curR = 0;
        }
      } else {
        if (colHasMerge(cf, curR, endR)) {
          let cfMerge = getColMerge(cf, curR, endR);
          let cf_str = cfMerge[0], cf_end = cfMerge[1];
          if (cf_str > curC && cf_end == endC) {
            if (index2 > 0 && colHasMerge(curC, curR, endR)) {
              curC = getColMerge(curC, curR, endR)[1];
            }
            curC += index2;
          } else if (cf_end < endC && cf_str == curC) {
            if (index2 < 0 && colHasMerge(endC, curR, endR)) {
              endC = getColMerge(endC, curR, endR)[0];
            }
            endC += index2;
          } else {
            if (index2 > 0) {
              endC += index2;
            } else {
              curC += index2;
            }
          }
        } else {
          if (cf > curC && cf == endC) {
            if (index2 > 0 && colHasMerge(curC, curR, endR)) {
              curC = getColMerge(curC, curR, endR)[1];
            }
            curC += index2;
          } else if (cf < endC && cf == curC) {
            if (index2 < 0 && colHasMerge(endC, curR, endR)) {
              endC = getColMerge(endC, curR, endR)[0];
            }
            endC += index2;
          } else if (cf == curC && cf == endC) {
            if (index2 > 0) {
              endC += index2;
            } else {
              curC += index2;
            }
          }
        }
        if (endC >= datacolumnlen) {
          endC = datacolumnlen - 1;
        }
        if (endC < 0) {
          endC = 0;
        }
        if (curC >= datacolumnlen) {
          curC = datacolumnlen - 1;
        }
        if (curC < 0) {
          curC = 0;
        }
      }
      let rowseleted = [curR, endR];
      let columnseleted = [curC, endC];
      row = store_default.visibledatarow[endR];
      row_pre = curR - 1 == -1 ? 0 : store_default.visibledatarow[curR - 1];
      col = store_default.visibledatacolumn[endC];
      col_pre = curC - 1 == -1 ? 0 : store_default.visibledatacolumn[curC - 1];
      let top = row_pre, height = row - row_pre - 1;
      let left = col_pre, width = col - col_pre - 1;
      let changeparam = menuButton_default.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width);
      if (changeparam != null) {
        columnseleted = changeparam[0];
        rowseleted = changeparam[1];
        top = changeparam[2];
        height = changeparam[3];
        left = changeparam[4];
        width = changeparam[5];
      }
      formula_default.func_selectedrange = {
        "left": left,
        "width": width,
        "top": top,
        "height": height,
        "left_move": left,
        "width_move": width,
        "top_move": top,
        "height_move": height,
        "row": rowseleted,
        "column": columnseleted,
        "row_focus": rf,
        "column_focus": cf
      };
      $("#luckysheet-formula-functionrange-select").css({
        "left": left,
        "width": width,
        "top": top,
        "height": height
      }).show();
      formula_default.rangeSetValue({
        "row": rowseleted,
        "column": columnseleted
      });
    }
    let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
    let scrollTop = $("#luckysheet-cell-main").scrollTop();
    let winH = $("#luckysheet-cell-main").height(), winW = $("#luckysheet-cell-main").width();
    let sleft = 0, stop = 0;
    if (col - scrollLeft - winW + 20 > 0) {
      sleft = col - winW + 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-x").scrollLeft(sleft);
      }
    } else if (col_pre - scrollLeft - 20 < 0) {
      sleft = col_pre - 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-x").scrollLeft(sleft);
      }
    }
    if (row - scrollTop - winH + 20 > 0) {
      stop = row - winH + 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-y").scrollTop(stop);
      }
    } else if (row_pre - scrollTop - 20 < 0) {
      stop = row_pre - 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-y").scrollTop(stop);
      }
    }
    clearTimeout(store_default.countfuncTimeout);
    countfunc();
  }
  function luckysheetMoveHighlightRange2(postion, type, isScroll) {
    if (!isScroll) {
      isScroll = true;
    }
    let row, row_pre;
    let col, col_pre;
    if (type == "rangeOfSelect") {
      let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
      let rf = last["row_focus"], cf = last["column_focus"];
      let r1 = last["row"][0], r2 = last["row"][1];
      let c1 = last["column"][0], c2 = last["column"][1];
      if (postion == "down") {
        if (r2 == store_default.flowdata.length - 1) {
          return;
        }
        if (rowHasMerge(rf, c1, c2)) {
          let rfMerge = getRowMerge(rf, c1, c2);
          let rf_str = rfMerge[0], rf_end = rfMerge[1];
          if (rf_str > r1 && rf_end == r2) {
            r1 = getNextIndex("down", cf, r1, r2);
          } else {
            r2 = getNextIndex("down", cf, r2, store_default.flowdata.length - 1);
          }
        } else {
          if (rf > r1 && rf == r2) {
            r1 = getNextIndex("down", cf, r1, r2);
          } else {
            r2 = getNextIndex("down", cf, r2, store_default.flowdata.length - 1);
          }
        }
      } else if (postion == "up") {
        if (r1 == 0) {
          return;
        }
        if (rowHasMerge(rf, c1, c2)) {
          let rfMerge = getRowMerge(rf, c1, c2);
          let rf_str = rfMerge[0], rf_end = rfMerge[1];
          if (rf_end < r2 && rf_str == r1) {
            r2 = getNextIndex("up", cf, r1, r2);
          } else {
            r1 = getNextIndex("up", cf, 0, r1);
          }
        } else {
          if (rf < r2 && rf == r1) {
            r2 = getNextIndex("up", cf, r1, r2);
          } else {
            r1 = getNextIndex("up", cf, 0, r1);
          }
        }
      } else if (postion == "right") {
        if (c2 == store_default.flowdata[0].length - 1) {
          return;
        }
        if (colHasMerge(cf, r1, r2)) {
          let cfMerge = getColMerge(cf, r1, r2);
          let cf_str = cfMerge[0], cf_end = cfMerge[1];
          if (cf_str > c1 && cf_end == c2) {
            c1 = getNextIndex("right", rf, c1, c2);
          } else {
            c2 = getNextIndex("right", rf, c2, store_default.flowdata[0].length - 1);
          }
        } else {
          if (cf > c1 && cf == c2) {
            c1 = getNextIndex("right", rf, c1, c2);
          } else {
            c2 = getNextIndex("right", rf, c2, store_default.flowdata[0].length - 1);
          }
        }
      } else if (postion == "left") {
        if (c1 == 0) {
          return;
        }
        if (colHasMerge(cf, r1, r2)) {
          let cfMerge = getColMerge(cf, r1, r2);
          let cf_str = cfMerge[0], cf_end = cfMerge[1];
          if (cf_end < c2 && cf_str == c1) {
            c2 = getNextIndex("left", rf, c1, c2);
          } else {
            c1 = getNextIndex("left", rf, 0, c1);
          }
        } else {
          if (cf < c2 && cf == c1) {
            c2 = getNextIndex("left", rf, c1, c2);
          } else {
            c1 = getNextIndex("left", rf, 0, c1);
          }
        }
      }
      let rowseleted = [r1, r2];
      let columnseleted = [c1, c2];
      row = store_default.visibledatarow[r2];
      row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
      col = store_default.visibledatacolumn[c2];
      col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
      let changeparam = menuButton_default.mergeMoveMain(columnseleted, rowseleted, last, row_pre, row - row_pre - 1, col_pre, col - col_pre - 1);
      if (changeparam != null) {
        columnseleted = changeparam[0];
        rowseleted = changeparam[1];
      }
      last["row"] = rowseleted;
      last["column"] = columnseleted;
      selectHightlightShow();
    } else if (type == "rangeOfFormula") {
      let last = formula_default.func_selectedrange;
      let rf = last["row_focus"], cf = last["column_focus"];
      let r1 = last["row"][0], r2 = last["row"][1];
      let c1 = last["column"][0], c2 = last["column"][1];
      if (postion == "down") {
        if (r2 == store_default.flowdata.length - 1) {
          return;
        }
        if (rowHasMerge(rf, c1, c2)) {
          let rfMerge = getRowMerge(rf, c1, c2);
          let rf_str = rfMerge[0], rf_end = rfMerge[1];
          if (rf_str > r1 && rf_end == r2) {
            r1 = getNextIndex("down", cf, r1, r2);
          } else {
            r2 = getNextIndex("down", cf, r2, store_default.flowdata.length - 1);
          }
        } else {
          if (rf > r1 && rf == r2) {
            r1 = getNextIndex("down", cf, r1, r2);
          } else {
            r2 = getNextIndex("down", cf, r2, store_default.flowdata.length - 1);
          }
        }
      } else if (postion == "up") {
        if (r1 == 0) {
          return;
        }
        if (rowHasMerge(rf, c1, c2)) {
          let rfMerge = getRowMerge(rf, c1, c2);
          let rf_str = rfMerge[0], rf_end = rfMerge[1];
          if (rf_end < r2 && rf_str == r1) {
            r2 = getNextIndex("up", cf, r1, r2);
          } else {
            r1 = getNextIndex("up", cf, 0, r1);
          }
        } else {
          if (rf < r2 && rf == r1) {
            r2 = getNextIndex("up", cf, r1, r2);
          } else {
            r1 = getNextIndex("up", cf, 0, r1);
          }
        }
      } else if (postion == "right") {
        if (c2 == store_default.flowdata[0].length - 1) {
          return;
        }
        if (colHasMerge(cf, r1, r2)) {
          let cfMerge = getColMerge(cf, r1, r2);
          let cf_str = cfMerge[0], cf_end = cfMerge[1];
          if (cf_str > c1 && cf_end == c2) {
            c1 = getNextIndex("right", rf, c1, c2);
          } else {
            c2 = getNextIndex("right", rf, c2, store_default.flowdata[0].length - 1);
          }
        } else {
          if (cf > c1 && cf == c2) {
            c1 = getNextIndex("right", rf, c1, c2);
          } else {
            c2 = getNextIndex("right", rf, c2, store_default.flowdata[0].length - 1);
          }
        }
      } else if (postion == "left") {
        if (c1 == 0) {
          return;
        }
        if (colHasMerge(cf, r1, r2)) {
          let cfMerge = getColMerge(cf, r1, r2);
          let cf_str = cfMerge[0], cf_end = cfMerge[1];
          if (cf_end < c2 && cf_str == c1) {
            c2 = getNextIndex("left", rf, c1, c2);
          } else {
            c1 = getNextIndex("left", rf, 0, c1);
          }
        } else {
          if (cf < c2 && cf == c1) {
            c2 = getNextIndex("left", rf, c1, c2);
          } else {
            c1 = getNextIndex("left", rf, 0, c1);
          }
        }
      }
      let rowseleted = [r1, r2];
      let columnseleted = [c1, c2];
      row = store_default.visibledatarow[r2];
      row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
      col = store_default.visibledatacolumn[c2];
      col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
      let top = row_pre, height = row - row_pre - 1;
      let left = col_pre, width = col - col_pre - 1;
      let changeparam = menuButton_default.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width);
      if (changeparam != null) {
        columnseleted = changeparam[0];
        rowseleted = changeparam[1];
        top = changeparam[2];
        height = changeparam[3];
        left = changeparam[4];
        width = changeparam[5];
      }
      formula_default.func_selectedrange = {
        "left": left,
        "width": width,
        "top": top,
        "height": height,
        "left_move": left,
        "width_move": width,
        "top_move": top,
        "height_move": height,
        "row": rowseleted,
        "column": columnseleted,
        "row_focus": rf,
        "column_focus": cf
      };
      $("#luckysheet-formula-functionrange-select").css({
        "left": left,
        "width": width,
        "top": top,
        "height": height
      }).show();
      formula_default.rangeSetValue({
        "row": rowseleted,
        "column": columnseleted
      });
    }
    let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
    let scrollTop = $("#luckysheet-cell-main").scrollTop();
    let winH = $("#luckysheet-cell-main").height(), winW = $("#luckysheet-cell-main").width();
    let sleft = 0, stop = 0;
    if (col - scrollLeft - winW + 20 > 0) {
      sleft = col - winW + 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-x").scrollLeft(sleft);
      }
    } else if (col_pre - scrollLeft - 20 < 0) {
      sleft = col_pre - 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-x").scrollLeft(sleft);
      }
    }
    if (row - scrollTop - winH + 20 > 0) {
      stop = row - winH + 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-y").scrollTop(stop);
      }
    } else if (row_pre - scrollTop - 20 < 0) {
      stop = row_pre - 20;
      if (isScroll) {
        $("#luckysheet-scrollbar-y").scrollTop(stop);
      }
    }
    clearTimeout(store_default.countfuncTimeout);
    countfunc();
  }
  function rowHasMerge(r2, c1, c2) {
    let rowHasMerge2 = false;
    for (let c3 = c1; c3 <= c2; c3++) {
      let cell = store_default.flowdata[r2][c3];
      if (getObjType(cell) == "object" && "mc" in cell) {
        rowHasMerge2 = true;
        break;
      }
    }
    return rowHasMerge2;
  }
  function colHasMerge(c2, r1, r2) {
    let colHasMerge2 = false;
    for (let r3 = r1; r3 <= r2; r3++) {
      let cell = store_default.flowdata[r3][c2];
      if (getObjType(cell) == "object" && "mc" in cell) {
        colHasMerge2 = true;
        break;
      }
    }
    return colHasMerge2;
  }
  function getRowMerge(rIndex, c1, c2) {
    let r1 = 0, r2 = store_default.flowdata.length - 1;
    let str = null;
    if (rIndex > r1) {
      for (let r3 = rIndex; r3 >= r1; r3--) {
        for (let c3 = c1; c3 <= c2; c3++) {
          let cell = store_default.flowdata[r3][c3];
          if (getObjType(cell) == "object" && "mc" in cell) {
            let mc = store_default.config["merge"][cell["mc"].r + "_" + cell["mc"].c];
            if (str == null || mc.r < str) {
              str = mc.r;
            }
          }
        }
        if (rowHasMerge(str - 1, c1, c2) && str > r1) {
          r3 = str;
        } else {
          break;
        }
      }
    } else {
      str = r1;
    }
    let end = null;
    if (rIndex < r2) {
      for (let r3 = rIndex; r3 <= r2; r3++) {
        for (let c3 = c1; c3 <= c2; c3++) {
          let cell = store_default.flowdata[r3][c3];
          if (getObjType(cell) == "object" && "mc" in cell) {
            let mc = store_default.config["merge"][cell["mc"].r + "_" + cell["mc"].c];
            if (end == null || mc.r + mc.rs - 1 > end) {
              end = mc.r + mc.rs - 1;
            }
          }
        }
        if (rowHasMerge(end + 1, c1, c2) && end < r2) {
          r3 = end;
        } else {
          break;
        }
      }
    } else {
      end = r2;
    }
    return [str, end];
  }
  function getColMerge(cIndex, r1, r2) {
    let c1 = 0, c2 = store_default.flowdata[0].length - 1;
    let str = null;
    if (cIndex > c1) {
      for (let c3 = cIndex; c3 >= c1; c3--) {
        for (let r3 = r1; r3 <= r2; r3++) {
          let cell = store_default.flowdata[r3][c3];
          if (getObjType(cell) == "object" && "mc" in cell) {
            let mc = store_default.config["merge"][cell["mc"].r + "_" + cell["mc"].c];
            if (str == null || mc.c < str) {
              str = mc.c;
            }
          }
        }
        if (colHasMerge(str - 1, r1, r2) && str > c1) {
          c3 = str;
        } else {
          break;
        }
      }
    } else {
      str = c1;
    }
    let end = null;
    if (cIndex < c2) {
      for (let c3 = cIndex; c3 <= c2; c3++) {
        for (let r3 = r1; r3 <= r2; r3++) {
          let cell = store_default.flowdata[r3][c3];
          if (getObjType(cell) == "object" && "mc" in cell) {
            let mc = store_default.config["merge"][cell["mc"].r + "_" + cell["mc"].c];
            if (end == null || mc.c + mc.cs - 1 > end) {
              end = mc.c + mc.cs - 1;
            }
          }
        }
        if (colHasMerge(end + 1, r1, r2) && end < c2) {
          c3 = end;
        } else {
          break;
        }
      }
    } else {
      end = c2;
    }
    return [str, end];
  }
  function getNextIndex(direction, focusIndex, strIndex, endIndex) {
    let index2 = null;
    let stNull;
    if (direction == "down") {
      let stValue = store_default.flowdata[strIndex][focusIndex];
      if (getObjType(stValue) == "object" && isRealNull(stValue.v)) {
        stNull = true;
      } else if (isRealNull(stValue)) {
        stNull = true;
      } else {
        stNull = false;
      }
      console.log(stNull, "stNull");
      let cellNull = [], i2 = 0;
      for (let r2 = strIndex + 1; r2 <= endIndex; r2++) {
        let cell = store_default.flowdata[r2][focusIndex];
        if (getObjType(cell) == "object" && isRealNull(cell.v)) {
          cellNull.push(true);
        } else if (isRealNull(cell)) {
          cellNull.push(true);
        } else {
          cellNull.push(false);
        }
        if (cellNull.length == 1 && stNull == true && cellNull[i2] == false) {
          index2 = strIndex + i2 + 1;
          break;
        } else if (cellNull.length > 1) {
          if (stNull && cellNull[i2] == false) {
            index2 = strIndex + i2 + 1;
            break;
          } else if (!stNull) {
            if (cellNull[i2] == false && cellNull[i2 - 1] == true) {
              index2 = strIndex + i2 + 1;
              break;
            } else if (cellNull[i2] == true && cellNull[i2 - 1] == false) {
              index2 = strIndex + i2;
              break;
            }
          }
        }
        if (r2 == endIndex) {
          index2 = endIndex;
        }
        i2++;
      }
    } else if (direction == "up") {
      let stValue = store_default.flowdata[endIndex][focusIndex];
      if (getObjType(stValue) == "object" && isRealNull(stValue.v)) {
        stNull = true;
      } else if (isRealNull(stValue)) {
        stNull = true;
      } else {
        stNull = false;
      }
      let cellNull = [], i2 = 0;
      for (let r2 = endIndex - 1; r2 >= strIndex; r2--) {
        let cell = store_default.flowdata[r2][focusIndex];
        if (getObjType(cell) == "object" && isRealNull(cell.v)) {
          cellNull.push(true);
        } else if (isRealNull(cell)) {
          cellNull.push(true);
        } else {
          cellNull.push(false);
        }
        if (cellNull.length == 1 && stNull && cellNull[i2] == false) {
          index2 = endIndex - (i2 + 1);
          break;
        } else if (cellNull.length > 1) {
          if (stNull && cellNull[i2] == false) {
            index2 = endIndex - (i2 + 1);
            break;
          } else if (!stNull) {
            if (cellNull[i2] == false && cellNull[i2 - 1] == true) {
              index2 = endIndex - (i2 + 1);
              break;
            } else if (cellNull[i2] == true && cellNull[i2 - 1] == false) {
              index2 = endIndex - i2;
              break;
            }
          }
        }
        if (r2 == strIndex) {
          index2 = strIndex;
        }
        i2++;
      }
    } else if (direction == "right") {
      let stValue = store_default.flowdata[focusIndex][strIndex];
      if (getObjType(stValue) == "object" && isRealNull(stValue.v)) {
        stNull = true;
      } else if (isRealNull(stValue)) {
        stNull = true;
      } else {
        stNull = false;
      }
      let cellNull = [], i2 = 0;
      for (let c2 = strIndex + 1; c2 <= endIndex; c2++) {
        let cell = store_default.flowdata[focusIndex][c2];
        if (getObjType(cell) == "object" && isRealNull(cell.v)) {
          cellNull.push(true);
        } else if (isRealNull(cell)) {
          cellNull.push(true);
        } else {
          cellNull.push(false);
        }
        if (cellNull.length == 1 && stNull && cellNull[i2] == false) {
          index2 = strIndex + i2 + 1;
          break;
        } else if (cellNull.length > 1) {
          if (stNull && cellNull[i2] == false) {
            index2 = strIndex + i2 + 1;
            break;
          } else if (!stNull) {
            if (cellNull[i2] == false && cellNull[i2 - 1] == true) {
              index2 = strIndex + i2 + 1;
              break;
            } else if (cellNull[i2] == true && cellNull[i2 - 1] == false) {
              index2 = strIndex + i2;
              break;
            }
          }
        }
        if (c2 == endIndex) {
          index2 = endIndex;
        }
        i2++;
      }
    } else if (direction == "left") {
      let stValue = store_default.flowdata[focusIndex][endIndex];
      if (getObjType(stValue) == "object" && isRealNull(stValue.v)) {
        stNull = true;
      } else if (isRealNull(stValue)) {
        stNull = true;
      } else {
        stNull = false;
      }
      let cellNull = [], i2 = 0;
      for (let c2 = endIndex - 1; c2 >= strIndex; c2--) {
        let cell = store_default.flowdata[focusIndex][c2];
        if (getObjType(cell) == "object" && isRealNull(cell.v)) {
          cellNull.push(true);
        } else if (isRealNull(cell)) {
          cellNull.push(true);
        } else {
          cellNull.push(false);
        }
        if (cellNull.length == 1 && stNull && cellNull[i2] == false) {
          index2 = endIndex - (i2 + 1);
          break;
        } else if (cellNull.length > 1) {
          if (stNull && cellNull[i2] == false) {
            index2 = endIndex - (i2 + 1);
            break;
          } else if (!stNull) {
            if (cellNull[i2] == false && cellNull[i2 - 1] == true) {
              index2 = endIndex - (i2 + 1);
              break;
            } else if (cellNull[i2] == true && cellNull[i2 - 1] == false) {
              index2 = endIndex - i2;
              break;
            }
          }
        }
        if (c2 == strIndex) {
          index2 = strIndex;
        }
        i2++;
      }
    }
    return index2;
  }
  var init_sheetMove = __esm({
    "src/controllers/sheetMove.js"() {
      init_util();
      init_formula();
      init_validate();
      init_count();
      init_menuButton();
      init_select();
      init_pivotTable();
      init_store();
      init_server();
    }
  });

  // src/controllers/alternateformat.js
  var alternateformat, alternateformat_default;
  var init_alternateformat = __esm({
    "src/controllers/alternateformat.js"() {
      init_get();
      init_util();
      init_formula();
      init_validate();
      init_tooltip();
      init_refresh();
      init_constant();
      init_resize();
      init_server();
      init_select();
      init_store();
      init_locale();
      alternateformat = {
        rangefocus: false,
        modelfocusIndex: null,
        FixedModelColor: [
          {
            "head": {"fc": "#000", "bc": "#bfbdbe"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#f8f3f7"},
            "foot": {"fc": "#000", "bc": "#dde2de"}
          },
          {
            "head": {"fc": "#000", "bc": "#4bd4e7"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#eaf7ff"},
            "foot": {"fc": "#000", "bc": "#aae9f8"}
          },
          {
            "head": {"fc": "#000", "bc": "#5ed593"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#e5fbee"},
            "foot": {"fc": "#000", "bc": "#a5efcc"}
          },
          {
            "head": {"fc": "#000", "bc": "#f6cb4b"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#fff9e7"},
            "foot": {"fc": "#000", "bc": "#ffebac"}
          },
          {
            "head": {"fc": "#000", "bc": "#f96420"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#ffe5d9"},
            "foot": {"fc": "#000", "bc": "#ffcfba"}
          },
          {
            "head": {"fc": "#000", "bc": "#5599fc"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#ecf2fe"},
            "foot": {"fc": "#000", "bc": "#afcbfa"}
          },
          {
            "head": {"fc": "#000", "bc": "#22a69b"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#dff2f8"},
            "foot": {"fc": "#000", "bc": "#8dd4d0"}
          },
          {
            "head": {"fc": "#000", "bc": "#7a939a"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#f0eff7"},
            "foot": {"fc": "#000", "bc": "#bdcad0"}
          },
          {
            "head": {"fc": "#000", "bc": "#d7a270"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#fdf3f1"},
            "foot": {"fc": "#000", "bc": "#ead2b6"}
          },
          {
            "head": {"fc": "#000", "bc": "#89c54b"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#f1f7e9"},
            "foot": {"fc": "#000", "bc": "#c5e3a7"}
          },
          {
            "head": {"fc": "#000", "bc": "#8f88f0"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#f0e5ff"},
            "foot": {"fc": "#000", "bc": "#c6c4f6"}
          },
          {
            "head": {"fc": "#000", "bc": "#fd1664"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#feddee"},
            "foot": {"fc": "#000", "bc": "#f98ab5"}
          },
          {
            "head": {"fc": "#000", "bc": "#da96d3"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#fce8fb"},
            "foot": {"fc": "#000", "bc": "#f2caee"}
          },
          {
            "head": {"fc": "#000", "bc": "#b49191"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#f5ebe8"},
            "foot": {"fc": "#000", "bc": "#d8c3c3"}
          },
          {
            "head": {"fc": "#000", "bc": "#91b493"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#f0fbf0"},
            "foot": {"fc": "#000", "bc": "#b4cfb6"}
          },
          {
            "head": {"fc": "#000", "bc": "#b4a891"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#f8f6f1"},
            "foot": {"fc": "#000", "bc": "#d3cab8"}
          },
          {
            "head": {"fc": "#000", "bc": "#91abb4"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#eff7fa"},
            "foot": {"fc": "#000", "bc": "#b7cbd3"}
          },
          {
            "head": {"fc": "#000", "bc": "#b7ba82"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#fafbeb"},
            "foot": {"fc": "#000", "bc": "#dadcb4"}
          },
          {
            "head": {"fc": "#000", "bc": "#df3e3e"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#fde9e9"},
            "foot": {"fc": "#000", "bc": "#f89292"}
          },
          {
            "head": {"fc": "#000", "bc": "#f2711c"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#fef0d7"},
            "foot": {"fc": "#000", "bc": "#fbb335"}
          },
          {
            "head": {"fc": "#000", "bc": "#b5cc18"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#f9fbd4"},
            "foot": {"fc": "#000", "bc": "#e2ed2a"}
          },
          {
            "head": {"fc": "#000", "bc": "#00b5ad"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#ccfaf9"},
            "foot": {"fc": "#000", "bc": "#00e4df"}
          },
          {
            "head": {"fc": "#000", "bc": "#2185d0"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#d8f3fc"},
            "foot": {"fc": "#000", "bc": "#3cc4f0"}
          },
          {
            "head": {"fc": "#000", "bc": "#a5673f"},
            "one": {"fc": "#000", "bc": "#ffffff"},
            "two": {"fc": "#000", "bc": "#f6ede5"},
            "foot": {"fc": "#000", "bc": "#d3a47c"}
          }
        ],
        getModelBox: function(hasRowHeader, hasRowFooter) {
          let _this = this;
          $("#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-modelList").empty();
          $("#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-modelCustom").empty();
          let modelListHtml = "";
          for (let i2 = 0; i2 < _this.FixedModelColor.length; i2++) {
            let obj = _this.FixedModelColor[i2];
            let color1, color2, color3, color4;
            if (hasRowHeader && hasRowFooter) {
              color1 = obj["head"];
              color2 = obj["one"];
              color3 = obj["two"];
              color4 = obj["foot"];
            } else if (hasRowHeader) {
              color1 = obj["head"];
              color2 = obj["one"];
              color3 = obj["two"];
              color4 = obj["one"];
            } else if (hasRowFooter) {
              color1 = obj["one"];
              color2 = obj["two"];
              color3 = obj["one"];
              color4 = obj["foot"];
            } else {
              color1 = obj["one"];
              color2 = obj["two"];
              color3 = obj["one"];
              color4 = obj["two"];
            }
            modelListHtml += '<div class="modelbox"><div class="box"><span style="color:' + color1["fc"] + ";background-color:" + color1["bc"] + '"> \u2014 </span><span style="color:' + color2["fc"] + ";background-color:" + color2["bc"] + '"> \u2014 </span><span style="color:' + color3["fc"] + ";background-color:" + color3["bc"] + '"> \u2014 </span><span style="color:' + color4["fc"] + ";background-color:" + color4["bc"] + '"> \u2014 </span></div></div>';
          }
          $("#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-modelList").append(modelListHtml);
          let modelCustom = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_alternateformat_save_modelCustom"];
          if (modelCustom != null && modelCustom.length > 0) {
            let modelCustomHtml = "";
            for (let i2 = 0; i2 < modelCustom.length; i2++) {
              let obj = modelCustom[i2];
              let color1, color2, color3, color4;
              if (hasRowHeader && hasRowFooter) {
                color1 = obj["head"];
                color2 = obj["one"];
                color3 = obj["two"];
                color4 = obj["foot"];
              } else if (hasRowHeader) {
                color1 = obj["head"];
                color2 = obj["one"];
                color3 = obj["two"];
                color4 = obj["one"];
              } else if (hasRowFooter) {
                color1 = obj["one"];
                color2 = obj["two"];
                color3 = obj["one"];
                color4 = obj["foot"];
              } else {
                color1 = obj["one"];
                color2 = obj["two"];
                color3 = obj["one"];
                color4 = obj["two"];
              }
              modelCustomHtml += '<div class="modelbox"><div class="box"><span style="color:' + color1["fc"] + ";background-color:" + color1["bc"] + '"> \u2014 </span><span style="color:' + color2["fc"] + ";background-color:" + color2["bc"] + '"> \u2014 </span><span style="color:' + color3["fc"] + ";background-color:" + color3["bc"] + '"> \u2014 </span><span style="color:' + color4["fc"] + ";background-color:" + color4["bc"] + '"> \u2014 </span></div></div>';
            }
            $("#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-modelCustom").append(modelCustomHtml);
          }
        },
        init: function() {
          let _this = this;
          $("#luckysheet-modal-dialog-slider-alternateformat").remove();
          $("body").append(luckysheetAlternateformatHtml());
          luckysheetsizeauto();
          $("#luckysheet-modal-dialog-slider-alternateformat .luckysheet-model-close-btn").click(function() {
            $("#luckysheet-modal-dialog-slider-alternateformat").hide();
            luckysheetsizeauto();
          });
          $(document).off("focus.AFrangeInput").on("focus.AFrangeInput", "#luckysheet-alternateformat-range input", function() {
            _this.rangefocus = true;
          });
          $(document).off("blur.AFrangeInput").on("blur.AFrangeInput", "#luckysheet-alternateformat-range input", function() {
            _this.rangefocus = false;
          });
          $(document).off("keydown.AFrangeInput").on("keydown.AFrangeInput", "#luckysheet-alternateformat-range input", function(e) {
            let rangeValue = $(this).val().trim();
            if (e.keyCode == 13) {
              _this.update();
            }
          });
          $(document).off("click.AFrangeIcon").on("click.AFrangeIcon", "#luckysheet-alternateformat-range .fa-table", function() {
            $("#luckysheet-modal-dialog-slider-alternateformat").hide();
            luckysheetsizeauto();
            let rangeValue = $(this).parents("#luckysheet-alternateformat-range").find("input").val().trim();
            _this.rangeDialog(rangeValue);
          });
          $(document).off("click.AFrDCf").on("click.AFrDCf", "#luckysheet-alternateformat-rangeDialog-confirm", function() {
            let rangeValue = $(this).parents("#luckysheet-alternateformat-rangeDialog").find("input").val().trim();
            $("#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-range input").val(rangeValue);
            $(this).parents("#luckysheet-alternateformat-rangeDialog").hide();
            $("#luckysheet-modal-dialog-slider-alternateformat").show();
            luckysheetsizeauto();
            _this.update();
          });
          $(document).off("click.AFrDCl").on("click.AFrDCl", "#luckysheet-alternateformat-rangeDialog-close", function() {
            $(this).parents("#luckysheet-alternateformat-rangeDialog").hide();
            $("#luckysheet-modal-dialog-slider-alternateformat").show();
            luckysheetsizeauto();
          });
          $(document).off("click.AFrDTitle").on("click.AFrDTitle", "#luckysheet-alternateformat-rangeDialog .luckysheet-modal-dialog-title-close", function() {
            $(this).parents("#luckysheet-alternateformat-rangeDialog").hide();
            $("#luckysheet-modal-dialog-slider-alternateformat").show();
            luckysheetsizeauto();
          });
          $(document).off("change.AFrowHeader").on("change.AFrowHeader", "#luckysheet-alternateformat-rowHeader", function() {
            let hasRowHeader;
            if ($(this).is(":checked")) {
              hasRowHeader = true;
            } else {
              hasRowHeader = false;
            }
            let hasRowFooter;
            if ($("#luckysheet-alternateformat-rowFooter").is(":checked")) {
              hasRowFooter = true;
            } else {
              hasRowFooter = false;
            }
            _this.checkboxChange(hasRowHeader, hasRowFooter);
            _this.modelboxOn();
            _this.update();
          });
          $(document).off("change.AFrowFooter").on("change.AFrowFooter", "#luckysheet-alternateformat-rowFooter", function() {
            let hasRowHeader;
            if ($("#luckysheet-alternateformat-rowHeader").is(":checked")) {
              hasRowHeader = true;
            } else {
              hasRowHeader = false;
            }
            let hasRowFooter;
            if ($(this).is(":checked")) {
              hasRowFooter = true;
            } else {
              hasRowFooter = false;
            }
            _this.checkboxChange(hasRowHeader, hasRowFooter);
            _this.modelboxOn();
            _this.update();
          });
          $(document).off("click.AFmodelbox").on("click.AFmodelbox", "#luckysheet-modal-dialog-slider-alternateformat .modelbox", function() {
            let index2 = $(this).index();
            let $id = $(this).parents(".cf").attr("id");
            if ($id == "luckysheet-alternateformat-modelList") {
              _this.modelfocusIndex = index2;
            } else if ($id == "luckysheet-alternateformat-modelCustom") {
              let len = _this.FixedModelColor.length;
              _this.modelfocusIndex = index2 + len;
            }
            _this.modelboxOn();
            _this.update();
          });
          $(document).off("click.AFselectColor").on("click.AFselectColor", "#luckysheet-modal-dialog-slider-alternateformat .luckysheet-color-menu-button-indicator", function() {
            let $parent = $(this).closest(".toningbox");
            let colorType, currenColor;
            if ($(this).find(".luckysheet-icon-img").hasClass("luckysheet-icon-text-color")) {
              colorType = "fc";
              currenColor = $parent.find(".toningShow").data("fc");
            } else if ($(this).find(".luckysheet-icon-img").hasClass("luckysheet-icon-cell-color")) {
              colorType = "bc";
              currenColor = $parent.find(".toningShow").data("bc");
            }
            let source;
            if ($parent.hasClass("header")) {
              source = "0";
            } else if ($parent.hasClass("ctOne")) {
              source = "1";
            } else if ($parent.hasClass("ctTwo")) {
              source = "2";
            } else if ($parent.hasClass("footer")) {
              source = "3";
            }
            _this.colorSelectDialog(currenColor, colorType, source);
          });
          $(document).off("click.AFselectColorConfirm").on("click.AFselectColorConfirm", "#luckysheet-alternateformat-colorSelect-dialog-confirm", function() {
            let $parent = $(this).parents("#luckysheet-alternateformat-colorSelect-dialog");
            const _locale = locale_default();
            const alternatingColors = _locale.alternatingColors;
            $("#luckysheet-modal-dialog-mask").hide();
            $parent.hide();
            let currenColor = $parent.find(".currenColor span").attr("title");
            let colorType;
            if ($parent.find(".luckysheet-modal-dialog-title-text").text() == alternatingColors.selectionTextColor) {
              colorType = "fc";
            } else if ($parent.find(".luckysheet-modal-dialog-title-text").text() == alternatingColors.selectionCellColor) {
              colorType = "bc";
            }
            let source = $parent.find(".currenColor").attr("data-source");
            if (source == "0") {
              if (colorType == "fc") {
                $("#luckysheet-alternateformat-modelToning .header .toningShow").css("color", currenColor);
                $("#luckysheet-alternateformat-modelToning .header .toningShow").data("fc", currenColor);
                $("#luckysheet-alternateformat-modelToning .header .luckysheet-icon-text-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", currenColor);
              }
              if (colorType == "bc") {
                $("#luckysheet-alternateformat-modelToning .header .toningShow").css("background-color", currenColor);
                $("#luckysheet-alternateformat-modelToning .header .toningShow").data("bc", currenColor);
                $("#luckysheet-alternateformat-modelToning .header .luckysheet-icon-cell-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", currenColor);
              }
            } else if (source == "1") {
              if (colorType == "fc") {
                $("#luckysheet-alternateformat-modelToning .ctOne .toningShow").css("color", currenColor);
                $("#luckysheet-alternateformat-modelToning .ctOne .toningShow").data("fc", currenColor);
                $("#luckysheet-alternateformat-modelToning .ctOne .luckysheet-icon-text-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", currenColor);
              }
              if (colorType == "bc") {
                $("#luckysheet-alternateformat-modelToning .ctOne .toningShow").css("background-color", currenColor);
                $("#luckysheet-alternateformat-modelToning .ctOne .toningShow").data("bc", currenColor);
                $("#luckysheet-alternateformat-modelToning .ctOne .luckysheet-icon-cell-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", currenColor);
              }
            } else if (source == "2") {
              if (colorType == "fc") {
                $("#luckysheet-alternateformat-modelToning .ctTwo .toningShow").css("color", currenColor);
                $("#luckysheet-alternateformat-modelToning .ctTwo .toningShow").data("fc", currenColor);
                $("#luckysheet-alternateformat-modelToning .ctTwo .luckysheet-icon-text-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", currenColor);
              }
              if (colorType == "bc") {
                $("#luckysheet-alternateformat-modelToning .ctTwo .toningShow").css("background-color", currenColor);
                $("#luckysheet-alternateformat-modelToning .ctTwo .toningShow").data("bc", currenColor);
                $("#luckysheet-alternateformat-modelToning .ctTwo .luckysheet-icon-cell-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", currenColor);
              }
            } else if (source == "3") {
              if (colorType == "fc") {
                $("#luckysheet-alternateformat-modelToning .footer .toningShow").css("color", currenColor);
                $("#luckysheet-alternateformat-modelToning .footer .toningShow").data("fc", currenColor);
                $("#luckysheet-alternateformat-modelToning .footer .luckysheet-icon-text-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", currenColor);
              }
              if (colorType == "bc") {
                $("#luckysheet-alternateformat-modelToning .footer .toningShow").css("background-color", currenColor);
                $("#luckysheet-alternateformat-modelToning .footer .toningShow").data("bc", currenColor);
                $("#luckysheet-alternateformat-modelToning .footer .luckysheet-icon-cell-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", currenColor);
              }
            }
            let hasRowHeader;
            if ($("#luckysheet-alternateformat-rowHeader").is(":checked")) {
              hasRowHeader = true;
            } else {
              hasRowHeader = false;
            }
            let hasRowFooter;
            if ($("#luckysheet-alternateformat-rowFooter").is(":checked")) {
              hasRowFooter = true;
            } else {
              hasRowFooter = false;
            }
            let index2 = _this.modelfocusIndex;
            let len = _this.FixedModelColor.length;
            let format, file;
            if (index2 < len) {
              format = $.extend(true, {}, _this.getFormatByIndex());
            } else {
              file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
              let modelCustom = file["luckysheet_alternateformat_save_modelCustom"];
              format = $.extend(true, {}, modelCustom[index2 - len]);
            }
            if (source == "0") {
              if (colorType == "fc") {
                format["head"]["fc"] = currenColor;
              } else if (colorType == "bc") {
                format["head"]["bc"] = currenColor;
              }
            } else if (source == "1") {
              if (colorType == "fc") {
                format["one"]["fc"] = currenColor;
              } else if (colorType == "bc") {
                format["one"]["bc"] = currenColor;
              }
            } else if (source == "2") {
              if (colorType == "fc") {
                format["two"]["fc"] = currenColor;
              } else if (colorType == "bc") {
                format["two"]["bc"] = currenColor;
              }
            } else if (source == "3") {
              if (colorType == "fc") {
                format["foot"]["fc"] = currenColor;
              }
              if (colorType == "bc") {
                format["foot"]["bc"] = currenColor;
              }
            }
            if (_this.modelfocusIndex < len) {
              _this.addCustomModel(format);
              _this.modelfocusIndex = _this.getIndexByFormat(format);
            } else {
              file["luckysheet_alternateformat_save_modelCustom"][index2 - len] = format;
              if (server_default.allowUpdate) {
                server_default.saveParam("all", store_default.currentSheetIndex, file["luckysheet_alternateformat_save_modelCustom"], {"k": "luckysheet_alternateformat_save_modelCustom"});
              }
            }
            _this.getModelBox(hasRowHeader, hasRowFooter);
            _this.modelboxOn();
            _this.update();
          });
          $(document).off("click.AFremove").on("click.AFremove", "#luckysheet-alternateformat-remove", function() {
            let dataIndex = $(this).data("index");
            let file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
            let ruleArr2 = file["luckysheet_alternateformat_save"];
            let historyRules = $.extend(true, [], ruleArr2);
            if (ruleArr2.length > 1) {
              ruleArr2.splice(dataIndex, 1);
            } else {
              ruleArr2 = [];
            }
            let currentRules = $.extend(true, [], ruleArr2);
            _this.ref(historyRules, currentRules);
            if (server_default.allowUpdate) {
              server_default.saveParam("all", store_default.currentSheetIndex, ruleArr2, {"k": "luckysheet_alternateformat_save"});
            }
            $("#luckysheet-modal-dialog-mask").hide();
            $("#luckysheet-modal-dialog-slider-alternateformat").hide();
            luckysheetsizeauto();
          });
        },
        perfect: function() {
          let _this = this;
          let range2 = $.extend(true, {}, store_default.luckysheet_select_save[0]);
          let existsIndex = _this.rangeIsExists(range2)[1];
          let obj = $.extend(true, {}, store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_alternateformat_save"][existsIndex]);
          let cellrange = obj["cellrange"];
          $("#luckysheet-alternateformat-range input").val(getRangetxt(store_default.currentSheetIndex, {"row": cellrange["row"], "column": cellrange["column"]}, store_default.currentSheetIndex));
          store_default.luckysheet_select_save = [{"row": cellrange["row"], "column": cellrange["column"]}];
          selectHightlightShow();
          let hasRowHeader = obj["hasRowHeader"];
          let hasRowFooter = obj["hasRowFooter"];
          let format = obj["format"];
          _this.modelfocusIndex = _this.getIndexByFormat(format);
          if (_this.modelfocusIndex == null) {
            _this.addCustomModel(format);
            _this.modelfocusIndex = _this.getIndexByFormat(format);
          }
          _this.checkboxChange(hasRowHeader, hasRowFooter);
          _this.modelboxOn();
          $("#luckysheet-alternateformat-remove").data("index", existsIndex);
        },
        checkboxChange: function(hasRowHeader, hasRowFooter) {
          if (hasRowHeader) {
            $("#luckysheet-alternateformat-rowHeader").prop("checked", true);
            $("#luckysheet-alternateformat-modelToning .header").show();
          } else {
            $("#luckysheet-alternateformat-rowHeader").removeAttr("checked");
            $("#luckysheet-alternateformat-modelToning .header").hide();
          }
          if (hasRowFooter) {
            $("#luckysheet-alternateformat-rowFooter").prop("checked", true);
            $("#luckysheet-alternateformat-modelToning .footer").show();
          } else {
            $("#luckysheet-alternateformat-rowFooter").removeAttr("checked");
            $("#luckysheet-alternateformat-modelToning .footer").hide();
          }
          this.getModelBox(hasRowHeader, hasRowFooter);
        },
        modelboxOn: function() {
          let _this = this;
          $("#luckysheet-modal-dialog-slider-alternateformat .modelbox").removeClass("on");
          let index2 = _this.modelfocusIndex;
          let len = _this.FixedModelColor.length;
          if (index2 < len) {
            $("#luckysheet-alternateformat-modelList .modelbox").eq(index2).addClass("on");
          } else {
            $("#luckysheet-alternateformat-modelCustom .modelbox").eq(index2 - len).addClass("on");
          }
          _this.modelToningColor();
        },
        modelToningColor: function() {
          let format = this.getFormatByIndex();
          $("#luckysheet-alternateformat-modelToning .header .toningShow").css({"color": format["head"].fc, "background-color": format["head"].bc});
          $("#luckysheet-alternateformat-modelToning .header .toningShow").data("fc", format["head"].fc).data("bc", format["head"].bc);
          $("#luckysheet-alternateformat-modelToning .header .luckysheet-icon-text-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", format["head"].fc);
          $("#luckysheet-alternateformat-modelToning .header .luckysheet-icon-cell-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", format["head"].bc);
          $("#luckysheet-alternateformat-modelToning .ctOne .toningShow").css({"color": format["one"].fc, "background-color": format["one"].bc});
          $("#luckysheet-alternateformat-modelToning .ctOne .toningShow").data("fc", format["one"].fc).data("bc", format["one"].bc);
          $("#luckysheet-alternateformat-modelToning .ctOne .luckysheet-icon-text-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", format["one"].fc);
          $("#luckysheet-alternateformat-modelToning .ctOne .luckysheet-icon-cell-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", format["one"].bc);
          $("#luckysheet-alternateformat-modelToning .ctTwo .toningShow").css({"color": format["two"].fc, "background-color": format["two"].bc});
          $("#luckysheet-alternateformat-modelToning .ctTwo .toningShow").data("fc", format["two"].fc).data("bc", format["two"].bc);
          $("#luckysheet-alternateformat-modelToning .ctTwo .luckysheet-icon-text-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", format["two"].fc);
          $("#luckysheet-alternateformat-modelToning .ctTwo .luckysheet-icon-cell-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", format["two"].bc);
          $("#luckysheet-alternateformat-modelToning .footer .toningShow").css({"color": format["foot"].fc, "background-color": format["foot"].bc});
          $("#luckysheet-alternateformat-modelToning .footer .toningShow").data("fc", format["foot"].fc).data("bc", format["foot"].bc);
          $("#luckysheet-alternateformat-modelToning .footer .luckysheet-icon-text-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", format["foot"].fc);
          $("#luckysheet-alternateformat-modelToning .footer .luckysheet-icon-cell-color").parents(".luckysheet-color-menu-button-indicator").css("border-bottom-color", format["foot"].bc);
        },
        addCustomModel: function(format) {
          let file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
          if (file["luckysheet_alternateformat_save_modelCustom"] == null) {
            file["luckysheet_alternateformat_save_modelCustom"] = [];
          }
          file["luckysheet_alternateformat_save_modelCustom"].push(format);
          if (server_default.allowUpdate) {
            server_default.saveParam("all", store_default.currentSheetIndex, file["luckysheet_alternateformat_save_modelCustom"], {"k": "luckysheet_alternateformat_save_modelCustom"});
          }
        },
        colorSelectDialog: function(currenColor, colorType, source) {
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-alternateformat-colorSelect-dialog").remove();
          const _locale = locale_default();
          const alternatingColors = _locale.alternatingColors;
          const locale_button = _locale.button;
          const locale_toolbar = _locale.toolbar;
          let title;
          if (colorType == "fc") {
            title = alternatingColors.selectionTextColor;
          } else if (colorType == "bc") {
            title = alternatingColors.selectionCellColor;
          }
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-alternateformat-colorSelect-dialog",
            "addclass": "luckysheet-alternateformat-colorSelect-dialog",
            "title": title,
            "content": "<div class='currenColor' data-source='" + source + "'>" + alternatingColors.currentColor + "\uFF1A<span title='" + currenColor + "' style='background-color:" + currenColor + "'></span></div><div class='colorshowbox'></div>",
            "botton": '<button id="luckysheet-alternateformat-colorSelect-dialog-confirm" class="btn btn-primary">' + locale_button.confirm + '</button><button class="btn btn-default luckysheet-model-close-btn">' + locale_button.cancel + "</button>",
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-alternateformat-colorSelect-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-alternateformat-colorSelect-dialog").css({
            "left": (winw + scrollLeft - myw) / 2,
            "top": (winh + scrollTop - myh) / 3
          }).show();
          $("#luckysheet-alternateformat-colorSelect-dialog").find(".colorshowbox").spectrum({
            showPalette: true,
            showPaletteOnly: true,
            preferredFormat: "hex",
            clickoutFiresChange: false,
            showInitial: true,
            showInput: true,
            flat: true,
            hideAfterPaletteSelect: true,
            showSelectionPalette: true,
            showButtons: false,
            maxPaletteSize: 8,
            maxSelectionSize: 8,
            color: currenColor,
            cancelText: locale_button.cancel,
            chooseText: locale_toolbar.confirmColor,
            togglePaletteMoreText: locale_toolbar.customColor,
            togglePaletteLessText: locale_toolbar.collapse,
            togglePaletteOnly: true,
            clearText: locale_toolbar.clearText,
            noColorSelectedText: locale_toolbar.noColorSelectedText,
            localStorageKey: "spectrum.textcolor" + server_default.gridKey,
            palette: [
              ["#000", "#444", "#666", "#999", "#ccc", "#eee", "#f3f3f3", "#fff"],
              ["#f00", "#f90", "#ff0", "#0f0", "#0ff", "#00f", "#90f", "#f0f"],
              ["#f4cccc", "#fce5cd", "#fff2cc", "#d9ead3", "#d0e0e3", "#cfe2f3", "#d9d2e9", "#ead1dc"],
              ["#ea9999", "#f9cb9c", "#ffe599", "#b6d7a8", "#a2c4c9", "#9fc5e8", "#b4a7d6", "#d5a6bd"],
              ["#e06666", "#f6b26b", "#ffd966", "#93c47d", "#76a5af", "#6fa8dc", "#8e7cc3", "#c27ba0"],
              ["#c00", "#e69138", "#f1c232", "#6aa84f", "#45818e", "#3d85c6", "#674ea7", "#a64d79"],
              ["#900", "#b45f06", "#bf9000", "#38761d", "#134f5c", "#0b5394", "#351c75", "#741b47"],
              ["#600", "#783f04", "#7f6000", "#274e13", "#0c343d", "#073763", "#20124d", "#4c1130"]
            ],
            move: function(color) {
              if (color != null) {
                color = color.toHexString();
              } else {
                color = "#000";
              }
              $("#luckysheet-alternateformat-colorSelect-dialog .currenColor span").css("background-color", color).attr("title", color);
            }
          });
        },
        rangeDialog: function(value) {
          $("#luckysheet-modal-dialog-mask").hide();
          $("#luckysheet-alternateformat-rangeDialog").remove();
          const _locale = locale_default();
          const alternatingColors = _locale.alternatingColors;
          const locale_button = _locale.button;
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-alternateformat-rangeDialog",
            "addclass": "luckysheet-alternateformat-rangeDialog",
            "title": alternatingColors.selectRange,
            "content": '<input readonly="readonly" placeholder="' + alternatingColors.tipSelectRange + '" value="' + value + '"/>',
            "botton": '<button id="luckysheet-alternateformat-rangeDialog-confirm" class="btn btn-primary">' + locale_button.confirm + '</button><button id="luckysheet-alternateformat-rangeDialog-close" class="btn btn-default">' + locale_button.cancel + "</button>",
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-alternateformat-rangeDialog").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-alternateformat-rangeDialog").css({
            "left": (winw + scrollLeft - myw) / 2,
            "top": (winh + scrollTop - myh) / 3
          }).show();
        },
        rangeIsExists: function(range2, index2) {
          let _this = this;
          let isExists = false;
          let existsIndex = null;
          let AFarr = $.extend(true, [], store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_alternateformat_save"]);
          if (index2 != void 0 && index2 != null) {
            if (AFarr.length > 1) {
              AFarr.splice(index2, 1);
            } else {
              AFarr = [];
            }
          }
          if (AFarr.length > 0) {
            let arr = [];
            for (let i2 = 0; i2 < AFarr.length; i2++) {
              let obj = {
                "index": i2,
                "map": _this.getRangeMap(AFarr[i2]["cellrange"]["row"], AFarr[i2]["cellrange"]["column"])
              };
              arr.push(obj);
            }
            let rangeMap = _this.getRangeMap(range2["row"], range2["column"]);
            for (let x in rangeMap) {
              if (isExists) {
                break;
              }
              for (let j = 0; j < arr.length; j++) {
                if (x in arr[j]["map"]) {
                  isExists = true;
                  existsIndex = arr[j]["index"];
                  break;
                }
              }
            }
          }
          return [isExists, existsIndex];
        },
        getRangeMap: function(row, column) {
          let map = {};
          let st_r = row[0], ed_r = row[1], st_c = column[0], ed_c = column[1];
          for (let r2 = st_r; r2 <= ed_r; r2++) {
            for (let c2 = st_c; c2 <= ed_c; c2++) {
              map[r2 + "_" + c2] = 0;
            }
          }
          return map;
        },
        getIndexByFormat: function(format) {
          let _this = this;
          let index2 = null;
          let modelList = _this.FixedModelColor;
          for (let i2 = 0; i2 < modelList.length; i2++) {
            let obj = modelList[i2];
            if (format["head"].fc == obj["head"].fc && format["head"].bc == obj["head"].bc) {
              if (format["one"].fc == obj["one"].fc && format["one"].bc == obj["one"].bc) {
                if (format["two"].fc == obj["two"].fc && format["two"].bc == obj["two"].bc) {
                  if (format["foot"].fc == obj["foot"].fc && format["foot"].bc == obj["foot"].bc) {
                    index2 = i2;
                    break;
                  }
                }
              }
            }
          }
          let modelCustom = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_alternateformat_save_modelCustom"];
          if (modelCustom != null && modelCustom.length > 0) {
            for (let j = 0; j < modelCustom.length; j++) {
              let obj = modelCustom[j];
              if (format["head"].fc == obj["head"].fc && format["head"].bc == obj["head"].bc) {
                if (format["one"].fc == obj["one"].fc && format["one"].bc == obj["one"].bc) {
                  if (format["two"].fc == obj["two"].fc && format["two"].bc == obj["two"].bc) {
                    if (format["foot"].fc == obj["foot"].fc && format["foot"].bc == obj["foot"].bc) {
                      index2 = modelList.length + j;
                      break;
                    }
                  }
                }
              }
            }
          }
          return index2;
        },
        getFormatByIndex: function() {
          let _this = this;
          let index2 = _this.modelfocusIndex;
          let len = _this.FixedModelColor.length;
          let format = {};
          if (index2 < len) {
            format = _this.FixedModelColor[index2];
          } else {
            format = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_alternateformat_save_modelCustom"][index2 - len];
          }
          return format;
        },
        new: function(cellrange) {
          let _this = this;
          let format = _this.getFormatByIndex();
          let file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
          let ruleArr2 = file["luckysheet_alternateformat_save"];
          if (ruleArr2 == null) {
            ruleArr2 = [];
          }
          let historyRules = $.extend(true, [], ruleArr2);
          let obj = {
            "cellrange": {
              "row": cellrange["row"],
              "column": cellrange["column"]
            },
            "format": format,
            "hasRowHeader": true,
            "hasRowFooter": false
          };
          ruleArr2.push(obj);
          let currentRules = $.extend(true, [], ruleArr2);
          _this.ref(historyRules, currentRules);
          if (server_default.allowUpdate) {
            server_default.saveParam("all", store_default.currentSheetIndex, ruleArr2, {"k": "luckysheet_alternateformat_save"});
          }
        },
        update: function() {
          let _this = this;
          const _locale = locale_default();
          const alternatingColors = _locale.alternatingColors;
          let dataIndex = $("#luckysheet-alternateformat-remove").data("index");
          let rangeValue = $("#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-range input").val().trim();
          if (!formula_default.iscelldata(rangeValue)) {
            if (isEditMode()) {
              alert(alternatingColors.errorNoRange);
            } else {
              tooltip_default.info(alternatingColors.errorNoRange, "");
            }
            return;
          }
          let cellrange = formula_default.getcellrange(rangeValue);
          let isExists = _this.rangeIsExists(cellrange, dataIndex)[0];
          if (isExists) {
            if (isEditMode()) {
              alert(alternatingColors.errorExistColors);
            } else {
              tooltip_default.info(alternatingColors.errorExistColors, "");
            }
            return;
          }
          let hasRowHeader;
          if ($("#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-rowHeader").is(":checked")) {
            hasRowHeader = true;
          } else {
            hasRowHeader = false;
          }
          let hasRowFooter;
          if ($("#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-rowFooter").is(":checked")) {
            hasRowFooter = true;
          } else {
            hasRowFooter = false;
          }
          let format = _this.getFormatByIndex();
          let file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
          let ruleArr2 = file["luckysheet_alternateformat_save"];
          if (ruleArr2 == null) {
            ruleArr2 = [];
          }
          let historyRules = $.extend(true, [], ruleArr2);
          let obj = {
            "cellrange": {
              "row": cellrange["row"],
              "column": cellrange["column"]
            },
            "format": format,
            "hasRowHeader": hasRowHeader,
            "hasRowFooter": hasRowFooter
          };
          ruleArr2[dataIndex] = obj;
          let currentRules = $.extend(true, [], ruleArr2);
          _this.ref(historyRules, currentRules);
          if (server_default.allowUpdate) {
            server_default.saveParam("all", store_default.currentSheetIndex, ruleArr2, {"k": "luckysheet_alternateformat_save"});
          }
        },
        checksAF: function(r2, c2, computeMap2) {
          if (r2 + "_" + c2 in computeMap2) {
            return computeMap2[r2 + "_" + c2];
          } else {
            return null;
          }
        },
        getComputeMap: function() {
          let file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
          let ruleArr2 = file["luckysheet_alternateformat_save"];
          let computeMap2 = this.compute(ruleArr2);
          return computeMap2;
        },
        compute: function(obj) {
          let computeMap2 = {};
          if (obj != null && obj.length > 0) {
            for (let i2 = 0; i2 < obj.length; i2++) {
              let cellrange = obj[i2]["cellrange"];
              let format = obj[i2]["format"];
              let hasRowHeader = obj[i2]["hasRowHeader"];
              let hasRowFooter = obj[i2]["hasRowFooter"];
              let st_r = cellrange["row"][0], ed_r = cellrange["row"][1], st_c = cellrange["column"][0], ed_c = cellrange["column"][1];
              if (hasRowHeader && hasRowFooter) {
                for (let c2 = st_c; c2 <= ed_c; c2++) {
                  computeMap2[st_r + "_" + c2] = [format["head"].fc, format["head"].bc];
                }
                if (ed_r - st_r > 1) {
                  for (let r2 = st_r + 1; r2 < ed_r; r2++) {
                    let fc, bc;
                    if ((r2 - st_r) % 2 != 0) {
                      fc = format["one"].fc;
                      bc = format["one"].bc;
                    } else {
                      fc = format["two"].fc;
                      bc = format["two"].bc;
                    }
                    for (let c2 = st_c; c2 <= ed_c; c2++) {
                      computeMap2[r2 + "_" + c2] = [fc, bc];
                    }
                  }
                }
                if (ed_r > st_r) {
                  for (let c2 = st_c; c2 <= ed_c; c2++) {
                    computeMap2[ed_r + "_" + c2] = [format["foot"].fc, format["foot"].bc];
                  }
                }
              } else if (hasRowHeader) {
                for (let c2 = st_c; c2 <= ed_c; c2++) {
                  computeMap2[st_r + "_" + c2] = [format["head"].fc, format["head"].bc];
                }
                if (ed_r > st_r) {
                  for (let r2 = st_r + 1; r2 <= ed_r; r2++) {
                    let fc, bc;
                    if ((r2 - st_r) % 2 != 0) {
                      fc = format["one"].fc;
                      bc = format["one"].bc;
                    } else {
                      fc = format["two"].fc;
                      bc = format["two"].bc;
                    }
                    for (let c2 = st_c; c2 <= ed_c; c2++) {
                      computeMap2[r2 + "_" + c2] = [fc, bc];
                    }
                  }
                }
              } else if (hasRowFooter) {
                if (ed_r > st_r) {
                  for (let r2 = st_r; r2 < ed_r; r2++) {
                    let fc, bc;
                    if ((r2 - st_r) % 2 == 0) {
                      fc = format["one"].fc;
                      bc = format["one"].bc;
                    } else {
                      fc = format["two"].fc;
                      bc = format["two"].bc;
                    }
                    for (let c2 = st_c; c2 <= ed_c; c2++) {
                      computeMap2[r2 + "_" + c2] = [fc, bc];
                    }
                  }
                }
                for (let c2 = st_c; c2 <= ed_c; c2++) {
                  computeMap2[ed_r + "_" + c2] = [format["foot"].fc, format["foot"].bc];
                }
              } else {
                for (let r2 = st_r; r2 <= ed_r; r2++) {
                  let fc, bc;
                  if ((r2 - st_r) % 2 == 0) {
                    fc = format["one"].fc;
                    bc = format["one"].bc;
                  } else {
                    fc = format["two"].fc;
                    bc = format["two"].bc;
                  }
                  for (let c2 = st_c; c2 <= ed_c; c2++) {
                    computeMap2[r2 + "_" + c2] = [fc, bc];
                  }
                }
              }
            }
          }
          return computeMap2;
        },
        ref: function(historyRules, currentRules) {
          if (store_default.clearjfundo) {
            store_default.jfundo.length = 0;
            let redo2 = {};
            redo2["type"] = "updateAF";
            redo2["sheetIndex"] = store_default.currentSheetIndex;
            redo2["data"] = {"historyRules": historyRules, "currentRules": currentRules};
            store_default.jfredo.push(redo2);
          }
          let index2 = getSheetIndex(store_default.currentSheetIndex);
          store_default.luckysheetfile[index2]["luckysheet_alternateformat_save"] = currentRules;
          setTimeout(function() {
            luckysheetrefreshgrid();
          }, 1);
        }
      };
      alternateformat_default = alternateformat;
    }
  });

  // src/global/json.js
  var json, json_default;
  var init_json = __esm({
    "src/global/json.js"() {
      init_util();
      json = {
        parseJsonParm: function(obj) {
          if (obj == null) {
            return {};
          } else if (getObjType(obj) == "string") {
            try {
              let json2 = new Function("return " + obj)();
              return json2;
            } catch (e) {
              return {};
            }
          } else {
            return obj;
          }
        },
        hasKey: function(obj) {
          let _this = this;
          let json2 = _this.parseJsonParm(obj);
          for (let item2 in json2) {
            return true;
          }
          return false;
        }
      };
      json_default = json;
    }
  });

  // src/controllers/filter.js
  function labelFilterOptionState($top, optionstate, rowhidden, caljs, notSave, str, edr, cindex, stc, edc) {
    if (optionstate) {
      $top.addClass("luckysheet-filter-options-active").data("rowhidden", JSON.stringify(rowhidden)).data("caljs", JSON.stringify(caljs)).html('<i class="fa fa-filter luckysheet-mousedown-cancel" aria-hidden="true"></i>');
      if (caljs != null) {
        $top.data("byconditionvalue", caljs["value"]).data("byconditiontype", caljs["type"]).data("byconditiontext", caljs["text"]);
        if (caljs["value1"] != null) {
          $top.data("byconditionvalue1", caljs["value1"]);
        }
        if (caljs["value2"] != null) {
          $top.data("byconditionvalue2", caljs["value2"]);
        }
      }
    } else {
      $top.removeClass("luckysheet-filter-options-active").data("rowhidden", "").data("caljs", "").html('<i class="fa fa-caret-down luckysheet-mousedown-cancel" aria-hidden="true"></i>');
      $top.data("byconditionvalue", "null").data("byconditiontype", "0").data("byconditiontext", "\u65E0").data("byconditionvalue1", "").data("byconditionvalue2", "");
    }
    if (!!notSave) {
      let file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
      if (file.filter == null) {
        file.filter = {};
      }
      if (optionstate) {
        let param = {
          "caljs": caljs,
          "rowhidden": rowhidden,
          "optionstate": optionstate,
          "str": str,
          "edr": edr,
          "cindex": cindex,
          "stc": stc,
          "edc": edc
        };
        file.filter[cindex - stc] = param;
      } else {
        delete file.filter[cindex - stc];
      }
      server_default.saveParam("all", store_default.currentSheetIndex, file.filter, {"k": "filter"});
    }
  }
  function orderbydatafiler(str, stc, edr, edc, index2, asc) {
    let d = editor_default.deepCopyFlowData(store_default.flowdata);
    str = str + 1;
    let hasMc = false;
    let data = [];
    for (let r2 = str; r2 <= edr; r2++) {
      let data_row = [];
      for (let c2 = stc; c2 <= edc; c2++) {
        if (d[r2][c2] != null && d[r2][c2].mc != null) {
          hasMc = true;
          break;
        }
        data_row.push(d[r2][c2]);
      }
      data.push(data_row);
    }
    if (hasMc) {
      const locale_filter = locale_default().filter;
      if (isEditMode()) {
        alert(locale_filter.mergeError);
      } else {
        tooltip_default.info(locale_filter.mergeError, "");
      }
      return;
    }
    data = orderbydata(data, index2 - stc, asc);
    for (let r2 = str; r2 <= edr; r2++) {
      for (let c2 = stc; c2 <= edc; c2++) {
        d[r2][c2] = data[r2 - str][c2 - stc];
      }
    }
    let allParam = {};
    if (store_default.config["rowlen"] != null) {
      let cfg = $.extend(true, {}, store_default.config);
      cfg = rowlenByRange(d, str, edr, cfg);
      allParam = {
        "cfg": cfg,
        "RowlChange": true
      };
    }
    jfrefreshgrid(d, [{"row": [str, edr], "column": [stc, edc]}], allParam);
  }
  function createFilter() {
    if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "filter")) {
      return;
    }
    if (store_default.luckysheet_select_save.length > 1) {
      $("#luckysheet-rightclick-menu").hide();
      $("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
      $("#" + store_default.container).attr("tabindex", 0).focus();
      const locale_splitText = locale_default().splitText;
      if (isEditMode()) {
        alert(locale_splitText.tipNoMulti);
      } else {
        tooltip_default.info(locale_splitText.tipNoMulti, "");
      }
      return;
    }
    if (store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].isPivotTable) {
      return;
    }
    $("#luckysheet-filter-selected-sheet" + store_default.currentSheetIndex + ", #luckysheet-filter-options-sheet" + store_default.currentSheetIndex).remove();
    let last = store_default.luckysheet_select_save[0];
    if (last["row"][0] == last["row"][1] && last["column"][0] == last["column"][1]) {
      let st_c, ed_c, curR = last["row"][1];
      for (let c2 = 0; c2 < store_default.flowdata[curR].length; c2++) {
        let cell = store_default.flowdata[curR][c2];
        if (cell != null && !isRealNull(cell.v)) {
          if (st_c == null) {
            st_c = c2;
          }
        } else if (st_c != null) {
          ed_c = c2 - 1;
          break;
        }
      }
      if (ed_c == null) {
        ed_c = store_default.flowdata[curR].length - 1;
      }
      store_default.luckysheet_select_save = [{"row": [curR, curR], "column": [st_c, ed_c]}];
      selectHightlightShow();
      store_default.luckysheet_shiftpositon = $.extend(true, {}, last);
      luckysheetMoveEndCell("down", "range");
    } else if (last["row"][1] - last["row"][0] < 2) {
      store_default.luckysheet_shiftpositon = $.extend(true, {}, last);
      luckysheetMoveEndCell("down", "range");
    }
    store_default.luckysheet_filter_save = $.extend(true, {}, store_default.luckysheet_select_save[0]);
    createFilterOptions(store_default.luckysheet_filter_save);
    server_default.saveParam("all", store_default.currentSheetIndex, store_default.luckysheet_filter_save, {"k": "filter_select"});
    if (store_default.filterchage) {
      store_default.jfredo.push({
        "type": "filtershow",
        "data": [],
        "curdata": [],
        "sheetIndex": store_default.currentSheetIndex,
        "filter_save": store_default.luckysheet_filter_save
      });
    }
  }
  function createFilterOptions(luckysheet_filter_save, filterObj) {
    $("#luckysheet-filter-selected-sheet" + store_default.currentSheetIndex).remove();
    $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex).remove();
    if (luckysheet_filter_save == null || JSON.stringify(luckysheet_filter_save) == "{}") {
      return;
    }
    let r1 = luckysheet_filter_save.row[0], r2 = luckysheet_filter_save.row[1];
    let c1 = luckysheet_filter_save.column[0], c2 = luckysheet_filter_save.column[1];
    let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
    let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
    let newSelectedHTML = '<div id="luckysheet-filter-selected-sheet' + store_default.currentSheetIndex + '" class="luckysheet-cell-selected luckysheet-filter-selected"  style="left:' + col_pre + "px;width:" + (col - col_pre - 1) + "px;top:" + row_pre + "px;height:" + (row - row_pre - 1) + 'px;display:block;border-color:#897BFF;z-index:20;background:none;"></div>';
    $("#luckysheet-cell-main").append(newSelectedHTML);
    let optionHTML = "";
    for (let c3 = c1; c3 <= c2; c3++) {
      if (filterObj == null || filterObj[c3 - c1] == null) {
        optionHTML += '<div data-rowhidden="" data-str="' + r1 + '" data-edr="' + r2 + '" data-cindex="' + c3 + '" data-stc="' + c1 + '" data-edc="' + c2 + '" class="luckysheet-filter-options" style="left:' + (store_default.visibledatacolumn[c3] - 20) + "px;top:" + row_pre + 'px;display:block;"><i class="fa fa-caret-down" aria-hidden="true"></i></div>';
      } else {
        let caljs_data;
        if (filterObj[c3 - c1].caljs != null) {
          let caljs_value1_data;
          if (filterObj[c3 - c1].caljs["value1"] != null) {
            caljs_value1_data = 'data-byconditionvalue1="' + filterObj[c3 - c1].caljs["value1"] + '" ';
          } else {
            caljs_value1_data = "";
          }
          let caljs_value2_data;
          if (filterObj[c3 - c1].caljs["value2"] != null) {
            caljs_value2_data = 'data-byconditionvalue2="' + filterObj[c3 - c1].caljs["value2"] + '" ';
          } else {
            caljs_value2_data = "";
          }
          caljs_data = 'data-caljs="' + JSON.stringify(filterObj[c3 - c1].caljs) + '" data-byconditionvalue="' + filterObj[c3 - c1].caljs["value"] + '" data-byconditiontype="' + filterObj[c3 - c1].caljs["type"] + '" data-byconditiontext="' + filterObj[c3 - c1].caljs["text"] + '" ' + caljs_value1_data + caljs_value2_data;
        } else {
          caljs_data = "";
        }
        optionHTML += '<div data-rowhidden="' + JSON.stringify(filterObj[c3 - c1].rowhidden).replace(/\"/g, "'") + '" ' + caljs_data + ' data-str="' + r1 + '" data-edr="' + r2 + '" data-cindex="' + c3 + '" data-stc="' + c1 + '" data-edc="' + c2 + '" class="luckysheet-filter-options luckysheet-filter-options-active" style="left:' + (store_default.visibledatacolumn[c3] - 20) + "px;top:" + row_pre + 'px;display:block;"><i class="fa fa-filter luckysheet-mousedown-cancel" aria-hidden="true"></i></div>';
      }
    }
    $("#luckysheet-cell-main").append('<div id="luckysheet-filter-options-sheet' + store_default.currentSheetIndex + '" class="luckysheet-filter-options-c">' + optionHTML + "</div>");
    $("#luckysheet-rightclick-menu").hide();
    $("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
    if ($("#luckysheet-cell-main").scrollTop() > luckysheet_filter_save["top_move"]) {
      $("#luckysheet-scrollbar-y").scrollTop(luckysheet_filter_save["top_move"]);
    }
    let file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
    file.filter_select = luckysheet_filter_save;
  }
  function initialFilterHandler() {
    let hidefilersubmenu = null;
    const _locale = locale_default();
    const locale_filter = _locale.filter;
    const locale_button = _locale.button;
    $("#luckysheetfilter").click(createFilter);
    let submenuhide = null, rightclickmenu = null;
    $(".luckysheet-cols-menu .luckysheet-cols-submenu").hover(function() {
      let $t = $(this), attrid = $t.attr("id"), $attr = $("#" + attrid + "_sub"), $con = $t.parent();
      let winW = $(window).width(), winH = $(window).height();
      let menuW = $con.width(), attrH = $attr.height() + 25, attrW = $attr.width() + 5;
      let offset = $t.offset();
      let top = offset.top, left = offset.left + menuW;
      if (left + attrW > winW) {
        left = offset.left - attrW;
      }
      if (top + attrH > winH) {
        top = winH - attrH;
      }
      $attr.css({"top": top, "left": left}).show();
      rightclickmenu = $t;
    }, function() {
      let $t = $(this), attrid = $t.attr("id"), $attr = $("#" + attrid + "_sub");
      submenuhide = setTimeout(function() {
        $attr.hide();
      }, 200);
    });
    $(".luckysheet-rightgclick-menu-sub").hover(function() {
      rightclickmenu.addClass("luckysheet-cols-menuitem-hover");
      clearTimeout(submenuhide);
    }, function() {
      rightclickmenu.removeClass("luckysheet-cols-menuitem-hover");
      $(this).hide();
    });
    $("#luckysheet-filter-menu").mouseover(function() {
      clearTimeout(hidefilersubmenu);
      hidefilersubmenu = setTimeout(function() {
        $("#luckysheet-filter-submenu").hide();
      }, 500);
    });
    $("#luckysheet-filter-submenu").mouseover(function() {
      clearTimeout(hidefilersubmenu);
    }).find(".luckysheet-cols-menuitem").click(function(e) {
      $("#luckysheet-filter-selected span").html($(this).find(".luckysheet-cols-menuitem-content").text()).data("value", $(this).data("value"));
      $("#luckysheet-filter-menu .luckysheet-filter-selected-input").hide();
      let $type = $(this).data("type");
      let $value = $(this).attr("data-value");
      if ($type == "2") {
        $("#luckysheet-filter-selected span").data("type", "2");
        $("#luckysheet-filter-menu .luckysheet-filter-selected-input2").show();
        $("#luckysheet-filter-menu .luckysheet-filter-selected-input input").prop("type", "number");
      } else if ($type == "0") {
        $("#luckysheet-filter-selected span").data("type", "0");
      } else {
        $("#luckysheet-filter-selected span").data("type", "1");
        $("#luckysheet-filter-menu .luckysheet-filter-selected-input").eq(0).show();
        if ($value == "dateequal" || $value == "datelessthan" || $value == "datemorethan") {
          $("#luckysheet-filter-menu .luckysheet-filter-selected-input input").prop("type", "date");
        } else if ($value == "morethan" || $value == "moreequalthan" || $value == "lessthan" || $value == "lessequalthan" || $value == "equal" || $value == "noequal") {
          $("#luckysheet-filter-menu .luckysheet-filter-selected-input input").prop("type", "number");
        } else {
          $("#luckysheet-filter-menu .luckysheet-filter-selected-input input").prop("type", "text");
        }
      }
      $("#luckysheet-filter-byvalue").next().slideUp();
      $("#luckysheet-filter-submenu").hide();
    });
    $("#luckysheet-filter-bycondition, #luckysheet-filter-byvalue").click(function() {
      let $t = $(this);
      $t.next().slideToggle(200);
      setTimeout(function() {
        if ($t.attr("id") == "luckysheet-filter-bycondition" && $("#luckysheet-filter-bycondition").next().is(":visible")) {
          if ($("#luckysheet-filter-selected span").text() != locale_filter.filiterInputNone) {
            $("#luckysheet-filter-byvalue").next().slideUp(200);
          }
        }
        if ($t.is($("#luckysheet-filter-bycondition"))) {
          if ($("#luckysheet-filter-bycondition").next().is(":hidden") && $("#luckysheet-filter-byvalue").next().is(":hidden")) {
            $("#luckysheet-filter-byvalue").next().slideDown(200);
          }
        }
      }, 300);
    });
    $("#luckysheet-filter-selected").click(function() {
      let $t = $(this), toffset = $t.offset(), $menu = $("#luckysheet-filter-submenu");
      $menu.hide();
      let winH = $(window).height(), winW = $(window).width();
      let menuW = $menu.width(), menuH = $menu.height();
      let top = toffset.top, left = toffset.left, mheight = winH - toffset.top - 20;
      if (toffset.left + menuW > winW) {
        left = toffset.left - menuW;
      }
      if (toffset.top > winH / 2) {
        top = winH - toffset.top;
        if (top < 0) {
          top = 0;
        }
        mheight = toffset.top - 20;
      }
      $menu.css({"top": top, "left": left, "height": mheight}).show();
      clearTimeout(hidefilersubmenu);
    });
    $("#luckysheet-cell-main").on("click", ".luckysheet-filter-options", function(e) {
      if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "filter")) {
        return;
      }
      let $t = $(e.currentTarget), toffset = $t.offset(), $menu = $("#luckysheet-filter-menu"), winH = $(window).height(), winW = $(window).width();
      let st_r = $t.data("str"), ed_r = $t.data("edr"), cindex = $t.data("cindex"), st_c = $t.data("stc"), ed_c = $t.data("edc"), rowhidden = $t.data("rowhidden") == "" ? {} : JSON.parse($t.data("rowhidden").replace(/\'/g, '"'));
      $("body .luckysheet-cols-menu").hide();
      $("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
      $("#luckysheet-filter-byvalue-input").val("");
      $("#luckysheet-filter-bycondition").next().hide();
      $("#luckysheet-filter-byvalue").next().show();
      $menu.data("str", st_r);
      $menu.data("edr", ed_r);
      $menu.data("cindex", cindex);
      $menu.data("stc", st_c);
      $menu.data("edc", ed_c);
      $("#luckysheet-filter-menu .luckysheet-filter-selected-input").hide().find("input").val();
      $("#luckysheet-filter-selected span").data("type", "0").data("type", null).text(locale_filter.filiterInputNone);
      let byconditiontype = $t.data("byconditiontype");
      $("#luckysheet-filter-selected span").data("value", $t.data("byconditionvalue")).data("type", byconditiontype).text($t.data("byconditiontext"));
      if (byconditiontype == "2") {
        let $input = $("#luckysheet-filter-menu .luckysheet-filter-selected-input2").show().find("input");
        $input.eq(0).val($t.data("byconditionvalue1"));
        $input.eq(1).val($t.data("byconditionvalue2"));
      } else if (byconditiontype == "1") {
        $("#luckysheet-filter-menu .luckysheet-filter-selected-input").eq(0).show().find("input").val($t.data("byconditionvalue1"));
      }
      $("#luckysheet-filter-orderby-asc").off("click").on("click", function() {
        orderbydatafiler(st_r, st_c, ed_r, ed_c, cindex, true);
      });
      $("#luckysheet-filter-orderby-desc").off("click").on("click", function() {
        orderbydatafiler(st_r, st_c, ed_r, ed_c, cindex, false);
      });
      const loadingObj = luckysheetlodingHTML("#luckysheet-filter-byvalue-select", {text: locale_filter.filiterMoreDataTip});
      $("#luckysheet-filter-byvalue-select").empty().append(loadingObj.el);
      let rowhiddenother = {};
      $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").not(this).each(function() {
        let $t2 = $(this), rh = $t2.data("rowhidden");
        if (rh == "") {
          return true;
        }
        rh = JSON.parse(rh.replace(/\'/g, '"'));
        for (let r2 in rh) {
          rowhiddenother[r2] = 0;
        }
      });
      let data = store_default.flowdata;
      setTimeout(function() {
        let dvmap = {};
        let dvmap_uncheck = {};
        let vmap = {};
        let vmap_uncheck = {};
        for (let r2 = st_r + 1; r2 <= ed_r; r2++) {
          if (r2 in rowhiddenother) {
            continue;
          }
          if (store_default.flowdata[r2] == null) {
            continue;
          }
          let cell = store_default.flowdata[r2][cindex];
          if (cell != null && !isRealNull(cell.v) && cell.ct != null && cell.ct.t == "d") {
            let v = update("YYYY-MM-DD", cell.v);
            let y = v.split("-")[0];
            let m = v.split("-")[1];
            let d = v.split("-")[2];
            if (!(y in dvmap)) {
              dvmap[y] = {};
            }
            if (!(m in dvmap[y])) {
              dvmap[y][m] = {};
            }
            if (!(d in dvmap[y][m])) {
              dvmap[y][m][d] = 0;
            }
            dvmap[y][m][d]++;
            if (r2 in rowhidden) {
              dvmap_uncheck[y] = 0;
              dvmap_uncheck[m] = 0;
              dvmap_uncheck[d] = 0;
            }
          } else {
            let v, m;
            if (cell == null || isRealNull(cell.v)) {
              v = null;
              m = null;
            } else {
              v = cell.v;
              m = cell.m;
            }
            if (!(v in vmap)) {
              vmap[v] = {};
            }
            if (!(m in vmap[v])) {
              vmap[v][m] = 0;
            }
            vmap[v][m]++;
            if (r2 in rowhidden) {
              vmap_uncheck[v + "#$$$#" + m] = 0;
            }
          }
        }
        let item2 = [];
        if (JSON.stringify(dvmap).length > 2) {
          for (let y in dvmap) {
            let ysum = 0;
            let monthHtml = "";
            for (let m in dvmap[y]) {
              let msum = 0;
              let dayHtml = "";
              for (let d in dvmap[y][m]) {
                let dayL = dvmap[y][m][d];
                msum += dayL;
                let mT;
                if (Number(m) < 10) {
                  mT = "0" + Number(m);
                } else {
                  mT = m;
                }
                let dT;
                if (Number(d) < 10) {
                  dT = "0" + Number(d);
                } else {
                  dT = d;
                }
                if (y in dvmap_uncheck && m in dvmap_uncheck && d in dvmap_uncheck) {
                  dayHtml += '<div class="day luckysheet-mousedown-cancel cf" data-check="false" title="' + y + "-" + mT + "-" + dT + '"><input class="luckysheet-mousedown-cancel" type="checkbox"/><label class="luckysheet-mousedown-cancel">' + d + '</label><span class="count luckysheet-mousedown-cancel">( ' + dayL + " )</span></div>";
                } else {
                  dayHtml += '<div class="day luckysheet-mousedown-cancel cf" data-check="true" title="' + y + "-" + mT + "-" + dT + '"><input class="luckysheet-mousedown-cancel" type="checkbox" checked="checked"/><label class="luckysheet-mousedown-cancel">' + d + '</label><span class="count luckysheet-mousedown-cancel">( ' + dayL + " )</span></div>";
                }
              }
              ysum += msum;
              let mT2;
              if (Number(m) < 10) {
                mT2 = "0" + Number(m);
              } else {
                mT2 = m;
              }
              if (y in dvmap_uncheck && m in dvmap_uncheck) {
                monthHtml += '<div class="monthBox luckysheet-mousedown-cancel"><div class="month luckysheet-mousedown-cancel cf" data-check="false" title="' + y + "-" + mT2 + '"><i class="fa fa-caret-right luckysheet-mousedown-cancel" aria-hidden="true"></i><input class="luckysheet-mousedown-cancel" type="checkbox"/><label class="luckysheet-mousedown-cancel">' + m + "" + locale_filter.filiterMonthText + '</label><span class="count luckysheet-mousedown-cancel">( ' + msum + ' )</span></div><div class="dayList luckysheet-mousedown-cancel">' + dayHtml + "</div></div>";
              } else {
                monthHtml += '<div class="monthBox luckysheet-mousedown-cancel"><div class="month luckysheet-mousedown-cancel cf" data-check="true" title="' + y + "-" + mT2 + '"><i class="fa fa-caret-right luckysheet-mousedown-cancel" aria-hidden="true"></i><input class="luckysheet-mousedown-cancel" type="checkbox" checked="checked"/><label class="luckysheet-mousedown-cancel">' + m + "" + locale_filter.filiterMonthText + '</label><span class="count luckysheet-mousedown-cancel">( ' + msum + ' )</span></div><div class="dayList luckysheet-mousedown-cancel">' + dayHtml + "</div></div>";
              }
            }
            let yearHtml;
            if (y in dvmap_uncheck) {
              yearHtml = '<div class="yearBox luckysheet-mousedown-cancel"><div class="year luckysheet-mousedown-cancel cf" data-check="false" title="' + y + '"><i class="fa fa-caret-right luckysheet-mousedown-cancel" aria-hidden="true"></i><input class="luckysheet-mousedown-cancel" type="checkbox"/><label class="luckysheet-mousedown-cancel">' + y + "" + locale_filter.filiterYearText + '</label><span class="count luckysheet-mousedown-cancel">( ' + ysum + ' )</span></div><div class="monthList luckysheet-mousedown-cancel">' + monthHtml + "</div></div>";
            } else {
              yearHtml = '<div class="yearBox luckysheet-mousedown-cancel"><div class="year luckysheet-mousedown-cancel cf" data-check="true" title="' + y + '"><i class="fa fa-caret-right luckysheet-mousedown-cancel" aria-hidden="true"></i><input class="luckysheet-mousedown-cancel" type="checkbox" checked="checked"/><label class="luckysheet-mousedown-cancel">' + y + "" + locale_filter.filiterYearText + '</label><span class="count luckysheet-mousedown-cancel">( ' + ysum + ' )</span></div><div class="monthList luckysheet-mousedown-cancel">' + monthHtml + "</div></div>";
            }
            item2.unshift(yearHtml);
          }
        }
        if (JSON.stringify(vmap).length > 2) {
          let vmapKeys = Object.keys(vmap);
          vmapKeys = orderbydata1D(vmapKeys, true);
          for (let i2 = 0; i2 < vmapKeys.length; i2++) {
            let v = vmapKeys[i2];
            for (let x in vmap[v]) {
              let text;
              if (v + "#$$$#" + x == "null#$$$#null") {
                text = locale_filter.valueBlank;
              } else {
                text = x;
              }
              let dataHtml;
              if (v + "#$$$#" + x in vmap_uncheck) {
                dataHtml = '<div class="textBox luckysheet-mousedown-cancel cf" data-check="false" data-filter="' + (v + "#$$$#" + x) + '" title="' + text + '"><input class="luckysheet-mousedown-cancel" type="checkbox"/><label class="luckysheet-mousedown-cancel">' + text + '</label><span class="luckysheet-mousedown-cancel count">( ' + vmap[v][x] + " )</span></div>";
              } else {
                dataHtml = '<div class="textBox luckysheet-mousedown-cancel cf" data-check="true" data-filter="' + (v + "#$$$#" + x) + '" title="' + text + '"><input class="luckysheet-mousedown-cancel" type="checkbox" checked="checked"/><label class="luckysheet-mousedown-cancel">' + text + '</label><span class="luckysheet-mousedown-cancel count">( ' + vmap[v][x] + " )</span></div>";
              }
              item2.push(dataHtml);
            }
          }
        }
        let containerH = winH - toffset.top - 350;
        if (containerH < 0)
          containerH = 100;
        $("#luckysheet-filter-byvalue-select").append("<div class='ListBox luckysheet-mousedown-cancel' style='min-height: 100px; max-height: " + containerH + "px; overflow-y: auto; overflow-x: hidden;'><table cellspacing='0' style='width:100%;' class='luckysheet-mousedown-cancel'>" + item2.join("") + "</table></div>");
        loadingObj.close();
      }, 1);
      showrightclickmenu($menu, toffset.left, toffset.top + 20);
      e.stopPropagation();
      return false;
    });
    $("#luckysheet-filter-orderby-color").hover(function() {
      let $menu = $("#luckysheet-filter-menu");
      let st_r = $menu.data("str"), ed_r = $menu.data("edr"), cindex = $menu.data("cindex"), st_c = $menu.data("stc"), ed_c = $menu.data("edc");
      let bgMap = {};
      let fcMap = {};
      let af_compute = alternateformat_default.getComputeMap();
      let cf_compute = conditionformat_default.getComputeMap();
      for (let r2 = st_r + 1; r2 <= ed_r; r2++) {
        let cell = store_default.flowdata[r2][cindex];
        let bg = menuButton_default.checkstatus(store_default.flowdata, r2, cindex, "bg");
        if (bg == null) {
          bg = "#ffffff";
        }
        let checksAF = alternateformat_default.checksAF(r2, cindex, af_compute);
        if (checksAF != null) {
          bg = checksAF[1];
        }
        let checksCF = conditionformat_default.checksCF(r2, cindex, cf_compute);
        if (checksCF != null && checksCF["cellColor"] != null) {
          bg = checksCF["cellColor"];
        }
        if (bg.indexOf("rgb") > -1) {
          bg = rgbTohex(bg);
        }
        if (bg.length == 4) {
          bg = bg.substr(0, 1) + bg.substr(1, 1).repeat(2) + bg.substr(2, 1).repeat(2) + bg.substr(3, 1).repeat(2);
        }
        let fc = menuButton_default.checkstatus(store_default.flowdata, r2, cindex, "fc");
        if (checksAF != null) {
          fc = checksAF[0];
        }
        if (checksCF != null && checksCF["textColor"] != null) {
          fc = checksCF["textColor"];
        }
        if (fc.indexOf("rgb") > -1) {
          fc = rgbTohex(fc);
        }
        if (fc.length == 4) {
          fc = fc.substr(0, 1) + fc.substr(1, 1).repeat(2) + fc.substr(2, 1).repeat(2) + fc.substr(3, 1).repeat(2);
        }
        if (store_default.config != null && store_default.config["rowhidden"] != null && r2 in store_default.config["rowhidden"]) {
          bgMap[bg] = 1;
          if (cell != null && !isRealNull(cell.v)) {
            fcMap[fc] = 1;
          }
        } else {
          bgMap[bg] = 0;
          if (cell != null && !isRealNull(cell.v)) {
            fcMap[fc] = 0;
          }
        }
      }
      let filterBgColorHtml = "";
      if (JSON.stringify(bgMap).length > 2 && Object.keys(bgMap).length > 1) {
        let bgColorItemHtml = "";
        for (let b in bgMap) {
          if (bgMap[b] == 0) {
            bgColorItemHtml += '<div class="item luckysheet-mousedown-cancel"><label class="luckysheet-mousedown-cancel" style="background-color: ' + b + '" title="' + b + '"></label><input class="luckysheet-mousedown-cancel" type="checkbox" checked="checked"/></div>';
          } else {
            bgColorItemHtml += '<div class="item luckysheet-mousedown-cancel"><label class="luckysheet-mousedown-cancel" style="background-color: ' + b + '" title="' + b + '"></label><input class="luckysheet-mousedown-cancel" type="checkbox"/></div>';
          }
        }
        filterBgColorHtml = '<div id="filterBgColor" class="box luckysheet-mousedown-cancel"><div class="title luckysheet-mousedown-cancel">' + locale_filter.filiterByColorTip + '</div><div style="max-height:128px;overflow:auto;" class="luckysheet-mousedown-cancel">' + bgColorItemHtml + "</div></div>";
      }
      let filterFcColorHtml = "";
      if (JSON.stringify(fcMap).length > 2 && Object.keys(fcMap).length > 1) {
        let fcColorItemHtml = "";
        for (let f in fcMap) {
          if (fcMap[f] == 0) {
            fcColorItemHtml += '<div class="item luckysheet-mousedown-cancel"><label class="luckysheet-mousedown-cancel" style="background-color: ' + f + '" title="' + f + '"></label><input class="luckysheet-mousedown-cancel" type="checkbox" checked="checked"/></div>';
          } else {
            fcColorItemHtml += '<div class="item luckysheet-mousedown-cancel"><label class="luckysheet-mousedown-cancel" style="background-color: ' + f + '" title="' + f + '"></label><input class="luckysheet-mousedown-cancel" type="checkbox"/></div>';
          }
        }
        filterFcColorHtml = '<div id="filterFcColor" class="box luckysheet-mousedown-cancel"><div class="title luckysheet-mousedown-cancel">' + locale_filter.filiterByTextColorTip + '</div><div style="max-height:128px;overflow:auto;" class="luckysheet-mousedown-cancel">' + fcColorItemHtml + "</div></div>";
      }
      let content;
      if (filterBgColorHtml == "" && filterFcColorHtml == "") {
        content = '<div class="luckysheet-mousedown-cancel" style="padding: 10px 30px;text-align: center;">' + locale_filter.filterContainerOneColorTip + "</div>";
      } else {
        content = filterBgColorHtml + filterFcColorHtml + '<div class="luckysheet-mousedown-cancel"><button id="luckysheet-filter-orderby-color-confirm" class="btn btn-primary luckysheet-mousedown-cancel" style="margin: 5px 20px;width: 70px;">' + locale_button.confirm + "</button></div>";
      }
      $("#luckysheet-filter-orderby-color-submenu").remove();
      $("body").append('<div id="luckysheet-filter-orderby-color-submenu" class="luckysheet-cols-menu luckysheet-mousedown-cancel">' + content + "</div>");
      let $t = $("#luckysheet-filter-orderby-color-submenu").end();
      let $con = $(this).parent();
      let winW = $(window).width(), winH = $(window).height();
      let menuW = $con.width(), myh = $t.height() + 25, myw = $t.width() + 5;
      let offset = $(this).offset();
      let top = offset.top, left = offset.left + menuW;
      if (left + myw > winW) {
        left = offset.left - myw;
      }
      if (top + myh > winH) {
        top = winH - myh;
      }
      $("#luckysheet-filter-orderby-color-submenu").css({"top": top, "left": left}).show();
    }, function() {
      submenuhide = setTimeout(function() {
        $("#luckysheet-filter-orderby-color-submenu").hide();
      }, 200);
    });
    $(document).on("mouseover mouseleave", "#luckysheet-filter-orderby-color-submenu", function(e) {
      if (e.type === "mouseover") {
        clearTimeout(submenuhide);
      } else {
        $(this).hide();
      }
    });
    $(document).on("click", "#luckysheet-filter-orderby-color-submenu .item label", function() {
      $(this).siblings("input[type='checkbox']").click();
    });
    $(document).off("click.orderbyColorConfirm").on("click.orderbyColorConfirm", "#luckysheet-filter-orderby-color-submenu #luckysheet-filter-orderby-color-confirm", function() {
      let bg_colorMap = {};
      let fc_colorMap = {};
      $("#luckysheet-filter-orderby-color-submenu .item").each(function(i2, e) {
        if ($(e).find("input[type='checkbox']").is(":checked")) {
          let color = $(this).find("label").attr("title");
          let $id = $(this).closest(".box").attr("id");
          if ($id == "filterBgColor") {
            bg_colorMap[color] = 0;
          } else if ($id == "filterFcColor") {
            fc_colorMap[color] = 0;
          }
        }
      });
      let bg_filter;
      if ($("#luckysheet-filter-orderby-color-submenu #filterBgColor").length > 0) {
        bg_filter = true;
      } else {
        bg_filter = false;
      }
      let fc_filter;
      if ($("#luckysheet-filter-orderby-color-submenu #filterFcColor").length > 0) {
        fc_filter = true;
      } else {
        fc_filter = false;
      }
      let $menu = $("#luckysheet-filter-menu");
      let st_r = $menu.data("str"), ed_r = $menu.data("edr"), cindex = $menu.data("cindex"), st_c = $menu.data("stc"), ed_c = $menu.data("edc");
      let rowhiddenother = {};
      $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").not($("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").eq(cindex - st_c).get(0)).each(function() {
        let $t = $(this), rh = $t.data("rowhidden");
        if (rh == "") {
          return true;
        }
        rh = JSON.parse(rh);
        for (let r2 in rh) {
          rowhiddenother[r2] = 0;
        }
      });
      let filterdata = {};
      let rowhidden = {};
      let caljs = {};
      let af_compute = alternateformat_default.getComputeMap();
      let cf_compute = conditionformat_default.getComputeMap();
      for (let r2 = st_r + 1; r2 <= ed_r; r2++) {
        if (r2 in rowhiddenother) {
          continue;
        }
        if (store_default.flowdata[r2] == null) {
          continue;
        }
        let cell = store_default.flowdata[r2][cindex];
        let bg = menuButton_default.checkstatus(store_default.flowdata, r2, cindex, "bg");
        let checksAF = alternateformat_default.checksAF(r2, cindex, af_compute);
        if (checksAF != null) {
          bg = checksAF[1];
        }
        let checksCF = conditionformat_default.checksCF(r2, cindex, cf_compute);
        if (checksCF != null && checksCF["cellColor"] != null) {
          bg = checksCF["cellColor"];
        }
        bg = bg == null ? "#ffffff" : bg;
        if (bg.indexOf("rgb") > -1) {
          bg = rgbTohex(bg);
        }
        if (bg.length == 4) {
          bg = bg.substr(0, 1) + bg.substr(1, 1).repeat(2) + bg.substr(2, 1).repeat(2) + bg.substr(3, 1).repeat(2);
        }
        let fc = menuButton_default.checkstatus(store_default.flowdata, r2, cindex, "fc");
        if (checksAF != null) {
          fc = checksAF[0];
        }
        if (checksCF != null && checksCF["textColor"] != null) {
          fc = checksCF["textColor"];
        }
        if (fc.indexOf("rgb") > -1) {
          fc = rgbTohex(fc);
        }
        if (fc.length == 4) {
          fc = fc.substr(0, 1) + fc.substr(1, 1).repeat(2) + fc.substr(2, 1).repeat(2) + fc.substr(3, 1).repeat(2);
        }
        if (bg_filter && fc_filter) {
          if (!(bg in bg_colorMap) && (!(fc in fc_colorMap) || cell == null || isRealNull(cell.v))) {
            rowhidden[r2] = 0;
          }
        } else if (bg_filter) {
          if (!(bg in bg_colorMap)) {
            rowhidden[r2] = 0;
          }
        } else if (fc_filter) {
          if (!(fc in fc_colorMap) || cell == null || isRealNull(cell.v)) {
            rowhidden[r2] = 0;
          }
        }
      }
      let $top = $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").eq(cindex - st_c);
      let optionstate = Object.keys(rowhidden).length > 0;
      let rowhiddenall = $.extend(true, rowhiddenother, rowhidden), rowhidenPre = json_default.parseJsonParm($top.data("rowhidden"));
      labelFilterOptionState($top, optionstate, rowhidden, caljs, true, st_r, ed_r, cindex, st_c, ed_c);
      let cfg = $.extend(true, {}, store_default.config);
      cfg["rowhidden"] = rowhiddenall;
      if (store_default.clearjfundo) {
        let redo2 = {};
        redo2["type"] = "datachangeAll_filter";
        redo2["sheetIndex"] = store_default.currentSheetIndex;
        redo2["config"] = $.extend(true, {}, store_default.config);
        redo2["curconfig"] = cfg;
        redo2["optionstate"] = optionstate;
        redo2["optionsindex"] = cindex - st_c;
        redo2["rowhidden"] = $.extend(true, {}, rowhidden);
        redo2["rowhidenPre"] = $.extend(true, {}, rowhidenPre);
        if (caljs != null) {
          redo2["caljs"] = caljs;
        }
        store_default.jfundo.length = 0;
        store_default.jfredo.push(redo2);
      }
      store_default.config = cfg;
      store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
      server_default.saveParam("cg", store_default.currentSheetIndex, cfg["rowhidden"], {"k": "rowhidden"});
      jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
      $("#luckysheet-filter-menu, #luckysheet-filter-submenu, #luckysheet-filter-orderby-color-submenu").hide();
      cleargridelement();
    });
    $(document).off("click.filterCheckbox1").on("click.filterCheckbox1", "#luckysheet-filter-byvalue-select .textBox", function() {
      if ($(this).attr("data-check") == "true") {
        $(this).attr("data-check", "false");
        $(this).find("input[type='checkbox']").removeAttr("checked");
      } else {
        $(this).attr("data-check", "true");
        $(this).find("input[type='checkbox']").prop("checked", true);
      }
    });
    $(document).off("click.filterCheckbox2").on("click.filterCheckbox2", "#luckysheet-filter-byvalue-select .year", function() {
      if ($(this).attr("data-check") == "true") {
        $(this).attr("data-check", "false");
        $(this).parents(".yearBox").find(".month").attr("data-check", "false");
        $(this).parents(".yearBox").find(".day").attr("data-check", "false");
        $(this).parents(".yearBox").find("input[type='checkbox']").removeAttr("checked");
      } else {
        $(this).attr("data-check", "true");
        $(this).parents(".yearBox").find(".month").attr("data-check", "true");
        $(this).parents(".yearBox").find(".day").attr("data-check", "true");
        $(this).parents(".yearBox").find("input[type='checkbox']").prop("checked", true);
      }
    });
    $(document).off("click.filterCheckbox3").on("click.filterCheckbox3", "#luckysheet-filter-byvalue-select .month", function() {
      if ($(this).attr("data-check") == "true") {
        $(this).attr("data-check", "false");
        $(this).parents(".monthBox").find(".day").attr("data-check", "false");
        $(this).parents(".monthBox").find("input[type='checkbox']").removeAttr("checked");
      } else {
        $(this).attr("data-check", "true");
        $(this).parents(".monthBox").find(".day").attr("data-check", "true");
        $(this).parents(".monthBox").find("input[type='checkbox']").prop("checked", true);
      }
      let yearDayAllCheck = true;
      let $yearDay = $(this).parents(".yearBox").find(".day");
      $yearDay.each(function(i2, e) {
        if ($(e).attr("data-check") == "true") {
        } else {
          yearDayAllCheck = false;
        }
      });
      if (yearDayAllCheck) {
        $(this).parents(".yearBox").find(".year").attr("data-check", "true");
        $(this).parents(".yearBox").find(".year input[type='checkbox']").prop("checked", true);
      } else {
        $(this).parents(".yearBox").find(".year").attr("data-check", "false");
        $(this).parents(".yearBox").find(".year input[type='checkbox']").removeAttr("checked");
      }
    });
    $(document).off("click.filterCheckbox4").on("click.filterCheckbox4", "#luckysheet-filter-byvalue-select .day", function() {
      if ($(this).attr("data-check") == "true") {
        $(this).attr("data-check", "false");
        $(this).find("input[type='checkbox']").removeAttr("checked");
      } else {
        $(this).attr("data-check", "true");
        $(this).find("input[type='checkbox']").prop("checked", true);
      }
      let monthDayAllCheck = true;
      let $monthDay = $(this).parents(".monthBox").find(".day");
      $monthDay.each(function(i2, e) {
        if ($(e).attr("data-check") == "true") {
        } else {
          monthDayAllCheck = false;
        }
      });
      if (monthDayAllCheck) {
        $(this).parents(".monthBox").find(".month").attr("data-check", "true");
        $(this).parents(".monthBox").find(".month input[type='checkbox']").prop("checked", true);
      } else {
        $(this).parents(".monthBox").find(".month").attr("data-check", "false");
        $(this).parents(".monthBox").find(".month input[type='checkbox']").removeAttr("checked");
      }
      let yearDayAllCheck = true;
      let $yearDay = $(this).parents(".yearBox").find(".day");
      $yearDay.each(function(i2, e) {
        if ($(e).attr("data-check") == "true") {
        } else {
          yearDayAllCheck = false;
        }
      });
      if (yearDayAllCheck) {
        $(this).parents(".yearBox").find(".year").attr("data-check", "true");
        $(this).parents(".yearBox").find(".year input[type='checkbox']").prop("checked", true);
      } else {
        $(this).parents(".yearBox").find(".year").attr("data-check", "false");
        $(this).parents(".yearBox").find(".year input[type='checkbox']").removeAttr("checked");
      }
    });
    $(document).off("click.filterYearDropdown").on("click.filterYearDropdown", "#luckysheet-filter-byvalue-select .yearBox .fa-caret-right", function(event2) {
      let $p = $(this).parents(".luckysheet-mousedown-cancel");
      if ($p.hasClass("year")) {
        $(this).parents(".yearBox").find(".monthList").slideToggle();
      }
      if ($p.hasClass("month")) {
        $(this).parents(".monthBox").find(".dayList").slideToggle();
      }
      event2.stopPropagation();
    });
    $("#luckysheet-filter-byvalue-btn-all").click(function() {
      $("#luckysheet-filter-byvalue-select .ListBox input[type='checkbox']").prop("checked", true);
      $("#luckysheet-filter-byvalue-select .ListBox input[type='checkbox']").parents(".luckysheet-mousedown-cancel").attr("data-check", "true");
    });
    $("#luckysheet-filter-byvalue-btn-clear").click(function() {
      $("#luckysheet-filter-byvalue-select .ListBox input[type='checkbox']").removeAttr("checked");
      $("#luckysheet-filter-byvalue-select .ListBox input[type='checkbox']").parents(".luckysheet-mousedown-cancel").attr("data-check", "false");
    });
    $("#luckysheet-filter-byvalue-btn-contra").click(function() {
      let $input = $("#luckysheet-filter-byvalue-select .ListBox input[type='checkbox']");
      $input.each(function(i2, e) {
        if ($(e).is(":checked")) {
          $(e).removeAttr("checked");
          $(e).parents(".luckysheet-mousedown-cancel").attr("data-check", "false");
        } else {
          $(e).prop("checked", true);
          $(e).parents(".luckysheet-mousedown-cancel").attr("data-check", "true");
        }
      });
      let $month = $("#luckysheet-filter-byvalue-select .ListBox .monthBox");
      $month.each(function(index2, event2) {
        let monthDayAllCheck = true;
        let $monthDay = $(event2).find(".day input[type='checkbox']");
        $monthDay.each(function(i2, e) {
          if ($(e).is(":checked")) {
          } else {
            monthDayAllCheck = false;
          }
        });
        if (monthDayAllCheck) {
          $(event2).find(".month input[type='checkbox']").prop("checked", true);
          $(event2).attr("data-check", "true");
        } else {
          $(event2).find(".month input[type='checkbox']").removeAttr("checked");
          $(event2).attr("data-check", "false");
        }
      });
      let $year = $("#luckysheet-filter-byvalue-select .ListBox .yearBox");
      $year.each(function(index2, event2) {
        let yearDayAllCheck = true;
        let $yearDay = $(event2).find(".day input[type='checkbox']");
        $yearDay.each(function(i2, e) {
          if ($(e).is(":checked")) {
          } else {
            yearDayAllCheck = false;
          }
        });
        if (yearDayAllCheck) {
          $(event2).find(".year input[type='checkbox']").prop("checked", true);
          $(event2).attr("data-check", "true");
        } else {
          $(event2).find(".year input[type='checkbox']").removeAttr("checked");
          $(event2).attr("data-check", "false");
        }
      });
    });
    $("#luckysheet-filter-initial").click(function() {
      if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "filter")) {
        return;
      }
      $("#luckysheet-filter-menu .luckysheet-filter-selected-input").hide().find("input").val();
      $("#luckysheet-filter-selected span").data("type", "0").data("type", null).text(locale_filter.conditionNone);
      let redo2 = {};
      redo2["type"] = "datachangeAll_filter_clear";
      redo2["sheetIndex"] = store_default.currentSheetIndex;
      redo2["config"] = $.extend(true, {}, store_default.config);
      store_default.config["rowhidden"] = {};
      redo2["curconfig"] = $.extend(true, {}, store_default.config);
      redo2["filter_save"] = $.extend(true, {}, store_default.luckysheet_filter_save);
      let optiongroups = [];
      $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").each(function() {
        let $t = $(this);
        let optionstate = $t.hasClass("luckysheet-filter-options-active");
        let rowhidden = json_default.parseJsonParm($t.data("rowhidden"));
        let caljs = json_default.parseJsonParm($t.data("caljs"));
        optiongroups.push({
          "optionstate": optionstate,
          "rowhidden": rowhidden,
          "caljs": caljs,
          "str": $t.data("str"),
          "edr": $t.data("edr"),
          "cindex": $t.data("cindex"),
          "stc": $t.data("stc"),
          "edc": $t.data("edc")
        });
      });
      redo2["optiongroups"] = optiongroups;
      store_default.jfundo.length = 0;
      store_default.jfredo.push(redo2);
      $("#luckysheet-filter-selected-sheet" + store_default.currentSheetIndex + ", #luckysheet-filter-options-sheet" + store_default.currentSheetIndex).remove();
      $("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
      store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].filter = null;
      store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].filter_select = null;
      server_default.saveParam("fsc", store_default.currentSheetIndex, null);
      store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
      server_default.saveParam("cg", store_default.currentSheetIndex, {}, {"k": "rowhidden"});
      jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
    });
    $("#luckysheet-filter-byvalue-input").on("input propertychange", function() {
      let v = $(this).val().toString();
      $("#luckysheet-filter-byvalue-select .ListBox .luckysheet-mousedown-cancel").show();
      if (v != "") {
        $("#luckysheet-filter-byvalue-select .ListBox input[type='checkbox']").each(function(i2, e) {
          if ($(e).closest(".day").length > 0) {
            let day = $(e).siblings("label").text().toString();
            let month = $(e).closest(".monthBox").find(".month label").text().toString();
            let year = $(e).closest(".yearBox").find(".year label").text().toString();
            let itemV = year + "-" + month + "-" + day;
            if (itemV.indexOf(v) == -1) {
              $(e).closest(".day").hide();
              let $monthDay = $(e).closest(".dayList").find(".day:visible");
              if ($monthDay.length == 0) {
                $(e).closest(".monthBox").find(".month").hide();
              }
              let $yearDay = $(e).closest(".monthList").find(".day:visible");
              if ($yearDay.length == 0) {
                $(e).closest(".yearBox").find(".year").hide();
              }
            }
          }
          if ($(e).closest(".textBox").length > 0) {
            let itemV = $(e).siblings("label").text().toString();
            if (itemV.indexOf(v) == -1) {
              $(e).parents(".textBox").hide();
            }
          }
        });
      }
    });
    $("#luckysheet-filter-cancel").click(function() {
      $("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
    });
    $("#luckysheet-filter-confirm").click(function() {
      let $menu = $("#luckysheet-filter-menu");
      let st_r = $menu.data("str"), ed_r = $menu.data("edr"), cindex = $menu.data("cindex"), st_c = $menu.data("stc"), ed_c = $menu.data("edc");
      let rowhiddenother = {};
      $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").not($("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").eq(cindex - st_c).get(0)).each(function() {
        let $t = $(this), rh = $t.data("rowhidden");
        if (rh == "") {
          return true;
        }
        rh = JSON.parse(rh.replace(/\'/g, '"'));
        for (let r2 in rh) {
          rowhiddenother[r2] = 0;
        }
      });
      let filterdata = {};
      let rowhidden = {};
      let caljs = {};
      if ($("#luckysheet-filter-bycondition").next().is(":visible") && $("#luckysheet-filter-byvalue").next().is(":hidden") && $("#luckysheet-filter-selected span").data("value") != "null") {
        let $t = $("#luckysheet-filter-selected span");
        let type = $t.data("type"), value = $t.data("value");
        caljs["value"] = value;
        caljs["text"] = $t.text();
        if (type == "0") {
          caljs["type"] = "0";
        } else if (type == "2") {
          let $input = $("#luckysheet-filter-menu .luckysheet-filter-selected-input2 input");
          caljs["type"] = "2";
          caljs["value1"] = $input.eq(0).val();
          caljs["value2"] = $input.eq(1).val();
        } else {
          caljs["type"] = "1";
          caljs["value1"] = $("#luckysheet-filter-menu .luckysheet-filter-selected-input").eq(0).find("input").val();
        }
        for (let r2 = st_r + 1; r2 <= ed_r; r2++) {
          if (r2 in rowhiddenother) {
            continue;
          }
          if (store_default.flowdata[r2] == null) {
            continue;
          }
          let cell = store_default.flowdata[r2][cindex];
          if (value == "cellnull") {
            if (cell != null && !isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            }
          } else if (value == "cellnonull") {
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            }
          } else if (value == "textinclude") {
            let value1 = caljs["value1"];
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else {
              if (cell.m.indexOf(value1) == -1) {
                rowhidden[r2] = 0;
              }
            }
          } else if (value == "textnotinclude") {
            let value1 = caljs["value1"];
            if (cell == null || isRealNull(cell.v)) {
            } else {
              if (cell.m.indexOf(value1) > -1) {
                rowhidden[r2] = 0;
              }
            }
          } else if (value == "textstart") {
            let value1 = caljs["value1"], valuelen = value1.length;
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else {
              if (cell.m.substr(0, valuelen) != value1) {
                rowhidden[r2] = 0;
              }
            }
          } else if (value == "textend") {
            let value1 = caljs["value1"], valuelen = value1.length;
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else {
              if (valuelen > cell.m.length || cell.m.substr(cell.m.length - valuelen, valuelen) != value1) {
                rowhidden[r2] = 0;
              }
            }
          } else if (value == "textequal") {
            let value1 = caljs["value1"];
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else {
              if (cell.m != value1) {
                rowhidden[r2] = 0;
              }
            }
          } else if (value == "dateequal") {
            let value1 = genarate(caljs["value1"])[2];
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else if (cell.ct != null && cell.ct.t == "d") {
              if (parseInt(cell.v) != value1) {
                rowhidden[r2] = 0;
              }
            } else {
              rowhidden[r2] = 0;
            }
          } else if (value == "datelessthan") {
            let value1 = genarate(caljs["value1"])[2];
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else if (cell.ct != null && cell.ct.t == "d") {
              if (parseInt(cell.v) >= value1) {
                rowhidden[r2] = 0;
              }
            } else {
              rowhidden[r2] = 0;
            }
          } else if (value == "datemorethan") {
            let value1 = genarate(caljs["value1"])[2];
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else if (cell.ct != null && cell.ct.t == "d") {
              if (parseInt(cell.v) <= value1) {
                rowhidden[r2] = 0;
              }
            } else {
              rowhidden[r2] = 0;
            }
          } else if (value == "morethan") {
            let value1 = parseFloat(caljs["value1"]);
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else if (cell.ct != null && cell.ct.t == "n") {
              if (cell.v <= value1) {
                rowhidden[r2] = 0;
              }
            } else {
              rowhidden[r2] = 0;
            }
          } else if (value == "moreequalthan") {
            let value1 = parseFloat(caljs["value1"]);
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else if (cell.ct != null && cell.ct.t == "n") {
              if (cell.v < value1) {
                rowhidden[r2] = 0;
              }
            } else {
              rowhidden[r2] = 0;
            }
          } else if (value == "lessthan") {
            let value1 = parseFloat(caljs["value1"]);
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else if (cell.ct != null && cell.ct.t == "n") {
              if (cell.v >= value1) {
                rowhidden[r2] = 0;
              }
            } else {
              rowhidden[r2] = 0;
            }
          } else if (value == "lessequalthan") {
            let value1 = parseFloat(caljs["value1"]);
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else if (cell.ct != null && cell.ct.t == "n") {
              if (cell.v > value1) {
                rowhidden[r2] = 0;
              }
            } else {
              rowhidden[r2] = 0;
            }
          } else if (value == "equal") {
            let value1 = parseFloat(caljs["value1"]);
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else if (cell.ct != null && cell.ct.t == "n") {
              if (cell.v != value1) {
                rowhidden[r2] = 0;
              }
            } else {
              rowhidden[r2] = 0;
            }
          } else if (value == "noequal") {
            let value1 = parseFloat(caljs["value1"]);
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else if (cell.ct != null && cell.ct.t == "n") {
              if (cell.v == value1) {
                rowhidden[r2] = 0;
              }
            } else {
              rowhidden[r2] = 0;
            }
          } else if (value == "include") {
            let value1 = parseFloat(caljs["value1"]), value2 = parseFloat(caljs["value2"]);
            let min, max;
            if (value1 < value2) {
              min = value1;
              max = value2;
            } else {
              max = value1;
              min = value2;
            }
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else if (cell.ct != null && cell.ct.t == "n") {
              if (cell.v < min || cell.v > max) {
                rowhidden[r2] = 0;
              }
            } else {
              rowhidden[r2] = 0;
            }
          } else if (value == "noinclude") {
            let value1 = parseFloat(caljs["value1"]), value2 = parseFloat(caljs["value2"]);
            let min, max;
            if (value1 < value2) {
              min = value1;
              max = value2;
            } else {
              max = value1;
              min = value2;
            }
            if (cell == null || isRealNull(cell.v)) {
              rowhidden[r2] = 0;
            } else if (cell.ct != null && cell.ct.t == "n") {
              if (cell.v >= min && cell.v <= max) {
                rowhidden[r2] = 0;
              }
            } else {
              rowhidden[r2] = 0;
            }
          }
        }
      } else {
        $("#luckysheet-filter-byvalue-select .ListBox input[type='checkbox']").each(function(i2, e) {
          if ($(e).is(":visible") && $(e).is(":checked")) {
            return true;
          }
          if ($(e).closest(".day").length > 0) {
            let day = $(e).siblings("label").text();
            if (Number(day) < 10) {
              day = "0" + Number(day);
            }
            let month = $(e).closest(".monthBox").find(".month label").text().replace(locale_filter.filiterMonthText, "");
            if (Number(month) < 10) {
              month = "0" + Number(month);
            }
            let year = $(e).closest(".yearBox").find(".year label").text().replace(locale_filter.filiterYearText, "");
            let itemV = locale_filter.filterDateFormatTip + "#$$$#" + year + "-" + month + "-" + day;
            filterdata[itemV] = "1";
          }
          if ($(e).closest(".textBox").length > 0) {
            let itemV = $(e).closest(".textBox").data("filter");
            filterdata[itemV] = "1";
          }
        });
        for (let r2 = st_r + 1; r2 <= ed_r; r2++) {
          if (r2 in rowhiddenother) {
            continue;
          }
          if (store_default.flowdata[r2] == null) {
            continue;
          }
          let cell = store_default.flowdata[r2][cindex];
          let value;
          if (cell == null || isRealNull(cell.v)) {
            value = "null#$$$#null";
          } else if (cell.ct != null && cell.ct.t == "d") {
            let fmt = update("YYYY-MM-DD", cell.v);
            value = locale_filter.filterDateFormatTip + "#$$$#" + fmt;
          } else {
            value = cell.v + "#$$$#" + cell.m;
          }
          if (value in filterdata) {
            rowhidden[r2] = 0;
          }
        }
      }
      let $top = $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").eq(cindex - st_c);
      let optionstate = $("#luckysheet-filter-byvalue-select .ListBox input[type='checkbox']:visible:checked").length < $("#luckysheet-filter-byvalue-select .ListBox input[type='checkbox']:visible").length || $("#luckysheet-filter-byvalue-input").val().length > 0 || $("#luckysheet-filter-bycondition").next().is(":visible") && $("#luckysheet-filter-byvalue").next().is(":hidden") && $("#luckysheet-filter-selected span").data("value") != "null";
      let rowhiddenall = $.extend(true, rowhiddenother, rowhidden), rowhidenPre = json_default.parseJsonParm($top.data("rowhidden"));
      labelFilterOptionState($top, optionstate, rowhidden, caljs, true, st_r, ed_r, cindex, st_c, ed_c);
      let cfg = $.extend(true, {}, store_default.config);
      cfg["rowhidden"] = rowhiddenall;
      if (store_default.clearjfundo) {
        let redo2 = {};
        redo2["type"] = "datachangeAll_filter";
        redo2["sheetIndex"] = store_default.currentSheetIndex;
        redo2["config"] = $.extend(true, {}, store_default.config);
        redo2["curconfig"] = cfg;
        redo2["optionstate"] = optionstate;
        redo2["optionsindex"] = cindex - st_c;
        redo2["rowhidden"] = $.extend(true, {}, rowhidden);
        redo2["rowhidenPre"] = $.extend(true, {}, rowhidenPre);
        if (caljs != null) {
          redo2["caljs"] = caljs;
        }
        store_default.jfundo.length = 0;
        store_default.jfredo.push(redo2);
      }
      store_default.config = cfg;
      store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
      server_default.saveParam("cg", store_default.currentSheetIndex, cfg["rowhidden"], {"k": "rowhidden"});
      jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
      $("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
      cleargridelement();
    });
  }
  var init_filter = __esm({
    "src/controllers/filter.js"() {
      init_get();
      init_editor();
      init_validate();
      init_tooltip();
      init_getRowlen();
      init_select();
      init_sheetMove();
      init_constant();
      init_server();
      init_locale();
      init_store();
      init_menuButton();
      init_conditionformat();
      init_alternateformat();
      init_protection();
      init_util();
      init_cleargridelement();
      init_refresh();
      init_sort();
      init_json();
      init_format();
    }
  });

  // src/controllers/imageCtrl.js
  var imageCtrl, imageCtrl_default;
  var init_imageCtrl = __esm({
    "src/controllers/imageCtrl.js"() {
      init_location();
      init_server();
      init_resize();
      init_constant();
      init_protection();
      init_get();
      init_set();
      init_util();
      init_store();
      init_locale();
      init_tooltip();
      init_method();
      imageCtrl = {
        imgItem: {
          type: "3",
          src: "",
          originWidth: null,
          originHeight: null,
          default: {
            width: null,
            height: null,
            left: null,
            top: null
          },
          crop: {
            width: null,
            height: null,
            offsetLeft: 0,
            offsetTop: 0
          },
          isFixedPos: false,
          fixedLeft: null,
          fixedTop: null,
          border: {
            width: 0,
            radius: 0,
            style: "solid",
            color: "#000"
          }
        },
        images: null,
        currentImgId: null,
        currentWinW: null,
        currentWinH: null,
        resize: null,
        resizeXY: null,
        move: false,
        moveXY: null,
        cropChange: null,
        cropChangeXY: null,
        cropChangeObj: null,
        copyImgItemObj: null,
        insertImg: function(file) {
          const uploadImage = store_default.toJsonOptions && store_default.toJsonOptions["uploadImage"];
          if (typeof uploadImage === "function") {
            uploadImage(file).then((url) => {
              imageCtrl._insertImg(url);
            }).catch((error3) => {
              tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', "\u56FE\u7247\u4E0A\u4F20\u5931\u8D25");
            });
          } else {
            let render = new FileReader();
            render.readAsDataURL(file);
            render.onload = function(event2) {
              let src = event2.target.result;
              imageCtrl._insertImg(src);
              $("#luckysheet-imgUpload").val("");
            };
          }
        },
        _insertImg: function(src) {
          let _this = this;
          let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
          let rowIndex = last.row_focus || 0;
          let colIndex = last.column_focus || 0;
          let left = colIndex == 0 ? 0 : store_default.visibledatacolumn[colIndex - 1];
          let top = rowIndex == 0 ? 0 : store_default.visibledatarow[rowIndex - 1];
          let image = new Image();
          image.onload = function() {
            let width = image.width, height = image.height;
            let img = {
              src,
              left,
              top,
              originWidth: width,
              originHeight: height
            };
            _this.addImgItem(img);
          };
          let imageUrlHandle = store_default.toJsonOptions && store_default.toJsonOptions["imageUrlHandle"];
          image.src = typeof imageUrlHandle === "function" ? imageUrlHandle(src) : src;
        },
        generateRandomId: function(prefix) {
          if (prefix == null) {
            prefix = "img";
          }
          let userAgent = window.navigator.userAgent.replace(/[^a-zA-Z0-9]/g, "").split("");
          let mid = "";
          for (let i2 = 0; i2 < 12; i2++) {
            mid += userAgent[Math.round(Math.random() * (userAgent.length - 1))];
          }
          let time = new Date().getTime();
          return prefix + "_" + mid + "_" + time;
        },
        modelHtml: function(id, imgItem) {
          let _this = this;
          let imageUrlHandle = store_default.toJsonOptions && store_default.toJsonOptions["imageUrlHandle"];
          let src = typeof imageUrlHandle === "function" ? imageUrlHandle(imgItem.src) : imgItem.src;
          let imgItemParam = _this.getImgItemParam(imgItem);
          let width = imgItemParam.width * store_default.zoomRatio;
          let height = imgItemParam.height * store_default.zoomRatio;
          let left = imgItemParam.left * store_default.zoomRatio;
          let top = imgItemParam.top * store_default.zoomRatio;
          let position = imgItemParam.position;
          let borderWidth = imgItem.border.width;
          return `<div id="${id}" class="luckysheet-modal-dialog luckysheet-modal-dialog-image" style="width:${width}px;height:${height}px;padding:0;position:${position};left:${left}px;top:${top}px;z-index:200;">
                    <div class="luckysheet-modal-dialog-content" style="width:100%;height:100%;overflow:hidden;position:relative;">
                        <img src="${src}" style="position:absolute;width:${imgItem.default.width * store_default.zoomRatio}px;height:${imgItem.default.height * store_default.zoomRatio}px;left:${-imgItem.crop.offsetLeft * store_default.zoomRatio}px;top:${-imgItem.crop.offsetTop * store_default.zoomRatio}px;" />
                    </div>
                    <div class="luckysheet-modal-dialog-border" style="border:${borderWidth}px ${imgItem.border.style} ${imgItem.border.color};border-radius:${imgItem.border.radius * store_default.zoomRatio}px;position:absolute;left:${-borderWidth}px;right:${-borderWidth}px;top:${-borderWidth}px;bottom:${-borderWidth}px;"></div>
                </div>`;
        },
        getSliderHtml: function() {
          let imageText = locale_default().imageText;
          return `<div id="luckysheet-modal-dialog-slider-imageCtrl" class="luckysheet-modal-dialog-slider luckysheet-modal-dialog-slider-imageCtrl" style="display:block;">
                    <div class="luckysheet-modal-dialog-slider-title">
                        <span>${imageText.imageSetting}</span>
                        <span class="luckysheet-model-close-btn" title="${imageText.close}">
                            <i class="fa fa-times" aria-hidden="true"></i>
                        </span>
                    </div>
                    <div class="luckysheet-modal-dialog-slider-content">
                        <div class="slider-box">
                            <div class="slider-box-title">${imageText.conventional}</div>
                            <div class="slider-box-radios">
                                <div class="radio-item">
                                    <input type="radio" id="imgItemType1" name="imgItemType" value="1">
                                    <label for="imgItemType1">${imageText.moveCell1}</label>
                                </div>
                                <div class="radio-item">
                                    <input type="radio" id="imgItemType2" name="imgItemType" value="2">
                                    <label for="imgItemType2">${imageText.moveCell2}</label>
                                </div>
                                <div class="radio-item">
                                    <input type="radio" id="imgItemType3" name="imgItemType" value="3">
                                    <label for="imgItemType3">${imageText.moveCell3}</label>
                                </div>
                            </div>
                            <div class="slider-box-checkbox">
                                <input type="checkbox" id="imgItemIsFixedPos">
                                <label for="imgItemIsFixedPos">${imageText.fixedPos}</label>
                            </div>
                        </div>
                        <div class="slider-box">
                            <div class="slider-box-title">${imageText.border}</div>
                            <div class="slider-box-borderConfig">
                                <div class="border-item">
                                    <label>${imageText.width}</label>
                                    <input type="number" id="imgItemBorderWidth" min="0">
                                </div>
                                <div class="border-item">
                                    <label>${imageText.radius}</label>
                                    <input type="number" id="imgItemBorderRadius" min="0">
                                </div>
                                <div class="border-item">
                                    <label>${imageText.style}</label>
                                    <select id="imgItemBorderStyle">
                                        <option value="solid">${imageText.solid}</option>
                                        <option value="dashed">${imageText.dashed}</option>
                                        <option value="dotted">${imageText.dotted}</option>
                                        <option value="double">${imageText.double}</option>
                                    </select>
                                </div>
                                <div class="border-item">
                                    <label>${imageText.color}</label>
                                    <div id="imgItemBorderColor" class="imgItemBorderColor">
                                        <span></span>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>`;
        },
        sliderHtmlShow: function() {
          let _this = this;
          $("#luckysheet-modal-dialog-slider-imageCtrl").remove();
          let sliderHtml = _this.getSliderHtml();
          $("body").append(sliderHtml);
          luckysheetsizeauto();
          let imgItem = _this.images[_this.currentImgId];
          let type = imgItem.type;
          $("#luckysheet-modal-dialog-slider-imageCtrl #imgItemType" + type).prop("checked", true);
          let isFixedPos = imgItem.isFixedPos;
          $("#luckysheet-modal-dialog-slider-imageCtrl #imgItemIsFixedPos").prop("checked", isFixedPos);
          let border = imgItem.border;
          $("#luckysheet-modal-dialog-slider-imageCtrl #imgItemBorderWidth").val(border.width);
          $("#luckysheet-modal-dialog-slider-imageCtrl #imgItemBorderRadius").val(border.radius);
          $("#luckysheet-modal-dialog-slider-imageCtrl #imgItemBorderStyle").val(border.style);
          $("#luckysheet-modal-dialog-slider-imageCtrl #imgItemBorderColor span").css("background-color", border.color).attr("title", border.color);
          _this.init();
        },
        colorSelectDialog: function(currenColor) {
          const _locale = locale_default();
          const locale_button = _locale.button;
          const locale_toolbar = _locale.toolbar;
          const locale_imageCtrl = _locale.imageCtrl;
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-imageCtrl-colorSelect-dialog").remove();
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-imageCtrl-colorSelect-dialog",
            "addclass": "luckysheet-imageCtrl-colorSelect-dialog",
            "title": locale_imageCtrl.borderTile,
            "content": `<div class="currenColor">
                            ${locale_imageCtrl.borderCur}:<span title="${currenColor}" style="background-color:${currenColor}"></span>
                        </div>
                        <div class="colorshowbox"></div>`,
            "botton": `<button id="luckysheet-imageCtrl-colorSelect-dialog-confirm" class="btn btn-primary">${locale_button.confirm}</button>
                        <button class="btn btn-default luckysheet-model-close-btn">${locale_button.cancel}</button>`,
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-imageCtrl-colorSelect-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-imageCtrl-colorSelect-dialog").css({
            "left": (winw + scrollLeft - myw) / 2,
            "top": (winh + scrollTop - myh) / 3
          }).show();
          $("#luckysheet-imageCtrl-colorSelect-dialog").find(".colorshowbox").spectrum({
            showPalette: true,
            showPaletteOnly: true,
            preferredFormat: "hex",
            clickoutFiresChange: false,
            showInitial: true,
            showInput: true,
            flat: true,
            hideAfterPaletteSelect: true,
            showSelectionPalette: true,
            showButtons: false,
            maxPaletteSize: 8,
            maxSelectionSize: 8,
            color: currenColor,
            cancelText: locale_button.cancel,
            chooseText: locale_toolbar.confirmColor,
            togglePaletteMoreText: locale_toolbar.customColor,
            togglePaletteLessText: locale_toolbar.collapse,
            togglePaletteOnly: true,
            clearText: locale_toolbar.clearText,
            noColorSelectedText: locale_toolbar.noColorSelectedText,
            localStorageKey: "spectrum.textcolor" + server_default.gridKey,
            palette: [
              ["#000", "#444", "#666", "#999", "#ccc", "#eee", "#f3f3f3", "#fff"],
              ["#f00", "#f90", "#ff0", "#0f0", "#0ff", "#00f", "#90f", "#f0f"],
              ["#f4cccc", "#fce5cd", "#fff2cc", "#d9ead3", "#d0e0e3", "#cfe2f3", "#d9d2e9", "#ead1dc"],
              ["#ea9999", "#f9cb9c", "#ffe599", "#b6d7a8", "#a2c4c9", "#9fc5e8", "#b4a7d6", "#d5a6bd"],
              ["#e06666", "#f6b26b", "#ffd966", "#93c47d", "#76a5af", "#6fa8dc", "#8e7cc3", "#c27ba0"],
              ["#c00", "#e69138", "#f1c232", "#6aa84f", "#45818e", "#3d85c6", "#674ea7", "#a64d79"],
              ["#900", "#b45f06", "#bf9000", "#38761d", "#134f5c", "#0b5394", "#351c75", "#741b47"],
              ["#600", "#783f04", "#7f6000", "#274e13", "#0c343d", "#073763", "#20124d", "#4c1130"]
            ],
            move: function(color) {
              if (color != null) {
                color = color.toHexString();
              } else {
                color = "#000";
              }
              $("#luckysheet-imageCtrl-colorSelect-dialog .currenColor span").css("background-color", color).attr("title", color);
            }
          });
        },
        init: function() {
          let _this = this;
          $("#luckysheet-modal-dialog-slider-imageCtrl .luckysheet-model-close-btn").click(function() {
            $("#luckysheet-modal-dialog-slider-imageCtrl").hide();
            luckysheetsizeauto();
          });
          $("#luckysheet-modal-dialog-slider-imageCtrl").off("change.radio").on("change.radio", ".radio-item input[type=radio][name=imgItemType]", function() {
            _this.configChange("type", this.value);
          });
          $("#luckysheet-modal-dialog-slider-imageCtrl").off("change.checkbox").on("change.checkbox", ".slider-box-checkbox input[type=checkbox]", function() {
            _this.configChange("fixedPos", this.checked);
          });
          $("#luckysheet-modal-dialog-slider-imageCtrl").off("change.borderWidth").on("change.borderWidth", "#imgItemBorderWidth", function() {
            _this.configChange("border-width", this.valueAsNumber);
          });
          $("#luckysheet-modal-dialog-slider-imageCtrl").off("change.borderRadius").on("change.borderRadius", "#imgItemBorderRadius", function() {
            _this.configChange("border-radius", this.valueAsNumber);
          });
          $("#luckysheet-modal-dialog-slider-imageCtrl").off("change.borderStyle").on("change.borderStyle", "#imgItemBorderStyle", function() {
            _this.configChange("border-style", this.value);
          });
          $("#luckysheet-modal-dialog-slider-imageCtrl").off("click.color").on("click.color", "#imgItemBorderColor", function() {
            let currenColor = $(this).find("span").attr("title");
            _this.colorSelectDialog(currenColor);
          });
          $(document).off("click.selectColorConfirm").on("click.selectColorConfirm", "#luckysheet-imageCtrl-colorSelect-dialog-confirm", function() {
            let $parent = $(this).parents("#luckysheet-imageCtrl-colorSelect-dialog");
            $("#luckysheet-modal-dialog-mask").hide();
            $parent.hide();
            let currenColor = $parent.find(".currenColor span").attr("title");
            $("#luckysheet-modal-dialog-slider-imageCtrl #imgItemBorderColor span").css("background-color", currenColor).attr("title", currenColor);
            _this.configChange("border-color", currenColor);
          });
          $("#luckysheet-image-showBoxs").off("mousedown.active").on("mousedown.active", ".luckysheet-modal-dialog-image", function(e) {
            if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "editObjects", false)) {
              return;
            }
            $(this).hide();
            let id = $(this).attr("id");
            if (_this.currentImgId != null && _this.currentImgId != id) {
              _this.cancelActiveImgItem();
            }
            _this.currentImgId = id;
            let item2 = _this.images[id];
            let imgItemParam = _this.getImgItemParam(item2);
            let width = imgItemParam.width * store_default.zoomRatio;
            let height = imgItemParam.height * store_default.zoomRatio;
            let left = imgItemParam.left * store_default.zoomRatio;
            let top = imgItemParam.top * store_default.zoomRatio;
            let position = imgItemParam.position;
            $("#luckysheet-modal-dialog-activeImage").show().css({
              "width": width,
              "height": height,
              "left": left,
              "top": top,
              "position": position
            });
            let imageUrlHandle = store_default.toJsonOptions && store_default.toJsonOptions["imageUrlHandle"];
            let imgUrl = typeof imageUrlHandle === "function" ? imageUrlHandle(item2.src) : item2.src;
            $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-content").css({
              "background-image": "url(" + imgUrl + ")",
              "background-size": item2.default.width * store_default.zoomRatio + "px " + item2.default.height * store_default.zoomRatio + "px",
              "background-position": -item2.crop.offsetLeft * store_default.zoomRatio + "px " + -item2.crop.offsetTop * store_default.zoomRatio + "px"
            });
            $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-border").css({
              "border-width": item2.border.width * store_default.zoomRatio,
              "border-style": item2.border.style,
              "border-color": item2.border.color,
              "border-radius": item2.border.radius * store_default.zoomRatio,
              "left": -item2.border.width * store_default.zoomRatio,
              "right": -item2.border.width * store_default.zoomRatio,
              "top": -item2.border.width * store_default.zoomRatio,
              "bottom": -item2.border.width * store_default.zoomRatio
            });
            _this.sliderHtmlShow();
            e.stopPropagation();
          });
          $("#luckysheet-modal-dialog-activeImage").off("mousedown.move").on("mousedown.move", ".luckysheet-modal-dialog-content", function(e) {
            if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "editObjects", false)) {
              return;
            }
            if (!$("#luckysheet-modal-dialog-slider-imageCtrl").is(":visible")) {
              _this.sliderHtmlShow();
            }
            _this.move = true;
            _this.currentWinW = $("#luckysheet-cell-main")[0].scrollWidth;
            _this.currentWinH = $("#luckysheet-cell-main")[0].scrollHeight;
            let offset = $("#luckysheet-modal-dialog-activeImage").offset();
            _this.moveXY = [
              e.pageX - offset.left,
              e.pageY - offset.top
            ];
            setluckysheet_scroll_status(true);
            e.stopPropagation();
          });
          $("#luckysheet-modal-dialog-activeImage").off("mousedown.resize").on("mousedown.resize", ".luckysheet-modal-dialog-resize-item", function(e) {
            if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "editObjects", false)) {
              return;
            }
            _this.currentWinW = $("#luckysheet-cell-main")[0].scrollWidth;
            _this.currentWinH = $("#luckysheet-cell-main")[0].scrollHeight;
            _this.resize = $(this).data("type");
            let scrollTop = $("#luckysheet-cell-main").scrollTop(), scrollLeft = $("#luckysheet-cell-main").scrollLeft();
            let mouse = mouseposition(e.pageX, e.pageY);
            let x = mouse[0] + scrollLeft;
            let y = mouse[1] + scrollTop;
            let position = $("#luckysheet-modal-dialog-activeImage").position();
            let width = $("#luckysheet-modal-dialog-activeImage").width();
            let height = $("#luckysheet-modal-dialog-activeImage").height();
            _this.resizeXY = [
              x,
              y,
              width,
              height,
              position.left + scrollLeft,
              position.top + scrollTop,
              scrollLeft,
              scrollTop
            ];
            setluckysheet_scroll_status(true);
            e.stopPropagation();
          });
          $("#luckysheet-modal-dialog-activeImage").off("mousedown.croppingEnter").on("mousedown.croppingEnter", ".luckysheet-modal-controll-crop", function(e) {
            _this.croppingEnter();
            e.stopPropagation();
          });
          $("#luckysheet-modal-dialog-cropping").off("mousedown.croppingExit").on("mousedown.croppingExit", ".luckysheet-modal-controll-crop", function(e) {
            _this.croppingExit();
            e.stopPropagation();
          });
          $("#luckysheet-modal-dialog-cropping").off("mousedown.cropChange").on("mousedown.cropChange", ".resize-item", function(e) {
            _this.cropChange = $(this).data("type");
            let scrollTop = $("#luckysheet-cell-main").scrollTop(), scrollLeft = $("#luckysheet-cell-main").scrollLeft();
            let mouse = mouseposition(e.pageX, e.pageY);
            let x = mouse[0] + scrollLeft;
            let y = mouse[1] + scrollTop;
            _this.cropChangeXY = [
              x,
              y
            ];
            setluckysheet_scroll_status(true);
            e.stopPropagation();
          });
          $("#luckysheet-image-showBoxs").off("mousedown.restore").on("mousedown.restore", ".luckysheet-modal-controll-restore", function(e) {
            _this.restoreImgItem();
            e.stopPropagation();
          });
          $("#luckysheet-image-showBoxs").off("mousedown.delete").on("mousedown.delete", ".luckysheet-modal-controll-del", function(e) {
            _this.removeImgItem();
            e.stopPropagation();
          });
        },
        configChange: function(type, value) {
          let _this = this;
          let imgItem = _this.images[_this.currentImgId];
          switch (type) {
            case "type":
              imgItem.type = value;
              break;
            case "fixedPos":
              imgItem.isFixedPos = value;
              let imgItemParam = _this.getImgItemParam(imgItem);
              let width = imgItemParam.width;
              let height = imgItemParam.height;
              let left = imgItemParam.left;
              let top = imgItemParam.top;
              let position = imgItemParam.position;
              $("#luckysheet-modal-dialog-activeImage").show().css({
                "width": width,
                "height": height,
                "left": left,
                "top": top,
                "position": position
              });
              break;
            case "border-width":
              imgItem.border.width = value;
              $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-border").css({
                "border-width": value,
                "left": -value,
                "right": -value,
                "top": -value,
                "bottom": -value
              });
              break;
            case "border-radius":
              imgItem.border.radius = value;
              $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-border").css("border-radius", value);
              break;
            case "border-style":
              imgItem.border.style = value;
              $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-border").css("border-style", value);
              break;
            case "border-color":
              imgItem.border.color = value;
              $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-border").css("border-color", value);
              break;
          }
          _this.ref();
        },
        getImgItemParam(imgItem) {
          let isFixedPos = imgItem.isFixedPos;
          let width = imgItem.default.width, height = imgItem.default.height, left = imgItem.default.left, top = imgItem.default.top;
          if (imgItem.crop.width != width || imgItem.crop.height != height) {
            width = imgItem.crop.width;
            height = imgItem.crop.height;
            left += imgItem.crop.offsetLeft;
            top += imgItem.crop.offsetTop;
          }
          let position = "absolute";
          if (isFixedPos) {
            position = "fixed";
            left = imgItem.fixedLeft + imgItem.crop.offsetLeft;
            top = imgItem.fixedTop + imgItem.crop.offsetTop;
          }
          return {
            width,
            height,
            left,
            top,
            position
          };
        },
        cancelActiveImgItem: function() {
          let _this = this;
          $("#luckysheet-modal-dialog-activeImage").hide();
          $("#luckysheet-modal-dialog-cropping").hide();
          $("#luckysheet-modal-dialog-slider-imageCtrl").hide();
          let imgItem = _this.images[_this.currentImgId];
          let imgItemParam = _this.getImgItemParam(imgItem);
          let width = imgItemParam.width * store_default.zoomRatio;
          let height = imgItemParam.height * store_default.zoomRatio;
          let left = imgItemParam.left * store_default.zoomRatio;
          let top = imgItemParam.top * store_default.zoomRatio;
          let position = imgItemParam.position;
          $("#" + _this.currentImgId).show().css({
            "width": width,
            "height": height,
            "left": left,
            "top": top,
            "position": position
          });
          $("#" + _this.currentImgId + " img").css({
            "width": imgItem.default.width * store_default.zoomRatio,
            "height": imgItem.default.height * store_default.zoomRatio,
            "left": -imgItem.crop.offsetLeft * store_default.zoomRatio,
            "top": -imgItem.crop.offsetTop * store_default.zoomRatio
          });
          $("#" + _this.currentImgId + " .luckysheet-modal-dialog-border").css({
            "border-width": imgItem.border.width * store_default.zoomRatio,
            "border-style": imgItem.border.style,
            "border-color": imgItem.border.color,
            "border-radius": imgItem.border.radius * store_default.zoomRatio,
            "left": -imgItem.border.width * store_default.zoomRatio,
            "right": -imgItem.border.width * store_default.zoomRatio,
            "top": -imgItem.border.width * store_default.zoomRatio,
            "bottom": -imgItem.border.width * store_default.zoomRatio
          });
          _this.currentImgId = null;
        },
        addImgItem: function(img) {
          let _this = this;
          let width, height;
          let max = 400;
          if (img.originHeight < img.originWidth) {
            height = Math.round(img.originHeight * (max / img.originWidth));
            width = max;
          } else {
            width = Math.round(img.originWidth * (max / img.originHeight));
            height = max;
          }
          if (_this.images == null) {
            _this.images = {};
          }
          let imgItem = $.extend(true, {}, _this.imgItem);
          imgItem.src = img.src;
          imgItem.originWidth = img.originWidth;
          imgItem.originHeight = img.originHeight;
          imgItem.default.width = width;
          imgItem.default.height = height;
          imgItem.default.left = img.left;
          imgItem.default.top = img.top;
          imgItem.crop.width = width;
          imgItem.crop.height = height;
          let scrollTop = $("#luckysheet-cell-main").scrollTop(), scrollLeft = $("#luckysheet-cell-main").scrollLeft();
          imgItem.fixedLeft = img.left - scrollLeft + store_default.rowHeaderWidth;
          imgItem.fixedTop = img.top - scrollTop + store_default.infobarHeight + store_default.toolbarHeight + store_default.calculatebarHeight + store_default.columnHeaderHeight;
          let id = _this.generateRandomId();
          let modelHtml = _this.modelHtml(id, imgItem);
          $("#luckysheet-image-showBoxs .img-list").append(modelHtml);
          _this.images[id] = imgItem;
          _this.ref();
          _this.init();
        },
        moveImgItem: function() {
          let _this = this;
          _this.move = false;
          let obj = $("#luckysheet-modal-dialog-activeImage")[0];
          let item2 = _this.images[_this.currentImgId];
          if (item2.isFixedPos) {
            item2.fixedLeft = obj.offsetLeft - item2.crop.offsetLeft;
            item2.fixedTop = obj.offsetTop - item2.crop.offsetTop;
          } else {
            item2.default.left = obj.offsetLeft - item2.crop.offsetLeft;
            item2.default.top = obj.offsetTop - item2.crop.offsetTop;
          }
          _this.ref();
        },
        resizeImgItem: function() {
          let _this = this;
          _this.resize = null;
          let obj = $("#luckysheet-modal-dialog-activeImage")[0];
          let item2 = _this.images[_this.currentImgId];
          let scaleX = obj.clientWidth / item2.crop.width;
          let scaleY = obj.clientHeight / item2.crop.height;
          item2.default.width = Math.round(item2.default.width * scaleX);
          item2.default.height = Math.round(item2.default.height * scaleY);
          item2.crop.width = Math.round(item2.crop.width * scaleX);
          item2.crop.height = Math.round(item2.crop.height * scaleY);
          item2.crop.offsetLeft = Math.round(item2.crop.offsetLeft * scaleX);
          item2.crop.offsetTop = Math.round(item2.crop.offsetTop * scaleY);
          if (item2.isFixedPos) {
            item2.fixedLeft = obj.offsetLeft;
            item2.fixedTop = obj.offsetTop;
          } else {
            item2.default.left = obj.offsetLeft - item2.crop.offsetLeft;
            item2.default.top = obj.offsetTop - item2.crop.offsetTop;
          }
          _this.ref();
        },
        croppingEnter: function() {
          let _this = this;
          _this.cropping = true;
          if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "editObjects", false)) {
            return;
          }
          $("#luckysheet-modal-dialog-activeImage").hide();
          $("#luckysheet-modal-dialog-slider-imageCtrl").hide();
          let item2 = _this.images[_this.currentImgId];
          let imgItemParam = _this.getImgItemParam(item2);
          let width = imgItemParam.width;
          let height = imgItemParam.height;
          let left = imgItemParam.left;
          let top = imgItemParam.top;
          let position = imgItemParam.position;
          $("#luckysheet-modal-dialog-cropping").show().css({
            "width": width,
            "height": height,
            "left": left,
            "top": top,
            "position": position
          });
          let imageUrlHandle = store_default.toJsonOptions && store_default.toJsonOptions["imageUrlHandle"];
          let imgSrc = typeof imageUrlHandle === "function" ? imageUrlHandle(item2.src) : item2.src;
          $("#luckysheet-modal-dialog-cropping .cropping-mask").css({
            "width": item2.default.width,
            "height": item2.default.height,
            "background-image": "url(" + imgSrc + ")",
            "left": -item2.crop.offsetLeft,
            "top": -item2.crop.offsetTop
          });
          $("#luckysheet-modal-dialog-cropping .cropping-content").css({
            "background-image": "url(" + imgSrc + ")",
            "background-size": item2.default.width + "px " + item2.default.height + "px",
            "background-position": -item2.crop.offsetLeft + "px " + -item2.crop.offsetTop + "px"
          });
          $("#luckysheet-modal-dialog-cropping .luckysheet-modal-dialog-border").css({
            "border-width": item2.border.width,
            "border-style": item2.border.style,
            "border-color": item2.border.color,
            "border-radius": item2.border.radius,
            "left": -item2.border.width,
            "right": -item2.border.width,
            "top": -item2.border.width,
            "bottom": -item2.border.width
          });
        },
        croppingExit: function() {
          let _this = this;
          _this.cropping = false;
          $("#luckysheet-modal-dialog-cropping").hide();
          let item2 = _this.images[_this.currentImgId];
          let imgItemParam = _this.getImgItemParam(item2);
          let width = imgItemParam.width;
          let height = imgItemParam.height;
          let left = imgItemParam.left;
          let top = imgItemParam.top;
          let position = imgItemParam.position;
          $("#luckysheet-modal-dialog-activeImage").show().css({
            "width": width,
            "height": height,
            "left": left,
            "top": top,
            "position": position
          });
          let imageUrlHandle = store_default.toJsonOptions && store_default.toJsonOptions["imageUrlHandle"];
          let imgSrc = typeof imageUrlHandle === "function" ? imageUrlHandle(item2.src) : item2.src;
          $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-content").css({
            "background-image": "url(" + imgSrc + ")",
            "background-size": item2.default.width + "px " + item2.default.height + "px",
            "background-position": -item2.crop.offsetLeft + "px " + -item2.crop.offsetTop + "px"
          });
        },
        cropChangeImgItem: function() {
          let _this = this;
          _this.cropChange = null;
          let item2 = _this.images[_this.currentImgId];
          item2.crop.width = _this.cropChangeObj.width;
          item2.crop.height = _this.cropChangeObj.height;
          item2.crop.offsetLeft = _this.cropChangeObj.offsetLeft;
          item2.crop.offsetTop = _this.cropChangeObj.offsetTop;
          _this.ref();
        },
        restoreImgItem: function() {
          let _this = this;
          let imgItem = _this.images[_this.currentImgId];
          imgItem.default.width = imgItem.originWidth;
          imgItem.default.height = imgItem.originHeight;
          imgItem.crop.width = imgItem.originWidth;
          imgItem.crop.height = imgItem.originHeight;
          imgItem.crop.offsetLeft = 0;
          imgItem.crop.offsetTop = 0;
          let imgItemParam = _this.getImgItemParam(imgItem);
          let width = imgItemParam.width;
          let height = imgItemParam.height;
          let left = imgItemParam.left;
          let top = imgItemParam.top;
          let position = imgItemParam.position;
          $("#luckysheet-modal-dialog-activeImage").show().css({
            "width": width,
            "height": height,
            "left": left,
            "top": top,
            "position": position
          });
          let imageUrlHandle = store_default.toJsonOptions && store_default.toJsonOptions["imageUrlHandle"];
          let imgSrc = typeof imageUrlHandle === "function" ? imageUrlHandle(imgItem.src) : imgItem.src;
          $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-content").css({
            "background-image": "url(" + imgSrc + ")",
            "background-size": imgItem.default.width + "px " + imgItem.default.height + "px",
            "background-position": -imgItem.crop.offsetLeft + "px " + -imgItem.crop.offsetTop + "px"
          });
          _this.ref();
        },
        removeImgItem: function() {
          let _this = this;
          let imgItem = _this.images[_this.currentImgId];
          if (!method_default.createHookFunction("imageDeleteBefore", imgItem)) {
            return;
          }
          $("#luckysheet-modal-dialog-activeImage").hide();
          $("#luckysheet-modal-dialog-cropping").hide();
          $("#luckysheet-modal-dialog-slider-imageCtrl").hide();
          $("#" + _this.currentImgId).remove();
          delete _this.images[_this.currentImgId];
          _this.currentImgId = null;
          method_default.createHookFunction("imageDeleteAfter", imgItem);
          _this.ref();
        },
        copyImgItem: function(e) {
          let _this = this;
          _this.copyImgItemObj = $.extend(true, {}, _this.images[_this.currentImgId]);
          let clipboardData = window.clipboardData;
          if (!clipboardData) {
            clipboardData = e.originalEvent.clipboardData;
          }
          let cpdata = '<table data-type="luckysheet_copy_action_image"><tr><td><td></tr></table>';
          if (!clipboardData) {
            let textarea = $("#luckysheet-copy-content");
            textarea.html(cpdata);
            textarea.focus();
            textarea.select();
            document.execCommand("selectAll");
            document.execCommand("Copy");
            setTimeout(function() {
              $("#luckysheet-copy-content").blur();
            }, 10);
          } else {
            clipboardData.setData("Text", cpdata);
            return false;
          }
        },
        pasteImgItem: function() {
          let _this = this;
          if (_this.images == null) {
            _this.images = {};
          }
          let rowIndex = store_default.luckysheet_select_save[0].row_focus || 0;
          let colIndex = store_default.luckysheet_select_save[0].column_focus || 0;
          let left = colIndex == 0 ? 0 : store_default.visibledatacolumn[colIndex - 1];
          let top = rowIndex == 0 ? 0 : store_default.visibledatarow[rowIndex - 1];
          let img = $.extend(true, {}, _this.copyImgItemObj);
          img.default.left = left - img.crop.offsetLeft;
          img.default.top = top - img.crop.offsetTop;
          let scrollTop = $("#luckysheet-cell-main").scrollTop(), scrollLeft = $("#luckysheet-cell-main").scrollLeft();
          img.fixedLeft = img.default.left - scrollLeft + store_default.rowHeaderWidth;
          img.fixedTop = img.default.top - scrollTop + store_default.infobarHeight + store_default.toolbarHeight + store_default.calculatebarHeight + store_default.columnHeaderHeight;
          let id = _this.generateRandomId();
          let modelHtml = _this.modelHtml(id, img);
          $("#luckysheet-image-showBoxs .img-list").append(modelHtml);
          _this.images[id] = img;
          _this.ref();
          _this.init();
        },
        allImagesShow: function() {
          let _this = this;
          $("#luckysheet-modal-dialog-activeImage").hide();
          $("#luckysheet-modal-dialog-cropping").hide();
          $("#luckysheet-modal-dialog-slider-imageCtrl").hide();
          $("#luckysheet-image-showBoxs .img-list").empty();
          if (_this.images == null) {
            return;
          }
          for (let imgId in _this.images) {
            let imgItem = _this.images[imgId];
            let modelHtml = _this.modelHtml(imgId, imgItem);
            $("#luckysheet-image-showBoxs .img-list").append(modelHtml);
          }
        },
        moveChangeSize: function(rc, index2, size) {
          let _this = this;
          let images = $.extend(true, {}, _this.images);
          if (rc == "row") {
            let row = store_default.visibledatarow[index2], row_pre = index2 - 1 == -1 ? 0 : store_default.visibledatarow[index2 - 1];
            let changeSize = size - (row - row_pre - 1);
            for (let imgId in images) {
              let imgItem = images[imgId];
              let imgItemParam = _this.getImgItemParam(imgItem);
              let type = imgItem.type;
              if (type == "1") {
                if (imgItemParam.top >= row) {
                  imgItem.default.top = imgItemParam.top + changeSize - imgItem.crop.offsetTop;
                } else {
                  if (imgItemParam.top + imgItemParam.height >= row - 2) {
                    if (imgItemParam.top < row + changeSize) {
                      let scaleY = (imgItemParam.height + changeSize) / imgItemParam.height;
                      imgItem.default.height = Math.round(imgItem.default.height * scaleY);
                      imgItem.crop.height = Math.round(imgItem.crop.height * scaleY);
                      imgItem.crop.offsetTop = Math.round(imgItem.crop.offsetTop * scaleY);
                    } else {
                      let scaleY = (imgItemParam.top + imgItemParam.height - row) / imgItemParam.height;
                      imgItem.default.height = Math.round(imgItem.default.height * scaleY);
                      imgItem.crop.height = Math.round(imgItem.crop.height * scaleY);
                      imgItem.crop.offsetTop = Math.round(imgItem.crop.offsetTop * scaleY);
                      imgItem.default.top = row + changeSize - imgItem.crop.offsetTop;
                    }
                  } else {
                    if (imgItemParam.top > row + changeSize) {
                      let scaleY = 1 / imgItemParam.height;
                      imgItem.default.height = Math.round(imgItem.default.height * scaleY);
                      imgItem.crop.height = Math.round(imgItem.crop.height * scaleY);
                      imgItem.crop.offsetTop = Math.round(imgItem.crop.offsetTop * scaleY);
                      imgItem.default.top = row + changeSize - imgItem.crop.offsetTop;
                    } else if (imgItemParam.top + imgItemParam.height > row + changeSize) {
                      let scaleY = (row + changeSize - imgItemParam.top) / imgItemParam.height;
                      imgItem.default.height = Math.round(imgItem.default.height * scaleY);
                      imgItem.crop.height = Math.round(imgItem.crop.height * scaleY);
                      imgItem.crop.offsetTop = Math.round(imgItem.crop.offsetTop * scaleY);
                    }
                  }
                }
              } else if (type == "2") {
                if (imgItemParam.top >= row) {
                  imgItem.default.top = imgItemParam.top + changeSize - imgItem.crop.offsetTop;
                } else if (imgItemParam.top > row + changeSize) {
                  imgItem.default.top = row + changeSize - imgItem.crop.offsetTop;
                }
              }
            }
          } else if (rc == "column") {
            let col = store_default.visibledatacolumn[index2], col_pre = index2 - 1 == -1 ? 0 : store_default.visibledatacolumn[index2 - 1];
            let changeSize = size - (col - col_pre - 1);
            for (let imgId in images) {
              let imgItem = images[imgId];
              let imgItemParam = _this.getImgItemParam(imgItem);
              let type = imgItem.type;
              if (type == "1") {
                if (imgItemParam.left >= col) {
                  imgItem.default.left = imgItemParam.left + changeSize - imgItem.crop.offsetLeft;
                } else {
                  if (imgItemParam.left + imgItemParam.width >= col - 2) {
                    if (imgItemParam.left < col + changeSize) {
                      let scaleX = (imgItemParam.width + changeSize) / imgItemParam.width;
                      imgItem.default.width = Math.round(imgItem.default.width * scaleX);
                      imgItem.crop.width = Math.round(imgItem.crop.width * scaleX);
                      imgItem.crop.offsetLeft = Math.round(imgItem.crop.offsetLeft * scaleX);
                    } else {
                      let scaleX = (imgItemParam.left + imgItemParam.width - col) / imgItemParam.width;
                      imgItem.default.width = Math.round(imgItem.default.width * scaleX);
                      imgItem.crop.width = Math.round(imgItem.crop.width * scaleX);
                      imgItem.crop.offsetLeft = Math.round(imgItem.crop.offsetLeft * scaleX);
                      imgItem.default.left = col + changeSize - imgItem.crop.offsetLeft;
                    }
                  } else {
                    if (imgItemParam.left > col + changeSize) {
                      let scaleX = 1 / imgItemParam.width;
                      imgItem.default.width = Math.round(imgItem.default.width * scaleX);
                      imgItem.crop.width = Math.round(imgItem.crop.width * scaleX);
                      imgItem.crop.offsetLeft = Math.round(imgItem.crop.offsetLeft * scaleX);
                      imgItem.default.left = col + changeSize - imgItem.crop.offsetLeft;
                    } else if (imgItemParam.left + imgItemParam.width > col + changeSize) {
                      let scaleX = (col + changeSize - imgItemParam.left) / imgItemParam.width;
                      imgItem.default.width = Math.round(imgItem.default.width * scaleX);
                      imgItem.crop.width = Math.round(imgItem.crop.width * scaleX);
                      imgItem.crop.offsetLeft = Math.round(imgItem.crop.offsetLeft * scaleX);
                    }
                  }
                }
              } else if (type == "2") {
                if (imgItemParam.left >= col) {
                  imgItem.default.left = imgItemParam.left + changeSize - imgItem.crop.offsetLeft;
                } else if (imgItemParam.left > col + changeSize) {
                  imgItem.default.left = col + changeSize - imgItem.crop.offsetLeft;
                }
              }
            }
          }
          return images;
        },
        ref: function() {
          let _this = this;
          let file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
          let images = _this.images;
          if (store_default.clearjfundo) {
            store_default.jfundo.length = 0;
            store_default.jfredo.push({
              "type": "imageCtrl",
              "sheetIndex": store_default.currentSheetIndex,
              "images": file.images == null ? null : $.extend(true, {}, file.images),
              "curImages": images
            });
          }
          file.images = $.extend(true, {}, images);
          server_default.saveParam("all", store_default.currentSheetIndex, file.images, {"k": "images"});
        }
      };
      imageCtrl_default = imageCtrl;
    }
  });

  // src/controllers/dataVerificationCtrl.js
  function validateIdCard(idCard) {
    var regIdCard = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/;
    if (regIdCard.test(idCard)) {
      if (idCard.length == 18) {
        var idCardWi = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
        var idCardY = new Array(1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2);
        var idCardWiSum = 0;
        for (var i2 = 0; i2 < 17; i2++) {
          idCardWiSum += idCard.substring(i2, i2 + 1) * idCardWi[i2];
        }
        var idCardMod = idCardWiSum % 11;
        var idCardLast = idCard.substring(17);
        if (idCardMod == 2) {
          if (idCardLast == "X" || idCardLast == "x") {
            return true;
          } else {
            return false;
          }
        } else {
          if (idCardLast == idCardY[idCardMod]) {
            return true;
          } else {
            return false;
          }
        }
      }
    } else {
      return false;
    }
  }
  var dataVerificationCtrl, dataVerificationCtrl_default;
  var init_dataVerificationCtrl = __esm({
    "src/controllers/dataVerificationCtrl.js"() {
      init_util();
      init_formula();
      init_validate();
      init_datecontroll();
      init_refresh();
      init_tooltip();
      init_setdata();
      init_getdata();
      init_editor();
      init_constant();
      init_select();
      init_server();
      init_menuButton();
      init_sheetmanage();
      init_get();
      init_locale();
      init_store();
      dataVerificationCtrl = {
        defaultItem: {
          type: "dropdown",
          type2: null,
          value1: "",
          value2: "",
          checked: false,
          remote: false,
          prohibitInput: false,
          hintShow: false,
          hintText: ""
        },
        curItem: null,
        dataVerification: null,
        selectRange: [],
        selectStatus: false,
        optionLabel: {
          "number": "\u6570\u503C",
          "number_integer": "\u6574\u6570",
          "number_decimal": "\u5C0F\u6570",
          "bw": "\u4ECB\u4E8E",
          "nb": "\u4E0D\u4ECB\u4E8E",
          "eq": "\u7B49\u4E8E",
          "ne": "\u4E0D\u7B49\u4E8E",
          "gt": "\u5927\u4E8E",
          "lt": "\u5C0F\u4E8E",
          "gte": "\u5927\u4E8E\u7B49\u4E8E",
          "lte": "\u5C0F\u4E8E\u7B49\u4E8E",
          "include": "\u5305\u62EC",
          "exclude": "\u4E0D\u5305\u62EC",
          "equal": "\u7B49\u4E8E",
          "bf": "\u65E9\u4E8E",
          "nbf": "\u4E0D\u65E9\u4E8E",
          "af": "\u665A\u4E8E",
          "naf": "\u4E0D\u665A\u4E8E",
          "card": "\u8EAB\u4EFD\u8BC1\u53F7\u7801",
          "phone": "\u624B\u673A\u53F7"
        },
        optionLabel_en: {
          "number": "numeric",
          "number_integer": "integer",
          "number_decimal": "decimal",
          "bw": "between",
          "nb": "not between",
          "eq": "equal to",
          "ne": "not equal to",
          "gt": "greater",
          "lt": "less than",
          "gte": "greater or equal to",
          "lte": "less than or equal to",
          "include": "include",
          "exclude": "not include",
          "equal": "equal to",
          "bf": "earlier than",
          "nbf": "not earlier than",
          "af": "later than",
          "naf": "not later than",
          "card": "identification number",
          "phone": "phone number"
        },
        createDialog: function() {
          let _this = this;
          const _locale = locale_default();
          const dvText = _locale.dataVerification;
          const toolbarText = _locale.toolbar;
          const buttonText = _locale.button;
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-dataVerification-dialog").remove();
          let content = `<div class="box">
                            <div class="box-item" style="border-top:1px solid #E1E4E8;">
                                <div class="box-item-title">${dvText.cellRange}</div>
                                <div id="data-verification-range" class="range">
                                    <input class="formulaInputFocus" spellcheck="false">
                                    <i class="fa fa-table" aria-hidden="true" title="${dvText.selectCellRange}"></i>
                                </div>
                            </div>
                            <div class="box-item">
                                <div class="box-item-title">${dvText.verificationCondition}</div>
                                <select id="data-verification-type-select">
                                    <option value="dropdown">${dvText.dropdown}</option>
                                    <option value="checkbox">${dvText.checkbox}</option>
                                    <option value="number">${dvText.number}</option>
                                    <option value="number_integer">${dvText.number_integer}</option>
                                    <option value="number_decimal">${dvText.number_decimal}</option>
                                    <option value="text_content">${dvText.text_content}</option>
                                    <option value="text_length">${dvText.text_length}</option>
                                    <option value="date">${dvText.date}</option>
                                    <option value="validity">${dvText.validity}</option>
                                </select>
                                <div class="show-box">
                                    <div class="show-box-item show-box-item-dropdown">
                                        <div class="range">
                                            <input class="formulaInputFocus data-verification-value1" placeholder="${dvText.placeholder1}" spellcheck="false">
                                            <i class="fa fa-table" aria-hidden="true" title="${dvText.selectCellRange}"></i>
                                        </div>
                                        <div class="multi">
                                            <input type="checkbox" id="data-verification-multi" class="data-verification-multi">
                                            <label for="data-verification-multi">${dvText.allowMultiSelect}</label>
                                        </div>
                                    </div>
                                    <div class="show-box-item show-box-item-checkbox">
                                        <div class="check-box">
                                            <span>${dvText.selected} \u2014\u2014</span>
                                            <input type="text" class="data-verification-value1" placeholder="${dvText.placeholder2}">
                                        </div>
                                        <div class="check-box">
                                            <span>${dvText.notSelected} \u2014\u2014</span>
                                            <input type="text" class="data-verification-value2" placeholder="${dvText.placeholder2}">
                                        </div>
                                    </div>
                                    <div class="show-box-item show-box-item-number">
                                        <select id="data-verification-number-select">
                                            <option value="bw">${dvText.between}</option>
                                            <option value="nb">${dvText.notBetween}</option>
                                            <option value="eq">${dvText.equal}</option>
                                            <option value="ne">${dvText.notEqualTo}</option>
                                            <option value="gt">${dvText.moreThanThe}</option>
                                            <option value="lt">${dvText.lessThan}</option>
                                            <option value="gte">${dvText.greaterOrEqualTo}</option>
                                            <option value="lte">${dvText.lessThanOrEqualTo}</option>
                                        </select>
                                        <div class="input input1">
                                            <input type="number" class="data-verification-value1" placeholder="1">
                                            <span>-</span>
                                            <input type="number" class="data-verification-value2" placeholder="100">
                                        </div>
                                        <div class="input input2">
                                            <input type="number" class="data-verification-value1" placeholder="${dvText.placeholder3}">
                                        </div>
                                    </div>
                                    <div class="show-box-item show-box-item-text">
                                        <select id="data-verification-text-select">
                                            <option value="include">${dvText.include}</option>
                                            <option value="exclude">${dvText.exclude}</option>
                                            <option value="equal">${dvText.equal}</option>
                                        </select>
                                        <div class="input input2">
                                            <input type="text" class="data-verification-value1" placeholder="${dvText.placeholder4}"/>
                                        </div>
                                    </div>
                                    <div class="show-box-item show-box-item-textLength">
                                        <select id="data-verification-textLength-select">
                                            <option value="bw">${dvText.between}</option>
                                            <option value="nb">${dvText.notBetween}</option>
                                            <option value="eq">${dvText.equal}</option>
                                            <option value="ne">${dvText.notEqualTo}</option>
                                            <option value="gt">${dvText.moreThanThe}</option>
                                            <option value="lt">${dvText.lessThan}</option>
                                            <option value="gte">${dvText.greaterOrEqualTo}</option>
                                            <option value="lte">${dvText.lessThanOrEqualTo}</option>
                                        </select>
                                        <div class="input input1">
                                            <input type="number" class="data-verification-value1" placeholder="1">
                                            <span>-</span>
                                            <input type="number" class="data-verification-value2" placeholder="100">
                                        </div>
                                        <div class="input input2">
                                            <input type="number" class="data-verification-value1" placeholder="${dvText.placeholder3}">
                                        </div>
                                    </div>
                                    <div class="show-box-item show-box-item-date">
                                        <select id="data-verification-date-select">
                                            <option value="bw">${dvText.between}</option>
                                            <option value="nb">${dvText.notBetween}</option>
                                            <option value="eq">${dvText.equal}</option>
                                            <option value="ne">${dvText.notEqualTo}</option>
                                            <option value="bf">${dvText.earlierThan}</option>
                                            <option value="nbf">${dvText.noEarlierThan}</option>
                                            <option value="af">${dvText.laterThan}</option>
                                            <option value="naf">${dvText.noLaterThan}</option>
                                        </select>
                                        <div class="input input1">
                                            <input type="date" class="data-verification-value1" placeholder="2020/9/10">
                                            <span>-</span>
                                            <input type="date" class="data-verification-value2" placeholder="2020/9/10">
                                        </div>
                                        <div class="input input2">
                                            <input type="date" class="data-verification-value1" placeholder="2020/9/10">
                                        </div>
                                    </div>
                                    <div class="show-box-item show-box-item-validity">
                                        <select id="data-verification-validity-select">
                                            <option value="card">${dvText.identificationNumber}</option>
                                            <option value="phone">${dvText.phoneNumber}</option>
                                        </select>
                                    </div>
                                </div>
                            </div>
                            <div class="box-item">
                                <div class="check">
                                    <input type="checkbox" id="data-verification-remote" class="data-verification-remote">
                                    <label for="data-verification-remote">${dvText.remote}</label>
                                </div>
                                <div class="check">
                                    <input type="checkbox" id="data-verification-prohibitInput">
                                    <label for="data-verification-prohibitInput">${dvText.prohibitInput}</label>
                                </div>
                                <div class="check">
                                    <input type="checkbox" id="data-verification-hint-show">
                                    <label for="data-verification-hint-show">${dvText.hintShow}</label>
                                </div>
                                <div class="data-verification-hint-text">
                                    <input type="text" placeholder="${dvText.placeholder5}">
                                </div>
                            </div>
                        </div>`;
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-dataVerification-dialog",
            "addclass": "luckysheet-dataVerification-dialog",
            "title": toolbarText.dataVerification,
            "content": content,
            "botton": `<button id="luckysheet-dataVerification-dialog-confirm" class="btn btn-primary">${buttonText.confirm}</button>
                        <button id="luckysheet-dataVerification-dialog-delete" class="btn btn-default">${dvText.deleteVerification}</button>
                        <button class="btn btn-default luckysheet-model-close-btn">${buttonText.cancel}</button>`,
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-dataVerification-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 350).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-dataVerification-dialog").css({
            "left": (winw + scrollLeft - myw) / 2,
            "top": (winh + scrollTop - myh) / 3
          }).show();
          _this.dataAllocation();
        },
        init: function() {
          let _this = this;
          const dvText = locale_default().dataVerification;
          $(document).off("click.dropdownBtn").on("click.dropdownBtn", "#luckysheet-dataVerification-dropdown-btn", function(e) {
            _this.dropdownListShow();
            e.stopPropagation();
          });
          $(document).off("click.dropdownListItem").on("click.dropdownListItem", "#luckysheet-dataVerification-dropdown-List .dropdown-List-item", function(e) {
            var $item = $(this);
            let value = e.target.innerText;
            if ($item.hasClass("multi")) {
              $item.toggleClass("checked");
              value = $.map($("#luckysheet-dataVerification-dropdown-List").children().filter(".checked"), function(el) {
                return el.innerText;
              }).join(",");
            } else {
              $("#luckysheet-dataVerification-dropdown-List").hide();
            }
            let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
            let rowIndex = last.row_focus;
            let colIndex = last.column_focus;
            $("#luckysheet-rich-text-editor").text(value);
            formula_default.updatecell(rowIndex, colIndex);
            e.stopPropagation();
          });
          $(document).off("click.dvRange").on("click.dvRange", "#data-verification-range .fa-table", function(e) {
            $("#luckysheet-dataVerification-dialog").hide();
            let dataSource = "0";
            let txt = $(this).siblings("input").val().trim();
            _this.rangeDialog(dataSource, txt);
            _this.selectRange = [];
            let range2 = _this.getRangeByTxt(txt);
            formula_default.rangetosheet = store_default.currentSheetIndex;
            if (range2[0].sheetIndex != store_default.currentSheetIndex) {
              sheetmanage_default.changeSheetExec(range2[0].sheetIndex);
            }
            if (range2.length > 0) {
              for (let s = 0; s < range2.length; s++) {
                let r1 = range2[s].row[0], r2 = range2[s].row[1];
                let c1 = range2[s].column[0], c2 = range2[s].column[1];
                let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
                let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
                _this.selectRange.push({
                  "left": col_pre,
                  "width": col - col_pre - 1,
                  "top": row_pre,
                  "height": row - row_pre - 1,
                  "left_move": col_pre,
                  "width_move": col - col_pre - 1,
                  "top_move": row_pre,
                  "height_move": row - row_pre - 1,
                  "row": [r1, r2],
                  "column": [c1, c2],
                  "row_focus": r1,
                  "column_focus": c1
                });
              }
            }
            selectionCopyShow(_this.selectRange);
          });
          $(document).off("click.dvRange2").on("click.dvRange2", "#luckysheet-dataVerification-dialog .show-box-item-dropdown .range .fa-table", function(e) {
            $("#luckysheet-dataVerification-dialog").hide();
            let dataSource = "1";
            let txt = $(this).siblings("input").val().trim();
            _this.rangeDialog(dataSource, txt);
            _this.selectRange = [];
            let range2 = _this.getRangeByTxt(txt);
            formula_default.rangetosheet = store_default.currentSheetIndex;
            if (range2[0].sheetIndex != store_default.currentSheetIndex) {
              sheetmanage_default.changeSheetExec(range2[0].sheetIndex);
            }
            if (range2.length > 0) {
              for (let s = 0; s < range2.length; s++) {
                let r1 = range2[s].row[0], r2 = range2[s].row[1];
                let c1 = range2[s].column[0], c2 = range2[s].column[1];
                let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
                let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
                _this.selectRange.push({
                  "left": col_pre,
                  "width": col - col_pre - 1,
                  "top": row_pre,
                  "height": row - row_pre - 1,
                  "left_move": col_pre,
                  "width_move": col - col_pre - 1,
                  "top_move": row_pre,
                  "height_move": row - row_pre - 1,
                  "row": [r1, r2],
                  "column": [c1, c2],
                  "row_focus": r1,
                  "column_focus": c1
                });
              }
            }
            selectionCopyShow(_this.selectRange);
          });
          $(document).off("click.dvRangeConfirm").on("click.dvRangeConfirm", "#luckysheet-dataVerificationRange-dialog-confirm", function(e) {
            let dataSource = $(this).attr("data-source");
            let txt = $(this).parents("#luckysheet-dataVerificationRange-dialog").find("input").val();
            if (_this.getRangeByTxt(txt).length > 1) {
              tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', "\u4E0D\u80FD\u5BF9\u591A\u91CD\u9009\u62E9\u533A\u57DF\u6267\u884C\u6B64\u64CD\u4F5C\uFF0C\u8BF7\u9009\u62E9\u5355\u4E2A\u533A\u57DF\uFF0C\u7136\u540E\u518D\u8BD5");
              return;
            }
            if (dataSource == "0") {
              $("#luckysheet-dataVerification-dialog #data-verification-range input").val(txt);
            } else if (dataSource == "1") {
              $("#luckysheet-dataVerification-dialog .show-box-item-dropdown .range input").val(txt);
            }
            $("#luckysheet-dataVerificationRange-dialog").hide();
            $("#luckysheet-modal-dialog-mask").show();
            $("#luckysheet-dataVerification-dialog").show();
            if (formula_default.rangetosheet != null && formula_default.rangetosheet != store_default.currentSheetIndex) {
              sheetmanage_default.changeSheetExec(formula_default.rangetosheet);
              formula_default.rangetosheet = null;
            }
            let range2 = [];
            selectionCopyShow(range2);
          });
          $(document).off("click.dvRangeClose").on("click.dvRangeClose", "#luckysheet-dataVerificationRange-dialog-close", function(e) {
            $("#luckysheet-dataVerificationRange-dialog").hide();
            $("#luckysheet-modal-dialog-mask").show();
            $("#luckysheet-dataVerification-dialog").show();
            if (formula_default.rangetosheet != null && formula_default.rangetosheet != store_default.currentSheetIndex) {
              sheetmanage_default.changeSheetExec(formula_default.rangetosheet);
              formula_default.rangetosheet = null;
            }
            let range2 = [];
            selectionCopyShow(range2);
          });
          $(document).on("click", "#luckysheet-dataVerificationRange-dialog .luckysheet-modal-dialog-title-close", function(e) {
            $("#luckysheet-dataVerificationRange-dialog").hide();
            $("#luckysheet-modal-dialog-mask").show();
            $("#luckysheet-dataVerification-dialog").show();
            if (formula_default.rangetosheet != null && formula_default.rangetosheet != store_default.currentSheetIndex) {
              sheetmanage_default.changeSheetExec(formula_default.rangetosheet);
              formula_default.rangetosheet = null;
            }
            let range2 = [];
            selectionCopyShow(range2);
          });
          $(document).off("change.typeSelect").on("change.typeSelect", "#data-verification-type-select", function(e) {
            $("#luckysheet-dataVerification-dialog .show-box .show-box-item").hide();
            let value = this.value;
            let item2 = _this.curItem;
            if (value == "dropdown") {
              $("#luckysheet-dataVerification-dialog .show-box .show-box-item-dropdown").show();
              let value1 = "";
              if (value == item2.type) {
                value1 = item2.value1;
              }
              $("#luckysheet-dataVerification-dialog .show-box-item-dropdown .data-verification-value1").val(value1);
              $("#luckysheet-dataVerification-dialog #data-verification-multi").prop("checked", item2.type2 ? true : false);
            } else if (value == "checkbox") {
              $("#luckysheet-dataVerification-dialog .show-box .show-box-item-checkbox").show();
              let value1 = "";
              let value2 = "";
              if (value == item2.type) {
                value1 = item2.value1;
                value2 = item2.value2;
              }
              $("#luckysheet-dataVerification-dialog .show-box-item-checkbox .data-verification-value1").val(value1);
              $("#luckysheet-dataVerification-dialog .show-box-item-checkbox .data-verification-value2").val(value2);
            } else if (value == "number" || value == "number_integer" || value == "number_decimal") {
              $("#luckysheet-dataVerification-dialog .show-box-item-number").show();
              $("#luckysheet-dataVerification-dialog .show-box-item-number .input").hide();
              let type2 = "bw";
              let value1 = "";
              let value2 = "";
              if (item2.type == "number" || item2.type == "number_integer" || item2.type == "number_decimal") {
                type2 = item2.type2;
                value1 = item2.value1;
                value2 = item2.value2;
              }
              $("#luckysheet-dataVerification-dialog #data-verification-number-select").val(type2);
              if (type2 == "bw" || type2 == "nb") {
                $("#luckysheet-dataVerification-dialog .show-box-item-number .input1").show();
              } else {
                $("#luckysheet-dataVerification-dialog .show-box-item-number .input2").show();
              }
              $("#luckysheet-dataVerification-dialog .show-box-item-number .data-verification-value1").val(value1);
              $("#luckysheet-dataVerification-dialog .show-box-item-number .data-verification-value2").val(value2);
            } else if (value == "text_content") {
              $("#luckysheet-dataVerification-dialog .show-box-item-text").show();
              let type2 = "include";
              let value1 = "";
              if (value == item2.type) {
                type2 = item2.type2;
                value1 = item2.value1;
              }
              $("#luckysheet-dataVerification-dialog #data-verification-text-select").val(type2);
              $("#luckysheet-dataVerification-dialog .show-box-item-text .data-verification-value1").val(value1);
            } else if (value == "text_length") {
              $("#luckysheet-dataVerification-dialog .show-box-item-textLength").show();
              $("#luckysheet-dataVerification-dialog .show-box-item-textLength .input").hide();
              let type2 = "bw";
              let value1 = "";
              let value2 = "";
              if (value == item2.type) {
                type2 = item2.type2;
                value1 = item2.value1;
                value2 = item2.value2;
              }
              $("#luckysheet-dataVerification-dialog #data-verification-textLength-select").val(type2);
              if (type2 == "bw" || type2 == "nb") {
                $("#luckysheet-dataVerification-dialog .show-box-item-textLength .input1").show();
              } else {
                $("#luckysheet-dataVerification-dialog .show-box-item-textLength .input2").show();
              }
              $("#luckysheet-dataVerification-dialog .show-box-item-textLength .data-verification-value1").val(value1);
              $("#luckysheet-dataVerification-dialog .show-box-item-textLength .data-verification-value2").val(value2);
            } else if (value == "date") {
              $("#luckysheet-dataVerification-dialog .show-box-item-date").show();
              $("#luckysheet-dataVerification-dialog .show-box-item-date .input").hide();
              let type2 = "bw";
              let value1 = "";
              let value2 = "";
              if (value == item2.type) {
                type2 = item2.type2;
                value1 = item2.value1;
                value2 = item2.value2;
              }
              $("#luckysheet-dataVerification-dialog #data-verification-date-select").val(type2);
              if (type2 == "bw" || type2 == "nb") {
                $("#luckysheet-dataVerification-dialog .show-box-item-date .input1").show();
              } else {
                $("#luckysheet-dataVerification-dialog .show-box-item-date .input2").show();
              }
              $("#luckysheet-dataVerification-dialog .show-box-item-date .data-verification-value1").val(value1);
              $("#luckysheet-dataVerification-dialog .show-box-item-date .data-verification-value2").val(value2);
            } else if (value == "validity") {
              $("#luckysheet-dataVerification-dialog .show-box .show-box-item-validity").show();
              let type2 = "card";
              if (value == item2.type) {
                type2 = item2.type2;
              }
              $("#luckysheet-dataVerification-dialog #data-verification-validity-select").val(type2);
            }
          });
          $(document).off("change.numberSelect").on("change.numberSelect", "#data-verification-number-select", function(e) {
            $("#luckysheet-dataVerification-dialog .show-box-item-number .input").hide();
            let value = this.value;
            if (value == "bw" || value == "nb") {
              $("#luckysheet-dataVerification-dialog .show-box-item-number .input1").show();
            } else {
              $("#luckysheet-dataVerification-dialog .show-box-item-number .input2").show();
            }
          });
          $(document).off("change.textLengthSelect").on("change.textLengthSelect", "#data-verification-textLength-select", function(e) {
            $("#luckysheet-dataVerification-dialog .show-box-item-textLength .input").hide();
            let value = this.value;
            if (value == "bw" || value == "nb") {
              $("#luckysheet-dataVerification-dialog .show-box-item-textLength .input1").show();
            } else {
              $("#luckysheet-dataVerification-dialog .show-box-item-textLength .input2").show();
            }
          });
          $(document).off("change.dateSelect").on("change.dateSelect", "#data-verification-date-select", function(e) {
            $("#luckysheet-dataVerification-dialog .show-box-item-date .input").hide();
            let value = this.value;
            if (value == "bw" || value == "nb") {
              $("#luckysheet-dataVerification-dialog .show-box-item-date .input1").show();
            } else {
              $("#luckysheet-dataVerification-dialog .show-box-item-date .input2").show();
            }
          });
          $(document).off("change.hintShow").on("change.hintShow", "#data-verification-hint-show", function(e) {
            if (this.checked) {
              $("#luckysheet-dataVerification-dialog .data-verification-hint-text").show();
            } else {
              $("#luckysheet-dataVerification-dialog .data-verification-hint-text").hide();
            }
          });
          $(document).off("click.dvSaveConfirm").on("click.dvSaveConfirm", "#luckysheet-dataVerification-dialog-confirm", function(e) {
            let rangeTxt = $("#luckysheet-dataVerification-dialog #data-verification-range input").val().trim();
            let range2 = _this.getRangeByTxt(rangeTxt);
            if (range2.length == 0) {
              tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.selectCellRange2);
              return;
            }
            let str = range2[range2.length - 1].row[0], edr = range2[range2.length - 1].row[1], stc = range2[range2.length - 1].column[0], edc = range2[range2.length - 1].column[1];
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            if (str < 0) {
              str = 0;
            }
            if (edr > d.length - 1) {
              edr = d.length - 1;
            }
            if (stc < 0) {
              stc = 0;
            }
            if (edc > d[0].length - 1) {
              edc = d[0].length - 1;
            }
            let type = $("#luckysheet-dataVerification-dialog #data-verification-type-select").val();
            let type2 = null, value1 = "", value2 = "";
            if (type == "dropdown") {
              value1 = $("#luckysheet-dataVerification-dialog .show-box-item-dropdown .data-verification-value1").val().trim();
              if (value1.length == 0) {
                tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo1);
                return;
              }
              type2 = $("#luckysheet-dataVerification-dialog #data-verification-multi").is(":checked");
            } else if (type == "checkbox") {
              value1 = $("#luckysheet-dataVerification-dialog .show-box-item-checkbox .data-verification-value1").val().trim();
              value2 = $("#luckysheet-dataVerification-dialog .show-box-item-checkbox .data-verification-value2").val().trim();
              if (value1.length == 0 || value2.length == 0) {
                tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo2);
                return;
              }
            } else if (type == "number" || type == "number_integer" || type == "number_decimal") {
              type2 = $("#luckysheet-dataVerification-dialog #data-verification-number-select").val();
              value1 = $("#luckysheet-dataVerification-dialog .show-box-item-number .input:visible .data-verification-value1").val().trim();
              if (!isRealNum(value1)) {
                tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo3);
                return;
              }
              if (type2 == "bw" || type2 == "nb") {
                value2 = $("#luckysheet-dataVerification-dialog .show-box-item-number .input:visible .data-verification-value2").val().trim();
                if (!isRealNum(value2)) {
                  tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo3);
                  return;
                }
                if (Number(value2) < Number(value1)) {
                  tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo4);
                  return;
                }
              }
            } else if (type == "text_content") {
              type2 = $("#luckysheet-dataVerification-dialog #data-verification-text-select").val();
              value1 = $("#luckysheet-dataVerification-dialog .show-box-item-text .data-verification-value1").val().trim();
              if (value1.length == 0) {
                tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo5);
                return;
              }
            } else if (type == "text_length") {
              type2 = $("#luckysheet-dataVerification-dialog #data-verification-textLength-select").val();
              value1 = $("#luckysheet-dataVerification-dialog .show-box-item-textLength .input:visible .data-verification-value1").val().trim();
              if (!isRealNum(value1)) {
                tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo3);
                return;
              }
              if (!Number.isInteger(Number(value1)) || Number(value1) < 0) {
                tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.textlengthInteger);
                return;
              }
              if (type2 == "bw" || type2 == "nb") {
                value2 = $("#luckysheet-dataVerification-dialog .show-box-item-textLength .input:visible .data-verification-value2").val().trim();
                if (!isRealNum(value2)) {
                  tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo3);
                  return;
                }
                if (!Number.isInteger(Number(value2)) || Number(value2) < 0) {
                  tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.textlengthInteger);
                  return;
                }
                if (Number(value2) < Number(value1)) {
                  tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo4);
                  return;
                }
              }
            } else if (type == "date") {
              type2 = $("#luckysheet-dataVerification-dialog #data-verification-date-select").val();
              value1 = $("#luckysheet-dataVerification-dialog .show-box-item-date .input:visible .data-verification-value1").val().trim();
              if (!isdatetime(value1)) {
                tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo6);
                return;
              }
              if (type2 == "bw" || type2 == "nb") {
                value2 = $("#luckysheet-dataVerification-dialog .show-box-item-date .input:visible .data-verification-value2").val().trim();
                if (!isdatetime(value2)) {
                  tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo6);
                  return;
                }
                if (diff(value1, value2) > 0) {
                  tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo7);
                  return;
                }
              }
            } else if (type == "validity") {
              type2 = $("#luckysheet-dataVerification-dialog #data-verification-validity-select").val();
            }
            let remote = $("#luckysheet-dataVerification-dialog #data-verification-remote").is(":checked");
            let prohibitInput = $("#luckysheet-dataVerification-dialog #data-verification-prohibitInput").is(":checked");
            let hintShow = $("#luckysheet-dataVerification-dialog #data-verification-hint-show").is(":checked");
            let hintText = "";
            if (hintShow) {
              hintText = $("#luckysheet-dataVerification-dialog .data-verification-hint-text input").val().trim();
            }
            let item2 = {
              type,
              type2,
              value1,
              value2,
              checked: false,
              remote,
              prohibitInput,
              hintShow,
              hintText
            };
            let historyDataVerification = $.extend(true, {}, _this.dataVerification);
            let currentDataVerification = $.extend(true, {}, _this.dataVerification);
            for (let r2 = str; r2 <= edr; r2++) {
              for (let c2 = stc; c2 <= edc; c2++) {
                currentDataVerification[r2 + "_" + c2] = item2;
                if (type == "checkbox") {
                  setcellvalue(r2, c2, d, item2.value2);
                }
              }
            }
            if (type == "checkbox") {
              _this.refOfCheckbox(historyDataVerification, currentDataVerification, store_default.currentSheetIndex, d, range2[range2.length - 1]);
            } else {
              _this.ref(historyDataVerification, currentDataVerification, store_default.currentSheetIndex);
            }
            $("#luckysheet-modal-dialog-mask").hide();
            $("#luckysheet-dataVerification-dialog").hide();
          });
          $(document).off("click.delete").on("click.delete", "#luckysheet-dataVerification-dialog-delete", function(e) {
            let rangeTxt = $("#luckysheet-dataVerification-dialog #data-verification-range input").val().trim();
            let range2 = _this.getRangeByTxt(rangeTxt);
            if (range2.length == 0) {
              tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.selectCellRange2);
              return;
            }
            let historyDataVerification = $.extend(true, {}, _this.dataVerification);
            let currentDataVerification = $.extend(true, {}, _this.dataVerification);
            let str = range2[range2.length - 1].row[0], edr = range2[range2.length - 1].row[1], stc = range2[range2.length - 1].column[0], edc = range2[range2.length - 1].column[1];
            for (let r2 = str; r2 <= edr; r2++) {
              for (let c2 = stc; c2 <= edc; c2++) {
                delete currentDataVerification[r2 + "_" + c2];
              }
            }
            _this.ref(historyDataVerification, currentDataVerification, store_default.currentSheetIndex);
            $("#luckysheet-modal-dialog-mask").hide();
            $("#luckysheet-dataVerification-dialog").hide();
          });
          $(document).on("click", "#luckysheet-info .luckysheet-modal-dialog-title-close, #luckysheet-info .luckysheet-model-close-btn", function(e) {
            $(this).parents("#luckysheet-info").hide();
            if ($("#luckysheet-dataVerification-dialog").is(":visible")) {
              $("#luckysheet-modal-dialog-mask").show();
            }
            e.stopPropagation();
          });
        },
        dataAllocation: function() {
          let _this = this;
          let range2 = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
          let rangeTxt = getRangetxt(store_default.currentSheetIndex, range2, store_default.currentSheetIndex);
          $("#luckysheet-dataVerification-dialog #data-verification-range input").val(rangeTxt);
          let rowIndex = range2.row_focus || range2.row[0];
          let colIndex = range2.column_focus || range2.column[0];
          let dataVerification = $.extend(true, {}, _this.dataVerification);
          let item2 = dataVerification[rowIndex + "_" + colIndex];
          if (item2 == null) {
            item2 = $.extend(true, {}, _this.defaultItem);
          }
          _this.curItem = item2;
          $("#luckysheet-dataVerification-dialog #data-verification-type-select").val(item2.type);
          $("#luckysheet-dataVerification-dialog .show-box .show-box-item").hide();
          if (item2.type == "dropdown") {
            $("#luckysheet-dataVerification-dialog .show-box .show-box-item-dropdown").show();
            $("#luckysheet-dataVerification-dialog .show-box-item-dropdown .data-verification-value1").val(item2.value1);
            $("#luckysheet-dataVerification-dialog #data-verification-multi").prop("checked", item2.type2 ? true : false);
          } else if (item2.type == "checkbox") {
            $("#luckysheet-dataVerification-dialog .show-box .show-box-item-checkbox").show();
            $("#luckysheet-dataVerification-dialog .show-box-item-checkbox .data-verification-value1").val(item2.value1);
            $("#luckysheet-dataVerification-dialog .show-box-item-checkbox .data-verification-value2").val(item2.value2);
          } else if (item2.type == "number" || item2.type == "number_integer" || item2.type == "number_decimal") {
            $("#luckysheet-dataVerification-dialog .show-box-item-number").show();
            $("#luckysheet-dataVerification-dialog #data-verification-number-select").val(item2.type2);
            $("#luckysheet-dataVerification-dialog .show-box-item-number .input").hide();
            if (item2.type2 == "bw" || item2.type2 == "nb") {
              $("#luckysheet-dataVerification-dialog .show-box-item-number .input1").show();
            } else {
              $("#luckysheet-dataVerification-dialog .show-box-item-number .input2").show();
            }
            $("#luckysheet-dataVerification-dialog .show-box-item-number .data-verification-value1").val(item2.value1);
            $("#luckysheet-dataVerification-dialog .show-box-item-number .data-verification-value2").val(item2.value2);
          } else if (item2.type == "text_content") {
            $("#luckysheet-dataVerification-dialog .show-box-item-text").show();
            $("#luckysheet-dataVerification-dialog #data-verification-text-select").val(item2.type2);
            $("#luckysheet-dataVerification-dialog .show-box-item-text .data-verification-value1").val(item2.value1);
          } else if (item2.type == "text_length") {
            $("#luckysheet-dataVerification-dialog .show-box-item-textLength").show();
            $("#luckysheet-dataVerification-dialog #data-verification-textLength-select").val(item2.type2);
            $("#luckysheet-dataVerification-dialog .show-box-item-textLength .input").hide();
            if (item2.type2 == "bw" || item2.type2 == "nb") {
              $("#luckysheet-dataVerification-dialog .show-box-item-textLength .input1").show();
            } else {
              $("#luckysheet-dataVerification-dialog .show-box-item-textLength .input2").show();
            }
            $("#luckysheet-dataVerification-dialog .show-box-item-textLength .data-verification-value1").val(item2.value1);
            $("#luckysheet-dataVerification-dialog .show-box-item-textLength .data-verification-value2").val(item2.value2);
          } else if (item2.type == "date") {
            $("#luckysheet-dataVerification-dialog .show-box-item-date").show();
            $("#luckysheet-dataVerification-dialog #data-verification-date-select").val(item2.type2);
            $("#luckysheet-dataVerification-dialog .show-box-item-date .input").hide();
            if (item2.type2 == "bw" || item2.type2 == "nb") {
              $("#luckysheet-dataVerification-dialog .show-box-item-date .input1").show();
            } else {
              $("#luckysheet-dataVerification-dialog .show-box-item-date .input2").show();
            }
            $("#luckysheet-dataVerification-dialog .show-box-item-date .data-verification-value1").val(item2.value1);
            $("#luckysheet-dataVerification-dialog .show-box-item-date .data-verification-value2").val(item2.value2);
          } else if (item2.type == "validity") {
            $("#luckysheet-dataVerification-dialog .show-box .show-box-item-validity").show();
            $("#luckysheet-dataVerification-dialog #data-verification-validity-select").val(item2.type2);
          }
          $("#luckysheet-dataVerification-dialog #data-verification-remote").prop("checked", item2.remote);
          $("#luckysheet-dataVerification-dialog #data-verification-prohibitInput").prop("checked", item2.prohibitInput);
          $("#luckysheet-dataVerification-dialog #data-verification-hint-show").prop("checked", item2.hintShow);
          if (item2.hintShow) {
            $("#luckysheet-dataVerification-dialog .data-verification-hint-text").show();
          } else {
            $("#luckysheet-dataVerification-dialog .data-verification-hint-text").hide();
          }
          $("#luckysheet-dataVerification-dialog .data-verification-hint-text input").val(item2.hintText);
        },
        rangeDialog: function(dataSource, txt) {
          let _this = this;
          const _locale = locale_default();
          const dvText = _locale.dataVerification;
          const buttonText = _locale.button;
          $("#luckysheet-modal-dialog-mask").hide();
          $("#luckysheet-dataVerificationRange-dialog").remove();
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-dataVerificationRange-dialog",
            "addclass": "luckysheet-dataVerificationRange-dialog",
            "title": dvText.selectCellRange,
            "content": `<input readonly="readonly" placeholder="${dvText.selectCellRange2}" value="${txt}"/>`,
            "botton": `<button id="luckysheet-dataVerificationRange-dialog-confirm" class="btn btn-primary" data-source="${dataSource}">${buttonText.confirm}</button>
                        <button id="luckysheet-dataVerificationRange-dialog-close" class="btn btn-default">${buttonText.close}</button>`,
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-dataVerificationRange-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-dataVerificationRange-dialog").css({
            "left": (winw + scrollLeft - myw) / 2,
            "top": (winh + scrollTop - myh) / 3
          }).show();
        },
        getTxtByRange: function(range2) {
          if (range2.length > 0) {
            let txt = [];
            for (let s = 0; s < range2.length; s++) {
              let r1 = range2[s].row[0], r2 = range2[s].row[1];
              let c1 = range2[s].column[0], c2 = range2[s].column[1];
              txt.push(getRangetxt(store_default.currentSheetIndex, {"row": [r1, r2], "column": [c1, c2]}, store_default.currentSheetIndex));
            }
            return txt.join(",");
          }
        },
        getRangeByTxt: function(txt) {
          let range2 = [];
          if (txt.indexOf(",") != -1) {
            let arr = txt.split(",");
            for (let i2 = 0; i2 < arr.length; i2++) {
              if (formula_default.iscelldata(arr[i2])) {
                range2.push(formula_default.getcellrange(arr[i2]));
              } else {
                range2 = [];
                break;
              }
            }
          } else {
            if (formula_default.iscelldata(txt)) {
              range2.push(formula_default.getcellrange(txt));
            }
          }
          return range2;
        },
        cellFocus: function(r2, c2, clickMode) {
          $("#luckysheet-dataVerification-dropdown-btn").hide();
          $("#luckysheet-dataVerification-showHintBox").hide();
          let _this = this;
          if (_this.dataVerification == null || _this.dataVerification[r2 + "_" + c2] == null) {
            $("#luckysheet-dataVerification-dropdown-List").hide();
            return;
          }
          let row = store_default.visibledatarow[r2], row_pre = r2 == 0 ? 0 : store_default.visibledatarow[r2 - 1];
          let col = store_default.visibledatacolumn[c2], col_pre = c2 == 0 ? 0 : store_default.visibledatacolumn[c2 - 1];
          let margeset = menuButton_default.mergeborer(store_default.flowdata, r2, c2);
          if (!!margeset) {
            row = margeset.row[1];
            row_pre = margeset.row[0];
            col = margeset.column[1];
            col_pre = margeset.column[0];
          }
          let item2 = _this.dataVerification[r2 + "_" + c2];
          if (clickMode && item2.type == "checkbox") {
            _this.checkboxChange(r2, c2);
            return;
          }
          if (item2.type == "dropdown") {
            $("#luckysheet-dataVerification-dropdown-btn").show().css({
              "max-width": col - col_pre,
              "max-height": row - row_pre,
              "left": col - 20,
              "top": row_pre + (row - row_pre - 20) / 2
            });
            if ($("#luckysheet-dataVerification-dropdown-List").is(":visible")) {
              let dataIndex = $("#luckysheet-dataVerification-dropdown-List").prop("data-index");
              if (dataIndex != r2 + "_" + c2) {
                $("#luckysheet-dataVerification-dropdown-List").hide();
              }
            }
          } else {
            $("#luckysheet-dataVerification-dropdown-List").hide();
          }
          if (item2.hintShow) {
            let hintText;
            if (store_default.lang == "en") {
              hintText = '<span style="color:#f5a623;">Hint: </span>';
            } else {
              hintText = '<span style="color:#f5a623;">\u63D0\u793A\uFF1A</span>';
            }
            hintText += _this.getHintText(item2);
            $("#luckysheet-dataVerification-showHintBox").html(hintText).show().css({
              "left": col_pre,
              "top": row
            });
            return;
          }
          let cellValue = getcellvalue(r2, c2, null);
          if (isRealNull(cellValue)) {
            return;
          }
          let validate = _this.validateCellData(cellValue, item2);
          if (!validate) {
            let failureText;
            if (store_default.lang == "en") {
              failureText = '<span style="color:#f72626;">Failure: </span>';
            } else {
              failureText = '<span style="color:#f72626;">\u5931\u6548\uFF1A</span>';
            }
            failureText += _this.getFailureText(item2);
            $("#luckysheet-dataVerification-showHintBox").html(failureText).show().css({
              "left": col_pre,
              "top": row
            });
          }
        },
        getHintText: function(item2) {
          let _this = this;
          let hintText = item2.hintText || "";
          if (hintText.length == 0) {
            if (store_default.lang == "en") {
              if (item2.type == "dropdown") {
                hintText += "please select an option in the drop-down list";
              } else if (item2.type == "checkbox") {
              } else if (item2.type == "number" || item2.type == "number_integer" || item2.type == "number_decimal") {
                hintText += "please enter a " + _this.optionLabel_en[item2.type] + " " + _this.optionLabel_en[item2.type2] + " " + item2.value1;
                if (item2.type2 == "bw" || item2.type2 == "nb") {
                  hintText += " and " + item2.value2;
                }
              } else if (item2.type == "text_content") {
                hintText += "please enter text " + _this.optionLabel_en[item2.type2] + " " + item2.value1;
              } else if (item2.type == "text_length") {
                hintText += "please enter text with length " + _this.optionLabel_en[item2.type2] + " " + item2.value1;
                if (item2.type2 == "bw" || item2.type2 == "nb") {
                  hintText += " and " + item2.value2;
                }
              } else if (item2.type == "date") {
                hintText += "please enter a date " + _this.optionLabel_en[item2.type2] + " " + item2.value1;
                if (item2.type2 == "bw" || item2.type2 == "nb") {
                  hintText += " and " + item2.value2;
                }
              } else if (item2.type == "validity") {
                hintText += "please enter the correct " + _this.optionLabel_en[item2.type2];
              }
            } else {
              if (item2.type == "dropdown") {
                hintText += "\u8BF7\u9009\u62E9\u4E0B\u62C9\u5217\u8868\u4E2D\u7684\u9009\u9879";
              } else if (item2.type == "checkbox") {
              } else if (item2.type == "number" || item2.type == "number_integer" || item2.type == "number_decimal") {
                hintText += "\u8BF7\u8F93\u5165" + _this.optionLabel[item2.type2] + item2.value1;
                if (item2.type2 == "bw" || item2.type2 == "nb") {
                  hintText += "\u548C" + item2.value2 + "\u4E4B\u95F4";
                }
                hintText += "\u7684" + _this.optionLabel[item2.type];
              } else if (item2.type == "text_content") {
                hintText += "\u8BF7\u8F93\u5165\u5185\u5BB9" + _this.optionLabel[item2.type2] + item2.value1 + "\u7684\u6587\u672C";
              } else if (item2.type == "text_length") {
                hintText += "\u8BF7\u8F93\u5165\u957F\u5EA6" + _this.optionLabel[item2.type2] + item2.value1;
                if (item2.type2 == "bw" || item2.type2 == "nb") {
                  hintText += "\u548C" + item2.value2 + "\u4E4B\u95F4";
                }
                hintText += "\u7684\u6587\u672C";
              } else if (item2.type == "date") {
                hintText += "\u8BF7\u8F93\u5165" + _this.optionLabel[item2.type2] + item2.value1;
                if (item2.type2 == "bw" || item2.type2 == "nb") {
                  hintText += "\u548C" + item2.value2 + "\u4E4B\u95F4";
                }
                hintText += "\u7684\u65E5\u671F";
              } else if (item2.type == "validity") {
                hintText += "\u8BF7\u8F93\u5165\u6B63\u786E\u7684" + _this.optionLabel[item2.type2];
              }
            }
          }
          return hintText;
        },
        getFailureText: function(item2) {
          let _this = this;
          let failureText = "";
          if (store_default.lang == "en") {
            if (item2.type == "dropdown") {
              failureText += "what you selected is not an option in the drop-down list";
            } else if (item2.type == "checkbox") {
            } else if (item2.type == "number" || item2.type == "number_integer" || item2.type == "number_decimal") {
              failureText += "what you entered is not a " + _this.optionLabel_en[item2.type] + " " + _this.optionLabel_en[item2.type2] + " " + item2.value1;
              if (item2.type2 == "bw" || item2.type2 == "nb") {
                failureText += " and " + item2.value2;
              }
            } else if (item2.type == "text_content") {
              failureText += "what you entered is not text that " + _this.optionLabel_en[item2.type2] + " " + item2.value1;
            } else if (item2.type == "text_length") {
              failureText += "the text you entered is not length " + _this.optionLabel_en[item2.type2] + " " + item2.value1;
              if (item2.type2 == "bw" || item2.type2 == "nb") {
                failureText += " and " + item2.value2;
              }
            } else if (item2.type == "date") {
              failureText += "the date you entered is not " + _this.optionLabel_en[item2.type2] + " " + item2.value1;
              if (item2.type2 == "bw" || item2.type2 == "nb") {
                failureText += " and " + item2.value2;
              }
            } else if (item2.type == "validity") {
              failureText += "what you entered is not a correct " + _this.optionLabel_en[item2.type2];
            }
          } else {
            if (item2.type == "dropdown") {
              failureText += "\u4F60\u9009\u62E9\u7684\u4E0D\u662F\u4E0B\u62C9\u5217\u8868\u4E2D\u7684\u9009\u9879";
            } else if (item2.type == "checkbox") {
            } else if (item2.type == "number" || item2.type == "number_integer" || item2.type == "number_decimal") {
              failureText += "\u4F60\u8F93\u5165\u7684\u4E0D\u662F" + _this.optionLabel[item2.type2] + item2.value1;
              if (item2.type2 == "bw" || item2.type2 == "nb") {
                failureText += "\u548C" + item2.value2 + "\u4E4B\u95F4";
              }
              failureText += "\u7684" + _this.optionLabel[item2.type];
            } else if (item2.type == "text_content") {
              failureText += "\u4F60\u8F93\u5165\u7684\u4E0D\u662F\u5185\u5BB9" + _this.optionLabel[item2.type2] + item2.value1 + "\u7684\u6587\u672C";
            } else if (item2.type == "text_length") {
              failureText += "\u4F60\u8F93\u5165\u7684\u4E0D\u662F\u957F\u5EA6" + _this.optionLabel[item2.type2] + item2.value1;
              if (item2.type2 == "bw" || item2.type2 == "nb") {
                failureText += "\u548C" + item2.value2 + "\u4E4B\u95F4";
              }
              failureText += "\u7684\u6587\u672C";
            } else if (item2.type == "date") {
              failureText += "\u4F60\u8F93\u5165\u7684\u4E0D\u662F" + _this.optionLabel[item2.type2] + item2.value1;
              if (item2.type2 == "bw" || item2.type2 == "nb") {
                failureText += "\u548C" + item2.value2 + "\u4E4B\u95F4";
              }
              failureText += "\u7684\u65E5\u671F";
            } else if (item2.type == "validity") {
              failureText += "\u4F60\u8F93\u5165\u7684\u4E0D\u662F\u4E00\u4E2A\u6B63\u786E\u7684" + _this.optionLabel[item2.type2];
            }
          }
          return failureText;
        },
        validateCellData: function(cellValue, item2) {
          let _this = this;
          let type = item2.type, type2 = item2.type2, value1 = item2.value1, value2 = item2.value2;
          if (type == "dropdown") {
            let list = _this.getDropdownList(value1);
            if (type2 && cellValue) {
              return cellValue.split(",").every(function(i2) {
                return list.indexOf(i2) !== -1;
              });
            }
            let result = false;
            for (let i2 = 0; i2 < list.length; i2++) {
              if (list[i2] == cellValue) {
                result = true;
                break;
              }
            }
            return result;
          } else if (type == "checkbox") {
          } else if (type == "number" || type == "number_integer" || type == "number_decimal") {
            if (!isRealNum(cellValue)) {
              return false;
            }
            cellValue = Number(cellValue);
            if (type == "number_integer" && cellValue % 1 !== 0) {
              return false;
            }
            if (type == "number_decimal" && cellValue % 1 === 0) {
              return false;
            }
            value1 = Number(value1);
            value2 = Number(value2);
            if (type2 == "bw" && (cellValue < value1 || cellValue > value2)) {
              return false;
            }
            if (type2 == "nb" && (cellValue >= value1 && cellValue <= value2)) {
              return false;
            }
            if (type2 == "eq" && cellValue != value1) {
              return false;
            }
            if (type2 == "ne" && cellValue == value1) {
              return false;
            }
            if (type2 == "gt" && cellValue <= value1) {
              return false;
            }
            if (type2 == "lt" && cellValue >= value1) {
              return false;
            }
            if (type2 == "gte" && cellValue < value1) {
              return false;
            }
            if (type2 == "lte" && cellValue > value1) {
              return false;
            }
          } else if (type == "text_content") {
            cellValue = cellValue.toString();
            value1 = value1.toString();
            if (type2 == "include" && cellValue.indexOf(value1) == -1) {
              return false;
            }
            if (type2 == "exclude" && cellValue.indexOf(value1) > -1) {
              return false;
            }
            if (type2 == "equal" && cellValue != value1) {
              return false;
            }
          } else if (type == "text_length") {
            cellValue = cellValue.toString().length;
            value1 = Number(value1);
            value2 = Number(value2);
            if (type2 == "bw" && (cellValue < value1 || cellValue > value2)) {
              return false;
            }
            if (type2 == "nb" && (cellValue >= value1 && cellValue <= value2)) {
              return false;
            }
            if (type2 == "eq" && cellValue != value1) {
              return false;
            }
            if (type2 == "ne" && cellValue == value1) {
              return false;
            }
            if (type2 == "gt" && cellValue <= value1) {
              return false;
            }
            if (type2 == "lt" && cellValue >= value1) {
              return false;
            }
            if (type2 == "gte" && cellValue < value1) {
              return false;
            }
            if (type2 == "lte" && cellValue > value1) {
              return false;
            }
          } else if (type == "date") {
            if (!isdatetime(cellValue)) {
              return false;
            }
            if (type2 == "bw" && (diff(cellValue, value1) < 0 || diff(cellValue, value2) > 0)) {
              return false;
            }
            if (type2 == "nb" && (diff(cellValue, value1) >= 0 && diff(cellValue, value2) <= 0)) {
              return false;
            }
            if (type2 == "eq" && diff(cellValue, value1) != 0) {
              return false;
            }
            if (type2 == "ne" && diff(cellValue, value1) == 0) {
              return false;
            }
            if (type2 == "bf" && diff(cellValue, value1) >= 0) {
              return false;
            }
            if (type2 == "nbf" && diff(cellValue, value1) < 0) {
              return false;
            }
            if (type2 == "af" && diff(cellValue, value1) <= 0) {
              return false;
            }
            if (type2 == "naf" && diff(cellValue, value1) > 0) {
              return false;
            }
          } else if (type == "validity") {
            if (type2 == "card" && !validateIdCard(cellValue)) {
              return false;
            }
            if (type2 == "phone" && !/^1[3456789]\d{9}$/.test(cellValue)) {
              return false;
            }
          }
          return true;
        },
        dropdownListShow: function() {
          $("#luckysheet-dataVerification-showHintBox").hide();
          let _this = this;
          let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
          let rowIndex = last.row_focus;
          let colIndex = last.column_focus;
          let row = store_default.visibledatarow[rowIndex], row_pre = rowIndex == 0 ? 0 : store_default.visibledatarow[rowIndex - 1];
          let col = store_default.visibledatacolumn[colIndex], col_pre = colIndex == 0 ? 0 : store_default.visibledatacolumn[colIndex - 1];
          let margeset = menuButton_default.mergeborer(store_default.flowdata, rowIndex, colIndex);
          if (!!margeset) {
            row = margeset.row[1];
            row_pre = margeset.row[0];
            col = margeset.column[1];
            col_pre = margeset.column[0];
          }
          let item2 = _this.dataVerification[rowIndex + "_" + colIndex];
          let list = _this.getDropdownList(item2.value1);
          let optionHtml = "";
          if (item2.type === "dropdown" && item2.type2) {
            let cellValue = getcellvalue(rowIndex, colIndex, null);
            let valueArr = isRealNull(cellValue) ? [] : cellValue.split(",");
            list.forEach((i2) => {
              let checked = valueArr.indexOf(i2) !== -1;
              optionHtml += `<div class="dropdown-List-item  luckysheet-mousedown-cancel multi${checked ? " checked" : ""}">${i2}</div>`;
            });
          } else {
            list.forEach((i2) => {
              optionHtml += `<div class="dropdown-List-item luckysheet-mousedown-cancel">${i2}</div>`;
            });
          }
          $("#luckysheet-dataVerification-dropdown-List").html(optionHtml).prop("data-index", rowIndex + "_" + colIndex).show().css({
            "width": col - col_pre - 1,
            "left": col_pre,
            "top": row
          });
          let myh = $("#luckysheet-dataVerification-dropdown-List").outerHeight();
          let currentWinH = $("#luckysheet-cell-main")[0].scrollHeight;
          if (row + myh > currentWinH - 42 - 6) {
            $("#luckysheet-dataVerification-dropdown-List").css({
              "top": row_pre - myh
            });
          }
        },
        getDropdownList: function(txt) {
          let list = [];
          if (formula_default.iscelldata(txt)) {
            let range2 = formula_default.getcellrange(txt);
            let d = store_default.luckysheetfile[getSheetIndex(range2.sheetIndex)].data;
            for (let r2 = range2.row[0]; r2 <= range2.row[1]; r2++) {
              for (let c2 = range2.column[0]; c2 <= range2.column[1]; c2++) {
                if (d[r2] == null) {
                  continue;
                }
                let cell = d[r2][c2];
                if (cell == null || cell.v == null) {
                  continue;
                }
                let v = cell.m || cell.v;
                if (!list.includes(v)) {
                  list.push(v);
                }
              }
            }
          } else {
            let arr = txt.split(",");
            for (let i2 = 0; i2 < arr.length; i2++) {
              let v = arr[i2];
              if (v.length == 0) {
                continue;
              }
              if (!list.includes(v)) {
                list.push(v);
              }
            }
          }
          return list;
        },
        checkboxChange: function(r2, c2) {
          let _this = this;
          let historyDataVerification = $.extend(true, {}, _this.dataVerification);
          let currentDataVerification = $.extend(true, {}, _this.dataVerification);
          let item2 = currentDataVerification[r2 + "_" + c2];
          item2.checked = !item2.checked;
          let value = item2.value2;
          if (item2.checked) {
            value = item2.value1;
          }
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          setcellvalue(r2, c2, d, value);
          _this.refOfCheckbox(historyDataVerification, currentDataVerification, store_default.currentSheetIndex, d, {"row": [r2, r2], "column": [c2, c2]});
        },
        ref: function(historyDataVerification, currentDataVerification, sheetIndex) {
          let _this = this;
          if (store_default.clearjfundo) {
            store_default.jfundo.length = 0;
            let redo2 = {};
            redo2["type"] = "updateDataVerification";
            redo2["sheetIndex"] = sheetIndex;
            redo2["historyDataVerification"] = historyDataVerification;
            redo2["currentDataVerification"] = currentDataVerification;
            store_default.jfredo.push(redo2);
          }
          _this.dataVerification = currentDataVerification;
          store_default.luckysheetfile[getSheetIndex(sheetIndex)].dataVerification = currentDataVerification;
          if (server_default.allowUpdate) {
            server_default.saveParam("all", sheetIndex, currentDataVerification, {"k": "dataVerification"});
          }
          setTimeout(function() {
            luckysheetrefreshgrid();
          }, 1);
        },
        refOfCheckbox: function(historyDataVerification, currentDataVerification, sheetIndex, d, range2) {
          let _this = this;
          if (store_default.clearjfundo) {
            store_default.jfundo.length = 0;
            let redo2 = {};
            redo2["type"] = "updateDataVerificationOfCheckbox";
            redo2["sheetIndex"] = sheetIndex;
            redo2["historyDataVerification"] = historyDataVerification;
            redo2["currentDataVerification"] = currentDataVerification;
            redo2["data"] = store_default.flowdata;
            redo2["curData"] = d;
            redo2["range"] = range2;
            store_default.jfredo.push(redo2);
          }
          _this.dataVerification = currentDataVerification;
          store_default.luckysheetfile[getSheetIndex(sheetIndex)].dataVerification = currentDataVerification;
          store_default.flowdata = d;
          editor_default.webWorkerFlowDataCache(store_default.flowdata);
          store_default.luckysheetfile[getSheetIndex(sheetIndex)].data = store_default.flowdata;
          if (server_default.allowUpdate) {
            server_default.saveParam("all", sheetIndex, currentDataVerification, {"k": "dataVerification"});
            server_default.historyParam(store_default.flowdata, sheetIndex, range2);
          }
          setTimeout(function() {
            luckysheetrefreshgrid();
          }, 1);
        }
      };
      dataVerificationCtrl_default = dataVerificationCtrl;
    }
  });

  // src/global/extend.js
  function luckysheetextendtable(type, index2, value, direction, sheetIndex) {
    sheetIndex = sheetIndex || store_default.currentSheetIndex;
    if (type == "row" && !checkProtectionAuthorityNormal(sheetIndex, "insertRows")) {
      return;
    } else if (type == "column" && !checkProtectionAuthorityNormal(sheetIndex, "insertColumns")) {
      return;
    }
    let curOrder = getSheetIndex(sheetIndex);
    let file = store_default.luckysheetfile[curOrder];
    let d = $.extend(true, [], file.data);
    value = Math.floor(value);
    let cfg = $.extend(true, {}, file.config);
    if (cfg["merge"] == null) {
      cfg["merge"] = {};
    }
    let merge_new = {};
    for (let m in cfg["merge"]) {
      let mc = cfg["merge"][m];
      let r2 = mc.r, c2 = mc.c, rs = mc.rs, cs = mc.cs;
      if (type == "row") {
        if (index2 < r2) {
          merge_new[r2 + value + "_" + c2] = {"r": r2 + value, "c": c2, "rs": rs, "cs": cs};
        } else if (index2 == r2 && rs != 1) {
          if (direction == "lefttop") {
            merge_new[r2 + value + "_" + c2] = {"r": r2 + value, "c": c2, "rs": rs, "cs": cs};
          } else {
            merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs + value, "cs": cs};
          }
        } else if (index2 < r2 + rs - 1) {
          merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs + value, "cs": cs};
        } else if (index2 == r2 + rs - 1) {
          if (direction == "lefttop") {
            if (rs == 1) {
              merge_new[r2 + value + "_" + c2] = {"r": r2 + value, "c": c2, "rs": rs, "cs": cs};
            } else {
              merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs + value, "cs": cs};
            }
          } else {
            merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs, "cs": cs};
          }
        } else {
          merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs, "cs": cs};
        }
      } else if (type == "column") {
        if (index2 < c2) {
          merge_new[r2 + "_" + (c2 + value)] = {"r": r2, "c": c2 + value, "rs": rs, "cs": cs};
        } else if (index2 == c2 && cs != 1) {
          if (direction == "lefttop") {
            merge_new[r2 + "_" + (c2 + value)] = {"r": r2, "c": c2 + value, "rs": rs, "cs": cs};
          } else {
            merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs, "cs": cs + value};
          }
        } else if (index2 < c2 + cs - 1) {
          merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs, "cs": cs + value};
        } else if (index2 == c2 + cs - 1) {
          if (direction == "lefttop") {
            if (cs == 1) {
              merge_new[r2 + "_" + (c2 + value)] = {"r": r2, "c": c2 + value, "rs": rs, "cs": cs};
            } else {
              merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs, "cs": cs + value};
            }
          } else {
            merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs, "cs": cs};
          }
        } else {
          merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs, "cs": cs};
        }
      }
    }
    cfg["merge"] = merge_new;
    let calcChain = file.calcChain;
    let newCalcChain = [];
    if (calcChain != null && calcChain.length > 0) {
      for (let i2 = 0; i2 < calcChain.length; i2++) {
        let calc = $.extend(true, {}, calcChain[i2]);
        let calc_r = calc.r, calc_c = calc.c, calc_i = calc.index, calc_funcStr = getcellFormula(calc_r, calc_c, calc_i);
        if (type == "row") {
          let functionStr = "=" + formula_default.functionStrChange(calc_funcStr, "add", "row", direction, index2, value);
          if (d[calc_r][calc_c] && d[calc_r][calc_c].f == calc_funcStr) {
            d[calc_r][calc_c].f = functionStr;
          }
          if (direction == "lefttop") {
            if (calc_r >= index2) {
              calc.r += value;
            }
          } else if (direction == "rightbottom") {
            if (calc_r > index2) {
              calc.r += value;
            }
          }
          newCalcChain.push(calc);
        } else if (type == "column") {
          let functionStr = "=" + formula_default.functionStrChange(calc_funcStr, "add", "col", direction, index2, value);
          if (d[calc_r][calc_c] && d[calc_r][calc_c].f == calc_funcStr) {
            d[calc_r][calc_c].f = functionStr;
          }
          if (direction == "lefttop") {
            if (calc_c >= index2) {
              calc.c += value;
            }
          } else if (direction == "rightbottom") {
            if (calc_c > index2) {
              calc.c += value;
            }
          }
          newCalcChain.push(calc);
        }
      }
    }
    let filter_select = file.filter_select;
    let filter = file.filter;
    let newFilterObj = null;
    if (filter_select != null && JSON.stringify(filter_select) != "{}") {
      newFilterObj = {"filter_select": null, "filter": null};
      let f_r1 = filter_select.row[0], f_r2 = filter_select.row[1];
      let f_c1 = filter_select.column[0], f_c2 = filter_select.column[1];
      if (type == "row") {
        if (f_r1 < index2) {
          if (f_r2 == index2 && direction == "lefttop") {
            f_r2 += value;
          } else if (f_r2 > index2) {
            f_r2 += value;
          }
        } else if (f_r1 == index2) {
          if (direction == "lefttop") {
            f_r1 += value;
            f_r2 += value;
          } else if (direction == "rightbottom" && f_r2 > index2) {
            f_r2 += value;
          }
        } else {
          f_r1 += value;
          f_r2 += value;
        }
        if (filter != null) {
          newFilterObj.filter = {};
          for (let k in filter) {
            let f_rowhidden = filter[k].rowhidden;
            let f_rowhidden_new = {};
            for (let n in f_rowhidden) {
              n = parseFloat(n);
              if (n < index2) {
                f_rowhidden_new[n] = 0;
              } else if (n == index2) {
                if (direction == "lefttop") {
                  f_rowhidden_new[n + value] = 0;
                } else if (direction == "rightbottom") {
                  f_rowhidden_new[n] = 0;
                }
              } else {
                f_rowhidden_new[n + value] = 0;
              }
            }
            newFilterObj.filter[k] = $.extend(true, {}, filter[k]);
            newFilterObj.filter[k].rowhidden = f_rowhidden_new;
            newFilterObj.filter[k].str = f_r1;
            newFilterObj.filter[k].edr = f_r2;
          }
        }
      } else if (type == "column") {
        if (f_c1 < index2) {
          if (f_c2 == index2 && direction == "lefttop") {
            f_c2 += value;
          } else if (f_c2 > index2) {
            f_c2 += value;
          }
        } else if (f_c1 == index2) {
          if (direction == "lefttop") {
            f_c1 += value;
            f_c2 += value;
          } else if (direction == "rightbottom" && f_c2 > index2) {
            f_c2 += value;
          }
        } else {
          f_c1 += value;
          f_c2 += value;
        }
        if (filter != null) {
          newFilterObj.filter = {};
          for (let k in filter) {
            let f_cindex = filter[k].cindex;
            if (f_cindex == index2 && direction == "lefttop") {
              f_cindex += value;
            } else if (f_cindex > index2) {
              f_cindex += value;
            }
            newFilterObj.filter[f_cindex - f_c1] = $.extend(true, {}, filter[k]);
            newFilterObj.filter[f_cindex - f_c1].cindex = f_cindex;
            newFilterObj.filter[f_cindex - f_c1].stc = f_c1;
            newFilterObj.filter[f_cindex - f_c1].edc = f_c2;
          }
        }
      }
      newFilterObj.filter_select = {"row": [f_r1, f_r2], "column": [f_c1, f_c2]};
    }
    if (newFilterObj != null && newFilterObj.filter != null) {
      if (cfg["rowhidden"] == null) {
        cfg["rowhidden"] = {};
      }
      for (let k in newFilterObj.filter) {
        let f_rowhidden = newFilterObj.filter[k].rowhidden;
        for (let n in f_rowhidden) {
          cfg["rowhidden"][n] = 0;
        }
      }
    }
    let CFarr = file.luckysheet_conditionformat_save;
    let newCFarr = [];
    if (CFarr != null && CFarr.length > 0) {
      for (let i2 = 0; i2 < CFarr.length; i2++) {
        let cf_range = CFarr[i2].cellrange;
        let cf_new_range = [];
        for (let j = 0; j < cf_range.length; j++) {
          let CFr1 = cf_range[j].row[0], CFr2 = cf_range[j].row[1], CFc1 = cf_range[j].column[0], CFc2 = cf_range[j].column[1];
          if (type == "row") {
            if (CFr1 < index2) {
              if (CFr2 == index2 && direction == "lefttop") {
                CFr2 += value;
              } else if (CFr2 > index2) {
                CFr2 += value;
              }
            } else if (CFr1 == index2) {
              if (direction == "lefttop") {
                CFr1 += value;
                CFr2 += value;
              } else if (direction == "rightbottom" && CFr2 > index2) {
                CFr2 += value;
              }
            } else {
              CFr1 += value;
              CFr2 += value;
            }
          } else if (type == "column") {
            if (CFc1 < index2) {
              if (CFc2 == index2 && direction == "lefttop") {
                CFc2 += value;
              } else if (CFc2 > index2) {
                CFc2 += value;
              }
            } else if (CFc1 == index2) {
              if (direction == "lefttop") {
                CFc1 += value;
                CFc2 += value;
              } else if (direction == "rightbottom" && CFc2 > index2) {
                CFc2 += value;
              }
            } else {
              CFc1 += value;
              CFc2 += value;
            }
          }
          cf_new_range.push({"row": [CFr1, CFr2], "column": [CFc1, CFc2]});
        }
        let cf = $.extend(true, {}, CFarr[i2]);
        cf.cellrange = cf_new_range;
        newCFarr.push(cf);
      }
    }
    let AFarr = file.luckysheet_alternateformat_save;
    let newAFarr = [];
    if (AFarr != null && AFarr.length > 0) {
      for (let i2 = 0; i2 < AFarr.length; i2++) {
        let AFr1 = AFarr[i2].cellrange.row[0], AFr2 = AFarr[i2].cellrange.row[1], AFc1 = AFarr[i2].cellrange.column[0], AFc2 = AFarr[i2].cellrange.column[1];
        let af = $.extend(true, {}, AFarr[i2]);
        if (type == "row") {
          if (AFr1 < index2) {
            if (AFr2 == index2 && direction == "lefttop") {
              AFr2 += value;
            } else if (AFr2 > index2) {
              AFr2 += value;
            }
          } else if (AFr1 == index2) {
            if (direction == "lefttop") {
              AFr1 += value;
              AFr2 += value;
            } else if (direction == "rightbottom" && AFr2 > index2) {
              AFr2 += value;
            }
          } else {
            AFr1 += value;
            AFr2 += value;
          }
        } else if (type == "column") {
          if (AFc1 < index2) {
            if (AFc2 == index2 && direction == "lefttop") {
              AFc2 += value;
            } else if (AFc2 > index2) {
              AFc2 += value;
            }
          } else if (AFc1 == index2) {
            if (direction == "lefttop") {
              AFc1 += value;
              AFc2 += value;
            } else if (direction == "rightbottom" && AFc2 > index2) {
              AFc2 += value;
            }
          } else {
            AFc1 += value;
            AFc2 += value;
          }
        }
        af.cellrange = {"row": [AFr1, AFr2], "column": [AFc1, AFc2]};
        newAFarr.push(af);
      }
    }
    let newFreezen = {"freezenhorizontaldata": null, "freezenverticaldata": null};
    if (freezen_default.freezenhorizontaldata != null && type == "row") {
      let freezen_scrollTop = freezen_default.freezenhorizontaldata[2];
      let freezen_row_st = freezen_default.freezenhorizontaldata[1] - 1;
      if (freezen_row_st == index2 && direction == "lefttop") {
        freezen_row_st += value;
      } else if (freezen_row_st > index2) {
        freezen_row_st += value;
      }
      let freezen_top = store_default.visibledatarow[freezen_row_st] - 2 - freezen_scrollTop + store_default.columnHeaderHeight;
      newFreezen.freezenhorizontaldata = [
        store_default.visibledatarow[freezen_row_st],
        freezen_row_st + 1,
        freezen_scrollTop,
        freezen_default.cutVolumn(store_default.visibledatarow, freezen_row_st + 1),
        freezen_top
      ];
    } else {
      newFreezen.freezenhorizontaldata = freezen_default.freezenhorizontaldata;
    }
    if (freezen_default.freezenverticaldata != null && type == "column") {
      let freezen_scrollLeft = freezen_default.freezenverticaldata[2];
      let freezen_col_st = freezen_default.freezenverticaldata[1] - 1;
      if (freezen_col_st == index2 && direction == "lefttop") {
        freezen_col_st += value;
      } else if (freezen_col_st > index2) {
        freezen_col_st += value;
      }
      let freezen_left = store_default.visibledatacolumn[freezen_col_st] - 2 - freezen_scrollLeft + store_default.rowHeaderWidth;
      newFreezen.freezenverticaldata = [
        store_default.visibledatacolumn[freezen_col_st],
        freezen_col_st + 1,
        freezen_scrollLeft,
        freezen_default.cutVolumn(store_default.visibledatacolumn, freezen_col_st + 1),
        freezen_left
      ];
    } else {
      newFreezen.freezenverticaldata = freezen_default.freezenverticaldata;
    }
    let dataVerification = file.dataVerification;
    let newDataVerification = {};
    if (dataVerification != null) {
      for (let key in dataVerification) {
        let r2 = Number(key.split("_")[0]), c2 = Number(key.split("_")[1]);
        let item2 = dataVerification[key];
        if (type == "row") {
          if (index2 < r2) {
            newDataVerification[r2 + value + "_" + c2] = item2;
          } else if (index2 == r2) {
            if (direction == "lefttop") {
              newDataVerification[r2 + value + "_" + c2] = item2;
              for (let i2 = 0; i2 < value; i2++) {
                newDataVerification[r2 + i2 + "_" + c2] = item2;
              }
            } else {
              newDataVerification[r2 + "_" + c2] = item2;
              for (let i2 = 0; i2 < value; i2++) {
                newDataVerification[r2 + i2 + 1 + "_" + c2] = item2;
              }
            }
          } else {
            newDataVerification[r2 + "_" + c2] = item2;
          }
        } else if (type == "column") {
          if (index2 < c2) {
            newDataVerification[r2 + "_" + (c2 + value)] = item2;
          } else if (index2 == c2) {
            if (direction == "lefttop") {
              newDataVerification[r2 + "_" + (c2 + value)] = item2;
              for (let i2 = 0; i2 < value; i2++) {
                newDataVerification[r2 + "_" + (c2 + i2)] = item2;
              }
            } else {
              newDataVerification[r2 + "_" + c2] = item2;
              for (let i2 = 0; i2 < value; i2++) {
                newDataVerification[r2 + "_" + (c2 + i2 + 1)] = item2;
              }
            }
          } else {
            newDataVerification[r2 + "_" + c2] = item2;
          }
        }
      }
    }
    let hyperlink = file.hyperlink;
    let newHyperlink = {};
    if (hyperlink != null) {
      for (let key in hyperlink) {
        let r2 = Number(key.split("_")[0]), c2 = Number(key.split("_")[1]);
        let item2 = hyperlink[key];
        if (type == "row") {
          if (index2 < r2) {
            newHyperlink[r2 + value + "_" + c2] = item2;
          } else if (index2 == r2) {
            if (direction == "lefttop") {
              newHyperlink[r2 + value + "_" + c2] = item2;
            } else {
              newHyperlink[r2 + "_" + c2] = item2;
            }
          } else {
            newHyperlink[r2 + "_" + c2] = item2;
          }
        } else if (type == "column") {
          if (index2 < c2) {
            newHyperlink[r2 + "_" + (c2 + value)] = item2;
          } else if (index2 == c2) {
            if (direction == "lefttop") {
              newHyperlink[r2 + "_" + (c2 + value)] = item2;
            } else {
              newHyperlink[r2 + "_" + c2] = item2;
            }
          } else {
            newHyperlink[r2 + "_" + c2] = item2;
          }
        }
      }
    }
    let type1;
    if (type == "row") {
      type1 = "r";
      if (cfg["rowlen"] != null) {
        let rowlen_new = {};
        for (let r2 in cfg["rowlen"]) {
          r2 = parseFloat(r2);
          if (r2 < index2) {
            rowlen_new[r2] = cfg["rowlen"][r2];
          } else if (r2 == index2) {
            if (direction == "lefttop") {
              rowlen_new[r2 + value] = cfg["rowlen"][r2];
            } else if (direction == "rightbottom") {
              rowlen_new[r2] = cfg["rowlen"][r2];
            }
          } else {
            rowlen_new[r2 + value] = cfg["rowlen"][r2];
          }
        }
        cfg["rowlen"] = rowlen_new;
      }
      if (cfg["rowhidden"] != null) {
        let rowhidden_new = {};
        for (let r2 in cfg["rowhidden"]) {
          r2 = parseFloat(r2);
          if (r2 < index2) {
            rowhidden_new[r2] = cfg["rowhidden"][r2];
          } else if (r2 == index2) {
            if (direction == "lefttop") {
              rowhidden_new[r2 + value] = cfg["rowhidden"][r2];
            } else if (direction == "rightbottom") {
              rowhidden_new[r2] = cfg["rowhidden"][r2];
            }
          } else {
            rowhidden_new[r2 + value] = cfg["rowhidden"][r2];
          }
        }
        cfg["rowhidden"] = rowhidden_new;
      }
      let row = [];
      for (let c2 = 0; c2 < d[0].length; c2++) {
        row.push(null);
      }
      var cellBorderConfig = [];
      if (cfg["borderInfo"] && cfg["borderInfo"].length > 0) {
        let borderInfo = [];
        for (let i2 = 0; i2 < cfg["borderInfo"].length; i2++) {
          let rangeType = cfg["borderInfo"][i2].rangeType;
          if (rangeType == "range") {
            let borderRange = cfg["borderInfo"][i2].range;
            let emptyRange = [];
            for (let j = 0; j < borderRange.length; j++) {
              let bd_r1 = borderRange[j].row[0], bd_r2 = borderRange[j].row[1];
              if (direction == "lefttop") {
                if (index2 <= bd_r1) {
                  bd_r1 += value;
                  bd_r2 += value;
                } else if (index2 <= bd_r2) {
                  bd_r2 += value;
                }
              } else {
                if (index2 < bd_r1) {
                  bd_r1 += value;
                  bd_r2 += value;
                } else if (index2 < bd_r2) {
                  bd_r2 += value;
                }
              }
              if (bd_r2 >= bd_r1) {
                emptyRange.push({"row": [bd_r1, bd_r2], "column": borderRange[j].column});
              }
            }
            if (emptyRange.length > 0) {
              let bd_obj = {
                "rangeType": "range",
                "borderType": cfg["borderInfo"][i2].borderType,
                "style": cfg["borderInfo"][i2].style,
                "color": cfg["borderInfo"][i2].color,
                "range": emptyRange
              };
              borderInfo.push(bd_obj);
            }
          } else if (rangeType == "cell") {
            let row_index = cfg["borderInfo"][i2].value.row_index;
            if (row_index === index2) {
              cellBorderConfig.push(JSON.parse(JSON.stringify(cfg["borderInfo"][i2])));
            }
            if (direction == "lefttop") {
              if (index2 <= row_index) {
                row_index += value;
              }
            } else {
              if (index2 < row_index) {
                row_index += value;
              }
            }
            cfg["borderInfo"][i2].value.row_index = row_index;
            borderInfo.push(cfg["borderInfo"][i2]);
          }
        }
        cfg["borderInfo"] = borderInfo;
      }
      let arr = [];
      for (let r2 = 0; r2 < value; r2++) {
        arr.push(JSON.stringify(row));
        if (cellBorderConfig.length) {
          var cellBorderConfigCopy = JSON.parse(JSON.stringify(cellBorderConfig));
          cellBorderConfigCopy.forEach((item2) => {
            if (direction === "rightbottom") {
              item2.value.row_index += r2 + 1;
            } else if (direction === "lefttop") {
              item2.value.row_index += r2;
            }
          });
          cfg["borderInfo"].push(...cellBorderConfigCopy);
        }
      }
      if (direction == "lefttop") {
        if (index2 == 0) {
          new Function("d", "return d.unshift(" + arr.join(",") + ")")(d);
        } else {
          new Function("d", "return d.splice(" + index2 + ", 0, " + arr.join(",") + ")")(d);
        }
      } else {
        new Function("d", "return d.splice(" + (index2 + 1) + ", 0, " + arr.join(",") + ")")(d);
      }
    } else {
      type1 = "c";
      if (cfg["columnlen"] != null) {
        let columnlen_new = {};
        for (let c2 in cfg["columnlen"]) {
          c2 = parseFloat(c2);
          if (c2 < index2) {
            columnlen_new[c2] = cfg["columnlen"][c2];
          } else if (c2 == index2) {
            if (direction == "lefttop") {
              columnlen_new[c2 + value] = cfg["columnlen"][c2];
            } else if (direction == "rightbottom") {
              columnlen_new[c2] = cfg["columnlen"][c2];
            }
          } else {
            columnlen_new[c2 + value] = cfg["columnlen"][c2];
          }
        }
        cfg["columnlen"] = columnlen_new;
      }
      if (cfg["colhidden"] != null) {
        let colhidden_new = {};
        for (let c2 in cfg["colhidden"]) {
          c2 = parseFloat(c2);
          if (c2 < index2) {
            colhidden_new[c2] = cfg["colhidden"][c2];
          } else if (c2 == index2) {
            if (direction == "lefttop") {
              colhidden_new[c2 + value] = cfg["colhidden"][c2];
            } else if (direction == "rightbottom") {
              colhidden_new[c2] = cfg["colhidden"][c2];
            }
          } else {
            colhidden_new[c2 + value] = cfg["colhidden"][c2];
          }
        }
        cfg["colhidden"] = colhidden_new;
      }
      let col = [];
      for (let r2 = 0; r2 < d.length; r2++) {
        col.push(null);
      }
      var cellBorderConfig = [];
      if (cfg["borderInfo"] && cfg["borderInfo"].length > 0) {
        let borderInfo = [];
        for (let i2 = 0; i2 < cfg["borderInfo"].length; i2++) {
          let rangeType = cfg["borderInfo"][i2].rangeType;
          if (rangeType == "range") {
            let borderRange = cfg["borderInfo"][i2].range;
            let emptyRange = [];
            for (let j = 0; j < borderRange.length; j++) {
              let bd_c1 = borderRange[j].column[0], bd_c2 = borderRange[j].column[1];
              if (direction == "lefttop") {
                if (index2 <= bd_c1) {
                  bd_c1 += value;
                  bd_c2 += value;
                } else if (index2 <= bd_c2) {
                  bd_c2 += value;
                }
              } else {
                if (index2 < bd_c1) {
                  bd_c1 += value;
                  bd_c2 += value;
                } else if (index2 < bd_c2) {
                  bd_c2 += value;
                }
              }
              if (bd_c2 >= bd_c1) {
                emptyRange.push({"row": borderRange[j].row, "column": [bd_c1, bd_c2]});
              }
            }
            if (emptyRange.length > 0) {
              let bd_obj = {
                "rangeType": "range",
                "borderType": cfg["borderInfo"][i2].borderType,
                "style": cfg["borderInfo"][i2].style,
                "color": cfg["borderInfo"][i2].color,
                "range": emptyRange
              };
              borderInfo.push(bd_obj);
            }
          } else if (rangeType == "cell") {
            let col_index = cfg["borderInfo"][i2].value.col_index;
            if (col_index === index2) {
              cellBorderConfig.push(JSON.parse(JSON.stringify(cfg["borderInfo"][i2])));
            }
            if (direction == "lefttop") {
              if (index2 <= col_index) {
                col_index += value;
              }
            } else {
              if (index2 < col_index) {
                col_index += value;
              }
            }
            cfg["borderInfo"][i2].value.col_index = col_index;
            borderInfo.push(cfg["borderInfo"][i2]);
          }
        }
        cfg["borderInfo"] = borderInfo;
      }
      if (cellBorderConfig.length) {
        for (let i2 = 0; i2 < value; i2++) {
          var cellBorderConfigCopy = JSON.parse(JSON.stringify(cellBorderConfig));
          cellBorderConfigCopy.forEach((item2) => {
            if (direction === "rightbottom") {
              item2.value.col_index += i2 + 1;
            } else if (direction === "lefttop") {
              item2.value.col_index += i2;
            }
          });
          cfg["borderInfo"].push(...cellBorderConfigCopy);
        }
      }
      for (let r2 = 0; r2 < d.length; r2++) {
        let row = d[r2];
        for (let i2 = 0; i2 < value; i2++) {
          const COLR = JSON.parse(JSON.stringify(col[r2]));
          if (direction == "lefttop") {
            if (index2 == 0) {
              row.unshift(COLR);
            } else {
              row.splice(index2, 0, COLR);
            }
          } else {
            row.splice(index2 + 1, 0, COLR);
          }
        }
      }
    }
    if (file.index == store_default.currentSheetIndex) {
      jfrefreshgrid_adRC(d, cfg, "addRC", {"index": index2, "len": value, "direction": direction, "rc": type1, "restore": false}, newCalcChain, newFilterObj, newCFarr, newAFarr, newFreezen, newDataVerification, newHyperlink);
    } else {
      file.data = d;
      file.config = cfg;
      file.calcChain = newCalcChain;
      file.filter = newFilterObj.filter;
      file.filter_select = newFilterObj.filter_select;
      file.luckysheet_conditionformat_save = newCFarr;
      file.luckysheet_alternateformat_save = newAFarr;
      file.dataVerification = newDataVerification;
      file.hyperlink = newHyperlink;
    }
    let range2 = null;
    if (type == "row") {
      if (direction == "lefttop") {
        range2 = [{"row": [index2, index2 + value - 1], "column": [0, d[0].length - 1]}];
      } else {
        range2 = [{"row": [index2 + 1, index2 + value], "column": [0, d[0].length - 1]}];
      }
    } else {
      if (direction == "lefttop") {
        range2 = [{"row": [0, d.length - 1], "column": [index2, index2 + value - 1]}];
      } else {
        range2 = [{"row": [0, d.length - 1], "column": [index2 + 1, index2 + value]}];
      }
    }
    file.luckysheet_select_save = range2;
    if (file.index == store_default.currentSheetIndex) {
      store_default.luckysheet_select_save = range2;
      selectHightlightShow();
    }
    if (type == "row") {
      let scrollLeft = $("#luckysheet-cell-main").scrollLeft(), scrollTop = $("#luckysheet-cell-main").scrollTop();
      let winH = $("#luckysheet-cell-main").height(), winW = $("#luckysheet-cell-main").width();
      let row = store_default.visibledatarow[range2[0].row[1]], row_pre = range2[0].row[0] - 1 == -1 ? 0 : store_default.visibledatarow[range2[0].row[0] - 1];
      if (row - scrollTop - winH + 20 > 0) {
        $("#luckysheet-scrollbar-y").scrollTop(row - winH + 20);
      } else if (row_pre - scrollTop - 20 < 0) {
        $("#luckysheet-scrollbar-y").scrollTop(row_pre - 20);
      }
      if (value > 30) {
        $("#luckysheet-row-count-show").hide();
        $("#luckysheet-column-count-show").hide();
      }
    }
  }
  function luckysheetextendData(rowlen, newData) {
    let d = editor_default.deepCopyFlowData(store_default.flowdata);
    let cfg = $.extend(true, {}, store_default.config);
    if (cfg["merge"] == null) {
      cfg["merge"] = {};
    }
    let collen = d[0].length;
    let addNullData = datagridgrowth([], rowlen, collen);
    d = d.concat(addNullData);
    for (let i2 = 0; i2 < newData.length; i2++) {
      let r2 = newData[i2].r, c2 = newData[i2].c, v = newData[i2].v;
      setcellvalue(r2, c2, d, v);
      if (v != null && v.mc != null && v.mc.rs != null) {
        cfg["merge"][v.mc.r + "_" + v.mc.c] = $.extend(true, {}, v.mc);
      }
    }
    store_default.flowdata = d;
    editor_default.webWorkerFlowDataCache(store_default.flowdata);
    store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].data = d;
    store_default.config = cfg;
    store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
    jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
  }
  function luckysheetdeletetable(type, st, ed, sheetIndex) {
    sheetIndex = sheetIndex || store_default.currentSheetIndex;
    if (type == "row" && !checkProtectionAuthorityNormal(sheetIndex, "deleteRows")) {
      return;
    } else if (type == "column" && !checkProtectionAuthorityNormal(sheetIndex, "deleteColumns")) {
      return;
    }
    let curOrder = getSheetIndex(sheetIndex);
    let file = store_default.luckysheetfile[curOrder];
    let d = $.extend(true, [], file.data);
    if (st < 0) {
      st = 0;
    }
    if (ed < 0) {
      ed = 0;
    }
    if (type == "row") {
      if (st > d.length - 1) {
        st = d.length - 1;
      }
      if (ed > d.length - 1) {
        ed = d.length - 1;
      }
    } else {
      if (st > d[0].length - 1) {
        st = d[0].length - 1;
      }
      if (ed > d[0].length - 1) {
        ed = d[0].length - 1;
      }
    }
    if (st > ed) {
      return;
    }
    let slen2 = ed - st + 1;
    let cfg = $.extend(true, {}, file.config);
    if (cfg["merge"] == null) {
      cfg["merge"] = {};
    }
    let merge_new = {};
    for (let m in cfg["merge"]) {
      let mc = cfg["merge"][m];
      let r2 = mc.r, c2 = mc.c, rs = mc.rs, cs = mc.cs;
      if (type == "row") {
        if (r2 < st) {
          if (r2 + rs - 1 < st) {
            merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs, "cs": cs};
          } else if (r2 + rs - 1 >= st && r2 + rs - 1 < ed) {
            merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": st - r2, "cs": cs};
          } else if (r2 + rs - 1 >= ed) {
            merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs - slen2, "cs": cs};
          }
        } else if (r2 >= st && r2 <= ed) {
          if (r2 + rs - 1 > ed) {
            merge_new[st + "_" + c2] = {"r": st, "c": c2, "rs": r2 + rs - 1 - ed, "cs": cs};
          }
        } else if (r2 > ed) {
          merge_new[r2 - slen2 + "_" + c2] = {"r": r2 - slen2, "c": c2, "rs": rs, "cs": cs};
        }
      } else if (type == "column") {
        if (c2 < st) {
          if (c2 + cs - 1 < st) {
            merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs, "cs": cs};
          } else if (c2 + cs - 1 >= st && c2 + cs - 1 < ed) {
            merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs, "cs": st - c2};
          } else if (c2 + cs - 1 >= ed) {
            merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs, "cs": cs - slen2};
          }
        } else if (c2 >= st && c2 <= ed) {
          if (c2 + cs - 1 > ed) {
            merge_new[r2 + "_" + st] = {"r": r2, "c": st, "rs": rs, "cs": c2 + cs - 1 - ed};
          }
        } else if (c2 > ed) {
          merge_new[r2 + "_" + (c2 - slen2)] = {"r": r2, "c": c2 - slen2, "rs": rs, "cs": cs};
        }
      }
    }
    cfg["merge"] = merge_new;
    let calcChain = file.calcChain;
    let newCalcChain = [];
    if (calcChain != null && calcChain.length > 0) {
      for (let i2 = 0; i2 < calcChain.length; i2++) {
        let calc = $.extend(true, {}, calcChain[i2]);
        let calc_r = calc.r, calc_c = calc.c, calc_i = calc.index, calc_funcStr = getcellFormula(calc_r, calc_c, calc_i);
        if (type == "row") {
          if (calc_r < st || calc_r > ed) {
            let functionStr = "=" + formula_default.functionStrChange(calc_funcStr, "del", "row", null, st, slen2);
            if (d[calc_r][calc_c] && d[calc_r][calc_c].f == calc_funcStr) {
              d[calc_r][calc_c].f = functionStr;
            }
            if (calc_r > ed) {
              calc.r = calc_r - slen2;
            }
            newCalcChain.push(calc);
          }
        } else if (type == "column") {
          if (calc_c < st || calc_c > ed) {
            let functionStr = "=" + formula_default.functionStrChange(calc_funcStr, "del", "col", null, st, slen2);
            if (d[calc_r][calc_c] && d[calc_r][calc_c].f == calc_funcStr) {
              d[calc_r][calc_c].f = functionStr;
            }
            if (calc_c > ed) {
              calc.c = calc_c - slen2;
            }
            newCalcChain.push(calc);
          }
        }
      }
    }
    let filter_select = file.filter_select;
    let filter = file.filter;
    let newFilterObj = null;
    if (filter_select != null && JSON.stringify(filter_select) != "{}") {
      newFilterObj = {"filter_select": null, "filter": null};
      let f_r1 = filter_select.row[0], f_r2 = filter_select.row[1];
      let f_c1 = filter_select.column[0], f_c2 = filter_select.column[1];
      if (type == "row") {
        if (f_r1 > ed) {
          f_r1 -= slen2;
          f_r2 -= slen2;
          newFilterObj.filter_select = {"row": [f_r1, f_r2], "column": [f_c1, f_c2]};
        } else if (f_r1 < st) {
          if (f_r2 < st) {
          } else if (f_r2 <= ed) {
            f_r2 = st - 1;
          } else {
            f_r2 -= slen2;
          }
          newFilterObj.filter_select = {"row": [f_r1, f_r2], "column": [f_c1, f_c2]};
        }
        if (newFilterObj.filter_select != null && filter != null) {
          for (let k in filter) {
            let f_rowhidden = filter[k].rowhidden;
            let f_rowhidden_new = {};
            for (let n in f_rowhidden) {
              if (n < st) {
                f_rowhidden_new[n] = 0;
              } else if (n > ed) {
                f_rowhidden_new[n - slen2] = 0;
              }
            }
            if (JSON.stringify(f_rowhidden_new) != "{}") {
              if (newFilterObj.filter == null) {
                newFilterObj.filter = {};
              }
              newFilterObj.filter[k] = $.extend(true, {}, filter[k]);
              newFilterObj.filter[k].rowhidden = f_rowhidden_new;
              newFilterObj.filter[k].str = f_r1;
              newFilterObj.filter[k].edr = f_r2;
            }
          }
        }
      } else if (type == "column") {
        if (f_c1 > ed) {
          f_c1 -= slen2;
          f_c2 -= slen2;
          newFilterObj.filter_select = {"row": [f_r1, f_r2], "column": [f_c1, f_c2]};
        } else if (f_c1 < st) {
          if (f_c2 < st) {
          } else if (f_c2 <= ed) {
            f_c2 = st - 1;
          } else {
            f_c2 -= slen2;
          }
          newFilterObj.filter_select = {"row": [f_r1, f_r2], "column": [f_c1, f_c2]};
        } else {
          if (f_c2 > ed) {
            f_c1 = st;
            f_c2 -= slen2;
            newFilterObj.filter_select = {"row": [f_r1, f_r2], "column": [f_c1, f_c2]};
          }
        }
        if (newFilterObj.filter_select != null && filter != null) {
          for (let k in filter) {
            let f_cindex = filter[k].cindex;
            if (f_cindex < st) {
              if (newFilterObj.filter == null) {
                newFilterObj.filter = {};
              }
              newFilterObj.filter[f_cindex - f_c1] = $.extend(true, {}, filter[k]);
              newFilterObj.filter[f_cindex - f_c1].edc = f_c2;
            } else if (f_cindex > ed) {
              f_cindex -= slen2;
              if (newFilterObj.filter == null) {
                newFilterObj.filter = {};
              }
              newFilterObj.filter[f_cindex - f_c1] = $.extend(true, {}, filter[k]);
              newFilterObj.filter[f_cindex - f_c1].cindex = f_cindex;
              newFilterObj.filter[f_cindex - f_c1].stc = f_c1;
              newFilterObj.filter[f_cindex - f_c1].edc = f_c2;
            }
          }
        }
      }
    }
    if (newFilterObj != null && newFilterObj.filter != null) {
      if (cfg["rowhidden"] == null) {
        cfg["rowhidden"] = {};
      }
      for (let k in newFilterObj.filter) {
        let f_rowhidden = newFilterObj.filter[k].rowhidden;
        for (let n in f_rowhidden) {
          cfg["rowhidden"][n] = 0;
        }
      }
    }
    let CFarr = file.luckysheet_conditionformat_save;
    let newCFarr = [];
    if (CFarr != null && CFarr.length > 0) {
      for (let i2 = 0; i2 < CFarr.length; i2++) {
        let cf_range = CFarr[i2].cellrange;
        let cf_new_range = [];
        for (let j = 0; j < cf_range.length; j++) {
          let CFr1 = cf_range[j].row[0], CFr2 = cf_range[j].row[1], CFc1 = cf_range[j].column[0], CFc2 = cf_range[j].column[1];
          if (type == "row") {
            if (!(CFr1 >= st && CFr2 <= ed)) {
              if (CFr1 > ed) {
                CFr1 -= slen2;
                CFr2 -= slen2;
              } else if (CFr1 < st) {
                if (CFr2 < st) {
                } else if (CFr2 <= ed) {
                  CFr2 = st - 1;
                } else {
                  CFr2 -= slen2;
                }
              } else {
                if (CFr2 > ed) {
                  CFr1 = st;
                  CFr2 -= slen2;
                }
              }
              cf_new_range.push({"row": [CFr1, CFr2], "column": [CFc1, CFc2]});
            }
          } else if (type == "column") {
            if (!(CFc1 >= st && CFc2 <= ed)) {
              if (CFc1 > ed) {
                CFc1 -= slen2;
                CFc2 -= slen2;
              } else if (CFc1 < st) {
                if (CFc2 < st) {
                } else if (CFc2 <= ed) {
                  CFc2 = st - 1;
                } else {
                  CFc2 -= slen2;
                }
              } else {
                if (CFc2 > ed) {
                  CFc1 = st;
                  CFc2 -= slen2;
                }
              }
              cf_new_range.push({"row": [CFr1, CFr2], "column": [CFc1, CFc2]});
            }
          }
        }
        if (cf_new_range.length > 0) {
          let cf = $.extend(true, {}, CFarr[i2]);
          cf.cellrange = cf_new_range;
          newCFarr.push(cf);
        }
      }
    }
    let AFarr = file.luckysheet_alternateformat_save;
    let newAFarr = [];
    if (AFarr != null && AFarr.length > 0) {
      for (let i2 = 0; i2 < AFarr.length; i2++) {
        let AFr1 = AFarr[i2].cellrange.row[0], AFr2 = AFarr[i2].cellrange.row[1], AFc1 = AFarr[i2].cellrange.column[0], AFc2 = AFarr[i2].cellrange.column[1];
        if (type == "row") {
          if (!(AFr1 >= st && AFr2 <= ed)) {
            let af = $.extend(true, {}, AFarr[i2]);
            if (AFr1 > ed) {
              AFr1 -= slen2;
              AFr2 -= slen2;
            } else if (AFr1 < st) {
              if (AFr2 < st) {
              } else if (AFr2 <= ed) {
                AFr2 = st - 1;
              } else {
                AFr2 -= slen2;
              }
            } else {
              if (AFr2 > ed) {
                AFr1 = st;
                AFr2 -= slen2;
              }
            }
            af.cellrange = {"row": [AFr1, AFr2], "column": [AFc1, AFc2]};
            newAFarr.push(af);
          }
        } else if (type == "column") {
          if (!(AFc1 >= st && AFc2 <= ed)) {
            let af = $.extend(true, {}, AFarr[i2]);
            if (AFc1 > ed) {
              AFc1 -= slen2;
              AFc2 -= slen2;
            } else if (AFc1 < st) {
              if (AFc2 < st) {
              } else if (AFc2 <= ed) {
                AFc2 = st - 1;
              } else {
                AFc2 -= slen2;
              }
            } else {
              if (AFc2 > ed) {
                AFc1 = st;
                AFc2 -= slen2;
              }
            }
            af.cellrange = {"row": [AFr1, AFr2], "column": [AFc1, AFc2]};
            newAFarr.push(af);
          }
        }
      }
    }
    let newFreezen = {"freezenhorizontaldata": null, "freezenverticaldata": null};
    if (freezen_default.freezenhorizontaldata != null && type == "row") {
      let freezen_scrollTop = freezen_default.freezenhorizontaldata[2];
      let freezen_st = luckysheet_searcharray(store_default.visibledatarow, freezen_scrollTop);
      if (freezen_st == -1) {
        freezen_st = 0;
      }
      let freezen_row_st = freezen_default.freezenhorizontaldata[1] - 1;
      if (freezen_row_st >= st) {
        if (freezen_row_st < ed) {
          freezen_row_st = st - 1;
        } else {
          freezen_row_st -= slen2;
        }
      }
      if (freezen_row_st < freezen_st) {
        freezen_row_st = freezen_st;
      }
      let freezen_top = store_default.visibledatarow[freezen_row_st] - 2 - freezen_scrollTop + store_default.columnHeaderHeight;
      newFreezen.freezenhorizontaldata = [
        store_default.visibledatarow[freezen_row_st],
        freezen_row_st + 1,
        freezen_scrollTop,
        freezen_default.cutVolumn(store_default.visibledatarow, freezen_row_st + 1),
        freezen_top
      ];
    } else {
      newFreezen.freezenhorizontaldata = freezen_default.freezenhorizontaldata;
    }
    if (freezen_default.freezenverticaldata != null && type == "column") {
      let freezen_scrollLeft = freezen_default.freezenverticaldata[2];
      let freezen_st2 = luckysheet_searcharray(store_default.visibledatacolumn, freezen_scrollLeft);
      if (freezen_st2 == -1) {
        freezen_st2 = 0;
      }
      let freezen_col_st = freezen_default.freezenverticaldata[1] - 1;
      if (freezen_col_st >= st) {
        if (freezen_col_st < ed) {
          freezen_col_st = st - 1;
        } else {
          freezen_col_st -= slen2;
        }
      }
      if (freezen_col_st < freezen_st2) {
        freezen_col_st = freezen_st2;
      }
      let freezen_left = store_default.visibledatacolumn[freezen_col_st] - 2 - freezen_scrollLeft + store_default.rowHeaderWidth;
      newFreezen.freezenverticaldata = [
        store_default.visibledatacolumn[freezen_col_st],
        freezen_col_st + 1,
        freezen_scrollLeft,
        freezen_default.cutVolumn(store_default.visibledatacolumn, freezen_col_st + 1),
        freezen_left
      ];
    } else {
      newFreezen.freezenverticaldata = freezen_default.freezenverticaldata;
    }
    let dataVerification = file.dataVerification;
    let newDataVerification = {};
    if (dataVerification != null) {
      for (let key in dataVerification) {
        let r2 = Number(key.split("_")[0]), c2 = Number(key.split("_")[1]);
        let item2 = dataVerification[key];
        if (type == "row") {
          if (r2 < st) {
            newDataVerification[r2 + "_" + c2] = item2;
          } else if (r2 > ed) {
            newDataVerification[r2 - slen2 + "_" + c2] = item2;
          }
        } else if (type == "column") {
          if (c2 < st) {
            newDataVerification[r2 + "_" + c2] = item2;
          } else if (c2 > ed) {
            newDataVerification[r2 + "_" + (c2 - slen2)] = item2;
          }
        }
      }
    }
    let hyperlink = file.hyperlink;
    let newHyperlink = {};
    if (hyperlink != null) {
      for (let key in hyperlink) {
        let r2 = Number(key.split("_")[0]), c2 = Number(key.split("_")[1]);
        let item2 = hyperlink[key];
        if (type == "row") {
          if (r2 < st) {
            newHyperlink[r2 + "_" + c2] = item2;
          } else if (r2 > ed) {
            newHyperlink[r2 - slen2 + "_" + c2] = item2;
          }
        } else if (type == "column") {
          if (c2 < st) {
            newHyperlink[r2 + "_" + c2] = item2;
          } else if (c2 > ed) {
            newHyperlink[r2 + "_" + (c2 - slen2)] = item2;
          }
        }
      }
    }
    let type1;
    if (type == "row") {
      type1 = "r";
      if (cfg["rowlen"] == null) {
        cfg["rowlen"] = {};
      }
      let rowlen_new = {};
      for (let r2 in cfg["rowlen"]) {
        if (r2 < st) {
          rowlen_new[r2] = cfg["rowlen"][r2];
        } else if (r2 > ed) {
          rowlen_new[r2 - slen2] = cfg["rowlen"][r2];
        }
      }
      cfg["rowlen"] = rowlen_new;
      if (cfg["rowhidden"] == null) {
        cfg["rowhidden"] = {};
      }
      let rowhidden_new = {};
      for (let r2 in cfg["rowhidden"]) {
        if (r2 < st) {
          rowhidden_new[r2] = cfg["rowhidden"][r2];
        } else if (r2 > ed) {
          rowhidden_new[r2 - slen2] = cfg["rowhidden"][r2];
        }
      }
      cfg["rowhidden"] = rowhidden_new;
      if (cfg["borderInfo"] && cfg["borderInfo"].length > 0) {
        let borderInfo = [];
        for (let i2 = 0; i2 < cfg["borderInfo"].length; i2++) {
          let rangeType = cfg["borderInfo"][i2].rangeType;
          if (rangeType == "range") {
            let borderRange = cfg["borderInfo"][i2].range;
            let emptyRange = [];
            for (let j = 0; j < borderRange.length; j++) {
              let bd_r1 = borderRange[j].row[0], bd_r2 = borderRange[j].row[1];
              for (let r2 = st; r2 <= ed; r2++) {
                if (r2 < borderRange[j].row[0]) {
                  bd_r1 -= 1;
                  bd_r2 -= 1;
                } else if (r2 <= borderRange[j].row[1]) {
                  bd_r2 -= 1;
                }
              }
              if (bd_r2 >= bd_r1) {
                emptyRange.push({"row": [bd_r1, bd_r2], "column": borderRange[j].column});
              }
            }
            if (emptyRange.length > 0) {
              let bd_obj = {
                "rangeType": "range",
                "borderType": cfg["borderInfo"][i2].borderType,
                "style": cfg["borderInfo"][i2].style,
                "color": cfg["borderInfo"][i2].color,
                "range": emptyRange
              };
              borderInfo.push(bd_obj);
            }
          } else if (rangeType == "cell") {
            let row_index = cfg["borderInfo"][i2].value.row_index;
            if (row_index < st) {
              borderInfo.push(cfg["borderInfo"][i2]);
            } else if (row_index > ed) {
              cfg["borderInfo"][i2].value.row_index = row_index - (ed - st + 1);
              borderInfo.push(cfg["borderInfo"][i2]);
            }
          }
        }
        cfg["borderInfo"] = borderInfo;
      }
      d.splice(st, slen2);
      for (let r2 = 0; r2 < slen2; r2++) {
        let row = [];
        for (let c2 = 0; c2 < d[0].length; c2++) {
          row.push(null);
        }
        d.push(row);
      }
    } else {
      type1 = "c";
      if (cfg["columnlen"] == null) {
        cfg["columnlen"] = {};
      }
      let columnlen_new = {};
      for (let c2 in cfg["columnlen"]) {
        if (c2 < st) {
          columnlen_new[c2] = cfg["columnlen"][c2];
        } else if (c2 > ed) {
          columnlen_new[c2 - slen2] = cfg["columnlen"][c2];
        }
      }
      cfg["columnlen"] = columnlen_new;
      if (cfg["colhidden"] == null) {
        cfg["colhidden"] = {};
      }
      let colhidden_new = {};
      for (let c2 in cfg["colhidden"]) {
        if (c2 < st) {
          colhidden_new[c2] = cfg["colhidden"][c2];
        } else if (c2 > ed) {
          colhidden_new[c2 - slen2] = cfg["colhidden"][c2];
        }
      }
      cfg["colhidden"] = colhidden_new;
      if (cfg["borderInfo"] && cfg["borderInfo"].length > 0) {
        let borderInfo = [];
        for (let i2 = 0; i2 < cfg["borderInfo"].length; i2++) {
          let rangeType = cfg["borderInfo"][i2].rangeType;
          if (rangeType == "range") {
            let borderRange = cfg["borderInfo"][i2].range;
            let emptyRange = [];
            for (let j = 0; j < borderRange.length; j++) {
              let bd_c1 = borderRange[j].column[0], bd_c2 = borderRange[j].column[1];
              for (let c2 = st; c2 <= ed; c2++) {
                if (c2 < borderRange[j].column[0]) {
                  bd_c1 -= 1;
                  bd_c2 -= 1;
                } else if (c2 <= borderRange[j].column[1]) {
                  bd_c2 -= 1;
                }
              }
              if (bd_c2 >= bd_c1) {
                emptyRange.push({"row": borderRange[j].row, "column": [bd_c1, bd_c2]});
              }
            }
            if (emptyRange.length > 0) {
              let bd_obj = {
                "rangeType": "range",
                "borderType": cfg["borderInfo"][i2].borderType,
                "style": cfg["borderInfo"][i2].style,
                "color": cfg["borderInfo"][i2].color,
                "range": emptyRange
              };
              borderInfo.push(bd_obj);
            }
          } else if (rangeType == "cell") {
            let col_index = cfg["borderInfo"][i2].value.col_index;
            if (col_index < st) {
              borderInfo.push(cfg["borderInfo"][i2]);
            } else if (col_index > ed) {
              cfg["borderInfo"][i2].value.col_index = col_index - (ed - st + 1);
              borderInfo.push(cfg["borderInfo"][i2]);
            }
          }
        }
        cfg["borderInfo"] = borderInfo;
      }
      let addcol = [];
      for (let r2 = 0; r2 < slen2; r2++) {
        addcol.push(null);
      }
      for (let r2 = 0; r2 < d.length; r2++) {
        let row = [].concat(d[r2]);
        row.splice(st, slen2);
        d[r2] = row.concat(addcol);
      }
    }
    if (file.index == store_default.currentSheetIndex) {
      jfrefreshgrid_adRC(d, cfg, "delRC", {"index": st, "len": ed - st + 1, "rc": type1}, newCalcChain, newFilterObj, newCFarr, newAFarr, newFreezen, newDataVerification, newHyperlink);
    } else {
      file.data = d;
      file.config = cfg;
      file.calcChain = newCalcChain;
      file.filter = newFilterObj.filter;
      file.filter_select = newFilterObj.filter_select;
      file.luckysheet_conditionformat_save = newCFarr;
      file.luckysheet_alternateformat_save = newAFarr;
      file.dataVerification = newDataVerification;
      file.hyperlink = newHyperlink;
    }
  }
  function luckysheetDeleteCell(type, str, edr, stc, edc, sheetIndex) {
    sheetIndex = sheetIndex || store_default.currentSheetIndex;
    if (!checkProtectionNotEnable(sheetIndex)) {
      return;
    }
    let curOrder = getSheetIndex(sheetIndex);
    let file = store_default.luckysheetfile[curOrder];
    let d = $.extend(true, [], file.data);
    let rlen = edr - str + 1;
    let clen = edc - stc + 1;
    let cfg = $.extend(true, {}, store_default.config);
    if (cfg["merge"] == null) {
      cfg["merge"] = {};
    }
    let merge_new = {};
    for (let m in cfg["merge"]) {
      let mc = cfg["merge"][m];
      let r2 = mc.r, c2 = mc.c, rs = mc.rs, cs = mc.cs;
      if (type == "moveLeft") {
        if (str > r2 + rs - 1 || edr < r2 || stc > c2 + cs - 1) {
          merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs, "cs": cs};
        } else if (str <= r2 && edr >= r2 + rs - 1 && edc < c2) {
          merge_new[r2 + "_" + (c2 - clen)] = {"r": r2, "c": c2 - clen, "rs": rs, "cs": cs};
        } else {
          for (let r_i = r2; r_i <= r2 + rs - 1; r_i++) {
            for (let c_i = c2; c_i <= c2 + cs - 1; c_i++) {
              delete d[r_i][c_i].mc;
            }
          }
        }
      } else if (type == "moveUp") {
        if (stc > c2 + cs - 1 || edc < c2 || str > r2 + rs - 1) {
          merge_new[r2 + "_" + c2] = {"r": r2, "c": c2, "rs": rs, "cs": cs};
        } else if (stc <= c2 && edc >= c2 + cs - 1 && edr < r2) {
          merge_new[r2 - rlen + "_" + c2] = {"r": r2 - rlen, "c": c2, "rs": rs, "cs": cs};
        } else {
          for (let r_i = r2; r_i <= r2 + rs - 1; r_i++) {
            for (let c_i = c2; c_i <= c2 + cs - 1; c_i++) {
              delete d[r_i][c_i].mc;
            }
          }
        }
      }
    }
    cfg["merge"] = merge_new;
    let calcChain = file.calcChain;
    let newCalcChain = [];
    if (calcChain != null && calcChain.length > 0) {
      for (let i2 = 0; i2 < calcChain.length; i2++) {
        let calc = $.extend(true, {}, calcChain[i2]);
        let calc_r = calc.r, calc_c = calc.c, calc_i = calc.index, calc_funcStr = getcellFormula(calc_r, calc_c, calc_i);
        if (calc_r < str || calc_r > edr || calc_c < stc || calc_c > edc) {
          let functionStr;
          if (type == "moveLeft") {
            functionStr = "=" + formula_default.functionStrChange(calc_funcStr, "del", "col", null, stc, clen);
            if (calc_c > edc && calc_r >= str && calc_r <= edr) {
              calc.c = calc_c - clen;
            }
          } else if (type == "moveUp") {
            functionStr = "=" + formula_default.functionStrChange(calc_funcStr, "del", "row", null, str, rlen);
            if (calc_r > edr && calc_c >= stc && calc_c <= edc) {
              calc.r = calc_r - rlen;
            }
          }
          if (d[calc_r][calc_c] && d[calc_r][calc_c].f == calc_funcStr) {
            d[calc_r][calc_c].f = functionStr;
          }
          newCalcChain.push(calc);
        }
      }
    }
    let filter_select = file.filter_select;
    let filter = file.filter;
    let newFilterObj = null;
    if (filter_select != null && JSON.stringify(filter_select) != "{}") {
      newFilterObj = {"filter_select": null, "filter": null};
      let f_r1 = filter_select.row[0], f_r2 = filter_select.row[1];
      let f_c1 = filter_select.column[0], f_c2 = filter_select.column[1];
      if (type == "moveUp") {
        if (f_c1 >= stc && f_c2 <= edc) {
          if (f_r1 > edr) {
            newFilterObj.filter_select = {
              "row": [f_r1 - rlen, f_r2 - rlen],
              "column": [f_c1, f_c2]
            };
          } else if (f_r2 < str) {
            newFilterObj.filter_select = {
              "row": [f_r1, f_r2],
              "column": [f_c1, f_c2]
            };
          } else if (f_r1 < str) {
            if (f_r2 > edr) {
              newFilterObj.filter_select = {
                "row": [f_r1, f_r2 - rlen],
                "column": [f_c1, f_c2]
              };
            } else {
              newFilterObj.filter_select = {
                "row": [f_r1, str - 1],
                "column": [f_c1, f_c2]
              };
            }
          }
          if (newFilterObj.filter_select != null && filter != null) {
            for (let k in filter) {
              let f_rowhidden = filter[k].rowhidden;
              let f_rowhidden_new = {};
              for (let n in f_rowhidden) {
                if (n < str) {
                  f_rowhidden_new[n] = 0;
                } else if (n > edr) {
                  f_rowhidden_new[n - slen] = 0;
                }
              }
              if (newFilterObj.filter == null) {
                newFilterObj.filter = {};
              }
              newFilterObj.filter[k] = $.extend(true, {}, filter[k]);
              if (JSON.stringify(f_rowhidden_new) != "{}") {
                newFilterObj.filter[k].rowhidden = f_rowhidden_new;
              }
              newFilterObj.filter[k].str = newFilterObj.filter_select.row[0];
              newFilterObj.filter[k].edr = newFilterObj.filter_select.row[1];
            }
          }
        } else if (f_r1 >= str && f_r2 <= edr) {
          if (f_c1 > edc) {
            newFilterObj.filter_select = {
              "row": [f_r1, f_r2],
              "column": [f_c1, f_c2]
            };
          } else if (f_c1 >= stc) {
            if (f_c2 > edc) {
              newFilterObj.filter_select = {
                "row": [f_r1, f_r2],
                "column": [stc, f_c2 - clen]
              };
            }
          } else {
            if (f_c2 < stc) {
              newFilterObj.filter_select = {
                "row": [f_r1, f_r2],
                "column": [f_c1, f_c2]
              };
            } else if (f_c2 <= edc) {
              newFilterObj.filter_select = {
                "row": [f_r1, f_r2],
                "column": [f_c1, stc - 1]
              };
            } else {
              newFilterObj.filter_select = {
                "row": [f_r1, f_r2],
                "column": [f_c1, f_c2 - clen]
              };
            }
          }
          if (newFilterObj.filter_select != null && filter != null) {
            for (let k in filter) {
              let f_stc = newFilterObj.filter_select.column[0];
              let f_edc = newFilterObj.filter_select.column[1];
              let f_cindex = filter[k].cindex;
              if (f_cindex < stc || f_cindex > edc) {
                if (newFilterObj.filter == null) {
                  newFilterObj.filter = {};
                }
                if (f_cindex > edc) {
                  f_cindex -= clen;
                }
                let k2 = f_cindex - f_stc;
                newFilterObj.filter[k2] = $.extend(true, {}, filter[k]);
                newFilterObj.filter[k2].cindex = f_cindex;
                newFilterObj.filter[k2].stc = f_stc;
                newFilterObj.filter[k2].edc = f_edc;
              }
            }
          }
        } else {
          newFilterObj.filter_select = {
            "row": [f_r1, f_r2],
            "column": [f_c1, f_c2]
          };
          if (filter != null) {
            newFilterObj.filter = filter;
          }
        }
      } else if (type == "moveLeft") {
        if (f_r1 >= str && f_r2 <= edr) {
          if (f_c1 > edc) {
            newFilterObj.filter_select = {
              "row": [f_r1, f_r2],
              "column": [f_c1 - clen, f_c2 - clen]
            };
          } else if (f_c2 < stc) {
            newFilterObj.filter_select = {
              "row": [f_r1, f_r2],
              "column": [f_c1, f_c2]
            };
          } else if (f_c1 < stc) {
            if (f_c2 > edc) {
              newFilterObj.filter_select = {
                "row": [f_r1, f_r2],
                "column": [f_c1, f_c2 - clen]
              };
            } else {
              newFilterObj.filter_select = {
                "row": [f_r1, f_r2],
                "column": [f_c1, stc - 1]
              };
            }
          }
          if (newFilterObj.filter_select != null && filter != null) {
            for (let k in filter) {
              let f_stc = newFilterObj.filter_select.column[0];
              let f_edc = newFilterObj.filter_select.column[1];
              let f_cindex = filter[k].cindex;
              if (f_cindex < stc || f_cindex > edc) {
                if (newFilterObj.filter == null) {
                  newFilterObj.filter = {};
                }
                if (f_cindex > edc) {
                  f_cindex -= clen;
                }
                let k2 = f_cindex - f_stc;
                newFilterObj.filter[k2] = $.extend(true, {}, filter[k]);
                newFilterObj.filter[k2].cindex = f_cindex;
                newFilterObj.filter[k2].stc = f_stc;
                newFilterObj.filter[k2].edc = f_edc;
              }
            }
          }
        } else if (f_c1 >= stc && f_c2 <= edc) {
          if (f_r1 < str || f_r1 > edr) {
            newFilterObj.filter_select = {
              "row": [f_r1, f_r2],
              "column": [f_c1, f_c2]
            };
            if (filter != null) {
              newFilterObj.filter = filter;
            }
          }
        } else {
          newFilterObj.filter_select = {
            "row": [f_r1, f_r2],
            "column": [f_c1, f_c2]
          };
          if (filter != null) {
            newFilterObj.filter = filter;
          }
        }
      }
    }
    if (newFilterObj != null && newFilterObj.filter != null) {
      if (cfg["rowhidden"] == null) {
        cfg["rowhidden"] = {};
      }
      for (let k in newFilterObj.filter) {
        let f_rowhidden = newFilterObj.filter[k].rowhidden;
        for (let n in f_rowhidden) {
          cfg["rowhidden"][n] = 0;
        }
      }
    }
    let CFarr = file.luckysheet_conditionformat_save;
    let newCFarr = [];
    if (CFarr != null && CFarr.length > 0) {
      for (let i2 = 0; i2 < CFarr.length; i2++) {
        let cf_range = CFarr[i2].cellrange;
        let cf_new_range = [];
        for (let j = 0; j < cf_range.length; j++) {
          let CFr1 = cf_range[j].row[0], CFr2 = cf_range[j].row[1], CFc1 = cf_range[j].column[0], CFc2 = cf_range[j].column[1];
          if (!(str <= CFr1 && edr >= CFr2 && stc <= CFc1 && edc >= CFc2)) {
            cf_new_range = getMoveRange(type, str, edr, stc, edc, CFr1, CFr2, CFc1, CFc2, rlen, clen);
          }
        }
        if (cf_new_range.length > 0) {
          let cf = $.extend(true, {}, CFarr[i2]);
          cf.cellrange = cf_new_range;
          newCFarr.push(cf);
        }
      }
    }
    let dataVerification = file.dataVerification;
    let newDataVerification = {};
    if (dataVerification != null) {
      for (let key in dataVerification) {
        let r2 = Number(key.split("_")[0]), c2 = Number(key.split("_")[1]);
        let item2 = dataVerification[key];
        if (r2 < str || r2 > edr || c2 < stc || c2 > edc) {
          if (type == "moveLeft") {
            if (c2 > edc && r2 >= str && r2 <= edr) {
              newDataVerification[r2 + "_" + (c2 - clen)] = item2;
            } else {
              newDataVerification[r2 + "_" + c2] = item2;
            }
          } else if (type == "moveUp") {
            if (r2 > edr && c2 >= stc && c2 <= edc) {
              newDataVerification[r2 - rlen + "_" + c2] = item2;
            } else {
              newDataVerification[r2 + "_" + c2] = item2;
            }
          }
        }
      }
    }
    let hyperlink = file.hyperlink;
    let newHyperlink = {};
    if (hyperlink != null) {
      for (let key in hyperlink) {
        let r2 = Number(key.split("_")[0]), c2 = Number(key.split("_")[1]);
        let item2 = hyperlink[key];
        if (r2 < str || r2 > edr || c2 < stc || c2 > edc) {
          if (type == "moveLeft") {
            if (c2 > edc && r2 >= str && r2 <= edr) {
              newHyperlink[r2 + "_" + (c2 - clen)] = item2;
            } else {
              newHyperlink[r2 + "_" + c2] = item2;
            }
          } else if (type == "moveUp") {
            if (r2 > edr && c2 >= stc && c2 <= edc) {
              newHyperlink[r2 - rlen + "_" + c2] = item2;
            } else {
              newHyperlink[r2 + "_" + c2] = item2;
            }
          }
        }
      }
    }
    if (cfg["borderInfo"] && cfg["borderInfo"].length > 0) {
      let borderInfo = [];
      for (let i2 = 0; i2 < cfg["borderInfo"].length; i2++) {
        let rangeType = cfg["borderInfo"][i2].rangeType;
        if (rangeType == "range") {
          let borderRange = cfg["borderInfo"][i2].range;
          let emptyRange = [];
          for (let j = 0; j < borderRange.length; j++) {
            let bd_r1 = borderRange[j].row[0], bd_r2 = borderRange[j].row[1], bd_c1 = borderRange[j].column[0], bd_c2 = borderRange[j].column[1];
            if (!(str <= bd_r1 && edr >= bd_r2 && stc <= bd_c1 && edc >= bd_c2)) {
              emptyRange = getMoveRange(type, str, edr, stc, edc, bd_r1, bd_r2, bd_c1, bd_c2, rlen, clen);
            }
          }
          if (emptyRange.length > 0) {
            let bd_obj = {
              "rangeType": "range",
              "borderType": cfg["borderInfo"][i2].borderType,
              "style": cfg["borderInfo"][i2].style,
              "color": cfg["borderInfo"][i2].color,
              "range": emptyRange
            };
            borderInfo.push(bd_obj);
          }
        } else if (rangeType == "cell") {
          let row_index = cfg["borderInfo"][i2].value.row_index;
          let col_index = cfg["borderInfo"][i2].value.col_index;
          if (row_index < str || row_index > edr || col_index < stc || col_index > edc) {
            if (type == "moveLeft") {
              if (col_index > edc && row_index >= str && row_index <= edr) {
                col_index -= clen;
                cfg["borderInfo"][i2].value.col_index = col_index;
              }
            } else if (type == "moveUp") {
              if (row_index > edr && col_index >= stc && col_index <= edc) {
                row_index -= rlen;
                cfg["borderInfo"][i2].value.row_index = row_index;
              }
            }
            borderInfo.push(cfg["borderInfo"][i2]);
          }
        }
      }
      cfg["borderInfo"] = borderInfo;
    }
    let addcol = [];
    for (let c2 = stc; c2 <= edc; c2++) {
      addcol.push(null);
    }
    if (type == "moveUp") {
      let data = [];
      for (let r2 = str; r2 <= d.length - 1; r2++) {
        let row = [];
        for (let c2 = stc; c2 <= edc; c2++) {
          row.push(d[r2][c2]);
        }
        data.push(row);
      }
      data.splice(0, rlen);
      let addrow = [];
      for (let r2 = str; r2 <= edr; r2++) {
        addrow.push(addcol);
      }
      data = data.concat(addrow);
      for (let r2 = str; r2 <= d.length - 1; r2++) {
        for (let c2 = stc; c2 <= edc; c2++) {
          d[r2][c2] = data[r2 - str][c2 - stc];
        }
      }
    } else if (type == "moveLeft") {
      for (let r2 = str; r2 <= edr; r2++) {
        d[r2].splice(stc, clen);
        d[r2] = d[r2].concat(addcol);
      }
    }
    if (file.index == store_default.currentSheetIndex) {
      jfrefreshgrid_deleteCell(d, cfg, {type, "str": str, "edr": edr, "stc": stc, "edc": edc}, newCalcChain, newFilterObj, newCFarr, newDataVerification, newHyperlink);
    } else {
      file.data = d;
      file.config = cfg;
      file.calcChain = newCalcChain;
      file.filter = newFilterObj.filter;
      file.filter_select = newFilterObj.filter_select;
      file.luckysheet_conditionformat_save = newCFarr;
      file.dataVerification = newDataVerification;
      file.hyperlink = newHyperlink;
    }
  }
  function getMoveRange(type, str, edr, stc, edc, r1, r2, c1, c2, rlen, clen) {
    let newRange = [];
    if (type == "moveLeft") {
      if (str > r2 || edr < r1 || stc > c2) {
        newRange.push({
          "row": [r1, r2],
          "column": [c1, c2]
        });
      } else if (edc < c1) {
        if (str <= r1 && edr >= r2) {
          newRange.push({
            "row": [r1, r2],
            "column": [c1 - clen, c2 - clen]
          });
        } else if (str > r1 && edr < r2) {
          let range2 = [
            {"row": [r1, str - 1], "column": [c1, c2]},
            {"row": [edr + 1, r2], "column": [c1, c2]},
            {"row": [str, edr], "column": [c1 - clen, c2 - clen]}
          ];
          newRange = newRange.concat(range2);
        } else if (str > r1) {
          let range2 = [
            {"row": [r1, str - 1], "column": [c1, c2]},
            {"row": [str, r2], "column": [c1 - clen, c2 - clen]}
          ];
          newRange = newRange.concat(range2);
        } else if (edr < r2) {
          let range2 = [
            {"row": [r1, edr], "column": [c1 - clen, c2 - clen]},
            {"row": [edr + 1, r2], "column": [c1, c2]}
          ];
          newRange = newRange.concat(range2);
        }
      } else if (edc >= c1) {
        if (stc <= c1 && edc >= c2) {
          if (str > r1 && edr < r2) {
            let range2 = [
              {"row": [r1, str - 1], "column": [c1, c2]},
              {"row": [edr + 1, r2], "column": [c1, c2]}
            ];
            newRange = newRange.concat(range2);
          } else if (str > r1) {
            let range2 = [
              {"row": [r1, str - 1], "column": [c1, c2]}
            ];
            newRange = newRange.concat(range2);
          } else if (edr < r2) {
            let range2 = [
              {"row": [edr + 1, r2], "column": [c1, c2]}
            ];
            newRange = newRange.concat(range2);
          }
        } else if (stc > c1 && edc < c2) {
          if (str <= r1 && edr >= r2) {
            newRange.push({
              "row": [r1, r2],
              "column": [c1, c2 - clen]
            });
          } else if (str > r1 && edr < r2) {
            let range2 = [
              {"row": [r1, str - 1], "column": [c1, c2]},
              {"row": [edr + 1, r2], "column": [c1, c2]},
              {"row": [str, edr], "column": [c1, c2 - clen]}
            ];
            newRange = newRange.concat(range2);
          } else if (str > r1) {
            let range2 = [
              {"row": [r1, str - 1], "column": [c1, c2]},
              {"row": [str, r2], "column": [c1, c2 - clen]}
            ];
            newRange = newRange.concat(range2);
          } else if (edr < r2) {
            let range2 = [
              {"row": [r1, edr], "column": [c1, c2 - clen]},
              {"row": [edr + 1, r2], "column": [c1, c2]}
            ];
            newRange = newRange.concat(range2);
          }
        } else if (stc > c1) {
          if (str <= r1 && edr >= r2) {
            newRange.push({
              "row": [r1, r2],
              "column": [c1, stc - 1]
            });
          } else if (str > r1 && edr < r2) {
            let range2 = [
              {"row": [r1, str - 1], "column": [c1, c2]},
              {"row": [edr + 1, r2], "column": [c1, c2]},
              {"row": [str, edr], "column": [c1, stc - 1]}
            ];
            newRange = newRange.concat(range2);
          } else if (str > r1) {
            let range2 = [
              {"row": [r1, str - 1], "column": [c1, c2]},
              {"row": [str, r2], "column": [c1, stc - 1]}
            ];
            newRange = newRange.concat(range2);
          } else if (edr < r2) {
            let range2 = [
              {"row": [r1, edr], "column": [c1, stc - 1]},
              {"row": [edr + 1, r2], "column": [c1, c2]}
            ];
            newRange = newRange.concat(range2);
          }
        } else if (edc < c2) {
          if (str <= r1 && edr >= r2) {
            newRange.push({
              "row": [r1, r2],
              "column": [c1 - clen, c2 - clen]
            });
          } else if (str > r1 && edr < r2) {
            let range2 = [
              {"row": [r1, str - 1], "column": [c1, c2]},
              {"row": [edr + 1, r2], "column": [c1, c2]},
              {"row": [str, edr], "column": [c1 - clen, c2 - clen]}
            ];
            newRange = newRange.concat(range2);
          } else if (str > r1) {
            let range2 = [
              {"row": [r1, str - 1], "column": [c1, c2]},
              {"row": [str, r2], "column": [c1 - clen, c2 - clen]}
            ];
            newRange = newRange.concat(range2);
          } else if (edr < r2) {
            let range2 = [
              {"row": [r1, edr], "column": [c1 - clen, c2 - clen]},
              {"row": [edr + 1, r2], "column": [c1, c2]}
            ];
            newRange = newRange.concat(range2);
          }
        }
      }
    } else if (type == "moveUp") {
      if (stc > c2 || edc < c1 || str > r2) {
        newRange.push({
          "row": [r1, r2],
          "column": [c1, c2]
        });
      } else if (edr < r1) {
        if (stc <= c1 && edc >= c2) {
          newRange.push({
            "row": [r1 - rlen, r2 - rlen],
            "column": [c1, c2]
          });
        } else if (stc > c1 && edc < c2) {
          let range2 = [
            {"row": [r1, r2], "column": [c1, stc - 1]},
            {"row": [r1, r2], "column": [edc + 1, c2]},
            {"row": [r1 - rlen, r2 - rlen], "column": [stc, edc]}
          ];
          newRange = newRange.concat(range2);
        } else if (stc > c1) {
          let range2 = [
            {"row": [r1, r2], "column": [c1, stc - 1]},
            {"row": [r1 - rlen, r2 - rlen], "column": [stc, c2]}
          ];
          newRange = newRange.concat(range2);
        } else if (edc < c2) {
          let range2 = [
            {"row": [r1 - rlen, r2 - rlen], "column": [c1, edc]},
            {"row": [r1, r2], "column": [edc + 1, c2]}
          ];
          newRange = newRange.concat(range2);
        }
      } else if (edr >= r1) {
        if (str <= r1 && edr >= r2) {
          if (stc > c1 && edc < c2) {
            let range2 = [
              {"row": [r1, r2], "column": [c1, stc - 1]},
              {"row": [r1, r2], "column": [edc + 1, c2]}
            ];
            newRange = newRange.concat(range2);
          } else if (stc > c1) {
            let range2 = [
              {"row": [r1, r2], "column": [c1, stc - 1]}
            ];
            newRange = newRange.concat(range2);
          } else if (edc < c2) {
            let range2 = [
              {"row": [r1, r2], "column": [edc + 1, c2]}
            ];
            newRange = newRange.concat(range2);
          }
        } else if (str > r1 && edr < r2) {
          if (stc <= c1 && edc >= c2) {
            newRange.push({
              "row": [r1, r2 - rlen],
              "column": [c1, c2]
            });
          } else if (stc > c1 && edc < c2) {
            let range2 = [
              {"row": [r1, r2], "column": [c1, stc - 1]},
              {"row": [r1, r2], "column": [edc + 1, c2]},
              {"row": [r1, r2 - rlen], "column": [stc, edc]}
            ];
            newRange = newRange.concat(range2);
          } else if (stc > c1) {
            let range2 = [
              {"row": [r1, r2], "column": [c1, stc - 1]},
              {"row": [r1, r2 - rlen], "column": [stc, c2]}
            ];
            newRange = newRange.concat(range2);
          } else if (edc < c2) {
            let range2 = [
              {"row": [r1, r2 - rlen], "column": [c1, edc]},
              {"row": [r1, r2], "column": [edc + 1, c2]}
            ];
            newRange = newRange.concat(range2);
          }
        } else if (str > r1) {
          if (stc <= c1 && edc >= c2) {
            newRange.push({
              "row": [r1, str - 1],
              "column": [c1, c2]
            });
          } else if (stc > c1 && edc < c2) {
            let range2 = [
              {"row": [r1, r2], "column": [c1, stc - 1]},
              {"row": [r1, r2], "column": [edc + 1, c2]},
              {"row": [r1, str - 1], "column": [stc, edc]}
            ];
            newRange = newRange.concat(range2);
          } else if (stc > c1) {
            let range2 = [
              {"row": [r1, r2], "column": [c1, stc - 1]},
              {"row": [r1, str - 1], "column": [stc, c2]}
            ];
            newRange = newRange.concat(range2);
          } else if (edc < c2) {
            let range2 = [
              {"row": [r1, str - 1], "column": [c1, edc]},
              {"row": [r1, r2], "column": [edc + 1, c2]}
            ];
            newRange = newRange.concat(range2);
          }
        } else if (edr < r2) {
          if (stc <= c1 && edc >= c2) {
            newRange.push({
              "row": [r1 - rlen, r2 - rlen],
              "column": [c1, c2]
            });
          } else if (stc > c1 && edc < c2) {
            let range2 = [
              {"row": [r1, r2], "column": [c1, stc - 1]},
              {"row": [r1, r2], "column": [edc + 1, c2]},
              {"row": [r1 - rlen, r2 - rlen], "column": [stc, edc]}
            ];
            newRange = newRange.concat(range2);
          } else if (stc > c1) {
            let range2 = [
              {"row": [r1, r2], "column": [c1, stc - 1]},
              {"row": [r1 - rlen, r2 - rlen], "column": [stc, c2]}
            ];
            newRange = newRange.concat(range2);
          } else if (edc < c2) {
            let range2 = [
              {"row": [r1 - rlen, r2 - rlen], "column": [c1, edc]},
              {"row": [r1, r2], "column": [edc + 1, c2]}
            ];
            newRange = newRange.concat(range2);
          }
        }
      }
    }
    return newRange;
  }
  var init_extend = __esm({
    "src/global/extend.js"() {
      init_editor();
      init_formula();
      init_refresh();
      init_getdata();
      init_setdata();
      init_conditionformat();
      init_freezen();
      init_select();
      init_sheetSearch();
      init_protection();
      init_get();
      init_store();
    }
  });

  // src/global/createsheet.js
  function luckysheetcreatesheet(colwidth, rowheight, data, cfg, active) {
    if (active == null) {
      active = true;
    }
    store_default.visibledatarow = [];
    store_default.visibledatacolumn = [];
    store_default.ch_width = 0;
    store_default.rh_height = 0;
    store_default.zoomRatio = 1;
    if (cfg != null) {
      store_default.config = cfg;
    } else {
      store_default.config = {};
    }
    if (data.length == 0) {
      store_default.flowdata = datagridgrowth(data, rowheight, colwidth);
    } else if (data.length < rowheight && data[0].length < colwidth) {
      store_default.flowdata = datagridgrowth(data, rowheight - data.length, colwidth - data[0].length);
    } else if (data.length < rowheight) {
      store_default.flowdata = datagridgrowth(data, rowheight - data.length, 0);
    } else if (data[0].length < colwidth) {
      store_default.flowdata = datagridgrowth(data, 0, colwidth - data[0].length);
    } else {
      store_default.flowdata = data;
    }
    editor_default.webWorkerFlowDataCache(store_default.flowdata);
    rhchInit(rowheight, colwidth);
    if (active) {
      sheetmanage_default.showSheet();
      setTimeout(function() {
        sheetmanage_default.restoreCache();
        formula_default.execFunctionGroup();
        sheetmanage_default.restoreSheetAll(store_default.currentSheetIndex);
        luckysheetrefreshgrid();
      }, 1);
    }
  }
  var init_createsheet = __esm({
    "src/global/createsheet.js"() {
      init_getdata();
      init_editor();
      init_rhchInit();
      init_formula();
      init_refresh();
      init_sheetmanage();
      init_store();
    }
  });

  // src/global/method.js
  var defaultConfig, method, method_default;
  var init_method = __esm({
    "src/global/method.js"() {
      init_server();
      init_constant();
      init_sheetmanage();
      init_formula();
      init_imageCtrl();
      init_dataVerificationCtrl();
      init_pivotTable();
      init_freezen();
      init_get();
      init_extend();
      init_luckysheetConfigsetting();
      init_editor();
      init_createsheet();
      init_store();
      defaultConfig = {
        defaultStore: {
          container: null,
          luckysheetfile: null,
          defaultcolumnNum: 60,
          defaultrowNum: 84,
          fullscreenmode: true,
          devicePixelRatio: 1,
          currentSheetIndex: 0,
          calculateSheetIndex: 0,
          flowdata: [],
          config: {},
          visibledatarow: [],
          visibledatacolumn: [],
          ch_width: 0,
          rh_height: 0,
          cellmainWidth: 0,
          cellmainHeight: 0,
          toolbarHeight: 0,
          infobarHeight: 0,
          calculatebarHeight: 0,
          rowHeaderWidth: 46,
          columnHeaderHeight: 20,
          cellMainSrollBarSize: 12,
          sheetBarHeight: 31,
          statisticBarHeight: 23,
          luckysheetTableContentHW: [0, 0],
          defaultcollen: 73,
          defaultrowlen: 19,
          jfcountfuncTimeout: null,
          jfautoscrollTimeout: null,
          luckysheet_select_status: false,
          luckysheet_select_save: [{"row": [0, 0], "column": [0, 0]}],
          luckysheet_selection_range: [],
          luckysheet_copy_save: {},
          luckysheet_paste_iscut: false,
          filterchage: true,
          luckysheet_filter_save: {"row": [], "column": []},
          luckysheet_sheet_move_status: false,
          luckysheet_sheet_move_data: [],
          luckysheet_scroll_status: false,
          luckysheetisrefreshdetail: true,
          luckysheetisrefreshtheme: true,
          luckysheetcurrentisPivotTable: false,
          luckysheet_rows_selected_status: false,
          luckysheet_cols_selected_status: false,
          luckysheet_rows_change_size: false,
          luckysheet_rows_change_size_start: [],
          luckysheet_cols_change_size: false,
          luckysheet_cols_change_size_start: [],
          luckysheet_cols_dbclick_timeout: null,
          luckysheet_cols_dbclick_times: 0,
          luckysheetCellUpdate: [],
          luckysheet_shiftpositon: null,
          iscopyself: true,
          orderbyindex: 0,
          luckysheet_model_move_state: false,
          luckysheet_model_xy: [0, 0],
          luckysheet_model_move_obj: null,
          luckysheet_cell_selected_move: false,
          luckysheet_cell_selected_move_index: [],
          luckysheet_cell_selected_extend: false,
          luckysheet_cell_selected_extend_index: [],
          luckysheet_cell_selected_extend_time: null,
          clearjfundo: true,
          jfredo: [],
          jfundo: [],
          lang: "en",
          createChart: "",
          highlightChart: "",
          zIndex: 15,
          chartparam: {
            luckysheetCurrentChart: null,
            luckysheetCurrentChartActive: false,
            luckysheetCurrentChartMove: null,
            luckysheetCurrentChartMoveTimeout: null,
            luckysheetCurrentChartMoveObj: null,
            luckysheetCurrentChartMoveXy: null,
            luckysheetCurrentChartMoveWinH: null,
            luckysheetCurrentChartMoveWinW: null,
            luckysheetCurrentChartResize: null,
            luckysheetCurrentChartResizeObj: null,
            luckysheetCurrentChartResizeXy: null,
            luckysheetCurrentChartResizeWinH: null,
            luckysheetCurrentChartResizeWinW: null,
            luckysheetInsertChartTosheetChange: true,
            luckysheetCurrentChartZIndexRank: 100,
            luckysheet_chart_redo_click: false,
            luckysheetCurrentChartMaxState: false,
            jfrefreshchartall: "",
            changeChartCellData: "",
            renderChart: "",
            getChartJson: ""
          },
          functionList: null,
          luckysheet_function: null,
          chart_selection: {},
          currentChart: "",
          scrollRefreshSwitch: true,
          measureTextCache: {},
          measureTextCellInfoCache: {},
          measureTextCacheTimeOut: null,
          cellOverflowMapCache: {},
          zoomRatio: 1,
          visibledatacolumn_unique: null,
          visibledatarow_unique: null,
          showGridLines: true,
          toobarObject: {},
          inlineStringEditCache: null,
          inlineStringEditRange: null,
          fontList: [],
          currentSheetView: "viewNormal"
        },
        defaultFormula: {
          searchFunctionCell: null,
          functionlistPosition: {},
          rangechangeindex: null,
          rangestart: false,
          rangetosheet: null,
          rangeSetValueTo: null,
          func_selectedrange: {},
          rangedrag_column_start: false,
          rangedrag_row_start: false,
          rangeResizeObj: null,
          rangeResize: null,
          rangeResizeIndex: null,
          rangeResizexy: null,
          rangeResizeWinH: null,
          rangeResizeWinW: null,
          rangeResizeTo: null,
          rangeMovexy: null,
          rangeMove: false,
          rangeMoveObj: null,
          rangeMoveIndex: null,
          rangeMoveRangedata: null,
          functionHTMLIndex: 0,
          functionRangeIndex: null,
          execvertex: {},
          execFunctionGroupData: null,
          execFunctionExist: null,
          formulaContainSheetList: {},
          cellTextToIndexList: {},
          isFunctionRangeSave: false,
          formulaContainCellList: {},
          execFunctionGlobalData: {},
          groupValuesRefreshData: [],
          functionResizeData: {},
          functionResizeStatus: false,
          functionResizeTimeout: null,
          data_parm_index: 0
        },
        defaultSheet: {
          sheetMaxIndex: 0,
          nulldata: null,
          mergeCalculationSheet: {},
          checkLoadSheetIndexToDataIndex: {},
          CacheNotLoadControll: []
        },
        defaultPivotTable: {
          pivotDatas: null,
          pivotSheetIndex: 0,
          pivotDataSheetIndex: 0,
          celldata: null,
          origindata: null,
          pivot_data_type: {},
          pivot_select_save: null,
          column: null,
          row: null,
          values: null,
          filter: null,
          showType: null,
          rowhidden: null,
          selected: null,
          caljs: null,
          initial: true,
          filterparm: null,
          luckysheet_pivotTable_select_state: false,
          jgridCurrentPivotInput: null,
          movestate: false,
          moveitemposition: [],
          movesave: {},
          drawPivotTable: true,
          pivotTableBoundary: [12, 6]
        },
        defaultImage: {
          imgItem: {
            type: "3",
            src: "",
            originWidth: null,
            originHeight: null,
            default: {
              width: null,
              height: null,
              left: null,
              top: null
            },
            crop: {
              width: null,
              height: null,
              offsetLeft: 0,
              offsetTop: 0
            },
            isFixedPos: false,
            fixedLeft: null,
            fixedTop: null,
            border: {
              width: 0,
              radius: 0,
              style: "solid",
              color: "#000"
            }
          },
          images: null,
          currentImgId: null,
          currentWinW: null,
          currentWinH: null,
          resize: null,
          resizeXY: null,
          move: false,
          moveXY: null,
          cropChange: null,
          cropChangeXY: null,
          cropChangeObj: null,
          copyImgItemObj: null
        },
        defaultDataVerification: {
          defaultItem: {
            type: "dropdown",
            type2: null,
            value1: "",
            value2: "",
            checked: false,
            remote: false,
            prohibitInput: false,
            hintShow: false,
            hintText: ""
          },
          curItem: null,
          dataVerification: null,
          selectRange: [],
          selectStatus: false
        }
      };
      method = {
        addDataAjax: function(param, index2, url, func) {
          let _this = this;
          if (index2 == null) {
            index2 = store_default.currentSheetIndex;
          }
          if (url == null) {
            url = server_default.loadSheetUrl;
          }
          $("#luckysheet-grid-window-1").append(luckysheetlodingHTML());
          param.currentPage++;
          let dataType = "application/json;charset=UTF-8";
          let token = sessionStorage.getItem("x-auth-token");
          $.ajax({
            method: "POST",
            url,
            headers: {"x-auth-token": token},
            data: JSON.stringify(param),
            contentType: dataType,
            success: function(d) {
              if (typeof d == "string") {
                d = JSON.parse(d);
              }
              let dataset = d.data;
              let newData = dataset.celldata;
              luckysheetextendData(dataset["row"], newData);
              setTimeout(function() {
                store_default.loadingObj.close();
              }, 500);
              if (func && typeof func == "function") {
                func(dataset);
              }
            }
          });
        },
        reload: function(param, index2, url, func) {
          let _this = this;
          if (index2 == null) {
            index2 = store_default.currentSheetIndex;
          }
          if (url == null) {
            url = server_default.loadSheetUrl;
          }
          $("#luckysheet-grid-window-1").append(luckysheetlodingHTML());
          let arg = {"gridKey": server_default.gridKey, "index": index2};
          param = $.extend(true, param, arg);
          let file = store_default.luckysheetfile[getSheetIndex(index2)];
          $.post(url, param, function(d) {
            let dataset = new Function("return " + d)();
            file.celldata = dataset[index2.toString()];
            let data = sheetmanage_default.buildGridData(file);
            setTimeout(function() {
              store_default.loadingObj.close();
            }, 500);
            file["data"] = data;
            store_default.flowdata = data;
            editor_default.webWorkerFlowDataCache(data);
            luckysheetcreatesheet(data[0].length, data.length, data, null, false);
            file["load"] = "1";
            store_default.luckysheet_select_save.length = 0;
            store_default.luckysheet_selection_range = [];
            server_default.saveParam("shs", null, store_default.currentSheetIndex);
            sheetmanage_default.changeSheet(index2);
            if (func && typeof func == "function") {
              func();
            }
          });
        },
        clearSheetByIndex: function(i2) {
          let index2 = getSheetIndex(i2);
          let sheetfile = store_default.luckysheetfile[index2];
          if (!sheetfile.isPivotTable) {
            sheetfile.data = [];
            sheetfile.row = store_default.defaultrowNum;
            sheetfile.column = store_default.defaultcolumnNum;
            sheetfile.chart = [];
            sheetfile.config = null;
            sheetfile.filter = null;
            sheetfile.filter_select = null;
            sheetfile.celldata = [];
            sheetfile.pivotTable = {};
            sheetfile.calcChain = [];
            sheetfile.status = 0;
            sheetfile.load = 0;
            store_default.flowdata = [];
            editor_default.webWorkerFlowDataCache(store_default.flowdata);
            $("#" + store_default.container + " .luckysheet-data-visualization-chart").remove();
            $("#" + store_default.container + " .luckysheet-datavisual-selection-set").remove();
            $("#luckysheet-row-count-show, #luckysheet-formula-functionrange-select, #luckysheet-row-count-show, #luckysheet-column-count-show, #luckysheet-change-size-line, #luckysheet-cell-selected-focus, #luckysheet-selection-copy, #luckysheet-cell-selected-extend, #luckysheet-cell-selected-move, #luckysheet-cell-selected").hide();
            delete sheetfile.load;
          } else {
            delete store_default.luckysheetfile[index2];
          }
        },
        clear: function(index2) {
          let _this = this;
          if (index2 == "all") {
            for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
              let sheetfile = store_default.luckysheetfile[i2];
              _this.clearSheetByIndex(sheetfile.index);
            }
          } else {
            if (index2 == null) {
              index2 = store_default.currentSheetIndex;
            }
            _this.clearSheetByIndex(index2);
          }
          sheetmanage_default.changeSheet(store_default.luckysheetfile[0].index);
        },
        destroy: function() {
          $("#" + store_default.container).empty();
          $("body > .luckysheet-cols-menu").remove();
          $("#luckysheet-modal-dialog-mask, #luckysheetTextSizeTest, #luckysheet-icon-morebtn-div").remove();
          $("#luckysheet-input-box").parent().remove();
          $("#luckysheet-formula-help-c").remove();
          $(".chartSetting, .luckysheet-modal-dialog-slider").remove();
          $(document).off(".luckysheetEvent");
          $(document).off(".luckysheetProtection");
          freezen_default.initialHorizontal = true;
          freezen_default.initialVertical = true;
          let defaultStore = $.extend(true, {}, defaultConfig.defaultStore);
          for (let key in defaultStore) {
            if (key in store_default) {
              store_default[key] = defaultStore[key];
            }
          }
          let defaultFormula = $.extend(true, {}, defaultConfig.defaultFormula);
          for (let key in defaultFormula) {
            if (key in formula_default) {
              formula_default[key] = defaultFormula[key];
            }
          }
          let defaultSheet = $.extend(true, {}, defaultConfig.defaultSheet);
          for (let key in defaultSheet) {
            if (key in sheetmanage_default) {
              sheetmanage_default[key] = defaultSheet[key];
            }
          }
          let defaultPivotTable = $.extend(true, {}, defaultConfig.defaultPivotTable);
          for (let key in defaultPivotTable) {
            if (key in pivotTable_default) {
              pivotTable_default[key] = defaultPivotTable[key];
            }
          }
          let defaultImage = $.extend(true, {}, defaultConfig.defaultImage);
          for (let key in defaultImage) {
            if (key in imageCtrl_default) {
              imageCtrl_default[key] = defaultImage[key];
            }
          }
          let defaultDataVerification = $.extend(true, {}, defaultConfig.defaultDataVerification);
          for (let key in defaultDataVerification) {
            if (key in dataVerificationCtrl_default) {
              dataVerificationCtrl_default[key] = defaultDataVerification[key];
            }
          }
          store_default.asyncLoad = ["core"];
        },
        editorChart: function(c2) {
          let chart_selection_color = luckyColor[0];
          let chart_id = "luckysheetEditMode-datav-chart";
          let chart_selection_id = chart_id + "_selection";
          c2.chart_id = chart_id;
          let chartTheme = c2.chartTheme;
          chartTheme = chartTheme == null ? "default0000" : chartTheme;
          luckysheet.insertChartTosheet(c2.sheetIndex, c2.dataSheetIndex, c2.option, c2.chartType, c2.selfOption, c2.defaultOption, c2.row, c2.column, chart_selection_color, chart_id, chart_selection_id, c2.chartStyle, c2.rangeConfigCheck, c2.rangeRowCheck, c2.rangeColCheck, c2.chartMarkConfig, c2.chartTitleConfig, c2.winWidth, c2.winHeight, c2.scrollLeft, c2.scrollTop, chartTheme, c2.myWidth, c2.myHeight, c2.myLeft != null ? parseFloat(c2.myLeft) : null, c2.myTop != null ? parseFloat(c2.myTop) : null, c2.myindexrank, true);
          $("#" + chart_id).find(".luckysheet-modal-controll-update").click();
        },
        createHookFunction: function() {
          let hookName = arguments[0];
          if (luckysheetConfigsetting_default.hook && luckysheetConfigsetting_default.hook[hookName] != null && typeof luckysheetConfigsetting_default.hook[hookName] == "function") {
            var args = Array.prototype.slice.apply(arguments);
            args.shift();
            let ret = luckysheetConfigsetting_default.hook[hookName].apply(this, args);
            if (ret === false) {
              return false;
            } else {
              return true;
            }
          }
          return true;
        }
      };
      method_default = method;
    }
  });

  // src/controllers/postil.js
  var luckysheetPostil, postil_default;
  var init_postil = __esm({
    "src/controllers/postil.js"() {
      init_location();
      init_editor();
      init_formula();
      init_cursorPos();
      init_refresh();
      init_set();
      init_get();
      init_util();
      init_freezen();
      init_menuButton();
      init_protection();
      init_server();
      init_store();
      init_method();
      luckysheetPostil = {
        defaultWidth: 144,
        defaultHeight: 84,
        currentObj: null,
        currentWinW: null,
        currentWinH: null,
        resize: null,
        resizeXY: null,
        move: false,
        moveXY: null,
        init: function() {
          let _this = this;
          $("#luckysheet-postil-showBoxs").off("mousedown.showPs").on("mousedown.showPs", ".luckysheet-postil-show", function(event2) {
            if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "editObjects", false)) {
              return;
            }
            _this.currentObj = $(this).find(".luckysheet-postil-show-main");
            if ($(this).hasClass("luckysheet-postil-show-active")) {
              event2.stopPropagation();
              return;
            }
            _this.removeActivePs();
            $(this).addClass("luckysheet-postil-show-active");
            $(this).find(".luckysheet-postil-dialog-resize").show();
            $(this).find(".arrowCanvas").css("z-index", 200);
            $(this).find(".luckysheet-postil-show-main").css("z-index", 200);
            event2.stopPropagation();
          });
          $("#luckysheet-postil-showBoxs").off("mouseup.showPs").on("mouseup.showPs", ".luckysheet-postil-show", function(event2) {
            if (event2.which == "3") {
              event2.stopPropagation();
            }
          });
          $("#luckysheet-postil-showBoxs").off("mousedown.resize").on("mousedown.resize", ".luckysheet-postil-show .luckysheet-postil-dialog-resize .luckysheet-postil-dialog-resize-item", function(event2) {
            if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "editObjects", false)) {
              return;
            }
            _this.currentObj = $(this).closest(".luckysheet-postil-show-main");
            _this.currentWinW = $("#luckysheet-cell-main")[0].scrollWidth;
            _this.currentWinH = $("#luckysheet-cell-main")[0].scrollHeight;
            _this.resize = $(this).data("type");
            let scrollTop = $("#luckysheet-cell-main").scrollTop(), scrollLeft = $("#luckysheet-cell-main").scrollLeft();
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let x = mouse[0] + scrollLeft;
            let y = mouse[1] + scrollTop;
            let position = _this.currentObj.position();
            let width = _this.currentObj.width();
            let height = _this.currentObj.height();
            _this.resizeXY = [
              x,
              y,
              width,
              height,
              position.left + scrollLeft,
              position.top + scrollTop,
              scrollLeft,
              scrollTop
            ];
            setluckysheet_scroll_status(true);
            if ($(this).closest(".luckysheet-postil-show").hasClass("luckysheet-postil-show-active")) {
              event2.stopPropagation();
              return;
            }
            _this.removeActivePs();
            $(this).closest(".luckysheet-postil-show").addClass("luckysheet-postil-show-active");
            $(this).closest(".luckysheet-postil-show").find(".luckysheet-postil-dialog-resize").show();
            $(this).closest(".luckysheet-postil-show").find(".arrowCanvas").css("z-index", 200);
            $(this).closest(".luckysheet-postil-show").find(".luckysheet-postil-show-main").css("z-index", 200);
            event2.stopPropagation();
          });
          $("#luckysheet-postil-showBoxs").off("mousedown.move").on("mousedown.move", ".luckysheet-postil-show .luckysheet-postil-dialog-move .luckysheet-postil-dialog-move-item", function(event2) {
            if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "editObjects", false)) {
              return;
            }
            _this.currentObj = $(this).closest(".luckysheet-postil-show-main");
            _this.currentWinW = $("#luckysheet-cell-main")[0].scrollWidth;
            _this.currentWinH = $("#luckysheet-cell-main")[0].scrollHeight;
            _this.move = true;
            let scrollTop = $("#luckysheet-cell-main").scrollTop(), scrollLeft = $("#luckysheet-cell-main").scrollLeft();
            let offset = _this.currentObj.offset();
            let position = _this.currentObj.position();
            _this.moveXY = [
              event2.pageX - offset.left,
              event2.pageY - offset.top,
              position.left,
              position.top,
              scrollLeft,
              scrollTop
            ];
            setluckysheet_scroll_status(true);
            if ($(this).closest(".luckysheet-postil-show").hasClass("luckysheet-postil-show-active")) {
              event2.stopPropagation();
              return;
            }
            _this.removeActivePs();
            $(this).closest(".luckysheet-postil-show").addClass("luckysheet-postil-show-active");
            $(this).closest(".luckysheet-postil-show").find(".luckysheet-postil-dialog-resize").show();
            $(this).closest(".luckysheet-postil-show").find(".arrowCanvas").css("z-index", 200);
            $(this).closest(".luckysheet-postil-show").find(".luckysheet-postil-show-main").css("z-index", 200);
            event2.stopPropagation();
          });
        },
        overshow: function(event2) {
          let _this = this;
          $("#luckysheet-postil-overshow").remove();
          if ($(event2.target).closest("#luckysheet-cell-main").length == 0) {
            return;
          }
          let mouse = mouseposition(event2.pageX, event2.pageY);
          let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
          let scrollTop = $("#luckysheet-cell-main").scrollTop();
          let x = mouse[0];
          let y = mouse[1];
          let offsetX = 0;
          let offsetY = 0;
          if (freezen_default.freezenverticaldata != null && mouse[0] < freezen_default.freezenverticaldata[0] - freezen_default.freezenverticaldata[2]) {
            offsetX = scrollLeft;
          } else {
            x += scrollLeft;
          }
          if (freezen_default.freezenhorizontaldata != null && mouse[1] < freezen_default.freezenhorizontaldata[0] - freezen_default.freezenhorizontaldata[2]) {
            offsetY = scrollTop;
          } else {
            y += scrollTop;
          }
          let row_index = rowLocation(y)[2];
          let col_index = colLocation(x)[2];
          let margeset = menuButton_default.mergeborer(store_default.flowdata, row_index, col_index);
          if (!!margeset) {
            row_index = margeset.row[2];
            col_index = margeset.column[2];
          }
          if (store_default.flowdata[row_index] == null || store_default.flowdata[row_index][col_index] == null || store_default.flowdata[row_index][col_index].ps == null) {
            return;
          }
          let postil = store_default.flowdata[row_index][col_index].ps;
          if (postil["isshow"] || $("#luckysheet-postil-show_" + row_index + "_" + col_index).length > 0) {
            return;
          }
          let value = postil["value"] == null ? "" : postil["value"];
          let row = store_default.visibledatarow[row_index], row_pre = row_index - 1 == -1 ? 0 : store_default.visibledatarow[row_index - 1];
          let col = store_default.visibledatacolumn[col_index], col_pre = col_index - 1 == -1 ? 0 : store_default.visibledatacolumn[col_index - 1];
          if (!!margeset) {
            row = margeset.row[1];
            row_pre = margeset.row[0];
            col = margeset.column[1];
            col_pre = margeset.column[0];
          }
          let toX = col + offsetX;
          let toY = row_pre + offsetY;
          let fromX = toX + 18 * store_default.zoomRatio;
          let fromY = toY - 18 * store_default.zoomRatio;
          if (fromY < 0) {
            fromY = 2;
          }
          let width = postil["width"] == null ? _this.defaultWidth * store_default.zoomRatio : postil["width"] * store_default.zoomRatio;
          let height = postil["height"] == null ? _this.defaultHeight * store_default.zoomRatio : postil["height"] * store_default.zoomRatio;
          let size = _this.getArrowCanvasSize(fromX, fromY, toX, toY);
          let commentDivs = "";
          let valueLines = value.split("\n");
          for (let line of valueLines) {
            commentDivs += "<div>" + _this.htmlEscape(line) + "</div>";
          }
          let html = '<div id="luckysheet-postil-overshow"><canvas class="arrowCanvas" width="' + size[2] + '" height="' + size[3] + '" style="position:absolute;left:' + size[0] + "px;top:" + size[1] + 'px;z-index:100;pointer-events:none;"></canvas><div style="width:' + (width - 12) + "px;min-height:" + (height - 12) + "px;color:#000;padding:5px;border:1px solid #000;background-color:rgb(255,255,225);position:absolute;left:" + fromX + "px;top:" + fromY + 'px;z-index:100;">' + commentDivs + "</div></div>";
          $(html).appendTo($("#luckysheet-cell-main"));
          let ctx = $("#luckysheet-postil-overshow .arrowCanvas").get(0).getContext("2d");
          _this.drawArrow(ctx, size[4], size[5], size[6], size[7]);
        },
        getArrowCanvasSize: function(fromX, fromY, toX, toY) {
          let left = toX - 5;
          if (fromX < toX) {
            left = fromX - 5;
          }
          let top = toY - 5;
          if (fromY < toY) {
            top = fromY - 5;
          }
          let width = Math.abs(fromX - toX) + 10;
          let height = Math.abs(fromY - toY) + 10;
          let x1 = width - 5;
          let x2 = 5;
          if (fromX < toX) {
            x1 = 5;
            x2 = width - 5;
          }
          let y1 = height - 5;
          let y2 = 5;
          if (fromY < toY) {
            y1 = 5;
            y2 = height - 5;
          }
          return [left, top, width, height, x1, y1, x2, y2];
        },
        drawArrow: function(ctx, fromX, fromY, toX, toY, theta, headlen, width, color) {
          theta = getObjType(theta) == "undefined" ? 30 : theta;
          headlen = getObjType(headlen) == "undefined" ? 6 : headlen;
          width = getObjType(width) == "undefined" ? 1 : width;
          color = getObjType(color) == "undefined" ? "#000" : color;
          let angle = Math.atan2(fromY - toY, fromX - toX) * 180 / Math.PI, angle1 = (angle + theta) * Math.PI / 180, angle2 = (angle - theta) * Math.PI / 180, topX = headlen * Math.cos(angle1), topY = headlen * Math.sin(angle1), botX = headlen * Math.cos(angle2), botY = headlen * Math.sin(angle2);
          ctx.save();
          ctx.beginPath();
          let arrowX = fromX - topX, arrowY = fromY - topY;
          ctx.moveTo(arrowX, arrowY);
          ctx.moveTo(fromX, fromY);
          ctx.lineTo(toX, toY);
          ctx.lineWidth = width;
          ctx.strokeStyle = color;
          ctx.stroke();
          arrowX = toX + topX;
          arrowY = toY + topY;
          ctx.moveTo(arrowX, arrowY);
          ctx.lineTo(toX, toY);
          arrowX = toX + botX;
          arrowY = toY + botY;
          ctx.lineTo(arrowX, arrowY);
          ctx.fillStyle = color;
          ctx.fill();
          ctx.restore();
        },
        buildAllPs: function(data) {
          let _this = this;
          $("#luckysheet-cell-main #luckysheet-postil-showBoxs").empty();
          for (let r2 = 0; r2 < data.length; r2++) {
            for (let c2 = 0; c2 < data[0].length; c2++) {
              if (data[r2][c2] != null && data[r2][c2].ps != null) {
                let postil = data[r2][c2].ps;
                _this.buildPs(r2, c2, postil);
              }
            }
          }
          _this.init();
        },
        buildPs: function(r2, c2, postil) {
          if ($("#luckysheet-postil-show_" + r2 + "_" + c2).length > 0) {
            $("#luckysheet-postil-show_" + r2 + "_" + c2).remove();
          }
          if (postil == null) {
            return;
          }
          let _this = this;
          let isshow = postil["isshow"] == null ? false : postil["isshow"];
          if (isshow) {
            let row = store_default.visibledatarow[r2], row_pre = r2 - 1 == -1 ? 0 : store_default.visibledatarow[r2 - 1];
            let col = store_default.visibledatacolumn[c2], col_pre = c2 - 1 == -1 ? 0 : store_default.visibledatacolumn[c2 - 1];
            let margeset = menuButton_default.mergeborer(store_default.flowdata, r2, c2);
            if (!!margeset) {
              row = margeset.row[1];
              row_pre = margeset.row[0];
              col = margeset.column[1];
              col_pre = margeset.column[0];
            }
            let toX = col;
            let toY = row_pre;
            let left = postil["left"] == null ? toX + 18 * store_default.zoomRatio : postil["left"] * store_default.zoomRatio;
            let top = postil["top"] == null ? toY - 18 * store_default.zoomRatio : postil["top"] * store_default.zoomRatio;
            let width = postil["width"] == null ? _this.defaultWidth * store_default.zoomRatio : postil["width"] * store_default.zoomRatio;
            let height = postil["height"] == null ? _this.defaultHeight * store_default.zoomRatio : postil["height"] * store_default.zoomRatio;
            let value = postil["value"] == null ? "" : postil["value"];
            if (top < 0) {
              top = 2;
            }
            let size = _this.getArrowCanvasSize(left, top, toX, toY);
            let commentDivs = "";
            let valueLines = value.split("\n");
            for (let line of valueLines) {
              commentDivs += "<div>" + _this.htmlEscape(line) + "</div>";
            }
            let html = '<div id="luckysheet-postil-show_' + r2 + "_" + c2 + '" class="luckysheet-postil-show"><canvas class="arrowCanvas" width="' + size[2] + '" height="' + size[3] + '" style="position:absolute;left:' + size[0] + "px;top:" + size[1] + 'px;z-index:100;pointer-events:none;"></canvas><div class="luckysheet-postil-show-main" style="width:' + width + "px;height:" + height + "px;color:#000;padding:5px;border:1px solid #000;background-color:rgb(255,255,225);position:absolute;left:" + left + "px;top:" + top + 'px;box-sizing:border-box;z-index:100;"><div class="luckysheet-postil-dialog-move"><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-t" data-type="t"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-r" data-type="r"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-b" data-type="b"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-l" data-type="l"></div></div><div class="luckysheet-postil-dialog-resize" style="display:none;"><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lt" data-type="lt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-mt" data-type="mt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lm" data-type="lm"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rm" data-type="rm"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rt" data-type="rt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lb" data-type="lb"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-mb" data-type="mb"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rb" data-type="rb"></div></div><div style="width:100%;height:100%;overflow:hidden;"><div class="formulaInputFocus" style="width:' + (width - 12) + "px;height:" + (height - 12) + 'px;line-height:20px;box-sizing:border-box;text-align: center;;word-break:break-all;" spellcheck="false" contenteditable="true">' + commentDivs + "</div></div></div></div>";
            $(html).appendTo($("#luckysheet-cell-main #luckysheet-postil-showBoxs"));
            let ctx = $("#luckysheet-postil-show_" + r2 + "_" + c2 + " .arrowCanvas").get(0).getContext("2d");
            _this.drawArrow(ctx, size[4], size[5], size[6], size[7]);
          }
        },
        newPs: function(r2, c2) {
          if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "editObjects")) {
            return;
          }
          if (!method_default.createHookFunction("commentInsertBefore", r2, c2)) {
            return;
          }
          let _this = this;
          let row = store_default.visibledatarow[r2], row_pre = r2 - 1 == -1 ? 0 : store_default.visibledatarow[r2 - 1];
          let col = store_default.visibledatacolumn[c2], col_pre = c2 - 1 == -1 ? 0 : store_default.visibledatacolumn[c2 - 1];
          let margeset = menuButton_default.mergeborer(store_default.flowdata, r2, c2);
          if (!!margeset) {
            row = margeset.row[1];
            row_pre = margeset.row[0];
            col = margeset.column[1];
            col_pre = margeset.column[0];
          }
          let toX = col;
          let toY = row_pre;
          let fromX = toX + 18 * store_default.zoomRatio;
          let fromY = toY - 18 * store_default.zoomRatio;
          if (fromY < 0) {
            fromY = 2;
          }
          let width = _this.defaultWidth * store_default.zoomRatio;
          let height = _this.defaultHeight * store_default.zoomRatio;
          let size = _this.getArrowCanvasSize(fromX, fromY, toX, toY);
          let html = '<div id="luckysheet-postil-show_' + r2 + "_" + c2 + '" class="luckysheet-postil-show luckysheet-postil-show-active"><canvas class="arrowCanvas" width="' + size[2] + '" height="' + size[3] + '" style="position:absolute;left:' + size[0] + "px;top:" + size[1] + 'px;z-index:100;pointer-events:none;"></canvas><div class="luckysheet-postil-show-main" style="width:' + width + "px;height:" + height + "px;color:#000;padding:5px;border:1px solid #000;background-color:rgb(255,255,225);position:absolute;left:" + fromX + "px;top:" + fromY + 'px;box-sizing:border-box;z-index:100;"><div class="luckysheet-postil-dialog-move"><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-t" data-type="t"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-r" data-type="r"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-b" data-type="b"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-l" data-type="l"></div></div><div class="luckysheet-postil-dialog-resize"><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lt" data-type="lt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-mt" data-type="mt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lm" data-type="lm"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rm" data-type="rm"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rt" data-type="rt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lb" data-type="lb"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-mb" data-type="mb"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rb" data-type="rb"></div></div><div style="width:100%;height:100%;overflow:hidden;"><div class="formulaInputFocus" style="width:132px;height:72px;line-height:20px;box-sizing:border-box;text-align: center;word-break:break-all;" spellcheck="false" contenteditable="true"></div></div></div></div>';
          $(html).appendTo($("#luckysheet-cell-main #luckysheet-postil-showBoxs"));
          let ctx = $("#luckysheet-postil-show_" + r2 + "_" + c2 + " .arrowCanvas").get(0).getContext("2d");
          _this.drawArrow(ctx, size[4], size[5], size[6], size[7]);
          $("#luckysheet-postil-show_" + r2 + "_" + c2 + " .formulaInputFocus").focus();
          _this.init();
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          let rc = [];
          if (d[r2][c2] == null) {
            d[r2][c2] = {};
          }
          d[r2][c2].ps = {"left": null, "top": null, "width": null, "height": null, "value": "", "isshow": false};
          rc.push(r2 + "_" + c2);
          _this.ref(d, rc);
          setTimeout(() => {
            method_default.createHookFunction("commentInsertAfter", r2, c2, d[r2][c2]);
          }, 0);
        },
        editPs: function(r2, c2) {
          let _this = this;
          if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "editObjects")) {
            return;
          }
          if ($("#luckysheet-postil-show_" + r2 + "_" + c2).length > 0) {
            $("#luckysheet-postil-show_" + r2 + "_" + c2).show();
            $("#luckysheet-postil-show_" + r2 + "_" + c2).addClass("luckysheet-postil-show-active");
            $("#luckysheet-postil-show_" + r2 + "_" + c2).find(".luckysheet-postil-dialog-resize").show();
          } else {
            let postil = store_default.flowdata[r2][c2].ps;
            let row = store_default.visibledatarow[r2], row_pre = r2 - 1 == -1 ? 0 : store_default.visibledatarow[r2 - 1];
            let col = store_default.visibledatacolumn[c2], col_pre = c2 - 1 == -1 ? 0 : store_default.visibledatacolumn[c2 - 1];
            let margeset = menuButton_default.mergeborer(store_default.flowdata, r2, c2);
            if (!!margeset) {
              row = margeset.row[1];
              row_pre = margeset.row[0];
              col = margeset.column[1];
              col_pre = margeset.column[0];
            }
            let toX = col;
            let toY = row_pre;
            let left = postil["left"] == null ? toX + 18 * store_default.zoomRatio : postil["left"] * store_default.zoomRatio;
            let top = postil["top"] == null ? toY - 18 * store_default.zoomRatio : postil["top"] * store_default.zoomRatio;
            let width = postil["width"] == null ? _this.defaultWidth * store_default.zoomRatio : postil["width"] * store_default.zoomRatio;
            let height = postil["height"] == null ? _this.defaultHeight * store_default.zoomRatio : postil["height"] * store_default.zoomRatio;
            let value = postil["value"] == null ? "" : postil["value"];
            if (top < 0) {
              top = 2;
            }
            let size = _this.getArrowCanvasSize(left, top, toX, toY);
            let commentDivs = "";
            let valueLines = value.split("\n");
            for (let line of valueLines) {
              commentDivs += "<div>" + _this.htmlEscape(line) + "</div>";
            }
            let html = '<div id="luckysheet-postil-show_' + r2 + "_" + c2 + '" class="luckysheet-postil-show luckysheet-postil-show-active"><canvas class="arrowCanvas" width="' + size[2] + '" height="' + size[3] + '" style="position:absolute;left:' + size[0] + "px;top:" + size[1] + 'px;z-index:100;pointer-events:none;"></canvas><div class="luckysheet-postil-show-main" style="width:' + width + "px;height:" + height + "px;color:#000;padding:5px;border:1px solid #000;background-color:rgb(255,255,225);position:absolute;left:" + left + "px;top:" + top + 'px;box-sizing:border-box;z-index:100;"><div class="luckysheet-postil-dialog-move"><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-t" data-type="t"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-r" data-type="r"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-b" data-type="b"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-l" data-type="l"></div></div><div class="luckysheet-postil-dialog-resize"><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lt" data-type="lt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-mt" data-type="mt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lm" data-type="lm"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rm" data-type="rm"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rt" data-type="rt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lb" data-type="lb"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-mb" data-type="mb"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rb" data-type="rb"></div></div><div style="width:100%;height:100%;overflow:hidden;"><div class="formulaInputFocus" style="width:' + (width - 12) + "px;height:" + (height - 12) + 'px;line-height:20px;box-sizing:border-box;text-align: center;;word-break:break-all;" spellcheck="false" contenteditable="true">' + commentDivs + "</div></div></div></div>";
            $(html).appendTo($("#luckysheet-cell-main #luckysheet-postil-showBoxs"));
            let ctx = $("#luckysheet-postil-show_" + r2 + "_" + c2 + " .arrowCanvas").get(0).getContext("2d");
            _this.drawArrow(ctx, size[4], size[5], size[6], size[7]);
          }
          $("#luckysheet-postil-show_" + r2 + "_" + c2 + " .formulaInputFocus").focus();
          luckysheetRangeLast($("#luckysheet-postil-show_" + r2 + "_" + c2 + " .formulaInputFocus").get(0));
          _this.init();
        },
        delPs: function(r2, c2) {
          if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "editObjects")) {
            return;
          }
          if (!method_default.createHookFunction("commentDeleteBefore", r2, c2, store_default.flowdata[r2][c2])) {
            return;
          }
          if ($("#luckysheet-postil-show_" + r2 + "_" + c2).length > 0) {
            $("#luckysheet-postil-show_" + r2 + "_" + c2).remove();
          }
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          let rc = [];
          delete d[r2][c2].ps;
          rc.push(r2 + "_" + c2);
          this.ref(d, rc);
          setTimeout(() => {
            method_default.createHookFunction("commentDeleteAfter", r2, c2, store_default.flowdata[r2][c2]);
          }, 0);
        },
        showHidePs: function(r2, c2) {
          let _this = this;
          let postil = store_default.flowdata[r2][c2].ps;
          let isshow = postil["isshow"];
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          let rc = [];
          if (isshow) {
            d[r2][c2].ps.isshow = false;
            $("#luckysheet-postil-show_" + r2 + "_" + c2).remove();
          } else {
            d[r2][c2].ps.isshow = true;
            let row = store_default.visibledatarow[r2], row_pre = r2 - 1 == -1 ? 0 : store_default.visibledatarow[r2 - 1];
            let col = store_default.visibledatacolumn[c2], col_pre = c2 - 1 == -1 ? 0 : store_default.visibledatacolumn[c2 - 1];
            let margeset = menuButton_default.mergeborer(store_default.flowdata, r2, c2);
            if (!!margeset) {
              row = margeset.row[1];
              row_pre = margeset.row[0];
              col = margeset.column[1];
              col_pre = margeset.column[0];
            }
            let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
            let scrollTop = $("#luckysheet-cell-main").scrollTop();
            let toX = col;
            let toY = row_pre;
            if (freezen_default.freezenverticaldata != null && toX < freezen_default.freezenverticaldata[0] - freezen_default.freezenverticaldata[2]) {
              toX += scrollLeft;
            }
            if (freezen_default.freezenhorizontaldata != null && toY < freezen_default.freezenhorizontaldata[0] - freezen_default.freezenhorizontaldata[2]) {
              toY += scrollTop;
            }
            let left = postil["left"] == null ? toX + 18 * store_default.zoomRatio : postil["left"] * store_default.zoomRatio;
            let top = postil["top"] == null ? toY - 18 * store_default.zoomRatio : postil["top"] * store_default.zoomRatio;
            let width = postil["width"] == null ? _this.defaultWidth * store_default.zoomRatio : postil["width"] * store_default.zoomRatio;
            let height = postil["height"] == null ? _this.defaultHeight * store_default.zoomRatio : postil["height"] * store_default.zoomRatio;
            let value = postil["value"] == null ? "" : postil["value"];
            if (top < 0) {
              top = 2;
            }
            let size = _this.getArrowCanvasSize(left, top, toX, toY);
            let commentDivs = "";
            let valueLines = value.split("\n");
            for (let line of valueLines) {
              commentDivs += "<div>" + _this.htmlEscape(line) + "</div>";
            }
            let html = '<div id="luckysheet-postil-show_' + r2 + "_" + c2 + '" class="luckysheet-postil-show"><canvas class="arrowCanvas" width="' + size[2] + '" height="' + size[3] + '" style="position:absolute;left:' + size[0] + "px;top:" + size[1] + 'px;z-index:100;pointer-events:none;"></canvas><div class="luckysheet-postil-show-main" style="width:' + width + "px;height:" + height + "px;color:#000;padding:5px;border:1px solid #000;background-color:rgb(255,255,225);position:absolute;left:" + left + "px;top:" + top + 'px;box-sizing:border-box;z-index:100;"><div class="luckysheet-postil-dialog-move"><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-t" data-type="t"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-r" data-type="r"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-b" data-type="b"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-l" data-type="l"></div></div><div class="luckysheet-postil-dialog-resize" style="display:none;"><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lt" data-type="lt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-mt" data-type="mt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lm" data-type="lm"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rm" data-type="rm"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rt" data-type="rt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lb" data-type="lb"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-mb" data-type="mb"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rb" data-type="rb"></div></div><div style="width:100%;height:100%;overflow:hidden;"><div class="formulaInputFocus" style="width:' + (width - 12) + "px;height:" + (height - 12) + 'px;line-height:20px;box-sizing:border-box;text-align: center;;word-break:break-all;" spellcheck="false" contenteditable="true">' + commentDivs + "</div></div></div></div>";
            $(html).appendTo($("#luckysheet-cell-main #luckysheet-postil-showBoxs"));
            let ctx = $("#luckysheet-postil-show_" + r2 + "_" + c2 + " .arrowCanvas").get(0).getContext("2d");
            _this.drawArrow(ctx, size[4], size[5], size[6], size[7]);
            _this.init();
          }
          rc.push(r2 + "_" + c2);
          _this.ref(d, rc);
        },
        showHideAllPs: function() {
          let _this = this;
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          let isAllShow = true;
          let allPs = [];
          for (let r2 = 0; r2 < d.length; r2++) {
            for (let c2 = 0; c2 < d[0].length; c2++) {
              if (d[r2] != null && d[r2][c2] != null && d[r2][c2].ps != null) {
                allPs.push(r2 + "_" + c2);
                if (!d[r2][c2].ps.isshow) {
                  isAllShow = false;
                }
              }
            }
          }
          let rc = [];
          if (allPs.length > 0) {
            if (isAllShow) {
              $("#luckysheet-cell-main #luckysheet-postil-showBoxs").empty();
              for (let i2 = 0; i2 < allPs.length; i2++) {
                let rowIndex = allPs[i2].split("_")[0];
                let colIndex = allPs[i2].split("_")[1];
                let postil = d[rowIndex][colIndex].ps;
                if (postil["isshow"]) {
                  d[rowIndex][colIndex].ps.isshow = false;
                  rc.push(allPs[i2]);
                }
              }
            } else {
              for (let i2 = 0; i2 < allPs.length; i2++) {
                let rowIndex = allPs[i2].split("_")[0];
                let colIndex = allPs[i2].split("_")[1];
                let postil = d[rowIndex][colIndex].ps;
                if (!postil["isshow"]) {
                  let row = store_default.visibledatarow[rowIndex], row_pre = rowIndex - 1 == -1 ? 0 : store_default.visibledatarow[rowIndex - 1];
                  let col = store_default.visibledatacolumn[colIndex], col_pre = colIndex - 1 == -1 ? 0 : store_default.visibledatacolumn[colIndex - 1];
                  let margeset = menuButton_default.mergeborer(store_default.flowdata, rowIndex, colIndex);
                  if (!!margeset) {
                    row = margeset.row[1];
                    row_pre = margeset.row[0];
                    col = margeset.column[1];
                    col_pre = margeset.column[0];
                  }
                  let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
                  let scrollTop = $("#luckysheet-cell-main").scrollTop();
                  let toX = col;
                  let toY = row_pre;
                  if (freezen_default.freezenverticaldata != null && toX < freezen_default.freezenverticaldata[0] - freezen_default.freezenverticaldata[2]) {
                    toX += scrollLeft;
                  }
                  if (freezen_default.freezenhorizontaldata != null && toY < freezen_default.freezenhorizontaldata[0] - freezen_default.freezenhorizontaldata[2]) {
                    toY += scrollTop;
                  }
                  let left = postil["left"] == null ? toX + 18 * store_default.zoomRatio : postil["left"] * store_default.zoomRatio;
                  let top = postil["top"] == null ? toY - 18 * store_default.zoomRatio : postil["top"] * store_default.zoomRatio;
                  let width = postil["width"] == null ? _this.defaultWidth * store_default.zoomRatio : postil["width"] * store_default.zoomRatio;
                  let height = postil["height"] == null ? _this.defaultHeight * store_default.zoomRatio : postil["height"] * store_default.zoomRatio;
                  let value = postil["value"] == null ? "" : postil["value"];
                  if (top < 0) {
                    top = 2;
                  }
                  let size = _this.getArrowCanvasSize(left, top, toX, toY);
                  let commentDivs = "";
                  let valueLines = value.split("\n");
                  for (let line of valueLines) {
                    commentDivs += "<div>" + _this.htmlEscape(line) + "</div>";
                  }
                  let html = '<div id="luckysheet-postil-show_' + rowIndex + "_" + colIndex + '" class="luckysheet-postil-show"><canvas class="arrowCanvas" width="' + size[2] + '" height="' + size[3] + '" style="position:absolute;left:' + size[0] + "px;top:" + size[1] + 'px;z-index:100;pointer-events:none;"></canvas><div class="luckysheet-postil-show-main" style="width:' + width + "px;height:" + height + "px;color:#000;padding:5px;border:1px solid #000;background-color:rgb(255,255,225);position:absolute;left:" + left + "px;top:" + top + 'px;box-sizing:border-box;z-index:100;"><div class="luckysheet-postil-dialog-move"><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-t" data-type="t"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-r" data-type="r"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-b" data-type="b"></div><div class="luckysheet-postil-dialog-move-item luckysheet-postil-dialog-move-item-l" data-type="l"></div></div><div class="luckysheet-postil-dialog-resize" style="display:none;"><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lt" data-type="lt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-mt" data-type="mt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lm" data-type="lm"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rm" data-type="rm"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rt" data-type="rt"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-lb" data-type="lb"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-mb" data-type="mb"></div><div class="luckysheet-postil-dialog-resize-item luckysheet-postil-dialog-resize-item-rb" data-type="rb"></div></div><div style="width:100%;height:100%;overflow:hidden;"><div class="formulaInputFocus" style="width:' + (width - 12) + "px;height:" + (height - 12) + 'px;line-height:20px;box-sizing:border-box;text-align: center;;word-break:break-all;" spellcheck="false" contenteditable="true">' + commentDivs + "</div></div></div></div>";
                  $(html).appendTo($("#luckysheet-cell-main #luckysheet-postil-showBoxs"));
                  let ctx = $("#luckysheet-postil-show_" + rowIndex + "_" + colIndex + " .arrowCanvas").get(0).getContext("2d");
                  _this.drawArrow(ctx, size[4], size[5], size[6], size[7]);
                  d[rowIndex][colIndex].ps.isshow = true;
                  rc.push(allPs[i2]);
                }
              }
            }
          }
          _this.ref(d, rc);
          _this.init();
        },
        removeActivePs: function() {
          if ($("#luckysheet-postil-showBoxs .luckysheet-postil-show-active").length > 0) {
            let id = $("#luckysheet-postil-showBoxs .luckysheet-postil-show-active").attr("id");
            let r2 = id.split("luckysheet-postil-show_")[1].split("_")[0];
            let c2 = id.split("luckysheet-postil-show_")[1].split("_")[1];
            let value = $("#" + id).find(".formulaInputFocus").html().replaceAll("<div>", "\n").replaceAll(/<(.*)>.*?|<(.*) \/>/g, "").trim();
            if (!method_default.createHookFunction("commentUpdateBefore", r2, c2, value)) {
              if (!store_default.flowdata[r2][c2].ps.isshow) {
                $("#" + id).remove();
              }
              return;
            }
            const previousCell = $.extend(true, {}, store_default.flowdata[r2][c2]);
            $("#" + id).removeClass("luckysheet-postil-show-active");
            $("#" + id).find(".luckysheet-postil-dialog-resize").hide();
            $("#" + id).find(".arrowCanvas").css("z-index", 100);
            $("#" + id).find(".luckysheet-postil-show-main").css("z-index", 100);
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let rc = [];
            d[r2][c2].ps.value = value;
            rc.push(r2 + "_" + c2);
            this.ref(d, rc);
            if (!d[r2][c2].ps.isshow) {
              $("#" + id).remove();
            }
            setTimeout(() => {
              method_default.createHookFunction("commentUpdateAfter", r2, c2, previousCell, d[r2][c2]);
            }, 0);
          }
        },
        ref: function(data, rc) {
          if (store_default.clearjfundo) {
            store_default.jfundo.length = 0;
            store_default.jfredo.push({
              "type": "postil",
              "data": store_default.flowdata,
              "curdata": data,
              "sheetIndex": store_default.currentSheetIndex,
              "rc": rc
            });
          }
          store_default.flowdata = data;
          editor_default.webWorkerFlowDataCache(store_default.flowdata);
          store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].data = store_default.flowdata;
          if (server_default.allowUpdate) {
            for (let i2 = 0; i2 < rc.length; i2++) {
              let r2 = rc[i2].split("_")[0];
              let c2 = rc[i2].split("_")[1];
              server_default.saveParam("v", store_default.currentSheetIndex, store_default.flowdata[r2][c2], {"r": r2, "c": c2});
            }
          }
          setTimeout(function() {
            luckysheetrefreshgrid();
          }, 1);
        },
        positionSync: function() {
          let _this = this;
          $("#luckysheet-postil-showBoxs .luckysheet-postil-show").each(function(i2, e) {
            let id = $(e).attr("id");
            let r2 = id.split("luckysheet-postil-show_")[1].split("_")[0];
            let c2 = id.split("luckysheet-postil-show_")[1].split("_")[1];
            let cell = store_default.flowdata[r2][c2];
            if (cell != null && cell.ps != null) {
              _this.buildPs(r2, c2, cell.ps);
            } else {
              $("#" + id).hide();
            }
          });
        },
        htmlEscape: function(text) {
          return text.replace(/[<>"&]/g, function(match, pos, originalText) {
            console.log(match, pos, originalText);
            switch (match) {
              case "<": {
                return "&lt";
              }
              case ">": {
                return "&gt";
              }
              case "&": {
                return "&amp";
              }
              case '"': {
                return "&quot;";
              }
            }
          });
        }
      };
      postil_default = luckysheetPostil;
    }
  });

  // src/global/border.js
  function getBorderInfoComputeRange(dataset_row_st, dataset_row_ed, dataset_col_st, dataset_col_ed, sheetIndex) {
    let borderInfoCompute = {};
    let cfg, data;
    if (sheetIndex == null) {
      cfg = store_default.config;
      data = store_default.flowdata;
    } else {
      cfg = store_default.luckysheetfile[getSheetIndex(sheetIndex)].config;
      data = store_default.luckysheetfile[getSheetIndex(sheetIndex)].data;
    }
    let borderInfo = cfg["borderInfo"];
    if (borderInfo != null && borderInfo.length > 0) {
      for (let i2 = 0; i2 < borderInfo.length; i2++) {
        let rangeType = borderInfo[i2].rangeType;
        if (rangeType == "range") {
          let borderType = borderInfo[i2].borderType;
          let borderColor = borderInfo[i2].color;
          let borderStyle = borderInfo[i2].style;
          let borderRange = borderInfo[i2].range;
          for (let j = 0; j < borderRange.length; j++) {
            let bd_r1 = borderRange[j].row[0], bd_r2 = borderRange[j].row[1];
            let bd_c1 = borderRange[j].column[0], bd_c2 = borderRange[j].column[1];
            if (bd_r1 < dataset_row_st) {
              bd_r1 = dataset_row_st;
            }
            if (bd_r2 > dataset_row_ed) {
              bd_r2 = dataset_row_ed;
            }
            if (bd_c1 < dataset_col_st) {
              bd_c1 = dataset_col_st;
            }
            if (bd_c2 > dataset_col_ed) {
              bd_c2 = dataset_col_ed;
            }
            if (borderType == "border-left") {
              for (let bd_r = bd_r1; bd_r <= bd_r2; bd_r++) {
                if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {
                  continue;
                }
                if (borderInfoCompute[bd_r + "_" + bd_c1] == null) {
                  borderInfoCompute[bd_r + "_" + bd_c1] = {};
                }
                borderInfoCompute[bd_r + "_" + bd_c1].l = {"color": borderColor, "style": borderStyle};
                let bd_c_left = bd_c1 - 1;
                if (bd_c_left >= 0 && borderInfoCompute[bd_r + "_" + bd_c_left]) {
                  if (data[bd_r] != null && getObjType(data[bd_r][bd_c_left]) == "object" && data[bd_r][bd_c_left].mc != null) {
                    let cell_left = data[bd_r][bd_c_left];
                    let mc2 = cfg["merge"][cell_left.mc.r + "_" + cell_left.mc.c];
                    if (mc2.c + mc2.cs - 1 == bd_c_left) {
                      borderInfoCompute[bd_r + "_" + bd_c_left].r = {"color": borderColor, "style": borderStyle};
                    }
                  } else {
                    borderInfoCompute[bd_r + "_" + bd_c_left].r = {"color": borderColor, "style": borderStyle};
                  }
                }
                let mc = cfg["merge"] || {};
                for (const key in mc) {
                  let {c: c2, r: r2, cs, rs} = mc[key];
                  if (bd_c1 <= c2 + cs - 1 && bd_c1 > c2 && bd_r >= r2 && bd_r <= r2 + rs - 1) {
                    borderInfoCompute[bd_r + "_" + bd_c1].l = null;
                  }
                }
              }
            } else if (borderType == "border-right") {
              for (let bd_r = bd_r1; bd_r <= bd_r2; bd_r++) {
                if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {
                  continue;
                }
                if (borderInfoCompute[bd_r + "_" + bd_c2] == null) {
                  borderInfoCompute[bd_r + "_" + bd_c2] = {};
                }
                borderInfoCompute[bd_r + "_" + bd_c2].r = {"color": borderColor, "style": borderStyle};
                let bd_c_right = bd_c2 + 1;
                if (bd_c_right < data[0].length && borderInfoCompute[bd_r + "_" + bd_c_right]) {
                  if (data[bd_r] != null && getObjType(data[bd_r][bd_c_right]) == "object" && data[bd_r][bd_c_right].mc != null) {
                    let cell_right = data[bd_r][bd_c_right];
                    let mc2 = cfg["merge"][cell_right.mc.r + "_" + cell_right.mc.c];
                    if (mc2.c == bd_c_right) {
                      borderInfoCompute[bd_r + "_" + bd_c_right].l = {"color": borderColor, "style": borderStyle};
                    }
                  } else {
                    borderInfoCompute[bd_r + "_" + bd_c_right].l = {"color": borderColor, "style": borderStyle};
                  }
                }
                let mc = cfg["merge"] || {};
                for (const key in mc) {
                  let {c: c2, r: r2, cs, rs} = mc[key];
                  if (bd_c2 < c2 + cs - 1 && bd_c2 >= c2 && bd_r >= r2 && bd_r <= r2 + rs - 1) {
                    borderInfoCompute[bd_r + "_" + bd_c2].r = null;
                  }
                }
              }
            } else if (borderType == "border-top") {
              if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r1] != null) {
                continue;
              }
              for (let bd_c = bd_c1; bd_c <= bd_c2; bd_c++) {
                if (borderInfoCompute[bd_r1 + "_" + bd_c] == null) {
                  borderInfoCompute[bd_r1 + "_" + bd_c] = {};
                }
                borderInfoCompute[bd_r1 + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                let bd_r_top = bd_r1 - 1;
                if (bd_r_top >= 0 && borderInfoCompute[bd_r_top + "_" + bd_c]) {
                  if (data[bd_r_top] != null && getObjType(data[bd_r_top][bd_c]) == "object" && data[bd_r_top][bd_c].mc != null) {
                    let cell_top = data[bd_r_top][bd_c];
                    let mc2 = cfg["merge"][cell_top.mc.r + "_" + cell_top.mc.c];
                    if (mc2.r + mc2.rs - 1 == bd_r_top) {
                      borderInfoCompute[bd_r_top + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                    }
                  } else {
                    borderInfoCompute[bd_r_top + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                  }
                }
                let mc = cfg["merge"] || {};
                for (const key in mc) {
                  let {c: c2, r: r2, cs, rs} = mc[key];
                  if (bd_r1 <= r2 + rs - 1 && bd_r1 > r2 && bd_c >= c2 && bd_c <= c2 + cs - 1) {
                    borderInfoCompute[bd_r1 + "_" + bd_c].t = null;
                  }
                }
              }
            } else if (borderType == "border-bottom") {
              if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r2] != null) {
                continue;
              }
              for (let bd_c = bd_c1; bd_c <= bd_c2; bd_c++) {
                if (borderInfoCompute[bd_r2 + "_" + bd_c] == null) {
                  borderInfoCompute[bd_r2 + "_" + bd_c] = {};
                }
                borderInfoCompute[bd_r2 + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                let bd_r_bottom = bd_r2 + 1;
                if (bd_r_bottom < data.length && borderInfoCompute[bd_r_bottom + "_" + bd_c]) {
                  if (data[bd_r_bottom] != null && getObjType(data[bd_r_bottom][bd_c]) == "object" && data[bd_r_bottom][bd_c].mc != null) {
                    let cell_bottom = data[bd_r_bottom][bd_c];
                    let mc2 = cfg["merge"][cell_bottom.mc.r + "_" + cell_bottom.mc.c];
                    if (mc2.r == bd_r_bottom) {
                      borderInfoCompute[bd_r_bottom + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                    }
                  } else {
                    borderInfoCompute[bd_r_bottom + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                  }
                }
                let mc = cfg["merge"] || {};
                for (const key in mc) {
                  let {c: c2, r: r2, cs, rs} = mc[key];
                  if (bd_r2 < r2 + rs - 1 && bd_r2 >= r2 && bd_c >= c2 && bd_c <= c2 + cs - 1) {
                    borderInfoCompute[bd_r2 + "_" + bd_c].b = null;
                  }
                }
              }
            } else if (borderType == "border-all") {
              for (let bd_r = bd_r1; bd_r <= bd_r2; bd_r++) {
                if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {
                  continue;
                }
                for (let bd_c = bd_c1; bd_c <= bd_c2; bd_c++) {
                  if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                    let cell = data[bd_r][bd_c];
                    let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c];
                    if (mc.r == bd_r) {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                    }
                    if (mc.r + mc.rs - 1 == bd_r) {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                    }
                    if (mc.c == bd_c) {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                    }
                    if (mc.c + mc.cs - 1 == bd_c) {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                    }
                  } else {
                    if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                      borderInfoCompute[bd_r + "_" + bd_c] = {};
                    }
                    borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                    borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                    borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                    borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                  }
                  if (bd_r == bd_r1) {
                    let bd_r_top = bd_r1 - 1;
                    if (bd_r_top >= 0 && borderInfoCompute[bd_r_top + "_" + bd_c]) {
                      if (data[bd_r_top] != null && getObjType(data[bd_r_top][bd_c]) == "object" && data[bd_r_top][bd_c].mc != null) {
                        let cell_top = data[bd_r_top][bd_c];
                        let mc = cfg["merge"][cell_top.mc.r + "_" + cell_top.mc.c];
                        if (mc.r + mc.rs - 1 == bd_r_top) {
                          borderInfoCompute[bd_r_top + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                        }
                      } else {
                        borderInfoCompute[bd_r_top + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                      }
                    }
                  }
                  if (bd_r == bd_r2) {
                    let bd_r_bottom = bd_r2 + 1;
                    if (bd_r_bottom < data.length && borderInfoCompute[bd_r_bottom + "_" + bd_c]) {
                      if (data[bd_r_bottom] != null && getObjType(data[bd_r_bottom][bd_c]) == "object" && data[bd_r_bottom][bd_c].mc != null) {
                        let cell_bottom = data[bd_r_bottom][bd_c];
                        let mc = cfg["merge"][cell_bottom.mc.r + "_" + cell_bottom.mc.c];
                        if (mc.r == bd_r_bottom) {
                          borderInfoCompute[bd_r_bottom + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                        }
                      } else {
                        borderInfoCompute[bd_r_bottom + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                      }
                    }
                  }
                  if (bd_c == bd_c1) {
                    let bd_c_left = bd_c1 - 1;
                    if (bd_c_left >= 0 && borderInfoCompute[bd_r + "_" + bd_c_left]) {
                      if (data[bd_r] != null && getObjType(data[bd_r][bd_c_left]) == "object" && data[bd_r][bd_c_left].mc != null) {
                        let cell_left = data[bd_r][bd_c_left];
                        let mc = cfg["merge"][cell_left.mc.r + "_" + cell_left.mc.c];
                        if (mc.c + mc.cs - 1 == bd_c_left) {
                          borderInfoCompute[bd_r + "_" + bd_c_left].r = {"color": borderColor, "style": borderStyle};
                        }
                      } else {
                        borderInfoCompute[bd_r + "_" + bd_c_left].r = {"color": borderColor, "style": borderStyle};
                      }
                    }
                  }
                  if (bd_c == bd_c2) {
                    let bd_c_right = bd_c2 + 1;
                    if (bd_c_right < data[0].length && borderInfoCompute[bd_r + "_" + bd_c_right]) {
                      if (data[bd_r] != null && getObjType(data[bd_r][bd_c_right]) == "object" && data[bd_r][bd_c_right].mc != null) {
                        let cell_right = data[bd_r][bd_c_right];
                        let mc = cfg["merge"][cell_right.mc.r + "_" + cell_right.mc.c];
                        if (mc.c == bd_c_right) {
                          borderInfoCompute[bd_r + "_" + bd_c_right].l = {"color": borderColor, "style": borderStyle};
                        }
                      } else {
                        borderInfoCompute[bd_r + "_" + bd_c_right].l = {"color": borderColor, "style": borderStyle};
                      }
                    }
                  }
                }
              }
            } else if (borderType == "border-outside") {
              for (let bd_r = bd_r1; bd_r <= bd_r2; bd_r++) {
                if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {
                  continue;
                }
                for (let bd_c = bd_c1; bd_c <= bd_c2; bd_c++) {
                  if (!(bd_r == bd_r1 || bd_r == bd_r2 || bd_c == bd_c1 || bd_c == bd_c2)) {
                    continue;
                  }
                  if (bd_r == bd_r1) {
                    if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                      borderInfoCompute[bd_r + "_" + bd_c] = {};
                    }
                    borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                    let bd_r_top = bd_r1 - 1;
                    if (bd_r_top >= 0 && borderInfoCompute[bd_r_top + "_" + bd_c]) {
                      if (data[bd_r_top] != null && getObjType(data[bd_r_top][bd_c]) == "object" && data[bd_r_top][bd_c].mc != null) {
                        let cell_top = data[bd_r_top][bd_c];
                        let mc = cfg["merge"][cell_top.mc.r + "_" + cell_top.mc.c];
                        if (mc.r + mc.rs - 1 == bd_r_top) {
                          borderInfoCompute[bd_r_top + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                        }
                      } else {
                        borderInfoCompute[bd_r_top + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                      }
                    }
                  }
                  if (bd_r == bd_r2) {
                    if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                      borderInfoCompute[bd_r + "_" + bd_c] = {};
                    }
                    borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                    let bd_r_bottom = bd_r2 + 1;
                    if (bd_r_bottom < data.length && borderInfoCompute[bd_r_bottom + "_" + bd_c]) {
                      if (data[bd_r_bottom] != null && getObjType(data[bd_r_bottom][bd_c]) == "object" && data[bd_r_bottom][bd_c].mc != null) {
                        let cell_bottom = data[bd_r_bottom][bd_c];
                        let mc = cfg["merge"][cell_bottom.mc.r + "_" + cell_bottom.mc.c];
                        if (mc.r == bd_r_bottom) {
                          borderInfoCompute[bd_r_bottom + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                        }
                      } else {
                        borderInfoCompute[bd_r_bottom + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                      }
                    }
                  }
                  if (bd_c == bd_c1) {
                    if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                      borderInfoCompute[bd_r + "_" + bd_c] = {};
                    }
                    borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                    let bd_c_left = bd_c1 - 1;
                    if (bd_c_left >= 0 && borderInfoCompute[bd_r + "_" + bd_c_left]) {
                      if (data[bd_r] != null && getObjType(data[bd_r][bd_c_left]) == "object" && data[bd_r][bd_c_left].mc != null) {
                        let cell_left = data[bd_r][bd_c_left];
                        let mc = cfg["merge"][cell_left.mc.r + "_" + cell_left.mc.c];
                        if (mc.c + mc.cs - 1 == bd_c_left) {
                          borderInfoCompute[bd_r + "_" + bd_c_left].r = {"color": borderColor, "style": borderStyle};
                        }
                      } else {
                        borderInfoCompute[bd_r + "_" + bd_c_left].r = {"color": borderColor, "style": borderStyle};
                      }
                    }
                  }
                  if (bd_c == bd_c2) {
                    if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                      borderInfoCompute[bd_r + "_" + bd_c] = {};
                    }
                    borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                    let bd_c_right = bd_c2 + 1;
                    if (bd_c_right < data[0].length && borderInfoCompute[bd_r + "_" + bd_c_right]) {
                      if (data[bd_r] != null && getObjType(data[bd_r][bd_c_right]) == "object" && data[bd_r][bd_c_right].mc != null) {
                        let cell_right = data[bd_r][bd_c_right];
                        let mc = cfg["merge"][cell_right.mc.r + "_" + cell_right.mc.c];
                        if (mc.c == bd_c_right) {
                          borderInfoCompute[bd_r + "_" + bd_c_right].l = {"color": borderColor, "style": borderStyle};
                        }
                      } else {
                        borderInfoCompute[bd_r + "_" + bd_c_right].l = {"color": borderColor, "style": borderStyle};
                      }
                    }
                  }
                }
              }
            } else if (borderType == "border-inside") {
              for (let bd_r = bd_r1; bd_r <= bd_r2; bd_r++) {
                if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {
                  continue;
                }
                for (let bd_c = bd_c1; bd_c <= bd_c2; bd_c++) {
                  if (bd_r == bd_r1 && bd_c == bd_c1) {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                    }
                  } else if (bd_r == bd_r2 && bd_c == bd_c1) {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                    }
                  } else if (bd_r == bd_r1 && bd_c == bd_c2) {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                    }
                  } else if (bd_r == bd_r2 && bd_c == bd_c2) {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                    }
                  } else if (bd_r == bd_r1) {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                      let cell = data[bd_r][bd_c];
                      let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c];
                      if (mc.c == bd_c) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                      } else if (mc.c + mc.cs - 1 == bd_c) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                      }
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                    }
                  } else if (bd_r == bd_r2) {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                      let cell = data[bd_r][bd_c];
                      let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c];
                      if (mc.c == bd_c) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                      } else if (mc.c + mc.cs - 1 == bd_c) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                      }
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                    }
                  } else if (bd_c == bd_c1) {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                      let cell = data[bd_r][bd_c];
                      let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c];
                      if (mc.r == bd_r) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                      } else if (mc.r + mc.rs - 1 == bd_r) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                      }
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                    }
                  } else if (bd_c == bd_c2) {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                      let cell = data[bd_r][bd_c];
                      let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c];
                      if (mc.r == bd_r) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                      } else if (mc.r + mc.rs - 1 == bd_r) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                      }
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                    }
                  } else {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                      let cell = data[bd_r][bd_c];
                      let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c];
                      if (mc.r == bd_r) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                      } else if (mc.r + mc.rs - 1 == bd_r) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                      }
                      if (mc.c == bd_c) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                      } else if (mc.c + mc.cs - 1 == bd_c) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                      }
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                    }
                  }
                }
              }
            } else if (borderType == "border-horizontal") {
              for (let bd_r = bd_r1; bd_r <= bd_r2; bd_r++) {
                if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {
                  continue;
                }
                for (let bd_c = bd_c1; bd_c <= bd_c2; bd_c++) {
                  if (bd_r == bd_r1) {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                    }
                  } else if (bd_r == bd_r2) {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                    }
                  } else {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                      let cell = data[bd_r][bd_c];
                      let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c];
                      if (mc.r == bd_r) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                      } else if (mc.r + mc.rs - 1 == bd_r) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                      }
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].t = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].b = {"color": borderColor, "style": borderStyle};
                    }
                  }
                }
              }
            } else if (borderType == "border-vertical") {
              for (let bd_r = bd_r1; bd_r <= bd_r2; bd_r++) {
                if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {
                  continue;
                }
                for (let bd_c = bd_c1; bd_c <= bd_c2; bd_c++) {
                  if (bd_c == bd_c1) {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                    }
                  } else if (bd_c == bd_c2) {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                    }
                  } else {
                    if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
                      let cell = data[bd_r][bd_c];
                      let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c] || {};
                      if (mc.c == bd_c) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                      } else if (mc.c + mc.cs - 1 == bd_c) {
                        if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                          borderInfoCompute[bd_r + "_" + bd_c] = {};
                        }
                        borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                      }
                    } else {
                      if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
                        borderInfoCompute[bd_r + "_" + bd_c] = {};
                      }
                      borderInfoCompute[bd_r + "_" + bd_c].l = {"color": borderColor, "style": borderStyle};
                      borderInfoCompute[bd_r + "_" + bd_c].r = {"color": borderColor, "style": borderStyle};
                    }
                  }
                }
              }
            } else if (borderType == "border-none") {
              for (let bd_r = bd_r1; bd_r <= bd_r2; bd_r++) {
                if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {
                  continue;
                }
                for (let bd_c = bd_c1; bd_c <= bd_c2; bd_c++) {
                  if (borderInfoCompute[bd_r + "_" + bd_c] != null) {
                    delete borderInfoCompute[bd_r + "_" + bd_c];
                  }
                  if (bd_r == bd_r1) {
                    let bd_r_top = bd_r1 - 1;
                    if (bd_r_top >= 0 && borderInfoCompute[bd_r_top + "_" + bd_c]) {
                      delete borderInfoCompute[bd_r_top + "_" + bd_c].b;
                    }
                  }
                  if (bd_r == bd_r2) {
                    let bd_r_bottom = bd_r2 + 1;
                    if (bd_r_bottom < data.length && borderInfoCompute[bd_r_bottom + "_" + bd_c]) {
                      delete borderInfoCompute[bd_r_bottom + "_" + bd_c].t;
                    }
                  }
                  if (bd_c == bd_c1) {
                    let bd_c_left = bd_c1 - 1;
                    if (bd_c_left >= 0 && borderInfoCompute[bd_r + "_" + bd_c_left]) {
                      delete borderInfoCompute[bd_r + "_" + bd_c_left].r;
                    }
                  }
                  if (bd_c == bd_c2) {
                    let bd_c_right = bd_c2 + 1;
                    if (bd_c_right < data[0].length && borderInfoCompute[bd_r + "_" + bd_c_right]) {
                      delete borderInfoCompute[bd_r + "_" + bd_c_right].l;
                    }
                  }
                }
              }
            }
          }
        } else if (rangeType == "cell") {
          let value = borderInfo[i2].value;
          let bd_r = value.row_index, bd_c = value.col_index;
          if (bd_r < dataset_row_st || bd_r > dataset_row_ed || bd_c < dataset_col_st || bd_c > dataset_col_ed) {
            continue;
          }
          if (cfg["rowhidden"] != null && cfg["rowhidden"][bd_r] != null) {
            continue;
          }
          if (value.l != null || value.r != null || value.t != null || value.b != null) {
            if (borderInfoCompute[bd_r + "_" + bd_c] == null) {
              borderInfoCompute[bd_r + "_" + bd_c] = {};
            }
            if (data[bd_r] != null && getObjType(data[bd_r][bd_c]) == "object" && data[bd_r][bd_c].mc != null) {
              let cell = data[bd_r][bd_c];
              let mc = cfg["merge"][cell.mc.r + "_" + cell.mc.c] || {};
              if (value.l != null && bd_c == mc.c) {
                borderInfoCompute[bd_r + "_" + bd_c].l = {"color": value.l.color, "style": value.l.style};
                let bd_c_left = bd_c - 1;
                if (bd_c_left >= 0 && borderInfoCompute[bd_r + "_" + bd_c_left]) {
                  if (data[bd_r] != null && getObjType(data[bd_r][bd_c_left]) == "object" && data[bd_r][bd_c_left].mc != null) {
                    let cell_left = data[bd_r][bd_c_left];
                    let mc_l = cfg["merge"][cell_left.mc.r + "_" + cell_left.mc.c];
                    if (mc_l.c + mc_l.cs - 1 == bd_c_left) {
                      borderInfoCompute[bd_r + "_" + bd_c_left].r = {"color": value.l.color, "style": value.l.style};
                    }
                  } else {
                    borderInfoCompute[bd_r + "_" + bd_c_left].r = {"color": value.l.color, "style": value.l.style};
                  }
                }
              } else {
                borderInfoCompute[bd_r + "_" + bd_c].l = null;
              }
              if (value.r != null && bd_c == mc.c + mc.cs - 1) {
                borderInfoCompute[bd_r + "_" + bd_c].r = {"color": value.r.color, "style": value.r.style};
                let bd_c_right = bd_c + 1;
                if (bd_c_right < data[0].length && borderInfoCompute[bd_r + "_" + bd_c_right]) {
                  if (data[bd_r] != null && getObjType(data[bd_r][bd_c_right]) == "object" && data[bd_r][bd_c_right].mc != null) {
                    let cell_right = data[bd_r][bd_c_right];
                    let mc_r = cfg["merge"][cell_right.mc.r + "_" + cell_right.mc.c];
                    if (mc_r.c == bd_c_right) {
                      borderInfoCompute[bd_r + "_" + bd_c_right].l = {"color": value.r.color, "style": value.r.style};
                    }
                  } else {
                    borderInfoCompute[bd_r + "_" + bd_c_right].l = {"color": value.r.color, "style": value.r.style};
                  }
                }
              } else {
                borderInfoCompute[bd_r + "_" + bd_c].r = null;
              }
              if (value.t != null && bd_r == mc.r) {
                borderInfoCompute[bd_r + "_" + bd_c].t = {"color": value.t.color, "style": value.t.style};
                let bd_r_top = bd_r - 1;
                if (bd_r_top >= 0 && borderInfoCompute[bd_r_top + "_" + bd_c]) {
                  if (data[bd_r_top] != null && getObjType(data[bd_r_top][bd_c]) == "object" && data[bd_r_top][bd_c].mc != null) {
                    let cell_top = data[bd_r_top][bd_c];
                    let mc_t = cfg["merge"][cell_top.mc.r + "_" + cell_top.mc.c];
                    if (mc_t.r + mc_t.rs - 1 == bd_r_top) {
                      borderInfoCompute[bd_r_top + "_" + bd_c].b = {"color": value.t.color, "style": value.t.style};
                    }
                  } else {
                    borderInfoCompute[bd_r_top + "_" + bd_c].b = {"color": value.t.color, "style": value.t.style};
                  }
                }
              } else {
                borderInfoCompute[bd_r + "_" + bd_c].t = null;
              }
              if (value.b != null && bd_r == mc.r + mc.rs - 1) {
                borderInfoCompute[bd_r + "_" + bd_c].b = {"color": value.b.color, "style": value.b.style};
                let bd_r_bottom = bd_r + 1;
                if (bd_r_bottom < data.length && borderInfoCompute[bd_r_bottom + "_" + bd_c]) {
                  if (data[bd_r_bottom] != null && getObjType(data[bd_r_bottom][bd_c]) == "object" && data[bd_r_bottom][bd_c].mc != null) {
                    let cell_bottom = data[bd_r_bottom][bd_c];
                    let mc_b = cfg["merge"][cell_bottom.mc.r + "_" + cell_bottom.mc.c];
                    if (mc_b.r == bd_r_bottom) {
                      borderInfoCompute[bd_r_bottom + "_" + bd_c].t = {"color": value.b.color, "style": value.b.style};
                    }
                  } else {
                    borderInfoCompute[bd_r_bottom + "_" + bd_c].t = {"color": value.b.color, "style": value.b.style};
                  }
                }
              } else {
                borderInfoCompute[bd_r + "_" + bd_c].b = null;
              }
            } else {
              if (value.l != null) {
                borderInfoCompute[bd_r + "_" + bd_c].l = {"color": value.l.color, "style": value.l.style};
                let bd_c_left = bd_c - 1;
                if (bd_c_left >= 0 && borderInfoCompute[bd_r + "_" + bd_c_left]) {
                  if (data[bd_r] != null && getObjType(data[bd_r][bd_c_left]) == "object" && data[bd_r][bd_c_left].mc != null) {
                    let cell_left = data[bd_r][bd_c_left];
                    let mc_l = cfg["merge"][cell_left.mc.r + "_" + cell_left.mc.c];
                    if (mc_l.c + mc_l.cs - 1 == bd_c_left) {
                      borderInfoCompute[bd_r + "_" + bd_c_left].r = {"color": value.l.color, "style": value.l.style};
                    }
                  } else {
                    borderInfoCompute[bd_r + "_" + bd_c_left].r = {"color": value.l.color, "style": value.l.style};
                  }
                }
              } else {
                borderInfoCompute[bd_r + "_" + bd_c].l = null;
              }
              if (value.r != null) {
                borderInfoCompute[bd_r + "_" + bd_c].r = {"color": value.r.color, "style": value.r.style};
                let bd_c_right = bd_c + 1;
                if (bd_c_right < data[0].length && borderInfoCompute[bd_r + "_" + bd_c_right]) {
                  if (data[bd_r] != null && getObjType(data[bd_r][bd_c_right]) == "object" && data[bd_r][bd_c_right].mc != null) {
                    let cell_right = data[bd_r][bd_c_right];
                    let mc_r = cfg["merge"][cell_right.mc.r + "_" + cell_right.mc.c];
                    if (mc_r.c == bd_c_right) {
                      borderInfoCompute[bd_r + "_" + bd_c_right].l = {"color": value.r.color, "style": value.r.style};
                    }
                  } else {
                    borderInfoCompute[bd_r + "_" + bd_c_right].l = {"color": value.r.color, "style": value.r.style};
                  }
                }
              } else {
                borderInfoCompute[bd_r + "_" + bd_c].r = null;
              }
              if (value.t != null) {
                borderInfoCompute[bd_r + "_" + bd_c].t = {"color": value.t.color, "style": value.t.style};
                let bd_r_top = bd_r - 1;
                if (bd_r_top >= 0 && borderInfoCompute[bd_r_top + "_" + bd_c]) {
                  if (data[bd_r_top] != null && getObjType(data[bd_r_top][bd_c]) == "object" && data[bd_r_top][bd_c].mc != null) {
                    let cell_top = data[bd_r_top][bd_c];
                    let mc_t = cfg["merge"][cell_top.mc.r + "_" + cell_top.mc.c];
                    if (mc_t.r + mc_t.rs - 1 == bd_r_top) {
                      borderInfoCompute[bd_r_top + "_" + bd_c].b = {"color": value.t.color, "style": value.t.style};
                    }
                  } else {
                    borderInfoCompute[bd_r_top + "_" + bd_c].b = {"color": value.t.color, "style": value.t.style};
                  }
                }
              } else {
                borderInfoCompute[bd_r + "_" + bd_c].t = null;
              }
              if (value.b != null) {
                borderInfoCompute[bd_r + "_" + bd_c].b = {"color": value.b.color, "style": value.b.style};
                let bd_r_bottom = bd_r + 1;
                if (bd_r_bottom < data.length && borderInfoCompute[bd_r_bottom + "_" + bd_c]) {
                  if (data[bd_r_bottom] != null && getObjType(data[bd_r_bottom][bd_c]) == "object" && data[bd_r_bottom][bd_c].mc != null) {
                    let cell_bottom = data[bd_r_bottom][bd_c];
                    let mc_b = cfg["merge"][cell_bottom.mc.r + "_" + cell_bottom.mc.c];
                    if (mc_b.r == bd_r_bottom) {
                      borderInfoCompute[bd_r_bottom + "_" + bd_c].t = {"color": value.b.color, "style": value.b.style};
                    }
                  } else {
                    borderInfoCompute[bd_r_bottom + "_" + bd_c].t = {"color": value.b.color, "style": value.b.style};
                  }
                }
              } else {
                borderInfoCompute[bd_r + "_" + bd_c].b = null;
              }
            }
          } else {
            delete borderInfoCompute[bd_r + "_" + bd_c];
          }
        }
      }
    }
    return borderInfoCompute;
  }
  function getBorderInfoCompute(sheetIndex) {
    let borderInfoCompute = {};
    let cfg, data;
    if (sheetIndex == null) {
      cfg = store_default.config;
      data = store_default.flowdata;
    } else {
      cfg = store_default.luckysheetfile[getSheetIndex(sheetIndex)].config;
      data = store_default.luckysheetfile[getSheetIndex(sheetIndex)].data;
    }
    borderInfoCompute = getBorderInfoComputeRange(0, data.length, 0, data[0].length, sheetIndex);
    return borderInfoCompute;
  }
  var init_border = __esm({
    "src/global/border.js"() {
      init_get();
      init_util();
      init_store();
    }
  });

  // src/controllers/dropCell.js
  var import_dayjs2, luckysheetDropCell, dropCell_default;
  var init_dropCell = __esm({
    "src/controllers/dropCell.js"() {
      init_location();
      init_count();
      init_border();
      init_validate();
      init_format();
      init_refresh();
      init_editor();
      init_formula();
      init_conditionformat();
      init_protection();
      init_select();
      init_get();
      init_util();
      init_store();
      init_locale();
      import_dayjs2 = __toModule(require_dayjs_min());
      luckysheetDropCell = {
        iconHtml: '<div id="luckysheet-dropCell-icon" style="position: absolute;padding: 2px;background-color: #f1f1f1;z-index: 990;cursor: pointer;"><div id="icon_dropCell"></div></div>',
        typeListHtml: '<div id="luckysheet-dropCell-typeList" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-type="0"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel" style="padding: 3px 2px;"><span style="margin-right:5px;width:13px;display:inline-block;" class="icon luckysheet-mousedown-cancel"></span>${copyCell}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-type="1"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel" style="padding: 3px 2px;"><span style="margin-right:5px;width:13px;display:inline-block;" class="icon luckysheet-mousedown-cancel"></span>${sequence}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-type="2"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel" style="padding: 3px 2px;"><span style="margin-right:5px;width:13px;display:inline-block;" class="icon luckysheet-mousedown-cancel"></span>${onlyFormat}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-type="3"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel" style="padding: 3px 2px;"><span style="margin-right:5px;width:13px;display:inline-block;" class="icon luckysheet-mousedown-cancel"></span>${noFormat}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-type="4"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel" style="padding: 3px 2px;"><span style="margin-right:5px;width:13px;display:inline-block;" class="icon luckysheet-mousedown-cancel"></span>${day}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-type="5"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel" style="padding: 3px 2px;"><span style="margin-right:5px;width:13px;display:inline-block;" class="icon luckysheet-mousedown-cancel"></span>${workDay}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-type="6"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel" style="padding: 3px 2px;"><span style="margin-right:5px;width:13px;display:inline-block;" class="icon luckysheet-mousedown-cancel"></span>${month}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-type="7"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel" style="padding: 3px 2px;"><span style="margin-right:5px;width:13px;display:inline-block;" class="icon luckysheet-mousedown-cancel"></span>${year}</div></div><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" data-type="8"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel" style="padding: 3px 2px;"><span style="margin-right:5px;width:13px;display:inline-block;" class="icon luckysheet-mousedown-cancel"></span>${chineseNumber}</div></div></div>',
        copyRange: {},
        applyRange: {},
        applyType: null,
        direction: null,
        chnNumChar: {"\u96F6": 0, "\u4E00": 1, "\u4E8C": 2, "\u4E09": 3, "\u56DB": 4, "\u4E94": 5, "\u516D": 6, "\u4E03": 7, "\u516B": 8, "\u4E5D": 9},
        chnNameValue: {
          "\u5341": {value: 10, secUnit: false},
          "\u767E": {value: 100, secUnit: false},
          "\u5343": {value: 1e3, secUnit: false},
          "\u4E07": {value: 1e4, secUnit: true},
          "\u4EBF": {value: 1e8, secUnit: true}
        },
        ChineseToNumber: function(chnStr) {
          let _this = this;
          let rtn = 0;
          let section = 0;
          let number = 0;
          let secUnit = false;
          let str = chnStr.split("");
          for (let i2 = 0; i2 < str.length; i2++) {
            let num = _this.chnNumChar[str[i2]];
            if (typeof num != "undefined") {
              number = num;
              if (i2 == str.length - 1) {
                section += number;
              }
            } else {
              let unit = _this.chnNameValue[str[i2]].value;
              secUnit = _this.chnNameValue[str[i2]].secUnit;
              if (secUnit) {
                section = (section + number) * unit;
                rtn += section;
                section = 0;
              } else {
                section += number * unit;
              }
              number = 0;
            }
          }
          return rtn + section;
        },
        chnNumChar2: ["\u96F6", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D", "\u4E03", "\u516B", "\u4E5D"],
        chnUnitSection: ["", "\u4E07", "\u4EBF", "\u4E07\u4EBF", "\u4EBF\u4EBF"],
        chnUnitChar: ["", "\u5341", "\u767E", "\u5343"],
        SectionToChinese: function(section) {
          let _this = this;
          let strIns = "", chnStr = "";
          let unitPos = 0;
          let zero = true;
          while (section > 0) {
            let v = section % 10;
            if (v == 0) {
              if (!zero) {
                zero = true;
                chnStr = _this.chnNumChar2[v] + chnStr;
              }
            } else {
              zero = false;
              strIns = _this.chnNumChar2[v];
              strIns += _this.chnUnitChar[unitPos];
              chnStr = strIns + chnStr;
            }
            unitPos++;
            section = Math.floor(section / 10);
          }
          return chnStr;
        },
        NumberToChinese: function(num) {
          let _this = this;
          let unitPos = 0;
          let strIns = "", chnStr = "";
          let needZero = false;
          if (num == 0) {
            return _this.chnNumChar2[0];
          }
          while (num > 0) {
            let section = num % 1e4;
            if (needZero) {
              chnStr = _this.chnNumChar2[0] + chnStr;
            }
            strIns = _this.SectionToChinese(section);
            strIns += section != 0 ? _this.chnUnitSection[unitPos] : _this.chnUnitSection[0];
            chnStr = strIns + chnStr;
            needZero = section < 1e3 && section > 0;
            num = Math.floor(num / 1e4);
            unitPos++;
          }
          return chnStr;
        },
        isChnNumber: function(txt) {
          let _this = this;
          let isChnNumber = true;
          if (txt.length == 1) {
            if (txt == "\u65E5" || txt in _this.chnNumChar) {
              isChnNumber = true;
            } else {
              isChnNumber = false;
            }
          } else {
            let str = txt.split("");
            for (let i2 = 0; i2 < str.length; i2++) {
              if (!(str[i2] in _this.chnNumChar || str[i2] in _this.chnNameValue)) {
                isChnNumber = false;
                break;
              }
            }
          }
          return isChnNumber;
        },
        isExtendNumber: function(txt) {
          let reg = /0|([1-9]+[0-9]*)/g;
          let isExtendNumber = reg.test(txt);
          if (isExtendNumber) {
            let match = txt.match(reg);
            let matchTxt = match[match.length - 1];
            let matchIndex = txt.lastIndexOf(matchTxt);
            let beforeTxt = txt.substr(0, matchIndex);
            let afterTxt = txt.substr(matchIndex + matchTxt.length);
            return [isExtendNumber, Number(matchTxt), beforeTxt, afterTxt];
          } else {
            return [isExtendNumber];
          }
        },
        isChnWeek1: function(txt) {
          let _this = this;
          let isChnWeek1;
          if (txt.length == 1) {
            if (txt == "\u65E5" || _this.ChineseToNumber(txt) < 7) {
              isChnWeek1 = true;
            } else {
              isChnWeek1 = false;
            }
          } else {
            isChnWeek1 = false;
          }
          return isChnWeek1;
        },
        isChnWeek2: function(txt) {
          let isChnWeek2;
          if (txt.length == 2) {
            if (txt == "\u5468\u4E00" || txt == "\u5468\u4E8C" || txt == "\u5468\u4E09" || txt == "\u5468\u56DB" || txt == "\u5468\u4E94" || txt == "\u5468\u516D" || txt == "\u5468\u65E5") {
              isChnWeek2 = true;
            } else {
              isChnWeek2 = false;
            }
          } else {
            isChnWeek2 = false;
          }
          return isChnWeek2;
        },
        isChnWeek3: function(txt) {
          let isChnWeek3;
          if (txt.length == 3) {
            if (txt == "\u661F\u671F\u4E00" || txt == "\u661F\u671F\u4E8C" || txt == "\u661F\u671F\u4E09" || txt == "\u661F\u671F\u56DB" || txt == "\u661F\u671F\u4E94" || txt == "\u661F\u671F\u516D" || txt == "\u661F\u671F\u65E5") {
              isChnWeek3 = true;
            } else {
              isChnWeek3 = false;
            }
          } else {
            isChnWeek3 = false;
          }
          return isChnWeek3;
        },
        createIcon: function() {
          let _this = this;
          let copy_r = _this.copyRange["row"][1], copy_c = _this.copyRange["column"][1];
          let apply_r = _this.applyRange["row"][1], apply_c = _this.applyRange["column"][1];
          let row_index, col_index;
          if (apply_r >= copy_r && apply_c >= copy_c) {
            row_index = apply_r;
            col_index = apply_c;
          } else {
            row_index = copy_r;
            col_index = copy_c;
          }
          let row = rowLocationByIndex(row_index)[1], row_pre = rowLocationByIndex(row_index)[0];
          let col = colLocationByIndex(col_index)[1], col_pre = colLocationByIndex(col_index)[0];
          $("#luckysheet-dropCell-icon").remove();
          $("#luckysheet-cell-main").append(_this.iconHtml);
          $("#luckysheet-dropCell-icon").css({"left": col, "top": row});
          $("#luckysheet-dropCell-icon").mouseover(function() {
            $(this).css("background-color", "#ffe8e8");
          }).mouseleave(function() {
            $(this).css("background-color", "#f1f1f1");
          }).mousedown(function(event2) {
            $("#luckysheet-dropCell-typeList").remove();
            const _locale = locale_default();
            const locale_dropCell = _locale.dropCell;
            $("body").append(replaceHtml(_this.typeListHtml, {
              copyCell: locale_dropCell.copyCell,
              sequence: locale_dropCell.sequence,
              onlyFormat: locale_dropCell.onlyFormat,
              noFormat: locale_dropCell.noFormat,
              day: locale_dropCell.day,
              workDay: locale_dropCell.workDay,
              month: locale_dropCell.month,
              year: locale_dropCell.year,
              chineseNumber: locale_dropCell.chineseNumber
            }));
            let typeItemHide = _this.typeItemHide();
            if (!typeItemHide[0] && !typeItemHide[1] && !typeItemHide[2] && !typeItemHide[3] && !typeItemHide[4] && !typeItemHide[5] && !typeItemHide[6]) {
              $("#luckysheet-dropCell-typeList .luckysheet-cols-menuitem[data-type=1]").hide();
              $("#luckysheet-dropCell-typeList .luckysheet-cols-menuitem[data-type=4]").hide();
              $("#luckysheet-dropCell-typeList .luckysheet-cols-menuitem[data-type=5]").hide();
              $("#luckysheet-dropCell-typeList .luckysheet-cols-menuitem[data-type=6]").hide();
              $("#luckysheet-dropCell-typeList .luckysheet-cols-menuitem[data-type=7]").hide();
              $("#luckysheet-dropCell-typeList .luckysheet-cols-menuitem[data-type=8]").hide();
            }
            if (!typeItemHide[2]) {
              $("#luckysheet-dropCell-typeList .luckysheet-cols-menuitem[data-type=4]").hide();
              $("#luckysheet-dropCell-typeList .luckysheet-cols-menuitem[data-type=5]").hide();
              $("#luckysheet-dropCell-typeList .luckysheet-cols-menuitem[data-type=6]").hide();
              $("#luckysheet-dropCell-typeList .luckysheet-cols-menuitem[data-type=7]").hide();
            }
            if (!typeItemHide[3]) {
              $("#luckysheet-dropCell-typeList .luckysheet-cols-menuitem[data-type=8]").hide();
            }
            let left = $(this).offset().left;
            let top = $(this).offset().top + 25;
            let winH = $(window).height(), winW = $(window).width();
            let menuW = $("#luckysheet-dropCell-typeList").width(), menuH = $("#luckysheet-dropCell-typeList").height();
            if (left + menuW > winW) {
              left = left - menuW;
            }
            if (top + menuH > winH) {
              top = top - menuH - 38;
            }
            if (top < 0) {
              top = 0;
            }
            $("#luckysheet-dropCell-typeList").css({"left": left, "top": top}).show();
            $("#luckysheet-dropCell-icon").mouseleave(function() {
              $(this).css("backgroundColor", "#ffe8e8");
            });
            let type = _this.applyType;
            $("#luckysheet-dropCell-typeList .luckysheet-cols-menuitem[data-type=" + type + "]").find("span").append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
            event2.stopPropagation();
          });
          $(document).off("click.dCtypeList").on("click.dCtypeList", "#luckysheet-dropCell-typeList .luckysheet-cols-menuitem", function() {
            $("#luckysheet-dropCell-typeList .fa-check").remove();
            $(this).find("span").append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
            let type = $(this).attr("data-type");
            _this.applyType = type;
            _this.update();
            $("#luckysheet-dropCell-typeList").hide();
            $("#luckysheet-dropCell-icon").css("backgroundColor", "#f1f1f1");
            $("#luckysheet-dropCell-icon").mouseleave(function() {
              $(this).css("backgroundColor", "#f1f1f1");
            });
            countfunc();
          });
        },
        typeItemHide: function() {
          let _this = this;
          let copyRange = _this.copyRange;
          let str_r = copyRange["row"][0], end_r = copyRange["row"][1];
          let str_c = copyRange["column"][0], end_c = copyRange["column"][1];
          let hasNumber = false, hasExtendNumber = false, hasDate = false, hasChn = false, hasChnWeek1 = false, hasChnWeek2 = false, hasChnWeek3 = false;
          for (let r2 = str_r; r2 <= end_r; r2++) {
            for (let c2 = str_c; c2 <= end_c; c2++) {
              if (!!store_default.flowdata[r2][c2]) {
                let cell = store_default.flowdata[r2][c2];
                if (getObjType(cell) == "object" && cell["v"] != null && cell["f"] == null) {
                  if (cell["ct"] != null && cell["ct"].t == "n") {
                    hasNumber = true;
                  } else if (cell["ct"] != null && cell["ct"].t == "d") {
                    hasDate = true;
                  } else if (_this.isExtendNumber(cell["m"])[0]) {
                    hasExtendNumber = true;
                  } else if (_this.isChnNumber(cell["m"]) && cell["m"] != "\u65E5") {
                    hasChn = true;
                  } else if (cell["m"] == "\u65E5") {
                    hasChnWeek1 = true;
                  } else if (_this.isChnWeek2(cell["m"])) {
                    hasChnWeek2 = true;
                  } else if (_this.isChnWeek3(cell["m"])) {
                    hasChnWeek3 = true;
                  }
                }
              }
            }
          }
          return [hasNumber, hasExtendNumber, hasDate, hasChn, hasChnWeek1, hasChnWeek2, hasChnWeek3];
        },
        update: function() {
          let _this = this;
          if (!checkProtectionLockedRangeList([_this.applyRange], store_default.currentSheetIndex)) {
            return;
          }
          if (store_default.allowEdit === false) {
            return;
          }
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          let file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
          let cfg = $.extend(true, {}, store_default.config);
          let borderInfoCompute = getBorderInfoCompute();
          let dataVerification = $.extend(true, {}, file["dataVerification"]);
          let direction = _this.direction;
          let type = _this.applyType;
          let copyRange = _this.copyRange;
          let copy_str_r = copyRange["row"][0], copy_end_r = copyRange["row"][1];
          let copy_str_c = copyRange["column"][0], copy_end_c = copyRange["column"][1];
          let copyData = _this.getCopyData(d, copy_str_r, copy_end_r, copy_str_c, copy_end_c, direction);
          let csLen;
          if (direction == "down" || direction == "up") {
            csLen = copy_end_r - copy_str_r + 1;
          } else if (direction == "right" || direction == "left") {
            csLen = copy_end_c - copy_str_c + 1;
          }
          let applyRange = _this.applyRange;
          let apply_str_r = applyRange["row"][0], apply_end_r = applyRange["row"][1];
          let apply_str_c = applyRange["column"][0], apply_end_c = applyRange["column"][1];
          if (direction == "down" || direction == "up") {
            let asLen = apply_end_r - apply_str_r + 1;
            for (let i2 = apply_str_c; i2 <= apply_end_c; i2++) {
              let copyD = copyData[i2 - apply_str_c];
              let applyData = _this.getApplyData(copyD, csLen, asLen);
              if (direction == "down") {
                for (let j = apply_str_r; j <= apply_end_r; j++) {
                  let cell = applyData[j - apply_str_r];
                  if (cell.f != null) {
                    let f = "=" + formula_default.functionCopy(cell.f, "down", j - apply_str_r + 1);
                    let v = formula_default.execfunction(f, j, i2);
                    formula_default.execFunctionGroup(j, i2, v[1], void 0, d);
                    cell.f = v[2];
                    cell.v = v[1];
                    if (cell.spl != null) {
                      cell.spl = v[3].data;
                    } else {
                      if (isRealNum(cell.v) && !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(cell.v)) {
                        if (cell.v == Infinity || cell.v == -Infinity) {
                          cell.m = cell.v.toString();
                        } else {
                          if (cell.v.toString().indexOf("e") > -1) {
                            let len = cell.v.toString().split(".")[1].split("e")[0].length;
                            if (len > 5) {
                              len = 5;
                            }
                            cell.m = cell.v.toExponential(len).toString();
                          } else {
                            let mask;
                            if (cell.ct.fa === "##0.00") {
                              mask = genarate(Math.round(cell.v * 1e9) / 1e9 + ".00");
                              cell.m = mask[0].toString();
                            } else {
                              mask = genarate(Math.round(cell.v * 1e9) / 1e9);
                              cell.m = mask[0].toString();
                            }
                          }
                        }
                        cell.ct = cell.ct || {"fa": "General", "t": "n"};
                      } else {
                        let mask = genarate(cell.v);
                        cell.m = mask[0].toString();
                        cell.ct = mask[1];
                      }
                    }
                  }
                  d[j][i2] = cell;
                  let bd_r = copy_str_r + (j - apply_str_r) % csLen;
                  let bd_c = i2;
                  if (borderInfoCompute[bd_r + "_" + bd_c]) {
                    let bd_obj = {
                      "rangeType": "cell",
                      "value": {
                        "row_index": j,
                        "col_index": i2,
                        "l": borderInfoCompute[bd_r + "_" + bd_c].l,
                        "r": borderInfoCompute[bd_r + "_" + bd_c].r,
                        "t": borderInfoCompute[bd_r + "_" + bd_c].t,
                        "b": borderInfoCompute[bd_r + "_" + bd_c].b
                      }
                    };
                    cfg["borderInfo"].push(bd_obj);
                  } else if (borderInfoCompute[j + "_" + i2]) {
                    let bd_obj = {
                      "rangeType": "cell",
                      "value": {
                        "row_index": j,
                        "col_index": i2,
                        "l": null,
                        "r": null,
                        "t": null,
                        "b": null
                      }
                    };
                    cfg["borderInfo"].push(bd_obj);
                  }
                  if (dataVerification[bd_r + "_" + bd_c]) {
                    dataVerification[j + "_" + i2] = dataVerification[bd_r + "_" + bd_c];
                  }
                }
              }
              if (direction == "up") {
                for (let j = apply_end_r; j >= apply_str_r; j--) {
                  let cell = applyData[apply_end_r - j];
                  if (cell.f != null) {
                    let f = "=" + formula_default.functionCopy(cell.f, "up", apply_end_r - j + 1);
                    let v = formula_default.execfunction(f, j, i2);
                    formula_default.execFunctionGroup(j, i2, v[1], void 0, d);
                    cell.f = v[2];
                    cell.v = v[1];
                    if (cell.spl != null) {
                      cell.spl = v[3].data;
                    } else {
                      if (isRealNum(cell.v) && !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(cell.v)) {
                        if (cell.v == Infinity || cell.v == -Infinity) {
                          cell.m = cell.v.toString();
                        } else {
                          if (cell.v.toString().indexOf("e") > -1) {
                            let len = cell.v.toString().split(".")[1].split("e")[0].length;
                            if (len > 5) {
                              len = 5;
                            }
                            cell.m = cell.v.toExponential(len).toString();
                          } else {
                            let mask = genarate(Math.round(cell.v * 1e9) / 1e9);
                            cell.m = mask[0].toString();
                          }
                        }
                        cell.ct = {"fa": "General", "t": "n"};
                      } else {
                        let mask = genarate(cell.v);
                        cell.m = mask[0].toString();
                        cell.ct = mask[1];
                      }
                    }
                  }
                  d[j][i2] = cell;
                  let bd_r = copy_end_r - (apply_end_r - j) % csLen;
                  let bd_c = i2;
                  if (borderInfoCompute[bd_r + "_" + bd_c]) {
                    let bd_obj = {
                      "rangeType": "cell",
                      "value": {
                        "row_index": j,
                        "col_index": i2,
                        "l": borderInfoCompute[bd_r + "_" + bd_c].l,
                        "r": borderInfoCompute[bd_r + "_" + bd_c].r,
                        "t": borderInfoCompute[bd_r + "_" + bd_c].t,
                        "b": borderInfoCompute[bd_r + "_" + bd_c].b
                      }
                    };
                    cfg["borderInfo"].push(bd_obj);
                  } else if (borderInfoCompute[j + "_" + i2]) {
                    let bd_obj = {
                      "rangeType": "cell",
                      "value": {
                        "row_index": j,
                        "col_index": i2,
                        "l": null,
                        "r": null,
                        "t": null,
                        "b": null
                      }
                    };
                    cfg["borderInfo"].push(bd_obj);
                  }
                  if (dataVerification[bd_r + "_" + bd_c]) {
                    dataVerification[j + "_" + i2] = dataVerification[bd_r + "_" + bd_c];
                  }
                }
              }
            }
          } else if (direction == "right" || direction == "left") {
            let asLen = apply_end_c - apply_str_c + 1;
            for (let i2 = apply_str_r; i2 <= apply_end_r; i2++) {
              let copyD = copyData[i2 - apply_str_r];
              let applyData = _this.getApplyData(copyD, csLen, asLen);
              if (direction == "right") {
                for (let j = apply_str_c; j <= apply_end_c; j++) {
                  let cell = applyData[j - apply_str_c];
                  if (cell.f != null) {
                    let f = "=" + formula_default.functionCopy(cell.f, "right", j - apply_str_c + 1);
                    let v = formula_default.execfunction(f, i2, j);
                    formula_default.execFunctionGroup(i2, j, v[1], void 0, d);
                    cell.f = v[2];
                    cell.v = v[1];
                    if (cell.spl != null) {
                      cell.spl = v[3].data;
                    } else {
                      if (isRealNum(cell.v) && !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(cell.v)) {
                        if (cell.v == Infinity || cell.v == -Infinity) {
                          cell.m = cell.v.toString();
                        } else {
                          if (cell.v.toString().indexOf("e") > -1) {
                            let len = cell.v.toString().split(".")[1].split("e")[0].length;
                            if (len > 5) {
                              len = 5;
                            }
                            cell.m = cell.v.toExponential(len).toString();
                          } else {
                            let mask = genarate(Math.round(cell.v * 1e9) / 1e9);
                            cell.m = mask[0].toString();
                          }
                        }
                        cell.ct = {"fa": "General", "t": "n"};
                      } else {
                        let mask = genarate(cell.v);
                        cell.m = mask[0].toString();
                        cell.ct = mask[1];
                      }
                    }
                  }
                  d[i2][j] = cell;
                  let bd_r = i2;
                  let bd_c = copy_str_c + (j - apply_str_c) % csLen;
                  if (borderInfoCompute[bd_r + "_" + bd_c]) {
                    let bd_obj = {
                      "rangeType": "cell",
                      "value": {
                        "row_index": i2,
                        "col_index": j,
                        "l": borderInfoCompute[bd_r + "_" + bd_c].l,
                        "r": borderInfoCompute[bd_r + "_" + bd_c].r,
                        "t": borderInfoCompute[bd_r + "_" + bd_c].t,
                        "b": borderInfoCompute[bd_r + "_" + bd_c].b
                      }
                    };
                    cfg["borderInfo"].push(bd_obj);
                  } else if (borderInfoCompute[i2 + "_" + j]) {
                    let bd_obj = {
                      "rangeType": "cell",
                      "value": {
                        "row_index": i2,
                        "col_index": j,
                        "l": null,
                        "r": null,
                        "t": null,
                        "b": null
                      }
                    };
                    cfg["borderInfo"].push(bd_obj);
                  }
                  if (dataVerification[bd_r + "_" + bd_c]) {
                    dataVerification[i2 + "_" + j] = dataVerification[bd_r + "_" + bd_c];
                  }
                }
              }
              if (direction == "left") {
                for (let j = apply_end_c; j >= apply_str_c; j--) {
                  let cell = applyData[apply_end_c - j];
                  if (cell.f != null) {
                    let f = "=" + formula_default.functionCopy(cell.f, "left", apply_end_c - j + 1);
                    let v = formula_default.execfunction(f, i2, j);
                    formula_default.execFunctionGroup(i2, j, v[1], void 0, d);
                    cell.f = v[2];
                    cell.v = v[1];
                    if (cell.spl != null) {
                      cell.spl = v[3].data;
                    } else {
                      if (isRealNum(cell.v) && !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(cell.v)) {
                        if (cell.v == Infinity || cell.v == -Infinity) {
                          cell.m = cell.v.toString();
                        } else {
                          if (cell.v.toString().indexOf("e") > -1) {
                            let len = cell.v.toString().split(".")[1].split("e")[0].length;
                            if (len > 5) {
                              len = 5;
                            }
                            cell.m = cell.v.toExponential(len).toString();
                          } else {
                            let mask = genarate(Math.round(cell.v * 1e9) / 1e9);
                            cell.m = mask[0].toString();
                          }
                        }
                        cell.ct = {"fa": "General", "t": "n"};
                      } else {
                        let mask = genarate(cell.v);
                        cell.m = mask[0].toString();
                        cell.ct = mask[1];
                      }
                    }
                  }
                  d[i2][j] = cell;
                  let bd_r = i2;
                  let bd_c = copy_end_c - (apply_end_c - j) % csLen;
                  if (borderInfoCompute[bd_r + "_" + bd_c]) {
                    let bd_obj = {
                      "rangeType": "cell",
                      "value": {
                        "row_index": i2,
                        "col_index": j,
                        "l": borderInfoCompute[bd_r + "_" + bd_c].l,
                        "r": borderInfoCompute[bd_r + "_" + bd_c].r,
                        "t": borderInfoCompute[bd_r + "_" + bd_c].t,
                        "b": borderInfoCompute[bd_r + "_" + bd_c].b
                      }
                    };
                    cfg["borderInfo"].push(bd_obj);
                  } else if (borderInfoCompute[i2 + "_" + j]) {
                    let bd_obj = {
                      "rangeType": "cell",
                      "value": {
                        "row_index": i2,
                        "col_index": j,
                        "l": null,
                        "r": null,
                        "t": null,
                        "b": null
                      }
                    };
                    cfg["borderInfo"].push(bd_obj);
                  }
                  if (dataVerification[bd_r + "_" + bd_c]) {
                    dataVerification[i2 + "_" + j] = dataVerification[bd_r + "_" + bd_c];
                  }
                }
              }
            }
          }
          let cdformat = $.extend(true, [], file["luckysheet_conditionformat_save"]);
          if (cdformat != null && cdformat.length > 0) {
            for (let i2 = 0; i2 < cdformat.length; i2++) {
              let cdformat_cellrange = cdformat[i2].cellrange;
              let emptyRange = [];
              for (let j = 0; j < cdformat_cellrange.length; j++) {
                let range2 = conditionformat_default.CFSplitRange(cdformat_cellrange[j], {"row": copyRange["row"], "column": copyRange["column"]}, {"row": applyRange["row"], "column": applyRange["column"]}, "operatePart");
                if (range2.length > 0) {
                  emptyRange = emptyRange.concat(range2);
                }
              }
              if (emptyRange.length > 0) {
                cdformat[i2].cellrange.push(applyRange);
              }
            }
          }
          let allParam = {
            "cfg": cfg,
            "cdformat": cdformat,
            "dataVerification": dataVerification
          };
          jfrefreshgrid(d, store_default.luckysheet_select_save, allParam);
          selectHightlightShow();
        },
        getCopyData: function(d, r1, r2, c1, c2, direction) {
          let _this = this;
          let copyData = [];
          let a12, a2, b1, b2;
          if (direction == "down" || direction == "up") {
            a12 = c1;
            a2 = c2;
            b1 = r1;
            b2 = r2;
          } else if (direction == "right" || direction == "left") {
            a12 = r1;
            a2 = r2;
            b1 = c1;
            b2 = c2;
          }
          for (let a = a12; a <= a2; a++) {
            let obj = {};
            let arrData = [];
            let arrIndex = [];
            let text = "";
            let extendNumberBeforeStr = null;
            let extendNumberAfterStr = null;
            let isSameStr = true;
            for (let b = b1; b <= b2; b++) {
              let data;
              if (direction == "down" || direction == "up") {
                data = d[b][a];
              } else if (direction == "right" || direction == "left") {
                data = d[a][b];
              }
              let str;
              if (!!data && !!data["v"] && data["f"] == null) {
                if (!!data["ct"] && data["ct"]["t"] == "n") {
                  str = "number";
                  extendNumberBeforeStr = null;
                  extendNumberAfterStr = null;
                } else if (!!data["ct"] && data["ct"]["t"] == "d") {
                  str = "date";
                  extendNumberBeforeStr = null;
                  extendNumberAfterStr = null;
                } else if (_this.isExtendNumber(data["m"])[0]) {
                  str = "extendNumber";
                  let isExtendNumber = _this.isExtendNumber(data["m"]);
                  if (extendNumberBeforeStr == null || extendNumberAfterStr == null) {
                    isSameStr = true;
                    extendNumberBeforeStr = isExtendNumber[2];
                    extendNumberAfterStr = isExtendNumber[3];
                  } else {
                    if (isExtendNumber[2] != extendNumberBeforeStr || isExtendNumber[3] != extendNumberAfterStr) {
                      isSameStr = false;
                      extendNumberBeforeStr = isExtendNumber[2];
                      extendNumberAfterStr = isExtendNumber[3];
                    } else {
                      isSameStr = true;
                    }
                  }
                } else if (_this.isChnNumber(data["m"])) {
                  str = "chnNumber";
                  extendNumberBeforeStr = null;
                  extendNumberAfterStr = null;
                } else if (_this.isChnWeek2(data["m"])) {
                  str = "chnWeek2";
                  extendNumberBeforeStr = null;
                  extendNumberAfterStr = null;
                } else if (_this.isChnWeek3(data["m"])) {
                  str = "chnWeek3";
                  extendNumberBeforeStr = null;
                  extendNumberAfterStr = null;
                } else {
                  str = "other";
                  extendNumberBeforeStr = null;
                  extendNumberAfterStr = null;
                }
              } else {
                str = "other";
                extendNumberBeforeStr = null;
                extendNumberAfterStr = null;
              }
              if (str == "extendNumber") {
                if (b == b1) {
                  if (b1 == b2) {
                    text = str;
                    arrData.push(data);
                    arrIndex.push(b - b1 + 1);
                    obj[text] = [];
                    obj[text].push({"data": arrData, "index": arrIndex});
                  } else {
                    text = str;
                    arrData.push(data);
                    arrIndex.push(b - b1 + 1);
                  }
                } else if (b == b2) {
                  if (text == str && isSameStr) {
                    arrData.push(data);
                    arrIndex.push(b - b1 + 1);
                    if (text in obj) {
                      obj[text].push({"data": arrData, "index": arrIndex});
                    } else {
                      obj[text] = [];
                      obj[text].push({"data": arrData, "index": arrIndex});
                    }
                  } else {
                    if (text in obj) {
                      obj[text].push({"data": arrData, "index": arrIndex});
                    } else {
                      obj[text] = [];
                      obj[text].push({"data": arrData, "index": arrIndex});
                    }
                    text = str;
                    arrData = [];
                    arrData.push(data);
                    arrIndex = [];
                    arrIndex.push(b - b1 + 1);
                    if (text in obj) {
                      obj[text].push({"data": arrData, "index": arrIndex});
                    } else {
                      obj[text] = [];
                      obj[text].push({"data": arrData, "index": arrIndex});
                    }
                  }
                } else {
                  if (text == str && isSameStr) {
                    arrData.push(data);
                    arrIndex.push(b - b1 + 1);
                  } else {
                    if (text in obj) {
                      obj[text].push({"data": arrData, "index": arrIndex});
                    } else {
                      obj[text] = [];
                      obj[text].push({"data": arrData, "index": arrIndex});
                    }
                    text = str;
                    arrData = [];
                    arrData.push(data);
                    arrIndex = [];
                    arrIndex.push(b - b1 + 1);
                  }
                }
              } else {
                if (b == b1) {
                  if (b1 == b2) {
                    text = str;
                    arrData.push(data);
                    arrIndex.push(b - b1 + 1);
                    obj[text] = [];
                    obj[text].push({"data": arrData, "index": arrIndex});
                  } else {
                    text = str;
                    arrData.push(data);
                    arrIndex.push(b - b1 + 1);
                  }
                } else if (b == b2) {
                  if (text == str) {
                    arrData.push(data);
                    arrIndex.push(b - b1 + 1);
                    if (text in obj) {
                      obj[text].push({"data": arrData, "index": arrIndex});
                    } else {
                      obj[text] = [];
                      obj[text].push({"data": arrData, "index": arrIndex});
                    }
                  } else {
                    if (text in obj) {
                      obj[text].push({"data": arrData, "index": arrIndex});
                    } else {
                      obj[text] = [];
                      obj[text].push({"data": arrData, "index": arrIndex});
                    }
                    text = str;
                    arrData = [];
                    arrData.push(data);
                    arrIndex = [];
                    arrIndex.push(b - b1 + 1);
                    if (text in obj) {
                      obj[text].push({"data": arrData, "index": arrIndex});
                    } else {
                      obj[text] = [];
                      obj[text].push({"data": arrData, "index": arrIndex});
                    }
                  }
                } else {
                  if (text == str) {
                    arrData.push(data);
                    arrIndex.push(b - b1 + 1);
                  } else {
                    if (text in obj) {
                      obj[text].push({"data": arrData, "index": arrIndex});
                    } else {
                      obj[text] = [];
                      obj[text].push({"data": arrData, "index": arrIndex});
                    }
                    text = str;
                    arrData = [];
                    arrData.push(data);
                    arrIndex = [];
                    arrIndex.push(b - b1 + 1);
                  }
                }
              }
            }
            copyData.push(obj);
          }
          return copyData;
        },
        getApplyData: function(copyD, csLen, asLen) {
          let _this = this;
          let applyData = [];
          let direction = _this.direction;
          let type = _this.applyType;
          let num = Math.floor(asLen / csLen);
          let rsd = asLen % csLen;
          let copyD_number = copyD["number"];
          let applyD_number = [];
          if (!!copyD_number) {
            for (let i2 = 0; i2 < copyD_number.length; i2++) {
              let s = _this.getLenS(copyD_number[i2]["index"], rsd);
              let len = copyD_number[i2]["index"].length * num + s;
              let arrData;
              if (type == "1" || type == "3") {
                arrData = _this.getDataByType(copyD_number[i2]["data"], len, direction, type, "number");
              } else if (type == "2") {
                arrData = _this.getDataByType(copyD_number[i2]["data"], len, direction, type);
              } else {
                arrData = _this.getDataByType(copyD_number[i2]["data"], len, direction, "0");
              }
              let arrIndex = _this.getDataIndex(csLen, asLen, copyD_number[i2]["index"]);
              applyD_number.push({"data": arrData, "index": arrIndex});
            }
          }
          let copyD_extendNumber = copyD["extendNumber"];
          let applyD_extendNumber = [];
          if (!!copyD_extendNumber) {
            for (let i2 = 0; i2 < copyD_extendNumber.length; i2++) {
              let s = _this.getLenS(copyD_extendNumber[i2]["index"], rsd);
              let len = copyD_extendNumber[i2]["index"].length * num + s;
              let arrData;
              if (type == "1" || type == "3") {
                arrData = _this.getDataByType(copyD_extendNumber[i2]["data"], len, direction, type, "extendNumber");
              } else if (type == "2") {
                arrData = _this.getDataByType(copyD_extendNumber[i2]["data"], len, direction, type);
              } else {
                arrData = _this.getDataByType(copyD_extendNumber[i2]["data"], len, direction, "0");
              }
              let arrIndex = _this.getDataIndex(csLen, asLen, copyD_extendNumber[i2]["index"]);
              applyD_extendNumber.push({"data": arrData, "index": arrIndex});
            }
          }
          let copyD_date = copyD["date"];
          let applyD_date = [];
          if (!!copyD_date) {
            for (let i2 = 0; i2 < copyD_date.length; i2++) {
              let s = _this.getLenS(copyD_date[i2]["index"], rsd);
              let len = copyD_date[i2]["index"].length * num + s;
              let arrData;
              if (type == "1" || type == "3") {
                arrData = _this.getDataByType(copyD_date[i2]["data"], len, direction, type, "date");
              } else if (type == "8") {
                arrData = _this.getDataByType(copyD_date[i2]["data"], len, direction, "0");
              } else {
                arrData = _this.getDataByType(copyD_date[i2]["data"], len, direction, type);
              }
              let arrIndex = _this.getDataIndex(csLen, asLen, copyD_date[i2]["index"]);
              applyD_date.push({"data": arrData, "index": arrIndex});
            }
          }
          let copyD_chnNumber = copyD["chnNumber"];
          let applyD_chnNumber = [];
          if (!!copyD_chnNumber) {
            for (let i2 = 0; i2 < copyD_chnNumber.length; i2++) {
              let s = _this.getLenS(copyD_chnNumber[i2]["index"], rsd);
              let len = copyD_chnNumber[i2]["index"].length * num + s;
              let arrData;
              if (type == "1" || type == "3") {
                arrData = _this.getDataByType(copyD_chnNumber[i2]["data"], len, direction, type, "chnNumber");
              } else if (type == "2" || type == "8") {
                arrData = _this.getDataByType(copyD_chnNumber[i2]["data"], len, direction, type);
              } else {
                arrData = _this.getDataByType(copyD_chnNumber[i2]["data"], len, direction, "0");
              }
              let arrIndex = _this.getDataIndex(csLen, asLen, copyD_chnNumber[i2]["index"]);
              applyD_chnNumber.push({"data": arrData, "index": arrIndex});
            }
          }
          let copyD_chnWeek2 = copyD["chnWeek2"];
          let applyD_chnWeek2 = [];
          if (!!copyD_chnWeek2) {
            for (let i2 = 0; i2 < copyD_chnWeek2.length; i2++) {
              let s = _this.getLenS(copyD_chnWeek2[i2]["index"], rsd);
              let len = copyD_chnWeek2[i2]["index"].length * num + s;
              let arrData;
              if (type == "1" || type == "3") {
                arrData = _this.getDataByType(copyD_chnWeek2[i2]["data"], len, direction, type, "chnWeek2");
              } else if (type == "2") {
                arrData = _this.getDataByType(copyD_chnWeek2[i2]["data"], len, direction, type);
              } else {
                arrData = _this.getDataByType(copyD_chnWeek2[i2]["data"], len, direction, "0");
              }
              let arrIndex = _this.getDataIndex(csLen, asLen, copyD_chnWeek2[i2]["index"]);
              applyD_chnWeek2.push({"data": arrData, "index": arrIndex});
            }
          }
          let copyD_chnWeek3 = copyD["chnWeek3"];
          let applyD_chnWeek3 = [];
          if (!!copyD_chnWeek3) {
            for (let i2 = 0; i2 < copyD_chnWeek3.length; i2++) {
              let s = _this.getLenS(copyD_chnWeek3[i2]["index"], rsd);
              let len = copyD_chnWeek3[i2]["index"].length * num + s;
              let arrData;
              if (type == "1" || type == "3") {
                arrData = _this.getDataByType(copyD_chnWeek3[i2]["data"], len, direction, type, "chnWeek3");
              } else if (type == "2") {
                arrData = _this.getDataByType(copyD_chnWeek3[i2]["data"], len, direction, type);
              } else {
                arrData = _this.getDataByType(copyD_chnWeek3[i2]["data"], len, direction, "0");
              }
              let arrIndex = _this.getDataIndex(csLen, asLen, copyD_chnWeek3[i2]["index"]);
              applyD_chnWeek3.push({"data": arrData, "index": arrIndex});
            }
          }
          let copyD_other = copyD["other"];
          let applyD_other = [];
          if (!!copyD_other) {
            for (let i2 = 0; i2 < copyD_other.length; i2++) {
              let s = _this.getLenS(copyD_other[i2]["index"], rsd);
              let len = copyD_other[i2]["index"].length * num + s;
              let arrData;
              if (type == "2" || type == "3") {
                arrData = _this.getDataByType(copyD_other[i2]["data"], len, direction, type);
              } else {
                arrData = _this.getDataByType(copyD_other[i2]["data"], len, direction, "0");
              }
              let arrIndex = _this.getDataIndex(csLen, asLen, copyD_other[i2]["index"]);
              applyD_other.push({"data": arrData, "index": arrIndex});
            }
          }
          for (let x = 1; x <= asLen; x++) {
            if (applyD_number.length > 0) {
              for (let y = 0; y < applyD_number.length; y++) {
                if (x in applyD_number[y]["index"]) {
                  applyData.push(applyD_number[y]["data"][applyD_number[y]["index"][x]]);
                }
              }
            }
            if (applyD_extendNumber.length > 0) {
              for (let y = 0; y < applyD_extendNumber.length; y++) {
                if (x in applyD_extendNumber[y]["index"]) {
                  applyData.push(applyD_extendNumber[y]["data"][applyD_extendNumber[y]["index"][x]]);
                }
              }
            }
            if (applyD_date.length > 0) {
              for (let y = 0; y < applyD_date.length; y++) {
                if (x in applyD_date[y]["index"]) {
                  applyData.push(applyD_date[y]["data"][applyD_date[y]["index"][x]]);
                }
              }
            }
            if (applyD_chnNumber.length > 0) {
              for (let y = 0; y < applyD_chnNumber.length; y++) {
                if (x in applyD_chnNumber[y]["index"]) {
                  applyData.push(applyD_chnNumber[y]["data"][applyD_chnNumber[y]["index"][x]]);
                }
              }
            }
            if (applyD_chnWeek2.length > 0) {
              for (let y = 0; y < applyD_chnWeek2.length; y++) {
                if (x in applyD_chnWeek2[y]["index"]) {
                  applyData.push(applyD_chnWeek2[y]["data"][applyD_chnWeek2[y]["index"][x]]);
                }
              }
            }
            if (applyD_chnWeek3.length > 0) {
              for (let y = 0; y < applyD_chnWeek3.length; y++) {
                if (x in applyD_chnWeek3[y]["index"]) {
                  applyData.push(applyD_chnWeek3[y]["data"][applyD_chnWeek3[y]["index"][x]]);
                }
              }
            }
            if (applyD_other.length > 0) {
              for (let y = 0; y < applyD_other.length; y++) {
                if (x in applyD_other[y]["index"]) {
                  applyData.push(applyD_other[y]["data"][applyD_other[y]["index"][x]]);
                }
              }
            }
          }
          return applyData;
        },
        getLenS: function(indexArr, rsd) {
          let s = 0;
          for (let j = 0; j < indexArr.length; j++) {
            if (indexArr[j] <= rsd) {
              s++;
            } else {
              break;
            }
          }
          return s;
        },
        getDataIndex: function(csLen, asLen, indexArr) {
          let obj = {};
          let num = Math.floor(asLen / csLen);
          let rsd = asLen % csLen;
          let sum = 0;
          if (num > 0) {
            for (let i2 = 1; i2 <= num; i2++) {
              for (let j = 0; j < indexArr.length; j++) {
                obj[indexArr[j] + (i2 - 1) * csLen] = sum;
                sum++;
              }
            }
            for (let a = 0; a < indexArr.length; a++) {
              if (indexArr[a] <= rsd) {
                obj[indexArr[a] + csLen * num] = sum;
                sum++;
              } else {
                break;
              }
            }
          } else {
            for (let a = 0; a < indexArr.length; a++) {
              if (indexArr[a] <= rsd) {
                obj[indexArr[a]] = sum;
                sum++;
              } else {
                break;
              }
            }
          }
          return obj;
        },
        getDataByType: function(data, len, direction, type, dataType) {
          let _this = this;
          let applyData = [];
          if (type == "0") {
            if (direction == "up" || direction == "left") {
              data.reverse();
            }
            applyData = _this.FillCopy(data, len);
          } else if (type == "1") {
            if (dataType == "number") {
              applyData = _this.FillSeries(data, len, direction);
            } else if (dataType == "extendNumber") {
              if (data.length == 1) {
                let step;
                if (direction == "down" || direction == "right") {
                  step = 1;
                } else if (direction == "up" || direction == "left") {
                  step = -1;
                }
                applyData = _this.FillExtendNumber(data, len, step);
              } else {
                let dataNumArr = [];
                for (let i2 = 0; i2 < data.length; i2++) {
                  let txt = data[i2]["m"];
                  dataNumArr.push(Number(_this.isExtendNumber(txt)[1]));
                }
                if (direction == "up" || direction == "left") {
                  data.reverse();
                  dataNumArr.reverse();
                }
                if (_this.isEqualDiff(dataNumArr)) {
                  let step = dataNumArr[1] - dataNumArr[0];
                  applyData = _this.FillExtendNumber(data, len, step);
                } else {
                  applyData = _this.FillCopy(data, len);
                }
              }
            } else if (dataType == "date") {
              if (data.length == 1) {
                let step;
                if (direction == "down" || direction == "right") {
                  step = 1;
                } else if (direction == "up" || direction == "left") {
                  step = -1;
                }
                applyData = _this.FillDays(data, len, step);
              } else {
                if (direction == "up" || direction == "left") {
                  data.reverse();
                }
                let judgeDate = _this.judgeDate(data);
                if (judgeDate[0] && judgeDate[3]) {
                  let step = (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "months");
                  applyData = _this.FillMonths(data, len, step);
                } else if (!judgeDate[0] && judgeDate[2]) {
                  let step = (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "days");
                  applyData = _this.FillDays(data, len, step);
                } else {
                  applyData = _this.FillCopy(data, len);
                }
              }
            } else if (dataType == "chnNumber") {
              if (data.length == 1) {
                if (data[0]["m"] == "\u65E5" || _this.ChineseToNumber(data[0]["m"]) < 7) {
                  let step;
                  if (direction == "down" || direction == "right") {
                    step = 1;
                  } else if (direction == "up" || direction == "left") {
                    step = -1;
                  }
                  applyData = _this.FillChnWeek(data, len, step);
                } else {
                  let step;
                  if (direction == "down" || direction == "right") {
                    step = 1;
                  } else if (direction == "up" || direction == "left") {
                    step = -1;
                  }
                  applyData = _this.FillChnNumber(data, len, step);
                }
              } else {
                let hasweek = false;
                for (let i2 = 0; i2 < data.length; i2++) {
                  if (data[i2]["m"] == "\u65E5") {
                    hasweek = true;
                    break;
                  }
                }
                let dataNumArr = [];
                let weekIndex = 0;
                for (let i2 = 0; i2 < data.length; i2++) {
                  if (data[i2]["m"] == "\u65E5") {
                    if (i2 == 0) {
                      dataNumArr.push(0);
                    } else {
                      weekIndex++;
                      dataNumArr.push(weekIndex * 7);
                    }
                  } else if (hasweek && _this.ChineseToNumber(data[i2]["m"]) > 0 && _this.ChineseToNumber(data[i2]["m"]) < 7) {
                    dataNumArr.push(_this.ChineseToNumber(data[i2]["m"]) + weekIndex * 7);
                  } else {
                    dataNumArr.push(_this.ChineseToNumber(data[i2]["m"]));
                  }
                }
                if (direction == "up" || direction == "left") {
                  data.reverse();
                  dataNumArr.reverse();
                }
                if (_this.isEqualDiff(dataNumArr)) {
                  if (hasweek || dataNumArr[dataNumArr.length - 1] < 6 && dataNumArr[0] > 0 || dataNumArr[0] < 6 && dataNumArr[dataNumArr.length - 1] > 0) {
                    let step = dataNumArr[1] - dataNumArr[0];
                    applyData = _this.FillChnWeek(data, len, step);
                  } else {
                    let step = dataNumArr[1] - dataNumArr[0];
                    applyData = _this.FillChnNumber(data, len, step);
                  }
                } else {
                  applyData = _this.FillCopy(data, len);
                }
              }
            } else if (dataType == "chnWeek2") {
              if (data.length == 1) {
                let step;
                if (direction == "down" || direction == "right") {
                  step = 1;
                } else if (direction == "up" || direction == "left") {
                  step = -1;
                }
                applyData = _this.FillChnWeek2(data, len, step);
              } else {
                let dataNumArr = [];
                let weekIndex = 0;
                for (let i2 = 0; i2 < data.length; i2++) {
                  let lastTxt = data[i2]["m"].substr(data[i2]["m"].length - 1, 1);
                  if (data[i2]["m"] == "\u5468\u65E5") {
                    if (i2 == 0) {
                      dataNumArr.push(0);
                    } else {
                      weekIndex++;
                      dataNumArr.push(weekIndex * 7);
                    }
                  } else {
                    dataNumArr.push(_this.ChineseToNumber(lastTxt) + weekIndex * 7);
                  }
                }
                if (direction == "up" || direction == "left") {
                  data.reverse();
                  dataNumArr.reverse();
                }
                if (_this.isEqualDiff(dataNumArr)) {
                  let step = dataNumArr[1] - dataNumArr[0];
                  applyData = _this.FillChnWeek2(data, len, step);
                } else {
                  applyData = _this.FillCopy(data, len);
                }
              }
            } else if (dataType == "chnWeek3") {
              if (data.length == 1) {
                let step;
                if (direction == "down" || direction == "right") {
                  step = 1;
                } else if (direction == "up" || direction == "left") {
                  step = -1;
                }
                applyData = _this.FillChnWeek3(data, len, step);
              } else {
                let dataNumArr = [];
                let weekIndex = 0;
                for (let i2 = 0; i2 < data.length; i2++) {
                  let lastTxt = data[i2]["m"].substr(data[i2]["m"].length - 1, 1);
                  if (data[i2]["m"] == "\u661F\u671F\u65E5") {
                    if (i2 == 0) {
                      dataNumArr.push(0);
                    } else {
                      weekIndex++;
                      dataNumArr.push(weekIndex * 7);
                    }
                  } else {
                    dataNumArr.push(_this.ChineseToNumber(lastTxt) + weekIndex * 7);
                  }
                }
                if (direction == "up" || direction == "left") {
                  data.reverse();
                  dataNumArr.reverse();
                }
                if (_this.isEqualDiff(dataNumArr)) {
                  let step = dataNumArr[1] - dataNumArr[0];
                  applyData = _this.FillChnWeek3(data, len, step);
                } else {
                  applyData = _this.FillCopy(data, len);
                }
              }
            } else {
              if (direction == "up" || direction == "left") {
                data.reverse();
              }
              applyData = _this.FillCopy(data, len);
            }
          } else if (type == "2") {
            if (direction == "up" || direction == "left") {
              data.reverse();
            }
            applyData = _this.FillOnlyFormat(data, len);
          } else if (type == "3") {
            let dataArr = _this.getDataByType(data, len, direction, "1", dataType);
            applyData = _this.FillWithoutFormat(dataArr);
          } else if (type == "4") {
            if (data.length == 1) {
              let step;
              if (direction == "down" || direction == "right") {
                step = 1;
              } else if (direction == "up" || direction == "left") {
                step = -1;
              }
              applyData = _this.FillDays(data, len, step);
            } else if (data.length == 2) {
              if (direction == "up" || direction == "left") {
                data.reverse();
              }
              let step = (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "days");
              applyData = _this.FillDays(data, len, step);
            } else {
              if (direction == "up" || direction == "left") {
                data.reverse();
              }
              let judgeDate = _this.judgeDate(data);
              if (judgeDate[0] && judgeDate[3]) {
                let step = (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "months");
                applyData = _this.FillMonths(data, len, step);
              } else if (!judgeDate[0] && judgeDate[2]) {
                let step = (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "days");
                applyData = _this.FillDays(data, len, step);
              } else {
                applyData = _this.FillCopy(data, len);
              }
            }
          } else if (type == "5") {
            if (data.length == 1) {
              let step;
              if (direction == "down" || direction == "right") {
                step = 1;
              } else if (direction == "up" || direction == "left") {
                step = -1;
              }
              let newLen = Math.round(len * 1.5);
              for (let i2 = 1; i2 <= newLen; i2++) {
                let d = $.extend(true, {}, data[0]);
                let day = (0, import_dayjs2.default)(d["m"]).add(i2, "days").day();
                if (day == 0 || day == 6) {
                  continue;
                }
                let date = (0, import_dayjs2.default)(d["m"]).add(step * i2, "days").format("YYYY-MM-DD");
                d["m"] = date;
                d["v"] = genarate(date)[2];
                applyData.push(d);
                if (applyData.length == len) {
                  break;
                }
              }
            } else if (data.length == 2) {
              if ((0, import_dayjs2.default)(data[1]["m"]).date() == (0, import_dayjs2.default)(data[0]["m"]).date() && (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "months") != 0) {
                if (direction == "up" || direction == "left") {
                  data.reverse();
                }
                let step = (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "months");
                for (let i2 = 1; i2 <= len; i2++) {
                  let index2 = (i2 - 1) % data.length;
                  let d = $.extend(true, {}, data[index2]);
                  let day = (0, import_dayjs2.default)(data[data.length - 1]).add(step * i2, "months").day(), date;
                  if (day == 0) {
                    date = (0, import_dayjs2.default)(data[data.length - 1]).add(step * i2, "months").subtract(2, "days").format("YYYY-MM-DD");
                  } else if (day == 6) {
                    date = (0, import_dayjs2.default)(data[data.length - 1]).add(step * i2, "months").subtract(1, "days").format("YYYY-MM-DD");
                  } else {
                    date = (0, import_dayjs2.default)(data[data.length - 1]).add(step * i2, "months").format("YYYY-MM-DD");
                  }
                  d["m"] = date;
                  d["v"] = genarate(date)[2];
                  applyData.push(d);
                }
              } else {
                if (Math.abs((0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]))) > 7) {
                  let step_month;
                  if (direction == "down" || direction == "right") {
                    step_month = 1;
                  } else if (direction == "up" || direction == "left") {
                    step_month = -1;
                    data.reverse();
                  }
                  let step;
                  for (let i2 = 1; i2 <= len; i2++) {
                    let index2 = (i2 - 1) % data.length;
                    let d = $.extend(true, {}, data[index2]);
                    let num = Math.ceil(i2 / data.length);
                    if (index2 == 0) {
                      step = (0, import_dayjs2.default)(d["m"]).add(step_month * num, "months").diff((0, import_dayjs2.default)(d["m"]), "days");
                    }
                    let day = (0, import_dayjs2.default)(d["m"]).add(step, "days").day(), date;
                    if (day == 0) {
                      date = (0, import_dayjs2.default)(d["m"]).add(step, "days").subtract(2, "days").format("YYYY-MM-DD");
                    } else if (day == 6) {
                      date = (0, import_dayjs2.default)(d["m"]).add(step, "days").subtract(1, "days").format("YYYY-MM-DD");
                    } else {
                      date = (0, import_dayjs2.default)(d["m"]).add(step, "days").format("YYYY-MM-DD");
                    }
                    d["m"] = date;
                    d["v"] = genarate(date)[2];
                    applyData.push(d);
                  }
                } else {
                  let step_day;
                  if (direction == "down" || direction == "right") {
                    step_day = 7;
                  } else if (direction == "up" || direction == "left") {
                    step_day = -7;
                    data.reverse();
                  }
                  let step;
                  for (let i2 = 1; i2 <= len; i2++) {
                    let index2 = (i2 - 1) % data.length;
                    let d = $.extend(true, {}, data[index2]);
                    let num = Math.ceil(i2 / data.length);
                    if (index2 == 0) {
                      step = (0, import_dayjs2.default)(d["m"]).add(step_day * num, "days").diff((0, import_dayjs2.default)(d["m"]), "days");
                    }
                    let day = (0, import_dayjs2.default)(d["m"]).add(step, "days").day(), date;
                    if (day == 0) {
                      date = (0, import_dayjs2.default)(d["m"]).add(step, "days").subtract(2, "days").format("YYYY-MM-DD");
                    } else if (day == 6) {
                      date = (0, import_dayjs2.default)(d["m"]).add(step, "days").subtract(1, "days").format("YYYY-MM-DD");
                    } else {
                      date = (0, import_dayjs2.default)(d["m"]).add(step, "days").format("YYYY-MM-DD");
                    }
                    d["m"] = date;
                    d["v"] = genarate(date)[2];
                    applyData.push(d);
                  }
                }
              }
            } else {
              let judgeDate = _this.judgeDate(data);
              if (judgeDate[0] && judgeDate[3]) {
                if (direction == "up" || direction == "left") {
                  data.reverse();
                }
                let step = (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "months");
                for (let i2 = 1; i2 <= len; i2++) {
                  let index2 = (i2 - 1) % data.length;
                  let d = $.extend(true, {}, data[index2]);
                  let day = (0, import_dayjs2.default)(data[data.length - 1]["m"]).add(step * i2, "months").day(), date;
                  if (day == 0) {
                    date = (0, import_dayjs2.default)(data[data.length - 1]["m"]).add(step * i2, "months").subtract(2, "days").format("YYYY-MM-DD");
                  } else if (day == 6) {
                    date = (0, import_dayjs2.default)(data[data.length - 1]["m"]).add(step * i2, "months").subtract(1, "days").format("YYYY-MM-DD");
                  } else {
                    date = (0, import_dayjs2.default)(data[data.length - 1]["m"]).add(step * i2, "months").format("YYYY-MM-DD");
                  }
                  d["m"] = date;
                  d["v"] = genarate(date)[2];
                  applyData.push(d);
                }
              } else if (!judgeDate[0] && judgeDate[2]) {
                if (Math.abs((0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]))) > 7) {
                  let step_month;
                  if (direction == "down" || direction == "right") {
                    step_month = 1;
                  } else if (direction == "up" || direction == "left") {
                    step_month = -1;
                    data.reverse();
                  }
                  let step;
                  for (let i2 = 1; i2 <= len; i2++) {
                    let index2 = (i2 - 1) % data.length;
                    let d = $.extend(true, {}, data[index2]);
                    let num = Math.ceil(i2 / data.length);
                    if (index2 == 0) {
                      step = (0, import_dayjs2.default)(d["m"]).add(step_month * num, "months").diff((0, import_dayjs2.default)(d["m"]), "days");
                    }
                    let day = (0, import_dayjs2.default)(d["m"]).add(step, "days").day(), date;
                    if (day == 0) {
                      date = (0, import_dayjs2.default)(d["m"]).add(step, "days").subtract(2, "days").format("YYYY-MM-DD");
                    } else if (day == 6) {
                      date = (0, import_dayjs2.default)(d["m"]).add(step, "days").subtract(1, "days").format("YYYY-MM-DD");
                    } else {
                      date = (0, import_dayjs2.default)(d["m"]).add(step, "days").format("YYYY-MM-DD");
                    }
                    d["m"] = date;
                    d["v"] = genarate(date)[2];
                    applyData.push(d);
                  }
                } else {
                  let step_day;
                  if (direction == "down" || direction == "right") {
                    step_day = 7;
                  } else if (direction == "up" || direction == "left") {
                    step_day = -7;
                    data.reverse();
                  }
                  let step;
                  for (let i2 = 1; i2 <= len; i2++) {
                    let index2 = (i2 - 1) % data.length;
                    let d = $.extend(true, {}, data[index2]);
                    let num = Math.ceil(i2 / data.length);
                    if (index2 == 0) {
                      step = (0, import_dayjs2.default)(d["m"]).add(step_day * num, "days").diff((0, import_dayjs2.default)(d["m"]), "days");
                    }
                    let day = (0, import_dayjs2.default)(d["m"]).add(step, "days").day(), date;
                    if (day == 0) {
                      date = (0, import_dayjs2.default)(d["m"]).add(step, "days").subtract(2, "days").format("YYYY-MM-DD");
                    } else if (day == 6) {
                      date = (0, import_dayjs2.default)(d["m"]).add(step, "days").subtract(1, "days").format("YYYY-MM-DD");
                    } else {
                      date = (0, import_dayjs2.default)(d["m"]).add(step, "days").format("YYYY-MM-DD");
                    }
                    d["m"] = date;
                    d["v"] = genarate(date)[2];
                    applyData.push(d);
                  }
                }
              } else {
                if (direction == "up" || direction == "left") {
                  data.reverse();
                }
                applyData = _this.FillCopy(data, len);
              }
            }
          } else if (type == "6") {
            if (data.length == 1) {
              let step;
              if (direction == "down" || direction == "right") {
                step = 1;
              } else if (direction == "up" || direction == "left") {
                step = -1;
              }
              applyData = _this.FillMonths(data, len, step);
            } else if (data.length == 2) {
              if ((0, import_dayjs2.default)(data[1]["m"]).date() == (0, import_dayjs2.default)(data[0]["m"]).date() && (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "months") != 0) {
                if (direction == "up" || direction == "left") {
                  data.reverse();
                }
                let step = (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "months");
                applyData = _this.FillMonths(data, len, step);
              } else {
                let step_month;
                if (direction == "down" || direction == "right") {
                  step_month = 1;
                } else if (direction == "up" || direction == "left") {
                  step_month = -1;
                  data.reverse();
                }
                let step;
                for (let i2 = 1; i2 <= len; i2++) {
                  let index2 = (i2 - 1) % data.length;
                  let d = $.extend(true, {}, data[index2]);
                  let num = Math.ceil(i2 / data.length);
                  if (index2 == 0) {
                    step = (0, import_dayjs2.default)(d["m"]).add(step_month * num, "months").diff((0, import_dayjs2.default)(d["m"]), "days");
                  }
                  let date = (0, import_dayjs2.default)(d["m"]).add(step, "days").format("YYYY-MM-DD");
                  d["m"] = date;
                  d["v"] = genarate(date)[2];
                  applyData.push(d);
                }
              }
            } else {
              let judgeDate = _this.judgeDate(data);
              if (judgeDate[0] && judgeDate[3]) {
                if (direction == "up" || direction == "left") {
                  data.reverse();
                }
                let step = (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "months");
                applyData = _this.FillMonths(data, len, step);
              } else if (!judgeDate[0] && judgeDate[2]) {
                let step_month;
                if (direction == "down" || direction == "right") {
                  step_month = 1;
                } else if (direction == "up" || direction == "left") {
                  step_month = -1;
                  data.reverse();
                }
                let step;
                for (let i2 = 1; i2 <= len; i2++) {
                  let index2 = (i2 - 1) % data.length;
                  let d = $.extend(true, {}, data[index2]);
                  let num = Math.ceil(i2 / data.length);
                  if (index2 == 0) {
                    step = (0, import_dayjs2.default)(d["m"]).add(step_month * num, "months").diff((0, import_dayjs2.default)(d["m"]), "days");
                  }
                  let date = (0, import_dayjs2.default)(d["m"]).add(step, "days").format("YYYY-MM-DD");
                  d["m"] = date;
                  d["v"] = genarate(date)[2];
                  applyData.push(d);
                }
              } else {
                if (direction == "up" || direction == "left") {
                  data.reverse();
                }
                applyData = _this.FillCopy(data, len);
              }
            }
          } else if (type == "7") {
            if (data.length == 1) {
              let step;
              if (direction == "down" || direction == "right") {
                step = 1;
              } else if (direction == "up" || direction == "left") {
                step = -1;
              }
              applyData = _this.FillYears(data, len, step);
            } else if (data.length == 2) {
              if ((0, import_dayjs2.default)(data[1]["m"]).date() == (0, import_dayjs2.default)(data[0]["m"]).date() && (0, import_dayjs2.default)(data[1]["m"]).month() == (0, import_dayjs2.default)(data[0]["m"]).month() && (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "years") != 0) {
                if (direction == "up" || direction == "left") {
                  data.reverse();
                }
                let step = (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "years");
                applyData = _this.FillYears(data, len, step);
              } else {
                let step_year;
                if (direction == "down" || direction == "right") {
                  step_year = 1;
                } else if (direction == "up" || direction == "left") {
                  step_year = -1;
                  data.reverse();
                }
                let step;
                for (let i2 = 1; i2 <= len; i2++) {
                  let index2 = (i2 - 1) % data.length;
                  let d = $.extend(true, {}, data[index2]);
                  let num = Math.ceil(i2 / data.length);
                  if (index2 == 0) {
                    step = (0, import_dayjs2.default)(d["m"]).add(step_year * num, "years").diff((0, import_dayjs2.default)(d["m"]), "days");
                  }
                  let date = (0, import_dayjs2.default)(d["m"]).add(step, "days").format("YYYY-MM-DD");
                  d["m"] = date;
                  d["v"] = genarate(date)[2];
                  applyData.push(d);
                }
              }
            } else {
              let judgeDate = _this.judgeDate(data);
              if (judgeDate[0] && judgeDate[1] && judgeDate[4]) {
                if (direction == "up" || direction == "left") {
                  data.reverse();
                }
                let step = (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "years");
                applyData = _this.FillYears(data, len, step);
              } else if (judgeDate[0] && judgeDate[3] || judgeDate[2]) {
                let step_year;
                if (direction == "down" || direction == "right") {
                  step_year = 1;
                } else if (direction == "up" || direction == "left") {
                  step_year = -1;
                  data.reverse();
                }
                let step;
                for (let i2 = 1; i2 <= len; i2++) {
                  let index2 = (i2 - 1) % data.length;
                  let d = $.extend(true, {}, data[index2]);
                  let num = Math.ceil(i2 / data.length);
                  if (index2 == 0) {
                    step = (0, import_dayjs2.default)(d["m"]).add(step_year * num, "years").diff((0, import_dayjs2.default)(d["m"]), "days");
                  }
                  let date = (0, import_dayjs2.default)(d["m"]).add(step, "days").format("YYYY-MM-DD");
                  d["m"] = date;
                  d["v"] = genarate(date)[2];
                  applyData.push(d);
                }
              } else {
                if (direction == "up" || direction == "left") {
                  data.reverse();
                }
                applyData = _this.FillCopy(data, len);
              }
            }
          } else if (type == "8") {
            if (data.length == 1) {
              let step;
              if (direction == "down" || direction == "right") {
                step = 1;
              } else if (direction == "up" || direction == "left") {
                step = -1;
              }
              applyData = _this.FillChnNumber(data, len, step);
            } else {
              let dataNumArr = [];
              for (let i2 = 0; i2 < data.length; i2++) {
                dataNumArr.push(_this.ChineseToNumber(data[i2]["m"]));
              }
              if (direction == "up" || direction == "left") {
                data.reverse();
                dataNumArr.reverse();
              }
              if (_this.isEqualDiff(dataNumArr)) {
                let step = dataNumArr[1] - dataNumArr[0];
                applyData = _this.FillChnNumber(data, len, step);
              } else {
                applyData = _this.FillCopy(data, len);
              }
            }
          }
          return applyData;
        },
        FillCopy: function(data, len) {
          let applyData = [];
          for (let i2 = 1; i2 <= len; i2++) {
            let index2 = (i2 - 1) % data.length;
            let d = $.extend(true, {}, data[index2]);
            applyData.push(d);
          }
          return applyData;
        },
        FillSeries: function(data, len, direction) {
          let _this = this;
          let applyData = [];
          let dataNumArr = [];
          for (let j = 0; j < data.length; j++) {
            dataNumArr.push(Number(data[j]["v"]));
          }
          if (data.length > 2 && _this.isEqualRatio(dataNumArr)) {
            for (let i2 = 1; i2 <= len; i2++) {
              let index2 = (i2 - 1) % data.length;
              let d = $.extend(true, {}, data[index2]);
              let num;
              if (direction == "down" || direction == "right") {
                num = Number(data[data.length - 1]["v"]) * Math.pow(Number(data[1]["v"]) / Number(data[0]["v"]), i2);
              } else if (direction == "up" || direction == "left") {
                num = Number(data[0]["v"]) / Math.pow(Number(data[1]["v"]) / Number(data[0]["v"]), i2);
              }
              d["v"] = num;
              d["m"] = update(d["ct"]["fa"], num);
              applyData.push(d);
            }
          } else {
            let xArr = _this.getXArr(data.length);
            for (let i2 = 1; i2 <= len; i2++) {
              let index2 = (i2 - 1) % data.length;
              let d = $.extend(true, {}, data[index2]);
              let y;
              if (direction == "down" || direction == "right") {
                y = _this.forecast(data.length + i2, dataNumArr, xArr);
              } else if (direction == "up" || direction == "left") {
                y = _this.forecast(1 - i2, dataNumArr, xArr);
              }
              d["v"] = y;
              d["m"] = update(d["ct"]["fa"], y);
              applyData.push(d);
            }
          }
          return applyData;
        },
        FillExtendNumber: function(data, len, step) {
          let _this = this;
          let applyData = [];
          let reg = /0|([1-9]+[0-9]*)/g;
          for (let i2 = 1; i2 <= len; i2++) {
            let index2 = (i2 - 1) % data.length;
            let d = $.extend(true, {}, data[index2]);
            let last = data[data.length - 1]["m"];
            let match = last.match(reg);
            let lastTxt = match[match.length - 1];
            let num = Math.abs(Number(lastTxt) + step * i2);
            let lastIndex = last.lastIndexOf(lastTxt);
            let valueTxt = last.substr(0, lastIndex) + num.toString() + last.substr(lastIndex + lastTxt.length);
            d["v"] = valueTxt;
            d["m"] = valueTxt;
            applyData.push(d);
          }
          return applyData;
        },
        FillOnlyFormat: function(data, len) {
          let applyData = [];
          for (let i2 = 1; i2 <= len; i2++) {
            let index2 = (i2 - 1) % data.length;
            let d = $.extend(true, {}, data[index2]);
            delete d["f"];
            delete d["m"];
            delete d["v"];
            applyData.push(d);
          }
          return applyData;
        },
        FillWithoutFormat: function(dataArr) {
          let applyData = [];
          for (let i2 = 0; i2 < dataArr.length; i2++) {
            let d = $.extend(true, {}, dataArr[i2]);
            let obj;
            if (d["f"] == null) {
              obj = {"m": d["v"].toString(), "v": d["v"]};
            } else {
              obj = {"f": d["f"], "m": d["v"].toString(), "v": d["v"]};
            }
            applyData.push(obj);
          }
          return applyData;
        },
        FillDays: function(data, len, step) {
          let applyData = [];
          for (let i2 = 1; i2 <= len; i2++) {
            let index2 = (i2 - 1) % data.length;
            let d = $.extend(true, {}, data[index2]);
            let date = update("yyyy-MM-dd", d["v"]);
            date = (0, import_dayjs2.default)(date).add(step * i2, "days").format("YYYY-MM-DD");
            d["v"] = genarate(date)[2];
            d["m"] = update(d["ct"]["fa"], d["v"]);
            applyData.push(d);
          }
          return applyData;
        },
        FillMonths: function(data, len, step) {
          let applyData = [];
          for (let i2 = 1; i2 <= len; i2++) {
            let index2 = (i2 - 1) % data.length;
            let d = $.extend(true, {}, data[index2]);
            let date = update("yyyy-MM-dd", d["v"]);
            date = (0, import_dayjs2.default)(date).add(step * i2, "months").format("YYYY-MM-DD");
            d["v"] = genarate(date)[2];
            d["m"] = update(d["ct"]["fa"], d["v"]);
            applyData.push(d);
          }
          return applyData;
        },
        FillYears: function(data, len, step) {
          let applyData = [];
          for (let i2 = 1; i2 <= len; i2++) {
            let index2 = (i2 - 1) % data.length;
            let d = $.extend(true, {}, data[index2]);
            let date = update("yyyy-MM-dd", d["v"]);
            date = (0, import_dayjs2.default)(date).add(step * i2, "years").format("YYYY-MM-DD");
            d["v"] = genarate(date)[2];
            d["m"] = update(d["ct"]["fa"], d["v"]);
            applyData.push(d);
          }
          return applyData;
        },
        FillChnWeek: function(data, len, step) {
          let _this = this;
          let applyData = [];
          for (let i2 = 1; i2 <= len; i2++) {
            let index2 = (i2 - 1) % data.length;
            let d = $.extend(true, {}, data[index2]);
            let num;
            if (data[data.length - 1]["m"] == "\u65E5") {
              num = 7 + step * i2;
            } else {
              num = _this.ChineseToNumber(data[data.length - 1]["m"]) + step * i2;
            }
            if (num < 0) {
              num = Math.ceil(Math.abs(num) / 7) * 7 + num;
            }
            let rsd = num % 7;
            if (rsd == 0) {
              d["m"] = "\u65E5";
              d["v"] = "\u65E5";
            } else if (rsd == 1) {
              d["m"] = "\u4E00";
              d["v"] = "\u4E00";
            } else if (rsd == 2) {
              d["m"] = "\u4E8C";
              d["v"] = "\u4E8C";
            } else if (rsd == 3) {
              d["m"] = "\u4E09";
              d["v"] = "\u4E09";
            } else if (rsd == 4) {
              d["m"] = "\u56DB";
              d["v"] = "\u56DB";
            } else if (rsd == 5) {
              d["m"] = "\u4E94";
              d["v"] = "\u4E94";
            } else if (rsd == 6) {
              d["m"] = "\u516D";
              d["v"] = "\u516D";
            }
            applyData.push(d);
          }
          return applyData;
        },
        FillChnWeek2: function(data, len, step) {
          let _this = this;
          let applyData = [];
          for (let i2 = 1; i2 <= len; i2++) {
            let index2 = (i2 - 1) % data.length;
            let d = $.extend(true, {}, data[index2]);
            let num;
            if (data[data.length - 1]["m"] == "\u5468\u65E5") {
              num = 7 + step * i2;
            } else {
              let last = data[data.length - 1]["m"];
              let txt = last.substr(last.length - 1, 1);
              num = _this.ChineseToNumber(txt) + step * i2;
            }
            if (num < 0) {
              num = Math.ceil(Math.abs(num) / 7) * 7 + num;
            }
            let rsd = num % 7;
            if (rsd == 0) {
              d["m"] = "\u5468\u65E5";
              d["v"] = "\u5468\u65E5";
            } else if (rsd == 1) {
              d["m"] = "\u5468\u4E00";
              d["v"] = "\u5468\u4E00";
            } else if (rsd == 2) {
              d["m"] = "\u5468\u4E8C";
              d["v"] = "\u5468\u4E8C";
            } else if (rsd == 3) {
              d["m"] = "\u5468\u4E09";
              d["v"] = "\u5468\u4E09";
            } else if (rsd == 4) {
              d["m"] = "\u5468\u56DB";
              d["v"] = "\u5468\u56DB";
            } else if (rsd == 5) {
              d["m"] = "\u5468\u4E94";
              d["v"] = "\u5468\u4E94";
            } else if (rsd == 6) {
              d["m"] = "\u5468\u516D";
              d["v"] = "\u5468\u516D";
            }
            applyData.push(d);
          }
          return applyData;
        },
        FillChnWeek3: function(data, len, step) {
          let _this = this;
          let applyData = [];
          for (let i2 = 1; i2 <= len; i2++) {
            let index2 = (i2 - 1) % data.length;
            let d = $.extend(true, {}, data[index2]);
            let num;
            if (data[data.length - 1]["m"] == "\u661F\u671F\u65E5") {
              num = 7 + step * i2;
            } else {
              let last = data[data.length - 1]["m"];
              let txt = last.substr(last.length - 1, 1);
              num = _this.ChineseToNumber(txt) + step * i2;
            }
            if (num < 0) {
              num = Math.ceil(Math.abs(num) / 7) * 7 + num;
            }
            let rsd = num % 7;
            if (rsd == 0) {
              d["m"] = "\u661F\u671F\u65E5";
              d["v"] = "\u661F\u671F\u65E5";
            } else if (rsd == 1) {
              d["m"] = "\u661F\u671F\u4E00";
              d["v"] = "\u661F\u671F\u4E00";
            } else if (rsd == 2) {
              d["m"] = "\u661F\u671F\u4E8C";
              d["v"] = "\u661F\u671F\u4E8C";
            } else if (rsd == 3) {
              d["m"] = "\u661F\u671F\u4E09";
              d["v"] = "\u661F\u671F\u4E09";
            } else if (rsd == 4) {
              d["m"] = "\u661F\u671F\u56DB";
              d["v"] = "\u661F\u671F\u56DB";
            } else if (rsd == 5) {
              d["m"] = "\u661F\u671F\u4E94";
              d["v"] = "\u661F\u671F\u4E94";
            } else if (rsd == 6) {
              d["m"] = "\u661F\u671F\u516D";
              d["v"] = "\u661F\u671F\u516D";
            }
            applyData.push(d);
          }
          return applyData;
        },
        FillChnNumber: function(data, len, step) {
          let _this = this;
          let applyData = [];
          for (let i2 = 1; i2 <= len; i2++) {
            let index2 = (i2 - 1) % data.length;
            let d = $.extend(true, {}, data[index2]);
            let num = _this.ChineseToNumber(data[data.length - 1]["m"]) + step * i2, txt;
            if (num <= 0) {
              txt = "\u96F6";
            } else {
              txt = _this.NumberToChinese(num);
            }
            d["v"] = txt;
            d["m"] = txt.toString();
            applyData.push(d);
          }
          return applyData;
        },
        isEqualDiff: function(arr) {
          let diff2 = true;
          let step = arr[1] - arr[0];
          for (let i2 = 1; i2 < arr.length; i2++) {
            if (arr[i2] - arr[i2 - 1] != step) {
              diff2 = false;
              break;
            }
          }
          return diff2;
        },
        isEqualRatio: function(arr) {
          let ratio = true;
          let step = arr[1] / arr[0];
          for (let i2 = 1; i2 < arr.length; i2++) {
            if (arr[i2] / arr[i2 - 1] != step) {
              ratio = false;
              break;
            }
          }
          return ratio;
        },
        getXArr: function(len) {
          let xArr = [];
          for (let i2 = 1; i2 <= len; i2++) {
            xArr.push(i2);
          }
          return xArr;
        },
        forecast: function(x, yArr, xArr) {
          function getAverage(arr) {
            let sum = 0;
            for (let i2 = 0; i2 < arr.length; i2++) {
              sum += arr[i2];
            }
            return sum / arr.length;
          }
          let ax = getAverage(xArr);
          let ay = getAverage(yArr);
          let sum_d = 0, sum_n = 0;
          for (let j = 0; j < xArr.length; j++) {
            sum_d += (xArr[j] - ax) * (yArr[j] - ay);
            sum_n += (xArr[j] - ax) * (xArr[j] - ax);
          }
          let b;
          if (sum_n == 0) {
            b = 1;
          } else {
            b = sum_d / sum_n;
          }
          let a = ay - b * ax;
          return Math.round((a + b * x) * 1e5) / 1e5;
        },
        judgeDate: function(data) {
          let isSameDay = true, isSameMonth = true, isEqualDiffDays = true, isEqualDiffMonths = true, isEqualDiffYears = true;
          let sameDay = (0, import_dayjs2.default)(data[0]["m"]).date(), sameMonth = (0, import_dayjs2.default)(data[0]["m"]).month();
          let equalDiffDays = (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "days");
          let equalDiffMonths = (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "months");
          let equalDiffYears = (0, import_dayjs2.default)(data[1]["m"]).diff((0, import_dayjs2.default)(data[0]["m"]), "years");
          for (let i2 = 1; i2 < data.length; i2++) {
            if ((0, import_dayjs2.default)(data[i2]["m"]).date() != sameDay) {
              isSameDay = false;
            }
            if ((0, import_dayjs2.default)(data[i2]["m"]).month() != sameMonth) {
              isSameMonth = false;
            }
            if ((0, import_dayjs2.default)(data[i2]["m"]).diff((0, import_dayjs2.default)(data[i2 - 1]["m"]), "days") != equalDiffDays) {
              isEqualDiffDays = false;
            }
            if ((0, import_dayjs2.default)(data[i2]["m"]).diff((0, import_dayjs2.default)(data[i2 - 1]["m"]), "months") != equalDiffMonths) {
              isEqualDiffMonths = false;
            }
            if ((0, import_dayjs2.default)(data[i2]["m"]).diff((0, import_dayjs2.default)(data[i2 - 1]["m"]), "years") != equalDiffYears) {
              isEqualDiffYears = false;
            }
          }
          if (equalDiffDays == 0) {
            isEqualDiffDays = false;
          }
          if (equalDiffMonths == 0) {
            isEqualDiffMonths = false;
          }
          if (equalDiffYears == 0) {
            isEqualDiffYears = false;
          }
          return [isSameDay, isSameMonth, isEqualDiffDays, isEqualDiffMonths, isEqualDiffYears];
        }
      };
      dropCell_default = luckysheetDropCell;
    }
  });

  // src/controllers/freezen.js
  var luckysheetFreezen, freezen_default;
  var init_freezen = __esm({
    "src/controllers/freezen.js"() {
      init_get();
      init_sheetSearch();
      init_select();
      init_filter();
      init_server();
      init_menuButton();
      init_postil();
      init_dropCell();
      init_location();
      init_store();
      init_locale();
      init_refresh();
      luckysheetFreezen = {
        freezenHorizontalHTML: '<div id="luckysheet-freezebar-horizontal" class="luckysheet-freezebar" tabindex="0"><div class="luckysheet-freezebar-handle luckysheet-freezebar-horizontal-handle" ><div class="luckysheet-freezebar-handle-bar luckysheet-freezebar-horizontal-handle-title" ></div><div class="luckysheet-freezebar-handle-bar luckysheet-freezebar-horizontal-handle-bar" ></div></div><div class="luckysheet-freezebar-drop luckysheet-freezebar-horizontal-drop" ><div class="luckysheet-freezebar-drop-bar luckysheet-freezebar-horizontal-drop-title" ></div><div class="luckysheet-freezebar-drop-bar luckysheet-freezebar-horizontal-drop-bar" >&nbsp;</div></div></div>',
        freezenVerticalHTML: '<div id="luckysheet-freezebar-vertical" class="luckysheet-freezebar" tabindex="0"><div class="luckysheet-freezebar-handle luckysheet-freezebar-vertical-handle" ><div class="luckysheet-freezebar-handle-bar luckysheet-freezebar-vertical-handle-title" ></div><div class="luckysheet-freezebar-handle-bar luckysheet-freezebar-vertical-handle-bar" ></div></div><div class="luckysheet-freezebar-drop luckysheet-freezebar-vertical-drop" ><div class="luckysheet-freezebar-drop-bar luckysheet-freezebar-vertical-drop-title" ></div><div class="luckysheet-freezebar-drop-bar luckysheet-freezebar-vertical-drop-bar" >&nbsp;</div></div></div>',
        initialHorizontal: true,
        initialVertical: true,
        horizontalmovestate: false,
        horizontalmoveposition: null,
        verticalmovestate: false,
        verticalmoveposition: null,
        windowHeight: null,
        windowWidth: null,
        freezenhorizontaldata: null,
        freezenverticaldata: null,
        freezenRealFirstRowColumn: true,
        cutVolumn: function(arr, cutindex) {
          if (cutindex <= 0) {
            return arr;
          }
          let pre = arr.slice(0, cutindex);
          let premax = pre[pre.length - 1];
          let ret = arr.slice(cutindex);
          return ret;
        },
        cancelFreezenVertical: function(sheetIndex) {
          let _this = this;
          const _locale = locale_default();
          const locale_freezen = _locale.freezen;
          const freezeHTML = `
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-function iconfont luckysheet-iconfont-dongjie1"
                        style="user-select: none;">
                        </div>
                    </div>
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        ${locale_freezen.default}
                    </div>
                </div>
            </div>
        `;
          $("#luckysheet-freezen-btn-horizontal").html(freezeHTML);
          $("#luckysheet-freezen-btn-vertical").html('<i class="fa fa-indent"></i> ' + locale_freezen.freezenColumn);
          _this.freezenverticaldata = null;
          let isvertical = $("#luckysheet-freezebar-vertical").is(":visible");
          $("#luckysheet-freezebar-vertical").hide();
          if (sheetIndex == null) {
            sheetIndex = store_default.currentSheetIndex;
          }
          let currentSheet = store_default.luckysheetfile[getSheetIndex(sheetIndex)];
          if (currentSheet.freezen != null) {
            currentSheet.freezen.vertical = null;
          }
          if (currentSheet.frozen != null && isvertical) {
            server_default.saveParam("all", sheetIndex, currentSheet.frozen, {"k": "frozen"});
          }
        },
        createFreezenVertical: function(freezenverticaldata, left) {
          let _this = this;
          if (_this.initialVertical) {
            _this.initialVertical = false;
            $("#luckysheet-grid-window-1").append(_this.freezenVerticalHTML);
            $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-drop").hover(function() {
              $(this).parent().addClass("luckysheet-freezebar-hover");
            }, function() {
              $(this).parent().removeClass("luckysheet-freezebar-hover");
            });
            $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-drop").mousedown(function() {
              _this.verticalmovestate = true;
              _this.verticalmoveposition = $(this).position().left;
              _this.windowWidth = $("#luckysheet-grid-window-1").width();
              $(this).parent().addClass("luckysheet-freezebar-active");
              $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-handle").css("cursor", "-webkit-grabbing");
            });
            let gridheight = $("#luckysheet-grid-window-1").height();
            $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-handle").css({
              "height": gridheight - 10,
              "width": "4px",
              "cursor": "-webkit-grab",
              "top": "0px"
            }).end().find(".luckysheet-freezebar-vertical-drop").css({
              "height": gridheight - 10,
              "width": "4px",
              "top": "0px",
              "cursor": "-webkit-grab"
            });
          }
          if (freezenverticaldata == null) {
            if (_this.freezenRealFirstRowColumn) {
              let dataset_col_st = 0;
              left = store_default.visibledatacolumn[dataset_col_st] - 2 + store_default.rowHeaderWidth;
              freezenverticaldata = [
                store_default.visibledatacolumn[dataset_col_st],
                dataset_col_st + 1,
                0,
                _this.cutVolumn(store_default.visibledatacolumn, dataset_col_st + 1),
                left
              ];
            } else {
              let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
              let dataset_col_st = luckysheet_searcharray(store_default.visibledatacolumn, scrollLeft);
              if (dataset_col_st == -1) {
                dataset_col_st = 0;
              }
              left = store_default.visibledatacolumn[dataset_col_st] - 2 - scrollLeft + store_default.rowHeaderWidth;
              freezenverticaldata = [
                store_default.visibledatacolumn[dataset_col_st],
                dataset_col_st + 1,
                scrollLeft,
                _this.cutVolumn(store_default.visibledatacolumn, dataset_col_st + 1),
                left
              ];
            }
            _this.saveFreezen(null, null, freezenverticaldata, left);
          }
          _this.freezenverticaldata = freezenverticaldata;
          const freezeHTML = `
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-function iconfont luckysheet-iconfont-dongjie1"
                        style="user-select: none;">
                        </div>
                    </div>
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        ${locale_default().freezen.freezenCancel}
                    </div>
                </div>
            </div>
        `;
          $("#luckysheet-freezen-btn-horizontal").html(freezeHTML);
          $("#luckysheet-freezebar-vertical").show().find(".luckysheet-freezebar-vertical-handle").css({"left": left}).end().find(".luckysheet-freezebar-vertical-drop").css({"left": left});
        },
        saveFreezen: function(freezenhorizontaldata, top, freezenverticaldata, left) {
          let currentSheet = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
          if (currentSheet.freezen == null) {
            currentSheet.freezen = {};
          }
          if (freezenhorizontaldata != null) {
            if (currentSheet.freezen.horizontal == null) {
              currentSheet.freezen.horizontal = {};
            }
            currentSheet.freezen.horizontal.freezenhorizontaldata = freezenhorizontaldata;
            currentSheet.freezen.horizontal.top = top;
          }
          if (freezenverticaldata != null) {
            if (currentSheet.freezen.vertical == null) {
              currentSheet.freezen.vertical = {};
            }
            currentSheet.freezen.vertical.freezenverticaldata = freezenverticaldata;
            currentSheet.freezen.vertical.left = left;
          }
          if (currentSheet.frozen != null) {
            server_default.saveParam("all", store_default.currentSheetIndex, currentSheet.frozen, {"k": "frozen"});
          }
        },
        initialFreezen: function(sheetIndex) {
          let _this = this;
          _this.frozenTofreezen();
          let currentSheet = store_default.luckysheetfile[getSheetIndex(sheetIndex)];
          if (currentSheet.freezen != null && currentSheet.freezen.horizontal != null && currentSheet.freezen.horizontal.freezenhorizontaldata != null) {
            _this.createFreezenHorizontal(currentSheet.freezen.horizontal.freezenhorizontaldata, currentSheet.freezen.horizontal.top);
          } else {
            _this.cancelFreezenHorizontal(sheetIndex);
          }
          if (currentSheet.freezen != null && currentSheet.freezen.vertical != null && currentSheet.freezen.vertical.freezenverticaldata != null) {
            _this.createFreezenVertical(currentSheet.freezen.vertical.freezenverticaldata, currentSheet.freezen.vertical.left);
          } else {
            _this.cancelFreezenVertical(sheetIndex);
          }
          _this.createAssistCanvas();
        },
        changeFreezenIndex: function(originindex, type) {
          let _this = this;
          if (type == "v" && _this.freezenverticaldata != null) {
            let freezen_colindex = _this.freezenverticaldata[1];
            let offset = luckysheet_searcharray(store_default.visibledatacolumn, $("#luckysheet-cell-main").scrollLeft());
            if (originindex - offset < freezen_colindex) {
              originindex = originindex - offset;
            }
          } else if (type == "h" && _this.freezenhorizontaldata != null) {
            let freezen_rowindex = _this.freezenhorizontaldata[1];
            let offset = luckysheet_searcharray(store_default.visibledatarow, $("#luckysheet-cell-main").scrollTop());
            if (originindex - offset < freezen_rowindex) {
              originindex = originindex - offset;
            }
          }
          return originindex;
        },
        scrollFreezen: function() {
          let _this = this;
          let row;
          let row_focus = store_default.luckysheet_select_save[0]["row_focus"];
          if (row_focus == store_default.luckysheet_select_save[0]["row"][0]) {
            row = store_default.luckysheet_select_save[0]["row"][1];
          } else if (row_focus == store_default.luckysheet_select_save[0]["row"][1]) {
            row = store_default.luckysheet_select_save[0]["row"][0];
          }
          let column;
          let column_focus = store_default.luckysheet_select_save[0]["column_focus"];
          if (column_focus == store_default.luckysheet_select_save[0]["column"][0]) {
            column = store_default.luckysheet_select_save[0]["column"][1];
          } else if (column_focus == store_default.luckysheet_select_save[0]["column"][1]) {
            column = store_default.luckysheet_select_save[0]["column"][0];
          }
          if (_this.freezenverticaldata != null) {
            let freezen_colindex = _this.freezenverticaldata[1];
            let offset = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft());
            let top = _this.freezenverticaldata[4];
            freezen_colindex += offset;
            if (column >= store_default.visibledatacolumn.length) {
              column = store_default.visibledatacolumn.length - 1;
            }
            if (freezen_colindex >= store_default.visibledatacolumn.length) {
              freezen_colindex = store_default.visibledatacolumn.length - 1;
            }
            let column_px = store_default.visibledatacolumn[column], freezen_px = store_default.visibledatacolumn[freezen_colindex];
            if (column_px <= freezen_px + top) {
              setTimeout(function() {
                $("#luckysheet-scrollbar-x").scrollLeft(0);
              }, 100);
            }
          }
          if (_this.freezenhorizontaldata != null) {
            let freezen_rowindex = _this.freezenhorizontaldata[1];
            let offset = luckysheet_searcharray(_this.freezenhorizontaldata[3], $("#luckysheet-cell-main").scrollTop());
            let left = _this.freezenhorizontaldata[4];
            freezen_rowindex += offset;
            if (row >= store_default.visibledatarow.length) {
              row = store_default.visibledatarow.length - 1;
            }
            if (freezen_rowindex >= store_default.visibledatarow.length) {
              freezen_rowindex = store_default.visibledatarow.length - 1;
            }
            let row_px = store_default.visibledatarow[row], freezen_px = store_default.visibledatarow[freezen_rowindex];
            if (row_px <= freezen_px + left) {
              setTimeout(function() {
                $("#luckysheet-scrollbar-y").scrollTop(0);
              }, 100);
            }
          }
        },
        cancelFreezenHorizontal: function(sheetIndex) {
          let _this = this;
          const freezeHTML = `
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-function iconfont luckysheet-iconfont-dongjie1"
                        style="user-select: none;">
                        </div>
                    </div>
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        ${locale_default().freezen.default}
                    </div>
                </div>
            </div>
        `;
          $("#luckysheet-freezen-btn-horizontal").html(freezeHTML);
          _this.freezenhorizontaldata = null;
          let ishorizontal = $("#luckysheet-freezebar-horizontal").is(":visible");
          $("#luckysheet-freezebar-horizontal").hide();
          if (sheetIndex == null) {
            sheetIndex = store_default.currentSheetIndex;
          }
          let currentSheet = store_default.luckysheetfile[getSheetIndex(sheetIndex)];
          if (currentSheet.freezen != null) {
            currentSheet.freezen.horizontal = null;
          }
          if (currentSheet.frozen != null && ishorizontal) {
            server_default.saveParam("all", sheetIndex, currentSheet.frozen, {"k": "frozen"});
          }
        },
        createFreezenHorizontal: function(freezenhorizontaldata, top) {
          let _this = this;
          if (_this.initialHorizontal) {
            _this.initialHorizontal = false;
            $("#luckysheet-grid-window-1").append(_this.freezenHorizontalHTML);
            $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-drop").hover(function() {
              $(this).parent().addClass("luckysheet-freezebar-hover");
            }, function() {
              $(this).parent().removeClass("luckysheet-freezebar-hover");
            });
            $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-drop").mousedown(function() {
              _this.horizontalmovestate = true;
              _this.horizontalmoveposition = $(this).position().top;
              _this.windowHeight = $("#luckysheet-grid-window-1").height();
              $(this).parent().addClass("luckysheet-freezebar-active");
              $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-handle").css("cursor", "-webkit-grabbing");
            });
            let gridwidth = $("#luckysheet-grid-window-1").width();
            $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-handle").css({
              "width": gridwidth - 10,
              "height": "4px",
              "cursor": "-webkit-grab",
              "left": "0px"
            }).end().find(".luckysheet-freezebar-horizontal-drop").css({
              "width": gridwidth - 10,
              "height": "4px",
              "left": "0px",
              "cursor": "-webkit-grab"
            });
          }
          if (freezenhorizontaldata == null) {
            let dataset_row_st;
            if (_this.freezenRealFirstRowColumn) {
              dataset_row_st = 0;
              top = store_default.visibledatarow[dataset_row_st] - 2 + store_default.columnHeaderHeight;
              freezenhorizontaldata = [
                store_default.visibledatarow[dataset_row_st],
                dataset_row_st + 1,
                0,
                _this.cutVolumn(store_default.visibledatarow, dataset_row_st + 1),
                top
              ];
              _this.saveFreezen(freezenhorizontaldata, top, null, null);
              setTimeout(() => {
                luckysheetFreezen.createAssistCanvas();
                luckysheetrefreshgrid();
              });
            } else {
              let scrollTop = $("#luckysheet-cell-main").scrollTop();
              dataset_row_st = luckysheet_searcharray(store_default.visibledatarow, scrollTop);
              if (dataset_row_st == -1) {
                dataset_row_st = 0;
              }
              top = store_default.visibledatarow[dataset_row_st] - 2 - scrollTop + store_default.columnHeaderHeight;
              freezenhorizontaldata = [
                store_default.visibledatarow[dataset_row_st],
                dataset_row_st + 1,
                scrollTop,
                _this.cutVolumn(store_default.visibledatarow, dataset_row_st + 1),
                top
              ];
              _this.saveFreezen(freezenhorizontaldata, top, null, null);
            }
          }
          _this.freezenhorizontaldata = freezenhorizontaldata;
          const freezeHTML = `
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block"
            style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block"
                style="user-select: none;">
                    <div class="luckysheet-icon luckysheet-inline-block " style="user-select: none;">
                        <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-function iconfont luckysheet-iconfont-dongjie1"
                        style="user-select: none;">
                        </div>
                    </div>
                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block"
                    style="user-select: none;">
                        ${locale_default().freezen.freezenCancel}
                    </div>
                </div>
            </div>
        `;
          $("#luckysheet-freezen-btn-horizontal").html(freezeHTML);
          $("#luckysheet-freezebar-horizontal").show().find(".luckysheet-freezebar-horizontal-handle").css({"top": top}).end().find(".luckysheet-freezebar-horizontal-drop").css({"top": top});
        },
        createAssistCanvas: function() {
          let _this = this;
          _this.removeAssistCanvas();
          if (_this.freezenverticaldata != null || _this.freezenhorizontaldata != null) {
            let freezen_horizon_px, freezen_horizon_ed, freezen_horizon_scrollTop;
            let freezen_vertical_px, freezen_vertical_ed, freezen_vertical_scrollTop;
            let drawWidth = store_default.luckysheetTableContentHW[0], drawHeight = store_default.luckysheetTableContentHW[1];
            if (_this.freezenverticaldata != null && _this.freezenhorizontaldata != null) {
              freezen_horizon_px = _this.freezenhorizontaldata[0];
              freezen_horizon_ed = _this.freezenhorizontaldata[1];
              freezen_horizon_scrollTop = _this.freezenhorizontaldata[2];
              freezen_vertical_px = _this.freezenverticaldata[0];
              freezen_vertical_ed = _this.freezenverticaldata[1];
              freezen_vertical_scrollTop = _this.freezenverticaldata[2];
              _this.createCanvas("freezen_3", freezen_vertical_px - freezen_vertical_scrollTop, freezen_horizon_px - freezen_horizon_scrollTop + 1, store_default.rowHeaderWidth - 1, store_default.columnHeaderHeight - 1);
              _this.createCanvas("freezen_4", drawWidth - freezen_vertical_px + freezen_vertical_scrollTop, freezen_horizon_px - freezen_horizon_scrollTop + 1, freezen_vertical_px - freezen_vertical_scrollTop + store_default.rowHeaderWidth - 1, store_default.columnHeaderHeight - 1);
              _this.createCanvas("freezen_7", freezen_vertical_px - freezen_vertical_scrollTop, drawHeight - freezen_horizon_px + freezen_horizon_scrollTop - store_default.columnHeaderHeight, store_default.rowHeaderWidth - 1, freezen_horizon_px - freezen_horizon_scrollTop + store_default.columnHeaderHeight - 1);
            } else if (_this.freezenhorizontaldata != null) {
              freezen_horizon_px = _this.freezenhorizontaldata[0];
              freezen_horizon_ed = _this.freezenhorizontaldata[1];
              freezen_horizon_scrollTop = _this.freezenhorizontaldata[2];
              _this.createCanvas("freezen_h", drawWidth, freezen_horizon_px - freezen_horizon_scrollTop + 1, store_default.rowHeaderWidth - 1, store_default.columnHeaderHeight - 1);
            } else if (_this.freezenverticaldata != null) {
              freezen_vertical_px = _this.freezenverticaldata[0];
              freezen_vertical_ed = _this.freezenverticaldata[1];
              freezen_vertical_scrollTop = _this.freezenverticaldata[2];
              _this.createCanvas("freezen_v", freezen_vertical_px - freezen_vertical_scrollTop, drawHeight, store_default.rowHeaderWidth - 1, store_default.columnHeaderHeight - 1);
            }
            _this.scrollAdapt();
          }
        },
        createCanvas: function(id, width, height, left, top) {
          let c2 = $("<canvas/>").appendTo("#luckysheet-grid-window-1").attr({
            "id": id,
            "width": Math.ceil(width * store_default.devicePixelRatio),
            "height": Math.ceil(height * store_default.devicePixelRatio)
          }).css({
            "user-select": "none",
            "postion": "absolute",
            "left": left,
            "top": top,
            "width": width,
            "height": height,
            "z-index": 10,
            "pointer-events": "none"
          });
        },
        removeAssistCanvas: function() {
          $("#luckysheet-grid-window-1 > canvas").not($("#luckysheetTableContent")).remove();
          $("#luckysheet-cell-selected").css("z-index", 15);
        },
        scrollAdapt: function() {
          let _this = this;
          if (store_default.luckysheet_select_save != null && store_default.luckysheet_select_save.length > 0) {
            _this.scrollAdaptOfselect();
          }
          if ($("#luckysheet-cell-main .luckysheet-data-visualization-chart").length > 0) {
            const chart2 = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["chart"];
            if (chart2 != null && chart2.length > 0) {
              _this.scrollAdaptOfchart();
            }
          }
          if ($("#luckysheet-postil-showBoxs .luckysheet-postil-show").length > 0) {
            _this.scrollAdaptOfpostil();
          }
          if ($("#luckysheet-dropCell-icon").length > 0) {
            _this.scrollAdaptOfdpicon();
          }
          if ($("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").length > 0) {
            _this.scrollAdaptOffilteroptions();
          }
        },
        scrollAdaptOfselect: function() {
          let _this = this;
          if ($("#luckysheet-row-count-show").is(":visible")) {
            $("#luckysheet-row-count-show").hide();
          }
          if ($("#luckysheet-column-count-show").is(":visible")) {
            $("#luckysheet-column-count-show").hide();
          }
          $("#luckysheet-rows-h-selected").empty();
          $("#luckysheet-cols-h-selected").empty();
          let scrollTop = $("#luckysheet-cell-main").scrollTop();
          let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
          if (_this.freezenhorizontaldata != null && _this.freezenverticaldata != null) {
            let freezenTop = _this.freezenhorizontaldata[0];
            let freezen_rowindex = _this.freezenhorizontaldata[1];
            let offTop = scrollTop - _this.freezenhorizontaldata[2];
            let freezenLeft = _this.freezenverticaldata[0];
            let freezen_colindex = _this.freezenverticaldata[1];
            let offLeft = scrollLeft - _this.freezenverticaldata[2];
            for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
              let obj = $.extend(true, {}, store_default.luckysheet_select_save[s]);
              let r1 = obj.row[0], r2 = obj.row[1];
              let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
              let top_move = row_pre;
              let height_move = row - row_pre - 1;
              let rangeshow = true;
              if (r1 >= freezen_rowindex) {
                if (top_move + height_move < freezenTop + offTop) {
                  rangeshow = false;
                } else if (top_move < freezenTop + offTop) {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "top": freezenTop + offTop,
                    "height": height_move - (freezenTop + offTop - top_move)
                  });
                } else {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "top": top_move,
                    "height": height_move
                  });
                }
              } else if (r2 >= freezen_rowindex) {
                if (top_move + height_move < freezenTop + offTop) {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "top": top_move + offTop,
                    "height": freezenTop - top_move
                  });
                } else {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "top": top_move + offTop,
                    "height": height_move - offTop
                  });
                }
              } else {
                $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css("top", top_move + offTop);
              }
              let c1 = obj.column[0], c2 = obj.column[1];
              let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
              let left_move = col_pre;
              let width_move = col - col_pre - 1;
              if (c1 >= freezen_colindex) {
                if (left_move + width_move < freezenLeft + offLeft) {
                  rangeshow = false;
                } else if (left_move < freezenLeft + offLeft) {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "left": freezenLeft + offLeft,
                    "width": width_move - (freezenLeft + offLeft - left_move)
                  });
                } else {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "left": left_move,
                    "width": width_move
                  });
                }
              } else if (c2 >= freezen_colindex) {
                if (left_move + width_move < freezenLeft + offLeft) {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "left": left_move + offLeft,
                    "width": freezenLeft - left_move
                  });
                } else {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "left": left_move + offLeft,
                    "width": width_move - offLeft
                  });
                }
              } else {
                $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css("left", left_move + offLeft);
              }
              if (!rangeshow) {
                $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).hide();
              }
              if (s == store_default.luckysheet_select_save.length - 1) {
                let rf = obj.row_focus == null ? r1 : obj.row_focus;
                let cf = obj.column_focus == null ? c1 : obj.column_focus;
                let row_f = store_default.visibledatarow[rf], row_pre_f = rf - 1 == -1 ? 0 : store_default.visibledatarow[rf - 1];
                let col_f = store_default.visibledatacolumn[cf], col_pre_f = cf - 1 == -1 ? 0 : store_default.visibledatacolumn[cf - 1];
                let margeset = menuButton_default.mergeborer(store_default.flowdata, rf, cf);
                if (!!margeset) {
                  row_f = margeset.row[1];
                  row_pre_f = margeset.row[0];
                  col_f = margeset.column[1];
                  col_pre_f = margeset.column[0];
                }
                let top = row_pre_f;
                let height = row_f - row_pre_f - 1;
                let left = col_pre_f;
                let width = col_f - col_pre_f - 1;
                let focuscell = true;
                if (top >= freezenTop) {
                  if (top + height < freezenTop + offTop) {
                    focuscell = false;
                  } else if (top < freezenTop + offTop) {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "top": freezenTop + offTop,
                      "height": height - (freezenTop + offTop - top)
                    });
                  } else {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "top": top,
                      "height": height
                    });
                  }
                } else if (top + height >= freezenTop) {
                  if (top + height < freezenTop + offTop) {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "top": top + offTop,
                      "height": freezenTop - top
                    });
                  } else {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "top": top + offTop,
                      "height": height - offTop
                    });
                  }
                } else {
                  $("#luckysheet-cell-selected-focus").show().css("top", top + offTop);
                }
                if (left >= freezenLeft) {
                  if (left + width < freezenLeft + offLeft) {
                    focuscell = false;
                  } else if (left < freezenLeft + offLeft) {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "left": freezenLeft + offLeft,
                      "width": width - (freezenLeft + offLeft - left)
                    });
                  } else {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "left": left,
                      "width": width
                    });
                  }
                } else if (left + width >= freezenLeft) {
                  if (left + width < freezenLeft + offLeft) {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "left": left + offLeft,
                      "width": freezenLeft - left
                    });
                  } else {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "left": left + offLeft,
                      "width": width - offLeft
                    });
                  }
                } else {
                  $("#luckysheet-cell-selected-focus").show().css("left", left + offLeft);
                }
                if (!focuscell) {
                  $("#luckysheet-cell-selected-focus").hide();
                }
              }
            }
          } else if (_this.freezenhorizontaldata != null) {
            let freezenTop = _this.freezenhorizontaldata[0];
            let freezen_rowindex = _this.freezenhorizontaldata[1];
            let offTop = scrollTop - _this.freezenhorizontaldata[2];
            for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
              let obj = $.extend(true, {}, store_default.luckysheet_select_save[s]);
              let r1 = obj.row[0], r2 = obj.row[1];
              let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
              let top_move = row_pre;
              let height_move = row - row_pre - 1;
              if (r1 >= freezen_rowindex) {
                if (top_move + height_move < freezenTop + offTop) {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).hide();
                } else if (top_move < freezenTop + offTop) {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "top": freezenTop + offTop,
                    "height": height_move - (freezenTop + offTop - top_move)
                  });
                } else {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "top": top_move,
                    "height": height_move
                  });
                }
              } else if (r2 >= freezen_rowindex) {
                if (top_move + height_move < freezenTop + offTop) {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "top": top_move + offTop,
                    "height": freezenTop - top_move
                  });
                } else {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "top": top_move + offTop,
                    "height": height_move - offTop
                  });
                }
              } else {
                $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css("top", top_move + offTop);
              }
              if (s == store_default.luckysheet_select_save.length - 1) {
                let rf = obj.row_focus == null ? r1 : obj.row_focus;
                let cf = obj.column_focus == null ? obj.column[0] : obj.column_focus;
                let row_f = store_default.visibledatarow[rf], row_pre_f = rf - 1 == -1 ? 0 : store_default.visibledatarow[rf - 1];
                let margeset = menuButton_default.mergeborer(store_default.flowdata, rf, cf);
                if (!!margeset) {
                  row_f = margeset.row[1];
                  row_pre_f = margeset.row[0];
                }
                let top = row_pre_f;
                let height = row_f - row_pre_f - 1;
                if (top >= freezenTop) {
                  if (top + height < freezenTop + offTop) {
                    $("#luckysheet-cell-selected-focus").hide();
                  } else if (top < freezenTop + offTop) {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "top": freezenTop + offTop,
                      "height": height - (freezenTop + offTop - top)
                    });
                  } else {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "top": top,
                      "height": height
                    });
                  }
                } else if (top + height >= freezenTop) {
                  if (top + height < freezenTop + offTop) {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "top": top + offTop,
                      "height": freezenTop - top
                    });
                  } else {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "top": top + offTop,
                      "height": height - offTop
                    });
                  }
                } else {
                  $("#luckysheet-cell-selected-focus").show().css("top", top + offTop);
                }
              }
            }
          } else if (_this.freezenverticaldata != null) {
            let freezenLeft = _this.freezenverticaldata[0];
            let freezen_colindex = _this.freezenverticaldata[1];
            let offLeft = scrollLeft - _this.freezenverticaldata[2];
            for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
              let obj = $.extend(true, {}, store_default.luckysheet_select_save[s]);
              let c1 = obj.column[0], c2 = obj.column[1];
              let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
              let left_move = col_pre;
              let width_move = col - col_pre - 1;
              if (c1 >= freezen_colindex) {
                if (left_move + width_move < freezenLeft + offLeft) {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).hide();
                } else if (left_move < freezenLeft + offLeft) {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "left": freezenLeft + offLeft,
                    "width": width_move - (freezenLeft + offLeft - left_move)
                  });
                } else {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "left": left_move,
                    "width": width_move
                  });
                }
              } else if (c2 >= freezen_colindex) {
                if (left_move + width_move < freezenLeft + offLeft) {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "left": left_move + offLeft,
                    "width": freezenLeft - left_move
                  });
                } else {
                  $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css({
                    "left": left_move + offLeft,
                    "width": width_move - offLeft
                  });
                }
              } else {
                $("#luckysheet-cell-selected-boxs").find(".luckysheet-cell-selected").eq(s).show().css("left", left_move + offLeft);
              }
              if (s == store_default.luckysheet_select_save.length - 1) {
                let rf = obj.row_focus == null ? obj.row[0] : obj.row_focus;
                let cf = obj.column_focus == null ? c1 : obj.column_focus;
                let col_f = store_default.visibledatacolumn[cf], col_pre_f = cf - 1 == -1 ? 0 : store_default.visibledatacolumn[cf - 1];
                let margeset = menuButton_default.mergeborer(store_default.flowdata, rf, cf);
                if (!!margeset) {
                  col_f = margeset.column[1];
                  col_pre_f = margeset.column[0];
                }
                let left = col_pre_f;
                let width = col_f - col_pre_f - 1;
                if (left >= freezenLeft) {
                  if (left + width < freezenLeft + offLeft) {
                    $("#luckysheet-cell-selected-focus").hide();
                  } else if (left < freezenLeft + offLeft) {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "left": freezenLeft + offLeft,
                      "width": width - (freezenLeft + offLeft - left)
                    });
                  } else {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "left": left,
                      "width": width
                    });
                  }
                } else if (left + width >= freezenLeft) {
                  if (left + width < freezenLeft + offLeft) {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "left": left + offLeft,
                      "width": freezenLeft - left
                    });
                  } else {
                    $("#luckysheet-cell-selected-focus").show().css({
                      "left": left + offLeft,
                      "width": width - offLeft
                    });
                  }
                } else {
                  $("#luckysheet-cell-selected-focus").show().css("left", left + offLeft);
                }
              }
            }
          } else {
            selectHightlightShow();
          }
        },
        scrollAdaptOfchart: function() {
          let _this = this;
          let scrollTop = $("#luckysheet-cell-main").scrollTop();
          let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
          if (_this.freezenhorizontaldata != null && _this.freezenverticaldata != null) {
            let freezenTop = _this.freezenhorizontaldata[0] - _this.freezenhorizontaldata[2];
            let freezenLeft = _this.freezenverticaldata[0] - _this.freezenverticaldata[2];
            $("#luckysheet-cell-main .luckysheet-data-visualization-chart").each(function(i2, e) {
              let x = $(e).position();
              let width = $(e).width();
              let height = $(e).height();
              let $canvas_width = $(e).find("canvas").width();
              let $canvas_height = $(e).find("canvas").height();
              let height_diff = $canvas_height - height;
              let width_diff = $canvas_width - width;
              if (x.top - height_diff < freezenTop) {
                let size = freezenTop - (x.top - height_diff);
                if (size > $canvas_height + 40 + 2) {
                  $(e).css("visibility", "hidden");
                } else {
                  $(e).css({
                    "top": freezenTop + scrollTop,
                    "height": $canvas_height - size,
                    "visibility": "visible"
                  });
                  $(e).find("canvas").css("top", -size);
                }
              } else {
                $(e).css({
                  "top": x.top - height_diff + scrollTop,
                  "height": $canvas_height,
                  "visibility": "visible"
                });
                $(e).find("canvas").css("top", 0);
              }
              if (x.left - width_diff < freezenLeft) {
                let size = freezenLeft - (x.left - width_diff);
                if (size > $canvas_width + 20 + 2) {
                  $(e).css("visibility", "hidden");
                } else {
                  $(e).css({
                    "left": freezenLeft + scrollLeft,
                    "width": $canvas_width - size,
                    "visibility": "visible"
                  });
                  $(e).find("canvas").css("left", -size);
                }
              } else {
                $(e).css({
                  "left": x.left - width_diff + scrollLeft,
                  "width": $canvas_width,
                  "visibility": "visible"
                });
                $(e).find("canvas").css("left", 0);
              }
            });
          } else if (_this.freezenhorizontaldata != null) {
            let freezenTop = _this.freezenhorizontaldata[0] - _this.freezenhorizontaldata[2];
            $("#luckysheet-cell-main .luckysheet-data-visualization-chart").each(function(i2, e) {
              let x = $(e).position();
              let height = $(e).height();
              let $canvas_height = $(e).find("canvas").height();
              let height_diff = $canvas_height - height;
              if (x.top - height_diff < freezenTop) {
                let size = freezenTop - (x.top - height_diff);
                if (size > $canvas_height + 40 + 2) {
                  $(e).css("visibility", "hidden");
                } else {
                  $(e).css({
                    "top": freezenTop + scrollTop,
                    "height": $canvas_height - size,
                    "visibility": "visible"
                  });
                  $(e).find("canvas").css("top", -size);
                }
              } else {
                $(e).css({
                  "top": x.top - height_diff + scrollTop,
                  "height": $canvas_height,
                  "visibility": "visible"
                });
                $(e).find("canvas").css("top", 0);
              }
            });
          } else if (_this.freezenverticaldata != null) {
            let freezenLeft = _this.freezenverticaldata[0] - _this.freezenverticaldata[2];
            $("#luckysheet-cell-main .luckysheet-data-visualization-chart").each(function(i2, e) {
              let x = $(e).position();
              let width = $(e).width();
              let $canvas_width = $(e).find("canvas").width();
              let width_diff = $canvas_width - width;
              if (x.left - width_diff < freezenLeft) {
                let size = freezenLeft - (x.left - width_diff);
                if (size > $canvas_width + 20 + 2) {
                  $(e).css("visibility", "hidden");
                } else {
                  $(e).css({
                    "left": freezenLeft + scrollLeft,
                    "width": $canvas_width - size,
                    "visibility": "visible"
                  });
                  $(e).find("canvas").css("left", -size);
                }
              } else {
                $(e).css({
                  "left": x.left - width_diff + scrollLeft,
                  "width": $canvas_width,
                  "visibility": "visible"
                });
                $(e).find("canvas").css("left", 0);
              }
            });
          } else {
            $("#luckysheet-cell-main .luckysheet-data-visualization-chart").each(function(i2, e) {
              let x = $(e).position();
              let width = $(e).width();
              let height = $(e).height();
              let $canvas_width = $(e).find("canvas").width();
              let $canvas_height = $(e).find("canvas").height();
              let height_diff = $canvas_height - height;
              let width_diff = $canvas_width - width;
              $(e).css({
                "top": x.top - height_diff + scrollTop,
                "height": $canvas_height,
                "left": x.left - width_diff + scrollLeft,
                "width": $canvas_width,
                "visibility": "visible"
              });
              $(e).find("canvas").css({
                "top": 0,
                "left": 0
              });
            });
          }
        },
        scrollAdaptOfpostil: function() {
          let _this = this;
          let scrollTop = $("#luckysheet-cell-main").scrollTop();
          let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
          if (_this.freezenhorizontaldata != null && _this.freezenverticaldata != null) {
            let freezenTop = _this.freezenhorizontaldata[0];
            let freezenLeft = _this.freezenverticaldata[0];
            let offTop = scrollTop - _this.freezenhorizontaldata[2];
            let offLeft = scrollLeft - _this.freezenverticaldata[2];
            $("#luckysheet-postil-showBoxs .luckysheet-postil-show").each(function(i2, e) {
              let id = $(e).attr("id");
              let r2 = id.split("luckysheet-postil-show_")[1].split("_")[0];
              let c2 = id.split("luckysheet-postil-show_")[1].split("_")[1];
              let postil = store_default.flowdata[r2][c2].ps;
              let row = store_default.visibledatarow[r2], row_pre = r2 - 1 == -1 ? 0 : store_default.visibledatarow[r2 - 1];
              let col = store_default.visibledatacolumn[c2], col_pre = c2 - 1 == -1 ? 0 : store_default.visibledatacolumn[c2 - 1];
              let margeset = menuButton_default.mergeborer(store_default.flowdata, r2, c2);
              if (!!margeset) {
                row = margeset.row[1];
                row_pre = margeset.row[0];
                col = margeset.column[1];
                col_pre = margeset.column[0];
              }
              let toX = col;
              let toY = row_pre;
              let postil_left = postil["left"] == null ? toX + 18 : postil["left"];
              let postil_top = postil["top"] == null ? toY - 18 : postil["top"];
              let postil_width = postil["width"] == null ? postil_default.defaultWidth : postil["width"];
              let postil_height = postil["height"] == null ? postil_default.defaultHeight : postil["height"];
              if (postil_top < 0) {
                postil_top = 2;
              }
              let size = postil_default.getArrowCanvasSize(postil_left, postil_top, toX, toY);
              let show = true;
              let show2 = true;
              if (r2 >= _this.freezenhorizontaldata[1]) {
                if (postil_top + postil_height < freezenTop) {
                  $(e).show().find(".luckysheet-postil-show-main").css("top", postil_top + offTop);
                  $(e).show().find(".arrowCanvas").css("top", size[1] + offTop);
                } else {
                  if (postil_top < freezenTop + offTop) {
                    if (postil_top + postil_height <= freezenTop + offTop) {
                      show = false;
                    } else {
                      $(e).show().find(".luckysheet-postil-show-main").css({"top": freezenTop + offTop, "height": postil_height - (freezenTop + offTop - postil_top)});
                      $(e).show().find(".formulaInputFocus").css("margin-top", -(freezenTop + offTop - postil_top));
                      $(e).show().find(".arrowCanvas").hide();
                      show2 = false;
                    }
                  } else {
                    $(e).show().find(".luckysheet-postil-show-main").css({
                      "top": postil_top,
                      "height": postil_height
                    });
                    $(e).show().find(".formulaInputFocus").css("margin-top", 0);
                    $(e).show().find(".arrowCanvas").css("top", size[1]);
                  }
                }
              } else {
                $(e).show().find(".luckysheet-postil-show-main").css("top", postil_top + offTop);
                $(e).show().find(".arrowCanvas").css("top", size[1] + offTop);
              }
              if (c2 >= _this.freezenverticaldata[1]) {
                if (postil_left + postil_width < freezenLeft) {
                  $(e).show().find(".luckysheet-postil-show-main").css("left", postil_left + offLeft);
                  $(e).show().find(".arrowCanvas").css("left", size[0] + offLeft);
                } else {
                  if (postil_left < freezenLeft + offLeft) {
                    if (postil_left + postil_width <= freezenLeft + offLeft) {
                      show = false;
                    } else {
                      $(e).show().find(".luckysheet-postil-show-main").css({"left": freezenLeft + offLeft, "width": postil_width - (freezenLeft + offLeft - postil_left)});
                      $(e).show().find(".formulaInputFocus").css("margin-left", -(freezenLeft + offLeft - postil_left));
                      $(e).show().find(".arrowCanvas").hide();
                      show2 = false;
                    }
                  } else {
                    $(e).show().find(".luckysheet-postil-show-main").css({
                      "left": postil_left,
                      "width": postil_width
                    });
                    $(e).show().find(".formulaInputFocus").css("margin-left", 0);
                    $(e).show().find(".arrowCanvas").css("left", size[0]);
                  }
                }
              } else {
                $(e).show().find(".luckysheet-postil-show-main").css("left", postil_left + offLeft);
                $(e).show().find(".arrowCanvas").css("left", size[0] + offLeft);
              }
              if (!show) {
                $(e).hide();
              }
              if (show && show2) {
                $(e).show().find(".arrowCanvas").show();
              }
            });
          } else if (_this.freezenhorizontaldata != null) {
            let freezenTop = _this.freezenhorizontaldata[0];
            let offTop = scrollTop - _this.freezenhorizontaldata[2];
            $("#luckysheet-postil-showBoxs .luckysheet-postil-show").each(function(i2, e) {
              let id = $(e).attr("id");
              let r2 = id.split("luckysheet-postil-show_")[1].split("_")[0];
              let c2 = id.split("luckysheet-postil-show_")[1].split("_")[1];
              let postil = store_default.flowdata[r2][c2].ps;
              let row = store_default.visibledatarow[r2], row_pre = r2 - 1 == -1 ? 0 : store_default.visibledatarow[r2 - 1];
              let col = store_default.visibledatacolumn[c2], col_pre = c2 - 1 == -1 ? 0 : store_default.visibledatacolumn[c2 - 1];
              let margeset = menuButton_default.mergeborer(store_default.flowdata, r2, c2);
              if (!!margeset) {
                row = margeset.row[1];
                row_pre = margeset.row[0];
                col = margeset.column[1];
                col_pre = margeset.column[0];
              }
              let toX = col;
              let toY = row_pre;
              let postil_left = postil["left"] == null ? toX + 18 : postil["left"];
              let postil_top = postil["top"] == null ? toY - 18 : postil["top"];
              let postil_width = postil["width"] == null ? postil_default.defaultWidth : postil["width"];
              let postil_height = postil["height"] == null ? postil_default.defaultHeight : postil["height"];
              if (postil_top < 0) {
                postil_top = 2;
              }
              let size = postil_default.getArrowCanvasSize(postil_left, postil_top, toX, toY);
              if (r2 >= _this.freezenhorizontaldata[1]) {
                if (postil_top + postil_height < freezenTop) {
                  $(e).show().find(".luckysheet-postil-show-main").css("top", postil_top + offTop);
                  $(e).show().find(".arrowCanvas").css("top", size[1] + offTop);
                } else {
                  if (postil_top < freezenTop + offTop) {
                    if (postil_top + postil_height <= freezenTop + offTop) {
                      $(e).hide();
                    } else {
                      $(e).show().find(".luckysheet-postil-show-main").css({"top": freezenTop + offTop, "height": postil_height - (freezenTop + offTop - postil_top)});
                      $(e).show().find(".formulaInputFocus").css("margin-top", -(freezenTop + offTop - postil_top));
                      $(e).show().find(".arrowCanvas").hide();
                    }
                  } else {
                    postil_default.buildPs(r2, c2, postil);
                  }
                }
              } else {
                $(e).show().find(".luckysheet-postil-show-main").css("top", postil_top + offTop);
                $(e).show().find(".arrowCanvas").css("top", size[1] + offTop);
              }
            });
          } else if (_this.freezenverticaldata != null) {
            let freezenLeft = _this.freezenverticaldata[0];
            let offLeft = scrollLeft - _this.freezenverticaldata[2];
            $("#luckysheet-postil-showBoxs .luckysheet-postil-show").each(function(i2, e) {
              let id = $(e).attr("id");
              let r2 = id.split("luckysheet-postil-show_")[1].split("_")[0];
              let c2 = id.split("luckysheet-postil-show_")[1].split("_")[1];
              let postil = store_default.flowdata[r2][c2].ps;
              let row = store_default.visibledatarow[r2], row_pre = r2 - 1 == -1 ? 0 : store_default.visibledatarow[r2 - 1];
              let col = store_default.visibledatacolumn[c2], col_pre = c2 - 1 == -1 ? 0 : store_default.visibledatacolumn[c2 - 1];
              let margeset = menuButton_default.mergeborer(store_default.flowdata, r2, c2);
              if (!!margeset) {
                row = margeset.row[1];
                row_pre = margeset.row[0];
                col = margeset.column[1];
                col_pre = margeset.column[0];
              }
              let toX = col;
              let toY = row_pre;
              let postil_left = postil["left"] == null ? toX + 18 : postil["left"];
              let postil_top = postil["top"] == null ? toY - 18 : postil["top"];
              let postil_width = postil["width"] == null ? postil_default.defaultWidth : postil["width"];
              let postil_height = postil["height"] == null ? postil_default.defaultHeight : postil["height"];
              if (postil_top < 0) {
                postil_top = 2;
              }
              let size = postil_default.getArrowCanvasSize(postil_left, postil_top, toX, toY);
              if (c2 >= _this.freezenverticaldata[1]) {
                if (postil_left + postil_width < freezenLeft) {
                  $(e).show().find(".luckysheet-postil-show-main").css("left", postil_left + offLeft);
                  $(e).show().find(".arrowCanvas").css("left", size[0] + offLeft);
                } else {
                  if (postil_left < freezenLeft + offLeft) {
                    if (postil_left + postil_width <= freezenLeft + offLeft) {
                      $(e).hide();
                    } else {
                      $(e).show().find(".luckysheet-postil-show-main").css({"left": freezenLeft + offLeft, "width": postil_width - (freezenLeft + offLeft - postil_left)});
                      $(e).show().find(".formulaInputFocus").css("margin-left", -(freezenLeft + offLeft - postil_left));
                      $(e).show().find(".arrowCanvas").hide();
                    }
                  } else {
                    postil_default.buildPs(r2, c2, postil);
                  }
                }
              } else {
                $(e).show().find(".luckysheet-postil-show-main").css("left", postil_left + offLeft);
                $(e).show().find(".arrowCanvas").css("left", size[0] + offLeft);
              }
            });
          } else {
            $("#luckysheet-postil-showBoxs .luckysheet-postil-show").each(function(i2, e) {
              let id = $(e).attr("id");
              let r2 = id.split("luckysheet-postil-show_")[1].split("_")[0];
              let c2 = id.split("luckysheet-postil-show_")[1].split("_")[1];
              let postil = store_default.flowdata[r2][c2].ps;
              postil_default.buildPs(r2, c2, postil);
            });
          }
        },
        scrollAdaptOfdpicon: function() {
          let _this = this;
          let copy_r = dropCell_default.copyRange["row"][1], copy_c = dropCell_default.copyRange["column"][1];
          let apply_r = dropCell_default.applyRange["row"][1], apply_c = dropCell_default.applyRange["column"][1];
          let row_index, col_index;
          if (apply_r >= copy_r && apply_c >= copy_c) {
            row_index = apply_r;
            col_index = apply_c;
          } else {
            row_index = copy_r;
            col_index = copy_c;
          }
          if (_this.freezenhorizontaldata != null && _this.freezenverticaldata != null) {
            let freezen_rowindex = _this.freezenhorizontaldata[1];
            let offsetRow = luckysheet_searcharray(_this.freezenhorizontaldata[3], $("#luckysheet-cell-main").scrollTop() - _this.freezenhorizontaldata[2]);
            let freezen_colindex = _this.freezenverticaldata[1];
            let offsetColumn = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft() - _this.freezenverticaldata[2]);
            if (row_index >= freezen_rowindex && col_index >= freezen_colindex) {
              if (row_index < freezen_rowindex + offsetRow - 1 || col_index < freezen_colindex + offsetColumn - 1) {
                $("#luckysheet-dropCell-icon").hide();
              } else {
                $("#luckysheet-dropCell-icon").show();
              }
            } else if (row_index >= freezen_rowindex) {
              if (row_index < freezen_rowindex + offsetRow - 1) {
                $("#luckysheet-dropCell-icon").hide();
              } else {
                let col = colLocationByIndex(col_index + offsetColumn)[1];
                $("#luckysheet-dropCell-icon").show().css("left", col);
              }
            } else if (col_index >= freezen_colindex) {
              if (col_index < freezen_colindex + offsetColumn - 1) {
                $("#luckysheet-dropCell-icon").hide();
              } else {
                let row = rowLocationByIndex(row_index + offsetRow)[1];
                $("#luckysheet-dropCell-icon").show().css("top", row);
              }
            } else {
              let row = rowLocationByIndex(row_index + offsetRow)[1], col = colLocationByIndex(col_index + offsetColumn)[1];
              $("#luckysheet-dropCell-icon").show().css({"left": col, "top": row});
            }
          } else if (_this.freezenhorizontaldata != null) {
            let freezen_rowindex = _this.freezenhorizontaldata[1];
            let offsetRow = luckysheet_searcharray(_this.freezenhorizontaldata[3], $("#luckysheet-cell-main").scrollTop() - _this.freezenhorizontaldata[2]);
            if (row_index >= freezen_rowindex) {
              if (row_index < freezen_rowindex + offsetRow - 1) {
                $("#luckysheet-dropCell-icon").hide();
              } else {
                $("#luckysheet-dropCell-icon").show();
              }
            } else {
              let row = rowLocationByIndex(row_index + offsetRow)[1];
              $("#luckysheet-dropCell-icon").show().css("top", row);
            }
          } else if (_this.freezenverticaldata != null) {
            let freezen_colindex = _this.freezenverticaldata[1];
            let offsetColumn = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft() - _this.freezenverticaldata[2]);
            if (col_index >= freezen_colindex) {
              if (col_index < freezen_colindex + offsetColumn - 1) {
                $("#luckysheet-dropCell-icon").hide();
              } else {
                $("#luckysheet-dropCell-icon").show();
              }
            } else {
              let col = colLocationByIndex(col_index + offsetColumn)[1];
              $("#luckysheet-dropCell-icon").show().css("left", col);
            }
          } else {
            let row = rowLocationByIndex(row_index)[1], col = colLocationByIndex(col_index)[1];
            $("#luckysheet-dropCell-icon").show().css({"left": col, "top": row});
          }
        },
        scrollAdaptOffilteroptions: function() {
          let _this = this;
          if (_this.freezenhorizontaldata != null && _this.freezenverticaldata != null) {
            let freezen_rowindex = _this.freezenhorizontaldata[1];
            let freezen_top = _this.freezenhorizontaldata[0] + $("#luckysheet-cell-main").scrollTop();
            let freezen_colindex = _this.freezenverticaldata[1];
            let offsetColumn = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft() - _this.freezenverticaldata[2]);
            $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").each(function(i2, e) {
              let row_index = $(e).data("str");
              let top = row_index - 1 == -1 ? 0 : store_default.visibledatarow[row_index - 1];
              let col_index = $(e).data("cindex");
              if (row_index >= freezen_rowindex && col_index >= freezen_colindex) {
                if (top < freezen_top || col_index < freezen_colindex + offsetColumn) {
                  $(e).hide();
                } else {
                  $(e).show();
                }
              } else if (row_index >= freezen_rowindex) {
                if (top < freezen_top) {
                  $(e).hide();
                } else {
                  let left = store_default.visibledatacolumn[col_index + offsetColumn] - 20;
                  $(e).show().css("left", left);
                }
              } else if (col_index >= freezen_colindex) {
                if (col_index < freezen_colindex + offsetColumn) {
                  $(e).hide();
                } else {
                  $(e).show().css("top", top + $("#luckysheet-cell-main").scrollTop());
                }
              } else {
                let left = store_default.visibledatacolumn[col_index + offsetColumn] - 20;
                $(e).show().css({"left": left, "top": top + $("#luckysheet-cell-main").scrollTop()});
              }
            });
          } else if (_this.freezenhorizontaldata != null) {
            let freezen_rowindex = _this.freezenhorizontaldata[1];
            let freezen_top = _this.freezenhorizontaldata[0] + $("#luckysheet-cell-main").scrollTop();
            $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").each(function(i2, e) {
              let row_index = $(e).data("str");
              let top = row_index - 1 == -1 ? 0 : store_default.visibledatarow[row_index - 1];
              if (row_index >= freezen_rowindex) {
                if (top < freezen_top) {
                  $(e).hide();
                } else {
                  $(e).show();
                }
              } else {
                $(e).show().css("top", top + $("#luckysheet-cell-main").scrollTop());
              }
            });
          } else if (_this.freezenverticaldata != null) {
            let freezen_colindex = _this.freezenverticaldata[1];
            let offsetColumn = luckysheet_searcharray(_this.freezenverticaldata[3], $("#luckysheet-cell-main").scrollLeft() - _this.freezenverticaldata[2]);
            $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").each(function(i2, e) {
              let col_index = $(e).data("cindex");
              if (col_index >= freezen_colindex) {
                if (col_index < freezen_colindex + offsetColumn) {
                  $(e).hide();
                } else {
                  $(e).show();
                }
              } else {
                let left = store_default.visibledatacolumn[col_index + offsetColumn] - 20;
                $(e).show().css("left", left);
              }
            });
          } else {
            $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex).empty();
            createFilterOptions(store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].filter_select);
          }
        },
        saveFrozen: function(operate, order, focus = {}) {
          if (order == null) {
            order = getSheetIndex(store_default.currentSheetIndex);
          }
          const select_save = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
          const row_focus = select_save["row_focus"] == null ? select_save["row"][0] : select_save["row_focus"];
          const column_focus = select_save["column_focus"] == null ? select_save["column"][0] : select_save["column_focus"];
          const range2 = {
            row_focus: focus.row_focus || row_focus,
            column_focus: focus.column_focus || column_focus
          };
          const frozen = {
            "freezenRow": {
              type: "row"
            },
            "freezenColumn": {
              type: "column"
            },
            "freezenRC": {
              type: "both"
            },
            "freezenRowRange": {
              type: "rangeRow",
              range: range2
            },
            "freezenColumnRange": {
              type: "rangeColumn",
              range: range2
            },
            "freezenRCRange": {
              type: "rangeBoth",
              range: range2
            },
            "freezenCancel": {
              type: "cancel"
            }
          };
          store_default.luckysheetfile[order]["frozen"] = frozen[operate];
        },
        frozenTofreezen: function() {
          let file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
          const frozen = file["frozen"];
          if (frozen == null) {
            return;
          }
          let freezen = null;
          if (frozen.type === "row") {
            let scrollTop = 0;
            let row_st = luckysheet_searcharray(store_default.visibledatarow, scrollTop);
            if (row_st == -1) {
              row_st = 0;
            }
            let top = store_default.visibledatarow[row_st] - 2 - scrollTop + store_default.columnHeaderHeight;
            let freezenhorizontaldata = [store_default.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(store_default.visibledatarow, row_st + 1), top];
            freezen = {
              horizontal: {
                freezenhorizontaldata,
                top
              }
            };
          } else if (frozen.type === "column") {
            let scrollLeft = 0;
            let col_st = luckysheet_searcharray(store_default.visibledatacolumn, scrollLeft);
            if (col_st == -1) {
              col_st = 0;
            }
            let left = store_default.visibledatacolumn[col_st] - 2 - scrollLeft + store_default.rowHeaderWidth;
            let freezenverticaldata = [store_default.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(store_default.visibledatacolumn, col_st + 1), left];
            freezen = {
              vertical: {
                freezenverticaldata,
                left
              }
            };
          } else if (frozen.type === "both") {
            let scrollTop = 0;
            let row_st = luckysheet_searcharray(store_default.visibledatarow, scrollTop);
            if (row_st == -1) {
              row_st = 0;
            }
            let top = store_default.visibledatarow[row_st] - 2 - scrollTop + store_default.columnHeaderHeight;
            let freezenhorizontaldata = [store_default.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(store_default.visibledatarow, row_st + 1), top];
            let scrollLeft = 0;
            let col_st = luckysheet_searcharray(store_default.visibledatacolumn, scrollLeft);
            if (col_st == -1) {
              col_st = 0;
            }
            let left = store_default.visibledatacolumn[col_st] - 2 - scrollLeft + store_default.rowHeaderWidth;
            let freezenverticaldata = [store_default.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(store_default.visibledatacolumn, col_st + 1), left];
            freezen = {
              horizontal: {
                freezenhorizontaldata,
                top
              },
              vertical: {
                freezenverticaldata,
                left
              }
            };
          } else if (frozen.type === "rangeRow") {
            let scrollTop = 0;
            let row_st = luckysheet_searcharray(store_default.visibledatarow, scrollTop);
            let row_focus = frozen.range["row_focus"];
            if (row_focus > row_st) {
              row_st = row_focus;
            }
            if (row_st == -1) {
              row_st = 0;
            }
            let top = store_default.visibledatarow[row_st] - 2 - scrollTop + store_default.columnHeaderHeight;
            let freezenhorizontaldata = [store_default.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(store_default.visibledatarow, row_st + 1), top];
            freezen = {
              horizontal: {
                freezenhorizontaldata,
                top
              }
            };
          } else if (frozen.type === "rangeColumn") {
            let scrollLeft = 0;
            let col_st = luckysheet_searcharray(store_default.visibledatacolumn, scrollLeft);
            let column_focus = frozen.range["column_focus"];
            if (column_focus > col_st) {
              col_st = column_focus;
            }
            if (col_st == -1) {
              col_st = 0;
            }
            let left = store_default.visibledatacolumn[col_st] - 2 - scrollLeft + store_default.rowHeaderWidth;
            let freezenverticaldata = [store_default.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(store_default.visibledatacolumn, col_st + 1), left];
            freezen = {
              vertical: {
                freezenverticaldata,
                left
              }
            };
          } else if (frozen.type === "rangeBoth") {
            let scrollTop = 0;
            let row_st = luckysheet_searcharray(store_default.visibledatarow, scrollTop);
            let row_focus = frozen.range["row_focus"];
            if (row_focus > row_st) {
              row_st = row_focus;
            }
            if (row_st == -1) {
              row_st = 0;
            }
            let top = store_default.visibledatarow[row_st] - 2 - scrollTop + store_default.columnHeaderHeight;
            let freezenhorizontaldata = [store_default.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(store_default.visibledatarow, row_st + 1), top];
            let scrollLeft = 0;
            let col_st = luckysheet_searcharray(store_default.visibledatacolumn, scrollLeft);
            let column_focus = frozen.range["column_focus"];
            if (column_focus > col_st) {
              col_st = column_focus;
            }
            if (col_st == -1) {
              col_st = 0;
            }
            let left = store_default.visibledatacolumn[col_st] - 2 - scrollLeft + store_default.rowHeaderWidth;
            let freezenverticaldata = [store_default.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(store_default.visibledatacolumn, col_st + 1), left];
            freezen = {
              horizontal: {
                freezenhorizontaldata,
                top
              },
              vertical: {
                freezenverticaldata,
                left
              }
            };
          } else if (frozen.type === "cancel") {
            freezen = {
              horizontal: null,
              vertical: null
            };
          }
          file["freezen"] = freezen;
        }
      };
      freezen_default = luckysheetFreezen;
    }
  });

  // src/controllers/resize.js
  function luckysheetsizeauto(isRefreshCanvas = true) {
    if (!luckysheetConfigsetting_default.showinfobar) {
      store_default.infobarHeight = 0;
      $("#luckysheet_info_detail").hide();
    } else {
      $("#luckysheet_info_detail").show();
      store_default.infobarHeight = document.querySelector("#luckysheet_info_detail").offsetHeight;
    }
    if (!!store_default.toobarObject && !!store_default.toobarObject.toobarElements && store_default.toobarObject.toobarElements.length === 0) {
      $("#" + store_default.container).find(".luckysheet-wa-editor").hide();
      store_default.toolbarHeight = 0;
    } else {
      $("#" + store_default.container).find(".luckysheet-wa-editor").show();
      store_default.toolbarHeight = document.querySelector("#" + store_default.container + " .luckysheet-wa-editor").offsetHeight;
    }
    customSheetbarConfig();
    customStatisticBarConfig();
    const formulaEle = document.querySelector("#" + store_default.container + " .luckysheet-wa-calculate");
    if (!luckysheetConfigsetting_default.sheetFormulaBar) {
      formulaEle.style.display = "none";
      store_default.calculatebarHeight = 0;
    } else {
      formulaEle.style.display = "block";
      store_default.calculatebarHeight = formulaEle.offsetHeight;
    }
    $("#" + store_default.container).find(".luckysheet-grid-container").css("top", store_default.toolbarHeight + store_default.infobarHeight + store_default.calculatebarHeight);
    gridW = $("#" + store_default.container).width();
    if (luckysheetConfigsetting_default.showConfigWindowResize) {
      if ($("#luckysheet-modal-dialog-slider-pivot").is(":visible")) {
        gridW -= $("#luckysheet-modal-dialog-slider-pivot").outerWidth();
      } else if ($(".chartSetting").is(":visible")) {
        gridW -= $(".chartSetting").outerWidth();
      } else if ($("#luckysheet-modal-dialog-slider-alternateformat").is(":visible")) {
        gridW -= $("#luckysheet-modal-dialog-slider-alternateformat").outerWidth();
      }
      if ($("#luckysheet-modal-dialog-slider-protection").is(":visible")) {
        gridW -= $("#luckysheet-modal-dialog-slider-protection").outerWidth();
      }
    }
    const _locale = locale_default();
    const locale_toolbar = _locale.toolbar;
    let ismore = false, toolbarW = 0, morebtn = `<div class="luckysheet-toolbar-button luckysheet-inline-block" data-tips="${locale_toolbar.toolMoreTip}" id="luckysheet-icon-morebtn" role="button" style="user-select: none;">
            <div class="luckysheet-toolbar-button-outer-box luckysheet-inline-block" style="user-select: none;">
                <div class="luckysheet-toolbar-button-inner-box luckysheet-inline-block" style="user-select: none;">

                    <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block" style="user-select: none;">
                        ${locale_toolbar.toolMore}
                    </div>
                    <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige" style="user-select: none;font-size:12px;">
                    </div>

                </div>
            </div>
         </div>`, morediv = '<div id="luckysheet-icon-morebtn-div" class="luckysheet-wa-editor" style="position:absolute;top:' + (store_default.infobarHeight + store_default.toolbarHeight + $("#" + store_default.container).offset().top + $("body").scrollTop()) + 'px;right:0px;z-index:1003;padding:5.5px;visibility:hidden;height:auto;white-space:initial;"></div>';
    if ($("#luckysheet-icon-morebtn-div").length == 0) {
      $("body").append(morediv);
    }
    $$("#luckysheet-icon-morebtn-div").style.visibility = "hidden";
    $("#luckysheet-icon-morebtn-div > div").each(function() {
      const $t = $(this)[0];
      const $container = $("#luckysheet-wa-editor")[0];
      $container.appendChild(document.createTextNode(" "));
      $container.appendChild($t);
    });
    $("#luckysheet-icon-morebtn").remove();
    const toobarWidths = store_default.toobarObject.toobarWidths;
    const toobarElements = store_default.toobarObject.toobarElements;
    let moreButtonIndex = 0;
    if (toobarWidths == void 0) {
      return;
    }
    for (let index2 = toobarWidths.length - 1; index2 >= 0; index2--) {
      if (toobarWidths[index2] < gridW - 90) {
        moreButtonIndex = index2;
        if (moreButtonIndex < toobarWidths.length - 1) {
          ismore = true;
        }
        break;
      }
    }
    for (let index2 = moreButtonIndex; index2 < toobarElements.length; index2++) {
      const element = toobarElements[index2];
      if (element instanceof Array) {
        for (const ele of element) {
          $("#luckysheet-icon-morebtn-div").append($(`${ele}`));
        }
      } else {
        $("#luckysheet-icon-morebtn-div").append($(`${element}`));
      }
    }
    if (ismore) {
      $("#luckysheet-wa-editor").append(morebtn);
      $("#luckysheet-icon-morebtn").click(function() {
        $$("#luckysheet-icon-morebtn-div").style.left = "";
        const containerLeft = $$(`#${store_default.container}`).getBoundingClientRect ? $$(`#${store_default.container}`).getBoundingClientRect().left : 0;
        const morebtnLeft = $$("#luckysheet-icon-morebtn-div").getBoundingClientRect().left;
        if (morebtnLeft < containerLeft) {
          $$("#luckysheet-icon-morebtn-div").style.left = containerLeft + "px";
        }
        let right = $(window).width() - $("#luckysheet-icon-morebtn").offset().left - $("#luckysheet-icon-morebtn").width() + $("body").scrollLeft();
        $$("#luckysheet-icon-morebtn-div").style.right = right < 0 ? 0 : right + "px";
        if ($$("#luckysheet-icon-morebtn-div").style.visibility === "hidden") {
          $$("#luckysheet-icon-morebtn-div").style.visibility = "visible";
        } else {
          $$("#luckysheet-icon-morebtn-div").style.visibility = "hidden";
        }
        let $txt = $(this).find(".luckysheet-toolbar-menu-button-caption");
        if ($txt.text().indexOf(locale_toolbar.toolMore) > -1) {
          const toolCloseHTML = `
                <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block" style="user-select: none;">
                    ${locale_toolbar.toolClose}
                </div>
                <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-shangyige" style="user-select: none;font-size:12px;">
                </div>
                `;
          $(this).find(".luckysheet-toolbar-button-inner-box").html(toolCloseHTML);
        } else {
          const toolMoreHTML = `
                <div class="luckysheet-toolbar-menu-button-caption luckysheet-inline-block" style="user-select: none;">
                    ${locale_toolbar.toolMore}
                </div>
                <div class="luckysheet-toolbar-menu-button-dropdown luckysheet-inline-block iconfont luckysheet-iconfont-xiayige" style="user-select: none;font-size:12px;">
                </div>
                `;
          $(this).find(".luckysheet-toolbar-button-inner-box").html(toolMoreHTML);
        }
      });
      $("#luckysheet-icon-morebtn-div .luckysheet-toolbar-button-split-left").off("hover").hover(function() {
        $(this).next(".luckysheet-toolbar-button-split-right").addClass("luckysheet-toolbar-button-split-right-hover");
      }, function() {
        $(this).next(".luckysheet-toolbar-button-split-right").removeClass("luckysheet-toolbar-button-split-right-hover");
      });
      $("#luckysheet-icon-morebtn-div .luckysheet-toolbar-button-split-right").off("hover").hover(function() {
        $(this).prev(".luckysheet-toolbar-button-split-left").addClass("luckysheet-toolbar-button-hover");
      }, function() {
        $(this).prev(".luckysheet-toolbar-button-split-left").removeClass("luckysheet-toolbar-button-hover");
      });
      tooltip_default.createHoverTip("#luckysheet-icon-morebtn-div", ".luckysheet-toolbar-menu-button, .luckysheet-toolbar-button, .luckysheet-toolbar-combo-button");
    }
    $("#" + store_default.container + " .luckysheet-wa-editor .luckysheet-toolbar-button-split-left").off("hover").hover(function() {
      $(this).next(".luckysheet-toolbar-button-split-right").addClass("luckysheet-toolbar-button-split-right-hover");
    }, function() {
      $(this).next(".luckysheet-toolbar-button-split-right").removeClass("luckysheet-toolbar-button-split-right-hover");
    });
    $("#" + store_default.container + " .luckysheet-wa-editor .luckysheet-toolbar-button-split-right").off("hover").hover(function() {
      $(this).prev(".luckysheet-toolbar-button-split-left").addClass("luckysheet-toolbar-button-hover");
    }, function() {
      $(this).prev(".luckysheet-toolbar-button-split-left").removeClass("luckysheet-toolbar-button-hover");
    });
    gridH = $("#" + store_default.container).height();
    $("#" + store_default.container).find(".luckysheet").height(gridH - 2).width(gridW - 2);
    changeSheetContainerSize(gridW, gridH);
    if (isRefreshCanvas) {
      luckysheetrefreshgrid($("#luckysheet-cell-main").scrollLeft(), $("#luckysheet-cell-main").scrollTop());
    }
    sheetmanage_default.sheetArrowShowAndHide();
    sheetmanage_default.sheetBarShowAndHide();
  }
  function changeSheetContainerSize(gridW2, gridH2) {
    if (gridW2 == null) {
      gridW2 = $("#" + store_default.container).width();
    }
    if (gridH2 == null) {
      gridH2 = $("#" + store_default.container).height();
    }
    store_default.cellmainHeight = gridH2 - (store_default.infobarHeight + store_default.toolbarHeight + store_default.calculatebarHeight + store_default.columnHeaderHeight + store_default.sheetBarHeight + store_default.statisticBarHeight);
    store_default.cellmainWidth = gridW2 - store_default.rowHeaderWidth;
    $("#luckysheet-cols-h-c, #luckysheet-cell-main").width(store_default.cellmainWidth);
    $("#luckysheet-cell-main").height(store_default.cellmainHeight);
    $("#luckysheet-rows-h").height(store_default.cellmainHeight - store_default.cellMainSrollBarSize);
    $("#luckysheet-scrollbar-y").height(store_default.cellmainHeight + store_default.columnHeaderHeight - store_default.cellMainSrollBarSize - 3);
    $("#luckysheet-scrollbar-x").height(store_default.cellMainSrollBarSize);
    $("#luckysheet-scrollbar-y").width(store_default.cellMainSrollBarSize);
    $("#luckysheet-scrollbar-x").width(store_default.cellmainWidth).css("left", store_default.rowHeaderWidth - 2);
    store_default.luckysheetTableContentHW = [
      store_default.cellmainWidth + store_default.rowHeaderWidth - store_default.cellMainSrollBarSize,
      store_default.cellmainHeight + store_default.columnHeaderHeight - store_default.cellMainSrollBarSize
    ];
    $("#luckysheetTableContent, #luckysheetTableContentF").attr({
      width: Math.ceil(store_default.luckysheetTableContentHW[0] * store_default.devicePixelRatio),
      height: Math.ceil(store_default.luckysheetTableContentHW[1] * store_default.devicePixelRatio)
    }).css({width: store_default.luckysheetTableContentHW[0], height: store_default.luckysheetTableContentHW[1]});
    $("#" + store_default.container).find("#luckysheet-grid-window-1").css("bottom", store_default.sheetBarHeight);
    $("#" + store_default.container).find(".luckysheet-grid-window").css("bottom", store_default.statisticBarHeight);
    let gridwidth = $("#luckysheet-grid-window-1").width();
    $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-handle").css({"width": gridwidth - 10}).end().find(".luckysheet-freezebar-horizontal-drop").css({"width": gridwidth - 10});
    let gridheight = $("#luckysheet-grid-window-1").height();
    $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-handle").css({"height": gridheight - 10}).end().find(".luckysheet-freezebar-vertical-drop").css({"height": gridheight - 10});
    freezen_default.createAssistCanvas();
  }
  function menuToolBarWidth() {
    const showtoolbar = luckysheetConfigsetting_default.showtoolbar;
    const showtoolbarConfig = luckysheetConfigsetting_default.showtoolbarConfig;
    const toobarWidths = store_default.toobarObject.toobarWidths = [];
    const toobarElements = store_default.toobarObject.toobarElements = [];
    const toolbarConfig = store_default.toobarObject.toolbarConfig = buildBoolBarConfig();
    function buildBoolBarConfig() {
      let obj = {};
      function array2Config(arr) {
        const obj2 = {};
        let current, next;
        let index2 = 0;
        for (let i2 = 0; i2 < arr.length; i2++) {
          current = arr[i2];
          next = arr[i2 + 1];
          if (current !== "|") {
            obj2[current] = {
              ele: toolbarIdMap[current],
              index: index2++
            };
          }
          if (next === "|") {
            if (getObjType(obj2[current].ele) === "array") {
              obj2[current].ele.push(`#toolbar-separator-${camel2split(current)}`);
            } else {
              obj2[current].ele = [obj2[current].ele, `#toolbar-separator-${camel2split(current)}`];
            }
          }
        }
        return obj2;
      }
      if (getObjType(showtoolbarConfig) === "array") {
        if (!showtoolbar) {
          return obj;
        }
        return array2Config(showtoolbarConfig);
      }
      const config = defaultToolbar.reduce(function(total, curr) {
        if (curr !== "|") {
          total[curr] = true;
        }
        return total;
      }, {});
      if (!showtoolbar) {
        for (let s in config) {
          config[s] = false;
        }
      }
      if (JSON.stringify(showtoolbarConfig) !== "{}") {
        if (showtoolbarConfig.hasOwnProperty("undoRedo")) {
          config.undo = config.redo = showtoolbarConfig.undoRedo;
        }
        Object.assign(config, showtoolbarConfig);
        let current, next;
        let index2 = 0;
        for (let i2 = 0; i2 < defaultToolbar.length; i2++) {
          current = defaultToolbar[i2];
          next = defaultToolbar[i2 + 1];
          if (config[current] === false) {
            continue;
          }
          if (current !== "|" && config[current]) {
            obj[current] = {
              ele: toolbarIdMap[current],
              index: index2++
            };
          }
          if (next === "|") {
            if (getObjType(obj[current].ele) === "array") {
              obj[current].ele.push(`#toolbar-separator-${camel2split(current)}`);
            } else {
              obj[current].ele = [obj[current].ele, `#toolbar-separator-${camel2split(current)}`];
            }
          }
        }
      } else {
        obj = showtoolbar ? array2Config(defaultToolbar) : {};
      }
      return obj;
    }
    for (let s in toolbarConfig) {
      if (Object.prototype.hasOwnProperty.call(toolbarConfig, s)) {
        toobarElements.push($.extend(true, {}, toolbarConfig[s]));
      }
    }
    toobarElements.sort(sortToolbar);
    function sortToolbar(a, b) {
      if (a.index > b.index) {
        return 1;
      } else {
        return -1;
      }
    }
    toobarElements.forEach((curr, index2, arr) => {
      arr[index2] = curr.ele;
      if (index2 !== toobarElements.length - 1) {
        if (curr.ele instanceof Array) {
          toobarWidths.push($(curr.ele[0]).offset().left);
        } else {
          toobarWidths.push($(curr.ele).offset().left);
        }
      } else {
        if (curr.ele instanceof Array) {
          toobarWidths.push($(curr.ele[0]).offset().left);
          toobarWidths.push($(curr.ele[0]).offset().left + $(curr.ele[0]).outerWidth() + 5);
        } else {
          toobarWidths.push($(curr.ele).offset().left);
          toobarWidths.push($(curr.ele).offset().left + $(curr.ele).outerWidth() + 5);
        }
      }
    });
    const containerLeft = $("#" + store_default.container).offset().left;
    toobarWidths.forEach((item2, i2) => {
      toobarWidths[i2] -= containerLeft;
    });
  }
  function customSheetbarConfig() {
    if (!luckysheetConfigsetting_default.initShowsheetbarConfig) {
      luckysheetConfigsetting_default.initShowsheetbarConfig = true;
      const config2 = {
        add: true,
        menu: true,
        sheet: true
      };
      if (!luckysheetConfigsetting_default.showsheetbar) {
        for (let s in config2) {
          config2[s] = false;
        }
      }
      if (JSON.stringify(luckysheetConfigsetting_default.showsheetbarConfig) !== "{}") {
        Object.assign(config2, luckysheetConfigsetting_default.showsheetbarConfig);
      }
      luckysheetConfigsetting_default.showsheetbarConfig = config2;
    }
    const config = luckysheetConfigsetting_default.showsheetbarConfig;
    let isHide = 0;
    for (let s in config) {
      if (!config[s]) {
        switch (s) {
          case "add":
            $("#luckysheet-sheets-add").hide();
            isHide++;
            break;
          case "menu":
            $("#luckysheet-sheets-m").hide();
            isHide++;
            break;
          case "sheet":
            $("#luckysheet-sheet-container").hide();
            $("#luckysheet-sheets-leftscroll").hide();
            $("#luckysheet-sheets-rightscroll").hide();
            isHide++;
            break;
          default:
            break;
        }
      }
    }
    if (isHide === 3) {
      $("#" + store_default.container).find("#luckysheet-sheet-area").hide();
      store_default.sheetBarHeight = 0;
    } else {
      $("#" + store_default.container).find("#luckysheet-sheet-area").show();
      store_default.sheetBarHeight = 31;
    }
  }
  function customStatisticBarConfig() {
    if (!luckysheetConfigsetting_default.initStatisticBarConfig) {
      luckysheetConfigsetting_default.initStatisticBarConfig = true;
      const config2 = {
        count: true,
        view: true,
        zoom: true
      };
      if (!luckysheetConfigsetting_default.showstatisticBar) {
        for (let s in config2) {
          config2[s] = false;
        }
      }
      if (JSON.stringify(luckysheetConfigsetting_default.showstatisticBarConfig) !== "{}") {
        Object.assign(config2, luckysheetConfigsetting_default.showstatisticBarConfig);
      }
      luckysheetConfigsetting_default.showstatisticBarConfig = config2;
    }
    const config = luckysheetConfigsetting_default.showstatisticBarConfig;
    let isHide = 0;
    for (let s in config) {
      if (!config[s]) {
        switch (s) {
          case "count":
            $("#luckysheet-sta-content").hide();
            isHide++;
            break;
          case "view":
            $(".luckysheet-print-viewList").hide();
            isHide++;
            break;
          case "zoom":
            $("#luckysheet-zoom-content").hide();
            isHide++;
            break;
          default:
            break;
        }
      }
    }
    if (isHide === 3) {
      $("#" + store_default.container).find(".luckysheet-stat-area").hide();
      store_default.statisticBarHeight = 0;
    } else {
      $("#" + store_default.container).find(".luckysheet-stat-area").show();
      store_default.statisticBarHeight = 23;
    }
  }
  var gridW, gridH;
  var init_resize = __esm({
    "src/controllers/resize.js"() {
      init_luckysheetConfigsetting();
      init_freezen();
      init_refresh();
      init_store();
      init_locale();
      init_sheetmanage();
      init_tooltip();
      init_util();
      init_toolbar();
      gridW = 0;
      gridH = 0;
    }
  });

  // src/controllers/protection.js
  function addRangeItem(item2) {
    const _locale = locale_default();
    const local_protection = _locale.protection;
    const locale_button = _locale.button;
    let title = item2.name, sqref = item2.sqref, password = item2.password;
    let passwordTxt = "";
    if (password != null && password.length > 0) {
      passwordTxt = '<i class="icon iconfont luckysheet-iconfont-bianji2" title="' + local_protection.rangeItemHasPassword + '"></i>';
    }
    let rangeItemTemplate = `
        <div class="luckysheet-protection-rangeItem" title="${local_protection.rangeItemDblclick}">
            <div class="luckysheet-protection-rangeItem-del" title="${locale_button.delete}">
                <i class="icon iconfont luckysheet-iconfont-shanchu"></i>
            </div>
            <div class="luckysheet-protection-rangeItem-name" title="${title}">
                ${title}${passwordTxt}
            </div>
            <div class="luckysheet-protection-rangeItem-range" title="${sqref}">
                ${sqref}
            </div>
            <div class="luckysheet-protection-rangeItem-update" title="${locale_button.update}">
                <i class="icon iconfont luckysheet-iconfont-bianji"></i>
            </div>
        </div>
    `;
    $("#luckysheet-protection-rangeItem-container").append(rangeItemTemplate);
  }
  function initialEvent(file) {
    const _locale = locale_default();
    const local_protection = _locale.protection;
    const locale_button = _locale.button;
    $("#luckysheet-slider-protection-ok").click(function() {
      let password = $("#protection-password").val();
      let sheet = $("#protection-swichProtectionState").is(":checked");
      let hint = $("#protection-hint").val();
      let file2 = updatingSheetFile, aut = {};
      if (file2 != null && file2.config != null && file2.config.authority != null) {
        aut = file2.config.authority;
      }
      let authorityData = {};
      let algorithmName = "None";
      if (password != "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022") {
        authorityData.password = password;
        authorityData.algorithmName = "None";
        authorityData.saltValue = null;
      } else if (aut != null) {
        authorityData.algorithmName = aut.algorithmName;
        authorityData.saltValue = aut.saltValue;
        authorityData.password = aut.password;
      } else {
        authorityData.algorithmName = "None";
        authorityData.saltValue = null;
        authorityData.password = "";
      }
      authorityData.hintText = hint;
      authorityData.sheet = sheet == true ? 1 : 0;
      for (let i2 = 0; i2 < authorityItemArr.length; i2++) {
        let name2 = authorityItemArr[i2];
        let checkId = "luckysheet-protection-check-" + name2;
        let authorityValue = $("#" + checkId).is(":checked");
        authorityData[name2] = authorityValue == true ? 1 : 0;
      }
      authorityData.allowRangeList = rangeItemListCache;
      rangeItemListCache = [];
      firstInputSheetProtectionPassword = true;
      if (file2.config == null) {
        file2.config = {};
      }
      file2.config.authority = authorityData;
      inputRangeProtectionPassword = {};
      closeProtectionModal();
    });
    $("#luckysheet-slider-protection-cancel, #luckysheet-modal-dialog-protection-close").click(function() {
      closeProtectionModal();
    });
    $("#luckysheet-slider-protection-addRange").click(function() {
      initialProtectionRangeModal();
      isAddRangeItemState = true;
      $("#luckysheet-protection-rangeItem-confirm").html(locale_button.insert);
      openSelfModel("luckysheet-protection-rangeItem-dialog");
      $("#protection-allowRangeAdd-title").val("Default" + rangeItemListCache.length);
      $("#protection-allowRangeAdd-range input").val("");
      $("#protection-allowRangeAdd-password").val("");
      $("#protection-allowRangeAdd-hint").val("");
    });
    $(document).off("click.luckysheetProtection.rangeItemUpdate").on("click.luckysheetProtection.rangeItemUpdate", "#luckysheet-protection-rangeItem-container .luckysheet-protection-rangeItem-update", function(e) {
      initialProtectionRangeModal();
      isAddRangeItemState = false;
      $("#luckysheet-protection-rangeItem-confirm").html(locale_button.update);
      openSelfModel("luckysheet-protection-rangeItem-dialog");
      let $rangeItem = $(e.target).closest(".luckysheet-protection-rangeItem");
      let $rangeItemContainer = $("#luckysheet-protection-rangeItem-container");
      let index2 = $rangeItemContainer.find("> div.luckysheet-protection-rangeItem").index($rangeItem);
      let item2 = rangeItemListCache[index2];
      updateRangeItemIndex = index2;
      $("#protection-allowRangeAdd-title").val(item2.name);
      $("#protection-allowRangeAdd-range input").val(item2.sqref);
      if (item2.algorithmName == "None") {
        $("#protection-allowRangeAdd-password").val(item2.password);
      } else {
        $("#protection-allowRangeAdd-password").val("\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022");
      }
      $("#protection-allowRangeAdd-hint").val(item2.hintText);
    });
    $(document).off("click.luckysheetProtection.rangeItemDelete").on("click.luckysheetProtection.rangeItemDelete", "#luckysheet-protection-rangeItem-container .luckysheet-protection-rangeItem-del", function(e) {
      let $rangeItem = $(e.target).closest(".luckysheet-protection-rangeItem");
      let $rangeItemContainer = $("#luckysheet-protection-rangeItem-container");
      let index2 = $rangeItemContainer.find("> div.luckysheet-protection-rangeItem").index($rangeItem);
      let item2 = rangeItemListCache[index2];
      rangeItemListCache.splice(index2, 1);
      $rangeItem.remove();
    });
    $(document).off("click.luckysheetProtection.rangeItemConfirm").on("click.luckysheetProtection.rangeItemConfirm", "#luckysheet-protection-rangeItem-confirm", function() {
      let name2 = $("#protection-allowRangeAdd-title").val(), rangeText = $("#protection-allowRangeAdd-range input").val(), password = $("#protection-allowRangeAdd-password").val(), hint = $("#protection-allowRangeAdd-hint").val();
      if (name2.length == 0) {
        alert(local_protection.rangeItemErrorTitleNull);
        return;
      }
      let range2 = dataVerificationCtrl_default.getRangeByTxt(rangeText);
      if (rangeText.length == 0) {
        alert(local_protection.rangeItemErrorRangeNull);
        return;
      }
      if (range2.length == 0) {
        alert(local_protection.rangeItemErrorRange);
        return;
      }
      rangeText = transformRangeToAbsolute(rangeText);
      if (isAddRangeItemState) {
        let item2 = {
          name: name2,
          password,
          hintText: hint,
          algorithmName: "None",
          saltValue: null,
          checkRangePasswordUrl: null,
          sqref: rangeText
        };
        addRangeItem(item2);
        rangeItemListCache.push(item2);
      } else {
        let index2 = updateRangeItemIndex;
        let item2 = rangeItemListCache[index2];
        item2.name = name2;
        item2.sqref = rangeText;
        item2.hintText = hint;
        if (password != "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022") {
          item2.password = password;
          item2.algorithmName = "None";
        }
        let $rangeItemContainer = $("#luckysheet-protection-rangeItem-container");
        let $rangeitem = $rangeItemContainer.find("> div.luckysheet-protection-rangeItem").eq(index2);
        let $name = $rangeitem.find(".luckysheet-protection-rangeItem-name");
        let passwordTxt = "";
        if (password != null && password.length > 0) {
          passwordTxt = '<i class="icon iconfont luckysheet-iconfont-bianji2" title="' + local_protection.rangeItemHasPassword + '"></i>';
        }
        $name.html(name2 + passwordTxt).attr("title", name2);
        let $range = $rangeitem.find(".luckysheet-protection-rangeItem-range");
        $range.html(rangeText).attr("title", rangeText);
      }
      $("#luckysheet-protection-rangeItem-dialog").hide();
      $("#luckysheet-modal-dialog-mask").hide();
    });
    $(document).off("click.luckysheetProtection.validationConfirm").on("click.luckysheetProtection.validationConfirm", "#luckysheet-protection-sheet-validation-confirm", function(e) {
      let $validation = $("#luckysheet-protection-sheet-validation");
      let aut = validationAuthority;
      if (aut == null) {
        restoreProtectionConfig(validationAuthority);
        $validation.hide();
        $("#luckysheet-modal-dialog-mask").hide();
        $("#luckysheet-modal-dialog-slider-protection").show();
        luckysheetsizeauto();
        return;
      }
      let $input = $validation.find("input");
      let password = $input.val();
      if (password == null || password.length == 0) {
        alert(local_protection.checkPasswordNullalert);
        return;
      }
      if (aut.algorithmName != null && aut.algorithmName != "None") {
        if (aut.saltValue != null && aut.saltValue.length > 0) {
          var hasher = CryptoApi.getHasher(aut.algorithmName);
          password = CryptoApi.hmac(aut.saltValue, password, hasher);
        } else {
          password = CryptoApi.hash(aut.algorithmName, password);
        }
      }
      if (password == aut.password) {
        restoreProtectionConfig(validationAuthority);
        $validation.hide();
        $("#luckysheet-modal-dialog-mask").hide();
        $("#luckysheet-modal-dialog-slider-protection").show();
        luckysheetsizeauto();
        firstInputSheetProtectionPassword = false;
      } else {
        alert(local_protection.checkPasswordWrongalert);
      }
    });
    $("#luckysheet-protection-check-selectLockedCells").change(function() {
      let $selectLockedCells = $("#luckysheet-protection-check-selectLockedCells"), $selectunLockedCells = $("#luckysheet-protection-check-selectunLockedCells");
      let selectLockedCellsChecked = $selectLockedCells.is(":checked"), selectunLockedCellsChecked = $selectunLockedCells.is(":checked");
      if (selectLockedCellsChecked) {
        $selectunLockedCells.prop("checked", true);
      }
    });
    $("#luckysheet-protection-check-selectunLockedCells").change(function() {
      let $selectLockedCells = $("#luckysheet-protection-check-selectLockedCells"), $selectunLockedCells = $("#luckysheet-protection-check-selectunLockedCells");
      let selectLockedCellsChecked = $selectLockedCells.is(":checked"), selectunLockedCellsChecked = $selectunLockedCells.is(":checked");
      if (!selectunLockedCellsChecked) {
        $selectLockedCells.prop("checked", false);
      }
    });
    $(document).off("click.luckysheetProtection.dvRange").on("click.luckysheetProtection.dvRange", "#protection-allowRangeAdd-range .fa-table", function(e) {
      $("#luckysheet-protection-rangeItem-dialog").hide();
      let dataSource = "0";
      let txt = $(this).siblings("input").val().trim();
      dataVerificationCtrl_default.rangeDialog(dataSource, txt);
      dataVerificationCtrl_default.selectRange = [];
      let range2 = dataVerificationCtrl_default.getRangeByTxt(txt);
      if (range2.length > 0) {
        for (let s = 0; s < range2.length; s++) {
          let r1 = range2[s].row[0], r2 = range2[s].row[1];
          let c1 = range2[s].column[0], c2 = range2[s].column[1];
          let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
          let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
          dataVerificationCtrl_default.selectRange.push({
            "left": col_pre,
            "width": col - col_pre - 1,
            "top": row_pre,
            "height": row - row_pre - 1,
            "left_move": col_pre,
            "width_move": col - col_pre - 1,
            "top_move": row_pre,
            "height_move": row - row_pre - 1,
            "row": [r1, r2],
            "column": [c1, c2],
            "row_focus": r1,
            "column_focus": c1
          });
        }
      }
      selectionCopyShow(dataVerificationCtrl_default.selectRange);
    });
    $(document).off("click.luckysheetProtection.dvRange2").on("click.luckysheetProtection.dvRange2", "#luckysheet-protection-rangeItem-dialog .show-box-item-dropdown .range .fa-table", function(e) {
      $("#luckysheet-protection-rangeItem-dialog").hide();
      let dataSource = "1";
      let txt = $(this).siblings("input").val().trim();
      dataVerificationCtrl_default.rangeDialog(dataSource, txt);
      dataVerificationCtrl_default.selectRange = [];
      let range2 = dataVerificationCtrl_default.getRangeByTxt(txt);
      if (range2.length > 0) {
        for (let s = 0; s < range2.length; s++) {
          let r1 = range2[s].row[0], r2 = range2[s].row[1];
          let c1 = range2[s].column[0], c2 = range2[s].column[1];
          let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
          let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
          dataVerificationCtrl_default.selectRange.push({
            "left": col_pre,
            "width": col - col_pre - 1,
            "top": row_pre,
            "height": row - row_pre - 1,
            "left_move": col_pre,
            "width_move": col - col_pre - 1,
            "top_move": row_pre,
            "height_move": row - row_pre - 1,
            "row": [r1, r2],
            "column": [c1, c2],
            "row_focus": r1,
            "column_focus": c1
          });
        }
      }
      selectionCopyShow(dataVerificationCtrl_default.selectRange);
    });
    $(document).off("click.luckysheetProtection.dvRangeConfirm").on("click.luckysheetProtection.dvRangeConfirm", "#luckysheet-dataVerificationRange-dialog-confirm", function(e) {
      let txt = $(this).parents("#luckysheet-dataVerificationRange-dialog").find("input").val();
      let $input = $("#protection-allowRangeAdd-range input"), inputValue = $input.val();
      if (inputValue.substr(inputValue.length - 1, 1) == ",") {
        $input.val(inputValue + txt);
      } else {
        $input.val(txt);
      }
      $("#luckysheet-dataVerificationRange-dialog").hide();
      $("#luckysheet-modal-dialog-mask").show();
      $("#luckysheet-protection-rangeItem-dialog").show();
      let range2 = [];
      selectionCopyShow(range2);
    });
    $(document).off("click.luckysheetProtection.dvRangeClose").on("click.dvRangeClose", "#luckysheet-dataVerificationRange-dialog-close", function(e) {
      $("#luckysheet-dataVerificationRange-dialog").hide();
      $("#luckysheet-modal-dialog-mask").show();
      $("#luckysheet-protection-rangeItem-dialog").show();
      let range2 = [];
      selectionCopyShow(range2);
    });
    $(document).on("click.luckysheetProtection.luckysheetProtection", "#luckysheet-dataVerificationRange-dialog .luckysheet-modal-dialog-title-close", function(e) {
      $("#luckysheet-dataVerificationRange-dialog").hide();
      $("#luckysheet-modal-dialog-mask").show();
      $("#luckysheet-protection-rangeItem-dialog").show();
      let range2 = [];
      selectionCopyShow(range2);
    });
  }
  function initialProtectionRangeModal(file) {
    if (isInitialProtectionAddRang) {
      return;
    }
    isInitialProtectionAddRang = true;
    let _locale = locale_default();
    let local_protection = _locale.protection;
    const locale_button = _locale.button;
    $("body").append(replaceHtml(modelHTML, {
      "id": "luckysheet-protection-rangeItem-dialog",
      "addclass": "luckysheet-protection-rangeItem-dialog",
      "title": local_protection.allowRangeTitle,
      "content": `
            <div class="luckysheet-protection-rangeItem-content">
                <div class="luckysheet-slider-protection-row">
                    <div class="luckysheet-slider-protection-column luckysheet-protection-column-3x">
                        ${local_protection.allowRangeAddTitle}
                    </div>
                    <div class="luckysheet-slider-protection-column luckysheet-protection-column-7x" style="left:30%">
                        <input class="luckysheet-protection-rangeItemiInput" id="protection-allowRangeAdd-title"  placeHolder="${local_protection.allowRangeAddtitleDefault}">
                    </div>
                </div>
                <div class="luckysheet-slider-protection-row">
                    <div class="luckysheet-slider-protection-column luckysheet-protection-column-3x">
                        ${local_protection.allowRangeAddSqrf}
                    </div>
                    <div class="luckysheet-slider-protection-column luckysheet-protection-column-7x" style="left:30%">
                        <div id="protection-allowRangeAdd-range" class="range">
                            <input class="formulaInputFocus" spellcheck="false" placeHolder="${local_protection.selectCellRangeHolder}">
                            <i class="fa fa-table" aria-hidden="true" title="${local_protection.selectCellRange}"></i>
                        </div>
                    </div>
                </div>
                <div class="luckysheet-slider-protection-row">
                    <div class="luckysheet-slider-protection-column luckysheet-protection-column-3x">
                        ${local_protection.allowRangeAddTitlePassword}
                    </div>
                    <div class="luckysheet-slider-protection-column luckysheet-protection-column-7x" style="left:30%">
                        <input class="luckysheet-protection-rangeItemiInput" id="protection-allowRangeAdd-password"  placeHolder="${local_protection.enterPassword}">
                    </div>
                </div>
                <div class="luckysheet-slider-protection-row">
                    <div class="luckysheet-slider-protection-column luckysheet-protection-column-3x">
                        ${local_protection.allowRangeAddTitleHint}
                    </div>
                    <div class="luckysheet-slider-protection-column luckysheet-protection-column-7x" style="left:30%">
                        <textarea class="luckysheet-protection-rangeItemTextarea" id="protection-allowRangeAdd-hint"  placeHolder="${local_protection.allowRangeAddTitleHintTitle}"></textarea>
                    </div>
                </div>
            </div>
        `,
      "botton": `<button id="luckysheet-protection-rangeItem-confirm" class="btn btn-primary">${locale_button.insert}</button>
                    <button class="btn btn-default luckysheet-model-close-btn">${locale_button.cancel}</button>`,
      "style": "z-index:100003"
    }));
  }
  function initialProtectionRIghtBar(file) {
    const _locale = locale_default();
    const local_protection = _locale.protection;
    const locale_button = _locale.button;
    let authorityItemHtml = "";
    for (let i2 = 0; i2 < authorityItemArr.length; i2++) {
      let name2 = authorityItemArr[i2];
      authorityItemHtml += `
            <div class="luckysheet-slider-protection-row" style="height:18px;">
                <div class="luckysheet-slider-protection-column luckysheet-protection-column-10x">
                <label for="luckysheet-protection-check-${name2}"><input id="luckysheet-protection-check-${name2}" name="luckysheet-protection-check-${name2}" type="checkbox">${local_protection[name2]}</label>
                </div>
            </div>
        `;
    }
    const protectionModalHtml = `
    <div id="luckysheet-modal-dialog-slider-protection" class="luckysheet-modal-dialog-slider luckysheet-modal-dialog-slider-pivot" style="display:none;">
        <div class="luckysheet-modal-dialog-slider-title"> <span>${local_protection.protectiontTitle}</span> <span id="luckysheet-modal-dialog-protection-close" title="${locale_button.close}"><i class="fa fa-times" aria-hidden="true"></i></span> </div>
        <div class="luckysheet-modal-dialog-slider-content">
            <div class="luckysheet-slider-protection-config" style="top:10px;height:115px">
                <div class="luckysheet-slider-protection-row">
                    <div class="luckysheet-slider-protection-column luckysheet-protection-column-10x">
                    <label for="protection-swichProtectionState"><input id="protection-swichProtectionState" name="protection-swichProtectionState" type="checkbox">${local_protection.swichProtectionTip}</label>
                    </div>
                </div>
                <div class="luckysheet-slider-protection-row" style="height:23px;">
                    <div class="luckysheet-slider-protection-column" style="width:98%;">
                        <input class="luckysheet-protection-input" id="protection-password"  placeHolder="${local_protection.enterPassword}">
                    </div>
                </div>
                <div class="luckysheet-slider-protection-row" style="height:47px;margin-top:4px;">
                    <div class="luckysheet-slider-protection-column" style="width:98%;">
                        <textarea class="luckysheet-protection-textarea" id="protection-hint"  placeHolder="${local_protection.enterHint}"></textarea>
                    </div>
                </div>
            </div>
            <div class="luckysheet-slider-protection-config" style="top:130px;height:290px;border-top:1px solid #c5c5c5">
                <div class="luckysheet-slider-protection-row" style="height:20px;">
                    ${local_protection.authorityTitle}
                </div>
                ${authorityItemHtml}
            </div>
            <div class="luckysheet-slider-protection-config" style="top:440px;bottom:45px;border-top:1px solid #c5c5c5">
                <div class="luckysheet-slider-protection-row" style="height:25px;">
                    <div class="luckysheet-slider-protection-column luckysheet-protection-column-7x" style="left:0px;line-height: 25px;">
                        ${local_protection.allowRangeTitle}
                    </div>
                    <div class="luckysheet-slider-protection-column luckysheet-protection-column-3x" style="left:70%;">
                        <div class="luckysheet-slider-protection-ok luckysheet-slider-protection-addRange" id="luckysheet-slider-protection-addRange">
                            ${local_protection.allowRangeAdd}
                        </div>
                    </div>
                </div>

                <div id="luckysheet-protection-rangeItem-container" class="luckysheet-slider-protection-row" style="top:25px;bottom:0px;position:absolute">
                   
                </div>
            </div>
            <div class="luckysheet-slider-protection-config" style="bottom:0px;height:45px">
                <div class="luckysheet-slider-protection-column luckysheet-protection-column-5x" style="left:0px;">
                    <div class="luckysheet-slider-protection-ok" id="luckysheet-slider-protection-ok">
                        ${locale_button.confirm}
                    </div>
                </div>
                <div class="luckysheet-slider-protection-column luckysheet-protection-column-5x" style="left:50%;">
                    <div class="luckysheet-slider-protection-cancel" id="luckysheet-slider-protection-cancel">
                        ${locale_button.cancel}
                    </div>
                </div>
            </div>
        </div>
    </div>
    `;
    $("body").append(protectionModalHtml);
    $("body").append(replaceHtml(modelHTML, {
      "id": "luckysheet-protection-sheet-validation",
      "addclass": "luckysheet-protection-sheet-validation",
      "title": local_protection.validationTitle,
      "content": `
            <div class="luckysheet-slider-protection-row">
                <div class="luckysheet-slider-protection-column luckysheet-protection-column-10x">
                    ${local_protection.validationTips}
                </div>
            </div>
            <div class="luckysheet-slider-protection-row" style="margin-top:20px">
                <div class="luckysheet-slider-protection-column luckysheet-protection-column-10x">
                    <input type="password" class="luckysheet-protection-rangeItemiInput" placeHolder="${local_protection.validationInputHint}">
                </div>
            </div>
        `,
      "botton": `<button id="luckysheet-protection-sheet-validation-confirm" class="btn btn-primary">${locale_button.confirm}</button>
                    <button class="btn btn-default luckysheet-model-close-btn">${locale_button.cancel}</button>`,
      "style": "z-index:100003"
    }));
  }
  function restoreProtectionConfig(aut) {
    if (aut == null) {
      aut = {};
    }
    for (let i2 = 0; i2 < authorityItemArr.length; i2++) {
      let name2 = authorityItemArr[i2];
      let checkId = "luckysheet-protection-check-" + name2;
      let authorityValue = aut[name2];
      if (authorityValue == null) {
        authorityValue = 0;
      }
      if (authorityValue == null && name2 in {selectLockedCells: 1, selectunLockedCells: 1}) {
        authorityValue = 1;
      }
      $("#" + checkId).prop("checked", authorityValue == 1 ? true : false);
    }
    if (aut.password != null && aut.password.length > 0) {
      if (aut.algorithmName == "None" || aut.algorithmName == null) {
        $("#protection-password").val(aut.password);
      } else {
        $("#protection-password").val("\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022");
      }
    } else {
      $("#protection-password").val("");
    }
    let sheet = aut.sheet;
    if (aut.sheet == null) {
      sheet = 0;
    }
    $("#protection-swichProtectionState").prop("checked", sheet == 1 ? true : false);
    let hintText = aut.hintText;
    if (hintText == null) {
      hintText = "";
    }
    $("#protection-hint").val(hintText);
    rangeItemListCache = [];
    $("#luckysheet-protection-rangeItem-container").empty();
    let allowRangeList = aut.allowRangeList;
    if (allowRangeList != null && allowRangeList.length > 0) {
      for (let i2 = 0; i2 < allowRangeList.length; i2++) {
        let item2 = allowRangeList[i2];
        addRangeItem(item2);
        rangeItemListCache.push(item2);
      }
    }
  }
  function openProtectionModal(file) {
    if (!isInitialProtection) {
      initialProtectionRIghtBar(file);
      initialEvent(file);
      isInitialProtection = true;
    }
    updatingSheetFile = file;
    if (file != null && file.config != null && file.config.authority != null) {
      let aut = file.config.authority;
      if (firstInputSheetProtectionPassword && aut.sheet == 1 && aut.password != null && aut.password.length > 0) {
        validationAuthority = aut;
        $("#luckysheet-protection-sheet-validation input").val("");
        openSelfModel("luckysheet-protection-sheet-validation");
        return;
      } else {
        restoreProtectionConfig(aut);
      }
    } else {
      $("#luckysheet-protection-check-selectLockedCells").prop("checked", true);
      $("#luckysheet-protection-check-selectunLockedCells").prop("checked", true);
    }
    $("#luckysheet-modal-dialog-slider-protection").show();
    luckysheetsizeauto();
  }
  function closeProtectionModal() {
    $("#luckysheet-protection-rangeItem-dialog").hide();
    $("#luckysheet-modal-dialog-slider-protection").hide();
    luckysheetsizeauto();
  }
  function checkProtectionLockedSqref(r2, c2, aut, local_protection, isOpenAlert = true, isLock = true) {
    let isPass = false;
    let rangeAut = aut.allowRangeList;
    if (rangeAut != null && rangeAut.length > 0) {
      let isExists = false;
      for (let i2 = 0; i2 < rangeAut.length; i2++) {
        let ra = rangeAut[i2];
        let sqref = ra.sqref;
        let range2 = dataVerificationCtrl_default.getRangeByTxt(sqref);
        if (range2.length > 0) {
          for (let s = 0; s < range2.length; s++) {
            let r1 = range2[s].row[0], r22 = range2[s].row[1];
            let c1 = range2[s].column[0], c22 = range2[s].column[1];
            if (r2 >= r1 && r2 <= r22 && c2 >= c1 && c2 <= c22) {
              isExists = true;
              break;
            }
          }
        }
        if (isExists) {
          let password = ra.password;
          if (password != null && password.length > 0 && !(sqref in inputRangeProtectionPassword)) {
            if (isOpenAlert) {
              openRangePasswordModal(ra);
              $("#luckysheet-selection-copy .luckysheet-selection-copy").hide();
            }
            return false;
          } else {
            isPass = true;
          }
          break;
        }
      }
    }
    if (!isPass && !isLock)
      isPass = true;
    if (!isPass && isOpenAlert) {
      let ht;
      if (aut.hintText != null && aut.hintText.length > 0) {
        ht = aut.hintText;
      } else {
        ht = local_protection.defaultSheetHintText;
      }
      tooltip_default.info("", ht);
      $("#luckysheet-selection-copy .luckysheet-selection-copy").hide();
    }
    return isPass;
  }
  function openRangePasswordModal(rangeAut) {
    const _locale = locale_default();
    const local_protection = _locale.protection;
    const locale_button = _locale.button;
    if (!initialRangePasswordHtml) {
      $("body").append(replaceHtml(modelHTML, {
        "id": "luckysheet-protection-range-validation",
        "addclass": "luckysheet-protection-sheet-validation",
        "title": local_protection.validationTitle,
        "content": `
                <div class="luckysheet-slider-protection-row">
                    <div id="luckysheet-protection-range-validation-hint" class="luckysheet-slider-protection-column luckysheet-protection-column-10x">
                        
                    </div>
                </div>
                <div class="luckysheet-slider-protection-row" style="margin-top:20px">
                    <div class="luckysheet-slider-protection-column luckysheet-protection-column-10x">
                        <input type="password" class="luckysheet-protection-rangeItemiInput" placeHolder="${local_protection.validationInputHint}">
                    </div>
                </div>
            `,
        "botton": `<button id="luckysheet-protection-range-validation-confirm" class="btn btn-primary">${locale_button.confirm}</button>
                        <button class="btn btn-default luckysheet-model-close-btn">${locale_button.cancel}</button>`,
        "style": "z-index:100003"
      }));
    }
    initialRangePasswordHtml = true;
    openSelfModel("luckysheet-protection-range-validation");
    let $hint = $("#luckysheet-protection-range-validation-hint");
    if (rangeAut.hintText != null && rangeAut.hintText.length > 0) {
      $hint.html(rangeAut.hintText);
    } else {
      $hint.html(local_protection.defaultRangeHintText);
    }
    let $rangeV = $("#luckysheet-protection-range-validation");
    let $input = $rangeV.find("input");
    $input.val("");
    $("#luckysheet-protection-range-validation-confirm").off("click").on("click", function() {
      let password = $input.val();
      if (password == null || password.length == 0) {
        alert(local_protection.checkPasswordNullalert);
        return;
      }
      if (rangeAut.algorithmName != null && rangeAut.algorithmName != "None") {
        if (rangeAut.saltValue != null && rangeAut.saltValue.length > 0) {
          var hasher = CryptoApi.getHasher(rangeAut.algorithmName);
          password = CryptoApi.hmac(rangeAut.saltValue, password, hasher);
        } else {
          password = CryptoApi.hash(rangeAut.algorithmName, password);
        }
      }
      if (password == rangeAut.password) {
        inputRangeProtectionPassword[rangeAut.sqref] = 1;
        $rangeV.hide();
        $("#luckysheet-modal-dialog-mask").hide();
        alert(local_protection.checkPasswordSucceedalert);
      } else {
        alert(local_protection.checkPasswordWrongalert);
      }
    });
  }
  function checkProtectionNotEnable(sheetIndex) {
    let sheetFile = sheetmanage_default.getSheetByIndex(sheetIndex);
    if (sheetFile == null) {
      return true;
    }
    if (sheetFile.config == null || sheetFile.config.authority == null) {
      return true;
    }
    let aut = sheetFile.config.authority;
    if (aut == null || aut.sheet == null || aut.sheet == 0) {
      return true;
    }
    const _locale = locale_default();
    const local_protection = _locale.protection;
    let ht;
    if (aut.hintText != null && aut.hintText.length > 0) {
      ht = aut.hintText;
    } else {
      ht = local_protection.defaultSheetHintText;
    }
    tooltip_default.info("", ht);
    return false;
  }
  function checkProtectionLocked(r2, c2, sheetIndex, isOpenAlert = true, isLock = true) {
    let sheetFile = sheetmanage_default.getSheetByIndex(sheetIndex);
    if (sheetFile == null) {
      return true;
    }
    if (sheetFile.config == null || sheetFile.config.authority == null) {
      return true;
    }
    let data = sheetFile.data, cell = data[r2][c2], aut = sheetFile.config.authority;
    if (aut == null || aut.sheet == null || aut.sheet == 0) {
      return true;
    }
    if (cell && cell.lo === 0) {
      return true;
    }
    const _locale = locale_default();
    const local_protection = _locale.protection;
    return checkProtectionLockedSqref(r2, c2, aut, local_protection, isOpenAlert, isLock);
  }
  function checkProtectionCellHidden(r2, c2, sheetIndex) {
    let sheetFile = sheetmanage_default.getSheetByIndex(sheetIndex);
    if (!sheetFile || sheetFile.data && !sheetFile.data[r2] || sheetFile.data && !sheetFile.data[r2][c2]) {
      return true;
    }
    if (sheetFile.config == null || sheetFile.config.authority == null) {
      return true;
    }
    let data = sheetFile.data, cell = data[r2][c2], aut = sheetFile.config.authority;
    if (aut == null || aut.sheet == null || aut.sheet == 0) {
      return true;
    }
    if (cell == null || cell.hi == null || cell.hi == 0) {
      return true;
    }
    return false;
  }
  function checkProtectionLockedRangeList(rangeList, sheetIndex) {
    let sheetFile = sheetmanage_default.getSheetByIndex(sheetIndex);
    if (sheetFile == null) {
      return true;
    }
    if (sheetFile.config == null || sheetFile.config.authority == null) {
      return true;
    }
    let aut = sheetFile.config.authority;
    if (aut == null || aut.sheet == null || aut.sheet == 0) {
      return true;
    }
    if (rangeList == null || rangeList.length == 0) {
      return true;
    }
    const _locale = locale_default();
    const local_protection = _locale.protection;
    for (let s = 0; s < rangeList.length; s++) {
      let r1 = rangeList[s].row[0], r2 = rangeList[s].row[1];
      let c1 = rangeList[s].column[0], c2 = rangeList[s].column[1];
      for (let r3 = r1; r3 <= r2; r3++) {
        for (let c3 = c1; c3 <= c2; c3++) {
          const cell = sheetFile.data[r3][c3] || {};
          let isLock = cell.lo === void 0 || cell.lo === 1, isPass = checkProtectionLockedSqref(r3, c3, aut, local_protection, true, isLock);
          if (!isPass) {
            return false;
          }
        }
      }
    }
    return true;
  }
  function checkProtectionSelectLockedOrUnLockedCells(r2, c2, sheetIndex) {
    const _locale = locale_default();
    const local_protection = _locale.protection;
    let sheetFile = sheetmanage_default.getSheetByIndex(sheetIndex);
    if (sheetFile == null) {
      return true;
    }
    if (sheetFile.config == null || sheetFile.config.authority == null) {
      return true;
    }
    let data = sheetFile.data, cell = data[r2][c2], aut = sheetFile.config.authority;
    if (aut == null || aut.sheet == null || aut.sheet == 0) {
      return true;
    }
    if (cell && cell.lo === 0) {
      if (aut.selectunLockedCells == 1 || aut.selectunLockedCells == null) {
        return true;
      } else {
        return false;
      }
    } else {
      let isAllEdit = checkProtectionLockedSqref(r2, c2, aut, local_protection, false);
      if (isAllEdit) {
        if (aut.selectunLockedCells == 1 || aut.selectunLockedCells == null) {
          return true;
        } else {
          return false;
        }
      } else {
        if (aut.selectLockedCells == 1 || aut.selectLockedCells == null) {
          return true;
        } else {
          return false;
        }
      }
    }
  }
  function checkProtectionAllSelected(sheetIndex) {
    const _locale = locale_default();
    const local_protection = _locale.protection;
    let sheetFile = sheetmanage_default.getSheetByIndex(sheetIndex);
    if (sheetFile == null) {
      return true;
    }
    if (sheetFile.config == null || sheetFile.config.authority == null) {
      return true;
    }
    let aut = sheetFile.config.authority;
    if (aut == null || aut.sheet == null || aut.sheet == 0) {
      return true;
    }
    let selectunLockedCells = false;
    if (aut.selectunLockedCells == 1 || aut.selectunLockedCells == null) {
      selectunLockedCells = true;
    }
    let selectLockedCells = false;
    if (aut.selectLockedCells == 1 || aut.selectLockedCells == null) {
      selectLockedCells = true;
    }
    if (selectunLockedCells && selectLockedCells) {
      return true;
    }
    return false;
  }
  function checkProtectionFormatCells(sheetIndex) {
    let sheetFile = sheetmanage_default.getSheetByIndex(sheetIndex);
    if (sheetFile == null) {
      return true;
    }
    if (sheetFile.config == null || sheetFile.config.authority == null) {
      return true;
    }
    let aut = sheetFile.config.authority;
    if (aut == null || aut.sheet == null || aut.sheet == 0) {
      return true;
    }
    if (aut.formatCells == 1 || aut.formatCells == null) {
      return true;
    }
    const _locale = locale_default();
    const local_protection = _locale.protection;
    let ht;
    if (aut.hintText != null && aut.hintText.length > 0) {
      ht = aut.hintText;
    } else {
      ht = local_protection.defaultSheetHintText;
    }
    tooltip_default.info("", ht);
    return false;
  }
  function checkProtectionAuthorityNormal(sheetIndex, type = "formatColumns", isAlert = true) {
    let sheetFile = sheetmanage_default.getSheetByIndex(sheetIndex);
    if (sheetFile == null) {
      return true;
    }
    if (sheetFile.config == null || sheetFile.config.authority == null) {
      return true;
    }
    let aut = sheetFile.config.authority;
    if (aut == null || aut.sheet == null || aut.sheet == 0) {
      return true;
    }
    if (aut[type] == 1 || aut[type] == null) {
      return true;
    }
    if (isAlert) {
      const _locale = locale_default();
      const local_protection = _locale.protection;
      let ht;
      if (aut.hintText != null && aut.hintText.length > 0) {
        ht = aut.hintText;
      } else {
        ht = local_protection.defaultSheetHintText;
      }
      tooltip_default.info("", ht);
    }
    return false;
  }
  var isInitialProtection, isInitialProtectionAddRang, rangeItemListCache, isAddRangeItemState, updateRangeItemIndex, validationAuthority, updatingSheetFile, firstInputSheetProtectionPassword, inputRangeProtectionPassword, initialRangePasswordHtml, authorityItemArr;
  var init_protection = __esm({
    "src/controllers/protection.js"() {
      init_store();
      init_locale();
      init_constant();
      init_get();
      init_set();
      init_sheetmanage();
      init_resize();
      init_dataVerificationCtrl();
      init_util();
      init_select();
      init_tooltip();
      init_cleargridelement();
      isInitialProtection = false;
      isInitialProtectionAddRang = false;
      rangeItemListCache = [];
      isAddRangeItemState = true;
      updateRangeItemIndex = null;
      validationAuthority = null;
      updatingSheetFile = null;
      firstInputSheetProtectionPassword = true;
      inputRangeProtectionPassword = {};
      initialRangePasswordHtml = false;
      authorityItemArr = [
        "selectLockedCells",
        "selectunLockedCells",
        "formatCells",
        "formatColumns",
        "formatRows",
        "insertColumns",
        "insertRows",
        "insertHyperlinks",
        "deleteColumns",
        "deleteRows",
        "sort",
        "filter",
        "usePivotTablereports",
        "editObjects",
        "editScenarios"
      ];
    }
  });

  // src/global/sort.js
  function orderbydata(data, index2, isAsc) {
    if (isAsc == null) {
      isAsc = true;
    }
    let a = function(x, y) {
      let x1 = x[index2], y1 = y[index2];
      if (getObjType(x[index2]) == "object") {
        x1 = x[index2].v;
      }
      if (getObjType(y[index2]) == "object") {
        y1 = y[index2].v;
      }
      if (isRealNull(x1)) {
        return 1;
      }
      if (isRealNull(y1)) {
        return -1;
      }
      if (isdatetime(x1) && isdatetime(y1)) {
        return diff(x1, y1);
      } else if (isRealNum(x1) && isRealNum(y1)) {
        return (0, import_numeral2.default)(x1).value() - (0, import_numeral2.default)(y1).value();
      } else if (!isRealNum(x1) && !isRealNum(y1)) {
        return x1.localeCompare(y1, "zh");
      } else if (!isRealNum(x1)) {
        return 1;
      } else if (!isRealNum(y1)) {
        return -1;
      }
    };
    let d = function(x, y) {
      let x1 = x[index2], y1 = y[index2];
      if (getObjType(x[index2]) == "object") {
        x1 = x[index2].v;
      }
      if (getObjType(y[index2]) == "object") {
        y1 = y[index2].v;
      }
      if (isRealNull(x1)) {
        return 1;
      }
      if (isRealNull(y1)) {
        return -1;
      }
      if (isdatetime(x1) && isdatetime(y1)) {
        return diff(y1, x1);
      } else if (isRealNum(x1) && isRealNum(y1)) {
        return (0, import_numeral2.default)(y1).value() - (0, import_numeral2.default)(x1).value();
      } else if (!isRealNum(x1) && !isRealNum(y1)) {
        return y1.localeCompare(x1, "zh");
      } else if (!isRealNum(x1)) {
        return -1;
      } else if (!isRealNum(y1)) {
        return 1;
      }
    };
    if (isAsc) {
      return data.sort(a);
    } else {
      return data.sort(d);
    }
  }
  function orderbydata1D(data, isAsc) {
    if (isAsc == null) {
      isAsc = true;
    }
    let a = function(x, y) {
      let x1 = x, y1 = y;
      if (getObjType(x) == "object") {
        x1 = x.v;
      }
      if (getObjType(y) == "object") {
        y1 = y.v;
      }
      if (x1 == null) {
        x1 = "";
      }
      if (y1 == null) {
        y1 = "";
      }
      if (isdatetime(x1) && isdatetime(y1)) {
        return diff(x1, y1);
      } else if (isRealNum(x1) && isRealNum(y1)) {
        return (0, import_numeral2.default)(x1).value() - (0, import_numeral2.default)(y1).value();
      } else if (!isRealNum(x1) && !isRealNum(y1)) {
        return x1.localeCompare(y1, "zh");
      } else if (!isRealNum(x1)) {
        return 1;
      } else if (!isRealNum(y1)) {
        return -1;
      }
    };
    let d = function(x, y) {
      let x1 = x, y1 = y;
      if (getObjType(x) == "object") {
        x1 = x.v;
      }
      if (getObjType(y) == "object") {
        y1 = y.v;
      }
      if (x1 == null) {
        x1 = "";
      }
      if (y1 == null) {
        y1 = "";
      }
      if (isdatetime(x1) && isdatetime(y1)) {
        return diff(y1, x1);
      } else if (isRealNum(x1) && isRealNum(y1)) {
        return (0, import_numeral2.default)(y1).value() - (0, import_numeral2.default)(x1).value();
      } else if (!isRealNum(x1) && !isRealNum(y1)) {
        return y1.localeCompare(x1, "zh");
      } else if (!isRealNum(x1)) {
        return -1;
      } else if (!isRealNum(y1)) {
        return 1;
      }
    };
    if (isAsc) {
      return data.sort(a);
    } else {
      return data.sort(d);
    }
  }
  function sortSelection(isAsc) {
    if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "sort")) {
      return;
    }
    const _locale = locale_default();
    const locale_sort = _locale.sort;
    if (store_default.luckysheet_select_save.length > 1) {
      if (isEditMode()) {
        alert(locale_sort.noRangeError);
      } else {
        tooltip_default.info(locale_sort.noRangeError, "");
      }
      return;
    }
    if (isAsc == null) {
      isAsc = true;
    }
    let d = editor_default.deepCopyFlowData(store_default.flowdata);
    let r1 = store_default.luckysheet_select_save[0].row[0], r2 = store_default.luckysheet_select_save[0].row[1];
    let c1 = store_default.luckysheet_select_save[0].column[0], c2 = store_default.luckysheet_select_save[0].column[1];
    let str, edr;
    for (let r3 = r1; r3 <= r2; r3++) {
      if (d[r3] != null && d[r3][c1] != null) {
        let cell = d[r3][c1];
        if (cell.mc != null || isRealNull(cell.v)) {
          continue;
        }
        if (str == null && /[\u4e00-\u9fa5]+/g.test(cell.v)) {
          str = r3 + 1;
          edr = r3 + 1;
          continue;
        }
        if (str == null) {
          str = r3;
        }
        edr = r3;
      }
    }
    if (str == null || str > r2) {
      return;
    }
    let hasMc = false;
    let data = [];
    for (let r3 = str; r3 <= edr; r3++) {
      let data_row = [];
      for (let c3 = c1; c3 <= c2; c3++) {
        if (d[r3][c3] != null && d[r3][c3].mc != null) {
          hasMc = true;
          break;
        }
        data_row.push(d[r3][c3]);
      }
      data.push(data_row);
    }
    if (hasMc) {
      if (isEditMode()) {
        alert(locale_sort.mergeError);
      } else {
        tooltip_default.info(locale_sort.mergeError, "");
      }
      return;
    }
    data = orderbydata(data, 0, isAsc);
    for (let r3 = str; r3 <= edr; r3++) {
      for (let c3 = c1; c3 <= c2; c3++) {
        d[r3][c3] = data[r3 - str][c3 - c1];
      }
    }
    let allParam = {};
    if (store_default.config["rowlen"] != null) {
      let cfg = $.extend(true, {}, store_default.config);
      cfg = rowlenByRange(d, str, edr, cfg);
      allParam = {
        "cfg": cfg,
        "RowlChange": true
      };
    }
    jfrefreshgrid(d, [{"row": [str, edr], "column": [c1, c2]}], allParam);
  }
  function sortColumnSeletion(colIndex, isAsc) {
    if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "sort")) {
      return;
    }
    if (isAsc == null) {
      isAsc = true;
    }
    const _locale = locale_default();
    const locale_sort = _locale.sort;
    let d = editor_default.deepCopyFlowData(store_default.flowdata);
    let r1 = 0, r2 = d.length - 1;
    let c1 = 0, c2 = d[0].length - 1;
    let str, edr;
    for (let r3 = r1; r3 <= r2; r3++) {
      if (d[r3][colIndex] != null && d[r3][colIndex].mc != null) {
        continue;
      }
      if (d[r3][colIndex] != null && !isRealNull(d[r3][colIndex].v) && /[\u4e00-\u9fa5]+/g.test(d[r3][colIndex].v) && str == null) {
        str = r3 + 1;
        edr = r3 + 1;
        continue;
      }
      if (str == null) {
        str = r3;
      }
      if (d[r3][colIndex] != null && !isRealNull(d[r3][colIndex].v)) {
        edr = r3;
      }
    }
    if (str == null || str > r2) {
      return;
    }
    let hasMc = false;
    let data = [];
    for (let r3 = str; r3 <= edr; r3++) {
      let data_row = [];
      for (let c3 = c1; c3 <= c2; c3++) {
        if (d[r3][c3] != null && d[r3][c3].mc != null) {
          hasMc = true;
          break;
        }
        data_row.push(d[r3][c3]);
      }
      data.push(data_row);
    }
    if (hasMc) {
      if (isEditMode()) {
        alert(locale_sort.columnSortMergeError);
      } else {
        tooltip_default.info(locale_sort.columnSortMergeError, "");
      }
      return;
    }
    data = orderbydata(data, colIndex, isAsc);
    for (let r3 = str; r3 <= edr; r3++) {
      for (let c3 = c1; c3 <= c2; c3++) {
        d[r3][c3] = data[r3 - str][c3 - c1];
      }
    }
    let allParam = {};
    if (store_default.config["rowlen"] != null) {
      let cfg = $.extend(true, {}, store_default.config);
      cfg = rowlenByRange(d, str, edr, cfg);
      allParam = {
        "cfg": cfg,
        "RowlChange": true
      };
    }
    jfrefreshgrid(d, [{"row": [str, edr], "column": [c1, c2]}], allParam);
  }
  var import_numeral2;
  var init_sort = __esm({
    "src/global/sort.js"() {
      init_util();
      init_validate();
      init_datecontroll();
      init_tooltip();
      init_editor();
      init_getRowlen();
      init_refresh();
      init_protection();
      init_store();
      init_locale();
      import_numeral2 = __toModule(require_numeral());
    }
  });

  // src/global/array.js
  var luckysheetArray, array_default;
  var init_array = __esm({
    "src/global/array.js"() {
      init_getdata();
      luckysheetArray = {
        transpose: function(getdata, useGetcellValue = true) {
          let arr = [];
          if (getdata.length == 0) {
            return [];
          }
          if (getdata[0].length == 0) {
            return [];
          }
          for (let c2 = 0; c2 < getdata[0].length; c2++) {
            let a = [];
            for (let r2 = 0; r2 < getdata.length; r2++) {
              let value = "";
              if (getdata[r2] != null && getdata[r2][c2] != null) {
                if (useGetcellValue) {
                  value = getcellvalue(r2, c2, getdata);
                } else {
                  value = getdata[r2][c2];
                }
              }
              a.push(value);
            }
            arr.push(a);
          }
          return arr;
        },
        minusClear: function(p, m) {
          if (m.row[0] > p.row[1] || m.row[1] < p.row[0] || m.column[0] > p.column[1] || m.column[1] < p.column[0]) {
            return null;
          }
          if (m.row[0] == p.row[0] && m.row[1] < p.row[1] && m.column[0] > p.column[0] && m.column[1] < p.column[1]) {
            return [];
          }
          let ret = [], range2 = {row: [], column: []};
          let row1 = null, column1 = [p.column[0], p.column[1]];
          if (m.row[1] > p.row[0] && m.row[1] < p.row[1]) {
            row1 = [m.row[1] + 1, p.row[1]];
          } else if (m.row[0] > p.row[0] && m.row[0] < p.row[1]) {
            row1 = [p.row[0], m.row[0] - 1];
          }
          if (row1 != null) {
            ret.push({"row": row1, "column": column1});
          }
          let row2 = [p.row[0], p.row[1]], column2 = null;
          if (m.column[1] > p.column[0] && m.column[1] < p.column[1]) {
            column2 = [m.column[1] + 1, p.column[1]];
          } else if (m.column[0] > p.column[0] && m.column[0] < p.column[1]) {
            column2 = [p.column[0], m.column[0] - 1];
          }
          if (column2 != null) {
            ret.push({"row": row2, "column": column2});
          }
          return ret;
        }
      };
      array_default = luckysheetArray;
    }
  });

  // src/global/analysis.js
  var analysis, analysis_default;
  var init_analysis = __esm({
    "src/global/analysis.js"() {
      init_util();
      analysis = {
        "STDEVP": function(mean, array1d) {
          let cov = 0;
          for (let i2 = 0; i2 < array1d.length; i2++) {
            let xi = array1d[i2];
            cov += Math.pow(xi - mean, 2);
          }
          return numFormat2(Math.sqrt(cov / array1d.length));
        },
        "STDEV": function(mean, array1d) {
          let cov = 0;
          for (let i2 = 0; i2 < array1d.length; i2++) {
            let xi = array1d[i2];
            cov += Math.pow(xi - mean, 2);
          }
          return numFormat2(Math.sqrt(cov / (array1d.length - 1)));
        },
        "VARP": function(mean, array1d) {
          let cov = 0;
          for (let i2 = 0; i2 < array1d.length; i2++) {
            let xi = array1d[i2];
            cov += Math.pow(xi - mean, 2);
          }
          return numFormat2(cov / array1d.length);
        },
        "let": function(mean, array1d) {
          let cov = 0;
          for (let i2 = 0; i2 < array1d.length; i2++) {
            let xi = array1d[i2];
            cov += Math.pow(xi - mean, 2);
          }
          return numFormat2(cov / (array1d.length - 1));
        }
      };
      analysis_default = analysis;
    }
  });

  // src/controllers/pivotTable.js
  var import_numeral3, pivotTable, pivotTable_default;
  var init_pivotTable = __esm({
    "src/controllers/pivotTable.js"() {
      init_get();
      init_util();
      init_getdata();
      init_datecontroll();
      init_format();
      init_validate();
      init_sort();
      init_refresh();
      init_tooltip();
      init_editor();
      init_cleargridelement();
      init_array();
      init_analysis();
      init_select();
      init_sheetSearch();
      init_constant();
      init_sheetmanage();
      init_resize();
      init_server();
      init_protection();
      init_store();
      init_locale();
      import_numeral3 = __toModule(require_numeral());
      init_constant();
      pivotTable = {
        pivotDatas: null,
        pivotSheetIndex: 0,
        pivotDataSheetIndex: 0,
        celldata: null,
        origindata: null,
        getCellData: function(cursheetindex, datasheetindex, data_select_save) {
          let _this = this;
          let sheetIndex;
          if (cursheetindex != null) {
            sheetIndex = cursheetindex;
          } else {
            sheetIndex = store_default.currentSheetIndex;
          }
          let realIndex = getSheetIndex(sheetIndex);
          if (getObjType(store_default.luckysheetfile[realIndex].pivotTable) != "object") {
            store_default.luckysheetfile[realIndex].pivotTable = new Function("return " + store_default.luckysheetfile[realIndex].pivotTable)();
          }
          if (store_default.luckysheetfile[realIndex].pivotTable != null) {
            _this.column = store_default.luckysheetfile[realIndex].pivotTable.column;
            _this.row = store_default.luckysheetfile[realIndex].pivotTable.row;
            _this.values = store_default.luckysheetfile[realIndex].pivotTable.values;
            _this.filter = store_default.luckysheetfile[realIndex].pivotTable.filter;
            _this.showType = store_default.luckysheetfile[realIndex].pivotTable.showType;
            _this.filterparm = store_default.luckysheetfile[realIndex].pivotTable.filterparm;
            if (store_default.luckysheetfile[realIndex].pivotTable.drawPivotTable != null) {
              _this.drawPivotTable = store_default.luckysheetfile[realIndex].pivotTable.drawPivotTable;
            } else {
              _this.drawPivotTable = true;
            }
            if (store_default.luckysheetfile[realIndex].pivotTable.pivotTableBoundary != null) {
              _this.pivotTableBoundary = store_default.luckysheetfile[realIndex].pivotTable.pivotTableBoundary;
            } else {
              _this.pivotTableBoundary = [12, 6];
            }
            if (data_select_save != null) {
              _this.pivot_select_save = data_select_save;
            } else {
              _this.pivot_select_save = store_default.luckysheetfile[realIndex].pivotTable.pivot_select_save;
            }
            if (datasheetindex != null) {
              _this.pivotDataSheetIndex = datasheetindex;
            } else {
              _this.pivotDataSheetIndex = store_default.luckysheetfile[realIndex].pivotTable.pivotDataSheetIndex;
            }
          } else {
            _this.column = null;
            _this.row = null;
            _this.values = null;
            _this.filter = null;
            _this.showType = null;
            _this.filterparm = null;
            _this.drawPivotTable = true;
            _this.pivotTableBoundary = [12, 6];
            if (data_select_save != null) {
              _this.pivot_select_save = data_select_save;
            } else {
              _this.pivot_select_save = store_default.luckysheet_select_save;
            }
            if (datasheetindex != null) {
              _this.pivotDataSheetIndex = datasheetindex;
            } else {
              _this.pivotDataSheetIndex = sheetIndex;
            }
          }
          let pivotrealIndex = getSheetIndex(_this.pivotDataSheetIndex);
          let otherfile = store_default.luckysheetfile[pivotrealIndex];
          if (otherfile["data"] == null) {
            otherfile["data"] = sheetmanage_default.buildGridData(otherfile);
          }
          _this.origindata = getdatabyselectionD(otherfile.data, _this.pivot_select_save);
          let rowhidden = {};
          if (_this.filterparm != null) {
            for (let f in _this.filterparm) {
              for (let h in _this.filterparm[f]) {
                if (h === "rowhidden" && _this.filterparm[f][h] != null) {
                  rowhidden = $.extend(true, rowhidden, _this.filterparm[f][h]);
                }
              }
            }
          }
          _this.rowhidden = rowhidden;
          _this.pivotSheetIndex = sheetIndex;
          let newdata = [];
          for (let i2 = 0; i2 < _this.origindata.length; i2++) {
            if (_this.rowhidden != null && _this.rowhidden[i2] != null) {
              continue;
            }
            newdata.push([].concat(_this.origindata[i2]));
          }
          _this.celldata = newdata;
          _this.pivot_data_type = {};
          for (let c2 = 0; c2 < _this.celldata[1].length; c2++) {
            let type = isdatatype(_this.celldata[1][c2]);
            _this.pivot_data_type[c2.toString()] = type;
          }
        },
        pivot_data_type: {},
        pivot_select_save: null,
        column: null,
        row: null,
        values: null,
        filter: null,
        showType: null,
        rowhidden: null,
        selected: null,
        caljs: null,
        initial: true,
        filterparm: null,
        luckysheet_pivotTable_select_state: false,
        jgridCurrentPivotInput: null,
        movestate: false,
        moveitemposition: [],
        movesave: {},
        showvaluecolrow: function() {
          let _this = this;
          if ($("#luckysheet-modal-dialog-config-value .luckysheet-modal-dialog-slider-config-item").length >= 2) {
            $("#luckysheetpivottablevaluecolrowshow").show();
            if (_this.showType == "column") {
              $("#luckysheetpivottablevaluecolrow").prop("checked", true);
              $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow']").addClass("ui-state-active");
              $("#luckysheetpivottablevaluecolrow1").prop("checked", false);
              $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow1']").removeClass("ui-state-active");
            } else {
              $("#luckysheetpivottablevaluecolrow1").prop("checked", true);
              $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow1']").addClass("ui-state-active");
              $("#luckysheetpivottablevaluecolrow").prop("checked", false);
              $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow']").removeClass("ui-state-active");
            }
          } else {
            $("#luckysheetpivottablevaluecolrowshow").hide();
          }
        },
        resetOrderby: function(obj) {
          let orderby = $("#luckysheet-modal-dialog-config-value .luckysheet-modal-dialog-slider-config-item").index(obj);
          $("#luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column").find(".luckysheet-modal-dialog-slider-config-item").each(function() {
            if ($(this).data("orderby") == orderby) {
              $(this).data("orderby", "self");
            }
          });
        },
        luckysheetsliderlistclearfilter: function($filter) {
          let _this = this;
          let $t = $filter.parent();
          let cindex = $t.data("index");
          let rowhidden = {}, selected = {}, d = _this.origindata, filterdata = {};
          $t.data("rowhidden", "").find(".luckysheet-slider-list-item-filtered").hide();
          _this.setDatatojsfile("selected", {}, cindex);
          _this.setDatatojsfile("rowhidden", null, cindex);
          let newdata = [];
          for (let i2 = 0; i2 < d.length; i2++) {
            if (rowhidden[i2] != null) {
              continue;
            }
            newdata.push([].concat(d[i2]));
          }
          _this.celldata = newdata;
          _this.refreshPivotTable();
          $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide();
        },
        luckysheetsliderlistitemfilter: function($filter) {
          let _this = this;
          const _locale = locale_default();
          const locale_filter = _locale.filter;
          let $t = $filter.parent(), toffset = $t.offset(), $menu = $("#luckysheet-pivotTableFilter-menu"), winH = $(window).height(), winW = $(window).width();
          let cindex = $t.data("index");
          let rowhidden = $t.data("rowhidden");
          if (rowhidden == null || rowhidden == "") {
            rowhidden = {};
          } else if (getObjType(rowhidden) == "string") {
            rowhidden = JSON.parse(rowhidden);
          }
          $("body .luckysheet-cols-menu").hide();
          $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide();
          $("#luckysheet-pivotTableFilter-byvalue-input").val("");
          $("#luckysheet-pivotTableFilter-bycondition").next().hide();
          $("#luckysheet-pivotTableFilter-byvalue").next().show();
          $menu.data("index", cindex);
          $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input").hide().find("input").val();
          $("#luckysheet-pivotTableFilter-selected span").data("type", "0").data("type", null).text(locale_filter.filiterInputNone);
          let byconditiontype = $t.data("byconditiontype");
          $("#luckysheet-pivotTableFilter-selected span").data("value", $t.data("byconditionvalue")).data("type", byconditiontype).text($t.data("byconditiontext"));
          if (byconditiontype == "2") {
            let $input = $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input2").show().find("input");
            $input.eq(0).val($t.data("byconditionvalue1"));
            $input.eq(1).val($t.data("byconditionvalue2"));
          } else if (byconditiontype == "1") {
            $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input").eq(0).show().find("input").val($t.data("byconditionvalue1"));
          }
          const loadingObj = luckysheetlodingHTML("#luckysheet-pivotTableFilter-byvalue-select", {text: locale_filter.filiterMoreDataTip});
          $("#luckysheet-pivotTableFilter-byvalue-select").empty().append(loadingObj.el);
          let rowhiddenother = {};
          $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").not($t.get(0)).each(function() {
            let $t2 = $(this), rh = $t2.data("rowhidden");
            if (rh == null || rh == "") {
              return true;
            }
            if (getObjType(rh) == "string") {
              rh = JSON.parse(rh);
            }
            for (let r2 in rh) {
              rowhiddenother[r2] = 0;
            }
          });
          let data = _this.origindata;
          setTimeout(function() {
            let dvmap = {};
            let dvmap_uncheck = {};
            let vmap = {};
            let vmap_uncheck = {};
            for (let r2 = 1; r2 < data.length; r2++) {
              if (r2 in rowhiddenother) {
                continue;
              }
              if (data[r2] == null) {
                continue;
              }
              let cell = data[r2][cindex];
              if (cell != null && cell.ct != null && cell.ct.t == "d") {
                let v = update("YYYY-MM-DD", cell.v);
                let y = v.split("-")[0];
                let m = v.split("-")[1];
                let d = v.split("-")[2];
                if (!(y in dvmap)) {
                  dvmap[y] = {};
                }
                if (!(m in dvmap[y])) {
                  dvmap[y][m] = {};
                }
                if (!(d in dvmap[y][m])) {
                  dvmap[y][m][d] = 0;
                }
                dvmap[y][m][d]++;
                if (r2 in rowhidden) {
                  dvmap_uncheck[y] = 0;
                  dvmap_uncheck[m] = 0;
                  dvmap_uncheck[d] = 0;
                }
              } else {
                let v, m;
                if (cell == null || isRealNull(cell.v)) {
                  v = null;
                  m = null;
                } else {
                  v = cell.v;
                  m = cell.m;
                }
                if (!(v in vmap)) {
                  vmap[v] = {};
                }
                if (!(m in vmap[v])) {
                  vmap[v][m] = 0;
                }
                vmap[v][m]++;
                if (r2 in rowhidden) {
                  vmap_uncheck[v + "#$$$#" + m] = 0;
                }
              }
            }
            let item2 = [];
            if (JSON.stringify(dvmap).length > 2) {
              for (let y in dvmap) {
                let ysum = 0;
                let monthHtml = "";
                for (let m in dvmap[y]) {
                  let msum = 0;
                  let dayHtml = "";
                  for (let d in dvmap[y][m]) {
                    let dayL = dvmap[y][m][d];
                    msum += dayL;
                    let mT;
                    if (Number(m) < 10) {
                      mT = "0" + Number(m);
                    } else {
                      mT = m;
                    }
                    let dT;
                    if (Number(d) < 10) {
                      dT = "0" + Number(d);
                    } else {
                      dT = d;
                    }
                    if (y in dvmap_uncheck && m in dvmap_uncheck && d in dvmap_uncheck) {
                      dayHtml += '<div class="day luckysheet-mousedown-cancel cf" data-check="false" title="' + y + "-" + mT + "-" + dT + '"><input class="luckysheet-mousedown-cancel" type="checkbox"/><label class="luckysheet-mousedown-cancel">' + d + '</label><span class="count luckysheet-mousedown-cancel">( ' + dayL + " )</span></div>";
                    } else {
                      dayHtml += '<div class="day luckysheet-mousedown-cancel cf" data-check="true" title="' + y + "-" + mT + "-" + dT + '"><input class="luckysheet-mousedown-cancel" type="checkbox" checked="checked"/><label class="luckysheet-mousedown-cancel">' + d + '</label><span class="count luckysheet-mousedown-cancel">( ' + dayL + " )</span></div>";
                    }
                  }
                  ysum += msum;
                  let mT2;
                  if (Number(m) < 10) {
                    mT2 = "0" + Number(m);
                  } else {
                    mT2 = m;
                  }
                  if (y in dvmap_uncheck && m in dvmap_uncheck) {
                    monthHtml += '<div class="monthBox luckysheet-mousedown-cancel"><div class="month luckysheet-mousedown-cancel cf" data-check="false" title="' + y + "-" + mT2 + '"><i class="fa fa-caret-right luckysheet-mousedown-cancel" aria-hidden="true"></i><input class="luckysheet-mousedown-cancel" type="checkbox"/><label class="luckysheet-mousedown-cancel">' + m + "" + locale_filter.filiterMonthText + '</label><span class="count luckysheet-mousedown-cancel">( ' + msum + ' )</span></div><div class="dayList luckysheet-mousedown-cancel">' + dayHtml + "</div></div>";
                  } else {
                    monthHtml += '<div class="monthBox luckysheet-mousedown-cancel"><div class="month luckysheet-mousedown-cancel cf" data-check="true" title="' + y + "-" + mT2 + '"><i class="fa fa-caret-right luckysheet-mousedown-cancel" aria-hidden="true"></i><input class="luckysheet-mousedown-cancel" type="checkbox" checked="checked"/><label class="luckysheet-mousedown-cancel">' + m + "" + locale_filter.filiterMonthText + '</label><span class="count luckysheet-mousedown-cancel">( ' + msum + ' )</span></div><div class="dayList luckysheet-mousedown-cancel">' + dayHtml + "</div></div>";
                  }
                }
                let yearHtml;
                if (y in dvmap_uncheck) {
                  yearHtml = '<div class="yearBox luckysheet-mousedown-cancel"><div class="year luckysheet-mousedown-cancel cf" data-check="false" title="' + y + '"><i class="fa fa-caret-right luckysheet-mousedown-cancel" aria-hidden="true"></i><input class="luckysheet-mousedown-cancel" type="checkbox"/><label class="luckysheet-mousedown-cancel">' + y + "" + locale_filter.filiterYearText + '</label><span class="count luckysheet-mousedown-cancel">( ' + ysum + ' )</span></div><div class="monthList luckysheet-mousedown-cancel">' + monthHtml + "</div></div>";
                } else {
                  yearHtml = '<div class="yearBox luckysheet-mousedown-cancel"><div class="year luckysheet-mousedown-cancel cf" data-check="true" title="' + y + '"><i class="fa fa-caret-right luckysheet-mousedown-cancel" aria-hidden="true"></i><input class="luckysheet-mousedown-cancel" type="checkbox" checked="checked"/><label class="luckysheet-mousedown-cancel">' + y + "" + locale_filter.filiterYearText + '</label><span class="count luckysheet-mousedown-cancel">( ' + ysum + ' )</span></div><div class="monthList luckysheet-mousedown-cancel">' + monthHtml + "</div></div>";
                }
                item2.unshift(yearHtml);
              }
            }
            if (JSON.stringify(vmap).length > 2) {
              let vmapKeys = Object.keys(vmap);
              vmapKeys = orderbydata1D(vmapKeys, true);
              for (let i2 = 0; i2 < vmapKeys.length; i2++) {
                let v = vmapKeys[i2];
                for (let x in vmap[v]) {
                  let text;
                  if (v + "#$$$#" + x == "null#$$$#null") {
                    text = locale_filter.valueBlank;
                  } else {
                    text = x;
                  }
                  let dataHtml;
                  if (v + "#$$$#" + x in vmap_uncheck) {
                    dataHtml = '<div class="textBox luckysheet-mousedown-cancel cf" data-check="false" data-filter="' + (v + "#$$$#" + x) + '" title="' + x + '"><input class="luckysheet-mousedown-cancel" type="checkbox"/><label class="luckysheet-mousedown-cancel">' + text + '</label><span class="luckysheet-mousedown-cancel count">( ' + vmap[v][x] + " )</span></div>";
                  } else {
                    dataHtml = '<div class="textBox luckysheet-mousedown-cancel cf" data-check="true" data-filter="' + (v + "#$$$#" + x) + '" title="' + x + '"><input class="luckysheet-mousedown-cancel" type="checkbox" checked="checked"/><label class="luckysheet-mousedown-cancel">' + text + '</label><span class="luckysheet-mousedown-cancel count">( ' + vmap[v][x] + " )</span></div>";
                  }
                  item2.push(dataHtml);
                }
              }
            }
            let containerH = winH - toffset.top - 350;
            if (containerH < 0)
              containerH = 100;
            $("#luckysheet-pivotTableFilter-byvalue-select").append("<div class='ListBox luckysheet-mousedown-cancel' style='max-height:" + containerH + "px;overflow-y:auto;overflow-x:hidden;'>" + item2.join("") + "</div>");
            loadingObj.close();
          }, 1);
          showrightclickmenu($menu, toffset.left - 250, toffset.top);
        },
        getSumTypeName: function(type) {
          let name2 = "";
          const _locale = locale_default();
          const locale_pivotTable = _locale.pivotTable;
          if (type == "SUM") {
            name2 = locale_pivotTable.valueStatisticsSUM;
          } else if (type == "COUNT") {
            name2 = locale_pivotTable.valueStatisticsCOUNT;
          } else if (type == "COUNTA") {
            name2 = locale_pivotTable.valueStatisticsCOUNTA;
          } else if (type == "COUNTUNIQUE") {
            name2 = locale_pivotTable.valueStatisticsCOUNTUNIQUE;
          } else if (type == "AVERAGE") {
            name2 = locale_pivotTable.valueStatisticsAVERAGE;
          } else if (type == "MAX") {
            name2 = locale_pivotTable.valueStatisticsMAX;
          } else if (type == "MIN") {
            name2 = locale_pivotTable.valueStatisticsMIN;
          } else if (type == "MEDIAN") {
            name2 = locale_pivotTable.valueStatisticsMEDIAN;
          } else if (type == "PRODUCT") {
            name2 = locale_pivotTable.valueStatisticsPRODUCT;
          } else if (type == "STDEV") {
            name2 = locale_pivotTable.valueStatisticsSTDEV;
          } else if (type == "STDEVP") {
            name2 = locale_pivotTable.valueStatisticsSTDEVP;
          } else if (type == "let") {
            name2 = locale_pivotTable.valueStatisticslet;
          } else if (type == "VARP") {
            name2 = locale_pivotTable.valueStatisticsVARP;
          }
          return name2;
        },
        setDatatojsfile: function(attr, value, cindex) {
          let _this = this;
          let index2 = getSheetIndex(_this.pivotSheetIndex);
          if (store_default.luckysheetfile[index2]["pivotTable"] == null) {
            store_default.luckysheetfile[index2]["pivotTable"] = {};
          }
          if (cindex == null) {
            store_default.luckysheetfile[index2]["pivotTable"][attr] = value;
            _this[attr] = value;
          } else {
            if (store_default.luckysheetfile[index2]["pivotTable"]["filterparm"] == null) {
              store_default.luckysheetfile[index2]["pivotTable"]["filterparm"] = {};
            }
            if (store_default.luckysheetfile[index2]["pivotTable"]["filterparm"][cindex.toString()] == null) {
              store_default.luckysheetfile[index2]["pivotTable"]["filterparm"][cindex.toString()] = {};
            }
            store_default.luckysheetfile[index2]["pivotTable"]["filterparm"][cindex.toString()][attr] = value;
            if (_this["filterparm"] == null) {
              _this["filterparm"] = {};
            }
            if (_this["filterparm"][cindex.toString()] == null) {
              _this["filterparm"][cindex.toString()] = {};
            }
            _this["filterparm"][cindex.toString()][attr] = value;
          }
        },
        createPivotTable: function(e) {
          if (isEditMode() || store_default.allowEdit === false) {
            return;
          }
          let _this = this;
          let datasheetindex = store_default.currentSheetIndex;
          const _locale = locale_default();
          const locale_pivotTable = _locale.pivotTable;
          if (isEditMode()) {
            alert(locale_pivotTable.errorNotAllowEdit);
            return;
          }
          if (store_default.luckysheet_select_save.length > 1) {
            tooltip_default.info("", locale_pivotTable.errorNotAllowMulti);
            return;
          }
          if (store_default.luckysheet_select_save.length == 0 || store_default.luckysheet_select_save[0].row[0] == store_default.luckysheet_select_save[0].row[1] || store_default.luckysheet_select_save[0].column[0] == store_default.luckysheet_select_save[0].column[1]) {
            tooltip_default.info("", locale_pivotTable.errorSelectRange);
            return;
          }
          let select_save = $.extend(true, {}, store_default.luckysheet_select_save[0]);
          sheetmanage_default.addNewSheet(e, true);
          _this.getCellData(store_default.currentSheetIndex, datasheetindex, select_save);
          _this.setDatatojsfile("pivot_select_save", select_save);
          _this.setDatatojsfile("pivotDataSheetIndex", datasheetindex);
          _this.initialPivotManage();
        },
        changePivotTable: function(index2) {
          let _this = this;
          const _locale = locale_default();
          const locale_pivotTable = _locale.pivotTable;
          let pivotDataSheetIndex = store_default.luckysheetfile[getSheetIndex(index2)].pivotTable.pivotDataSheetIndex;
          let real_pivotDataSheetIndex = getSheetIndex(pivotDataSheetIndex);
          if (real_pivotDataSheetIndex == null) {
            tooltip_default.info(locale_pivotTable.errorIsDamage, "");
            return;
          }
          _this.getCellData(index2);
          _this.initialPivotManage(true);
          _this.refreshPivotTable();
        },
        refreshPivotTable: function(isRefreshCanvas = true) {
          let _this = this;
          let redo2 = {};
          redo2["pivotTable"] = pivotTable;
          redo2["data"] = editor_default.deepCopyFlowData(store_default.flowdata);
          _this.storePivotTableParam();
          let ret = _this.dataHandler(_this.column, _this.row, _this.values, _this.showType, _this.celldata);
          _this.setDatatojsfile("pivotDatas", ret);
          let d = $.extend(true, [], sheetmanage_default.nulldata);
          let data = d;
          let addr = 0, addc = 0;
          if (ret.length == 0) {
            _this.setDatatojsfile("drawPivotTable", true);
            _this.setDatatojsfile("pivotTableBoundary", [12, 6]);
          } else {
            _this.setDatatojsfile("drawPivotTable", false);
            _this.setDatatojsfile("pivotTableBoundary", [ret.length, ret[0].length]);
            let rlen = ret.length, clen = ret[0].length;
            addr = rlen - d.length;
            addc = clen - d[0].length;
            data = datagridgrowth(d, addr + 20, addc + 10, true);
            for (let r2 = 0; r2 < rlen; r2++) {
              let x = [].concat(data[r2]);
              for (let c2 = 0; c2 < clen; c2++) {
                let value = "";
                if (ret[r2] != null && ret[r2][c2] != null) {
                  value = getcellvalue(r2, c2, ret);
                }
                x[c2] = value;
              }
              data[r2] = x;
            }
          }
          redo2["type"] = "pivotTable_change";
          redo2["curdata"] = $.extend(true, [], data);
          redo2["sheetIndex"] = store_default.currentSheetIndex;
          redo2["pivotTablecur"] = _this.getPivotTableData();
          if (store_default.clearjfundo) {
            store_default.jfundo.length = 0;
            store_default.jfredo.push(redo2);
          }
          cleargridelement();
          store_default.clearjfundo = false;
          if (addr > 0 || addc > 0) {
            jfrefreshgridall(data[0].length, data.length, data, null, store_default.luckysheet_select_save, "datachangeAll", void 0, void 0, isRefreshCanvas);
          } else {
            jfrefreshgrid(data, store_default.luckysheet_select_save, {}, null, isRefreshCanvas);
            selectHightlightShow();
          }
          store_default.clearjfundo = true;
        },
        drawPivotTable: true,
        pivotTableBoundary: [12, 6],
        pivotclick: function(row_index, col_index, index2) {
          if (index2 == null) {
            index2 = store_default.currentSheetIndex;
          }
          let file = store_default.luckysheetfile[getSheetIndex(index2)];
          if (!file.isPivotTable) {
            return;
          }
          let pivotDataSheetIndex = file.pivotTable.pivotDataSheetIndex;
          let real_pivotDataSheetIndex = getSheetIndex(pivotDataSheetIndex);
          if (real_pivotDataSheetIndex == null) {
            return;
          }
          let slider = $("#luckysheet-modal-dialog-slider-pivot");
          let isRangeClick = this.isPivotRange(row_index, col_index);
          if (isRangeClick && slider.is(":hidden")) {
            if (!checkProtectionAuthorityNormal(index2, "usePivotTablereports", false)) {
              return;
            }
            slider.show();
            luckysheetsizeauto();
            $("#luckysheet-sta-content").css("padding-right", 260);
          } else if (!isRangeClick && slider.is(":visible")) {
            slider.hide();
            luckysheetsizeauto();
            $("#luckysheet-sta-content").css("padding-right", 10);
          }
        },
        isPivotRange: function(row_index, col_index) {
          let _this = this;
          if (!!store_default.luckysheetcurrentisPivotTable) {
            if (row_index < _this.pivotTableBoundary[0] && col_index < _this.pivotTableBoundary[1]) {
              return true;
            } else {
              return false;
            }
          }
        },
        storePivotTableParam: function() {
          let _this = this;
          let columnarr = [], rowarr = [], filterarr = [], valuesarr = [];
          $("#luckysheet-modal-dialog-config-filter .luckysheet-modal-dialog-slider-config-item").each(function() {
            let item2 = {};
            item2["index"] = $(this).data("index");
            item2["name"] = $(this).data("name");
            item2["fullname"] = $(this).find(".luckysheet-modal-dialog-slider-config-item-txt").text();
            filterarr.push(item2);
          });
          $("#luckysheet-modal-dialog-config-row .luckysheet-modal-dialog-slider-config-item").each(function() {
            let item2 = {};
            item2["index"] = $(this).data("index");
            item2["name"] = $(this).data("name");
            item2["fullname"] = $(this).find(".luckysheet-modal-dialog-slider-config-item-txt").text();
            item2["order"] = $(this).data("order");
            item2["orderby"] = $(this).data("orderby");
            item2["stastic"] = $(this).data("stastic");
            rowarr.push(item2);
          });
          $("#luckysheet-modal-dialog-config-column .luckysheet-modal-dialog-slider-config-item").each(function() {
            let item2 = {};
            item2["index"] = $(this).data("index");
            item2["name"] = $(this).data("name");
            item2["fullname"] = $(this).find(".luckysheet-modal-dialog-slider-config-item-txt").text();
            item2["order"] = $(this).data("order");
            item2["orderby"] = $(this).data("orderby");
            item2["stastic"] = $(this).data("stastic");
            columnarr.push(item2);
          });
          $("#luckysheet-modal-dialog-config-value .luckysheet-modal-dialog-slider-config-item").each(function() {
            let item2 = {};
            item2["index"] = $(this).data("index");
            item2["name"] = $(this).data("name");
            item2["fullname"] = $(this).find(".luckysheet-modal-dialog-slider-config-item-txt").text();
            item2["sumtype"] = $(this).data("sumtype");
            item2["nameindex"] = $(this).data("nameindex");
            valuesarr.push(item2);
          });
          _this.setDatatojsfile("column", columnarr);
          _this.setDatatojsfile("row", rowarr);
          _this.setDatatojsfile("filter", filterarr);
          _this.setDatatojsfile("values", valuesarr);
          let showtype = $("#luckysheetpivottablevaluecolrow:checked, #luckysheetpivottablevaluecolrow1:checked").val();
          _this.setDatatojsfile("showType", showtype == "0" ? "row" : "column");
          let pivotTable2 = _this.getPivotTableData();
          delete pivotTable2.pivotDatas;
          server_default.saveParam("all", _this.pivotSheetIndex, pivotTable2, {"k": "pivotTable"});
        },
        getPivotTableData: function(dataindex) {
          if (dataindex == null) {
            dataindex = this.pivotSheetIndex;
          }
          let index2 = getSheetIndex(dataindex);
          let pivotTable2 = store_default.luckysheetfile[index2]["pivotTable"];
          if (getObjType(pivotTable2) == "object") {
            pivotTable2 = $.extend(true, {}, store_default.luckysheetfile[index2]["pivotTable"]);
          } else {
            pivotTable2 = new Function("return " + pivotTable2)();
          }
          return pivotTable2;
        },
        addValuesToTitle: function(titles, values) {
          let rowLen = titles.length * values.length, colLen = titles[0].length + 1;
          let retdata = [];
          if (titles.length == 0 && values.length > 0) {
            for (let v = 0; v < values.length; v++) {
              retdata.push(values[v].fullname);
            }
            return retdata;
          }
          if (values.length == 0 && titles.length > 0) {
            return titles;
          }
          for (let r2 = 0; r2 < rowLen; r2++) {
            retdata[r2] = new Array(colLen);
            for (let c2 = 0; c2 < colLen - 1; c2++) {
              retdata[r2][c2] = titles[Math.floor(r2 / values.length)][c2];
            }
            retdata[r2][colLen - 1] = values[r2 % values.length].fullname;
          }
          return retdata;
        },
        initialPivotManage: function(restore) {
          let _this = this;
          const _locale = locale_default();
          const locale_pivotTable = _locale.pivotTable;
          const locale_button = _locale.button;
          const locale_filter = _locale.filter;
          if (_this.initial) {
            _this.initial = false;
            $("body").append(luckysheetPivotTableHTML());
            $("#luckysheet-modal-dialog-slider-close").click(function() {
              $("#luckysheet-modal-dialog-slider-pivot").hide();
              luckysheetsizeauto();
            });
            $("body").append(replaceHtml(modelHTML, {"id": "luckysheet-data-pivotTable-selection", "addclass": "luckysheet-data-pivotTable-selection", "title": locale_pivotTable.titleSelectionDataRange, "content": '<input id="luckysheet-pivotTable-range-selection-input" class="luckysheet-datavisual-range-container" style="font-size: 14px;padding:5px;max-width:none;" spellcheck="false" aria-label="' + locale_pivotTable.titleDataRange + '" placeholder="' + locale_pivotTable.titleDataRange + '">', "botton": '<button id="luckysheet-pivotTable-selection-confirm" class="btn btn-primary">' + locale_button.confirm + '</button><button class="btn btn-default luckysheet-model-close-btn">' + locale_button.cancel + "</button>"}));
            $("body").append(replaceHtml(filtermenuHTML(), {"menuid": "pivotTableFilter"}));
            $("body").append(replaceHtml(filtersubmenuHTML(), {"menuid": "pivotTableFilter"}));
            $("body").append(pivottableconfigHTML());
            $("body").append(pivottablesumHTML());
            $("#luckysheet-pivotTableFilter-orderby-asc").remove();
            $("#luckysheet-pivotTableFilter-orderby-desc").next().remove();
            $("#luckysheet-pivotTableFilter-orderby-desc").remove();
            $("#luckysheet-pivotTableFilter-orderby-color").next().remove();
            $("#luckysheet-pivotTableFilter-orderby-color").remove();
            $("#luckysheetpivottablevaluecolrow, #luckysheetpivottablevaluecolrow1").checkboxradio({
              icon: false
            }).change(function() {
              _this.refreshPivotTable();
            });
            let hidefilersubmenu = null;
            $("#luckysheet-pivotTableFilter-menu").mouseover(function() {
              clearTimeout(hidefilersubmenu);
              hidefilersubmenu = setTimeout(function() {
                $("#luckysheet-pivotTableFilter-submenu").hide();
              }, 500);
            });
            $(document).off("click.ptFilterCheckbox1").on("click.ptFilterCheckbox1", "#luckysheet-pivotTableFilter-byvalue-select .textBox", function() {
              if ($(this).attr("data-check") == "true") {
                $(this).attr("data-check", "false");
                $(this).find("input[type='checkbox']").removeAttr("checked");
              } else {
                $(this).attr("data-check", "true");
                $(this).find("input[type='checkbox']").prop("checked", true);
              }
            });
            $(document).off("click.ptFilterCheckbox2").on("click.ptFilterCheckbox2", "#luckysheet-pivotTableFilter-byvalue-select .year", function() {
              if ($(this).attr("data-check") == "true") {
                $(this).attr("data-check", "false");
                $(this).parents(".yearBox").find(".month").attr("data-check", "false");
                $(this).parents(".yearBox").find(".day").attr("data-check", "false");
                $(this).parents(".yearBox").find("input[type='checkbox']").removeAttr("checked");
              } else {
                $(this).attr("data-check", "true");
                $(this).parents(".yearBox").find(".month").attr("data-check", "true");
                $(this).parents(".yearBox").find(".day").attr("data-check", "true");
                $(this).parents(".yearBox").find("input[type='checkbox']").prop("checked", true);
              }
            });
            $(document).off("click.ptFilterCheckbox3").on("click.ptFilterCheckbox3", "#luckysheet-pivotTableFilter-byvalue-select .month", function() {
              if ($(this).attr("data-check") == "true") {
                $(this).attr("data-check", "false");
                $(this).parents(".monthBox").find(".day").attr("data-check", "false");
                $(this).parents(".monthBox").find("input[type='checkbox']").removeAttr("checked");
              } else {
                $(this).attr("data-check", "true");
                $(this).parents(".monthBox").find(".day").attr("data-check", "true");
                $(this).parents(".monthBox").find("input[type='checkbox']").prop("checked", true);
              }
              let yearDayAllCheck = true;
              let $yearDay = $(this).parents(".yearBox").find(".day");
              $yearDay.each(function(i2, e) {
                if ($(e).attr("data-check") == "true") {
                } else {
                  yearDayAllCheck = false;
                }
              });
              if (yearDayAllCheck) {
                $(this).parents(".yearBox").find(".year").attr("data-check", "true");
                $(this).parents(".yearBox").find(".year input[type='checkbox']").prop("checked", true);
              } else {
                $(this).parents(".yearBox").find(".year").attr("data-check", "false");
                $(this).parents(".yearBox").find(".year input[type='checkbox']").removeAttr("checked");
              }
            });
            $(document).off("click.ptFilterCheckbox4").on("click.ptFilterCheckbox4", "#luckysheet-pivotTableFilter-byvalue-select .day", function() {
              if ($(this).attr("data-check") == "true") {
                $(this).attr("data-check", "false");
                $(this).find("input[type='checkbox']").removeAttr("checked");
              } else {
                $(this).attr("data-check", "true");
                $(this).find("input[type='checkbox']").prop("checked", true);
              }
              let monthDayAllCheck = true;
              let $monthDay = $(this).parents(".monthBox").find(".day");
              $monthDay.each(function(i2, e) {
                if ($(e).attr("data-check") == "true") {
                } else {
                  monthDayAllCheck = false;
                }
              });
              if (monthDayAllCheck) {
                $(this).parents(".monthBox").find(".month").attr("data-check", "true");
                $(this).parents(".monthBox").find(".month input[type='checkbox']").prop("checked", true);
              } else {
                $(this).parents(".monthBox").find(".month").attr("data-check", "false");
                $(this).parents(".monthBox").find(".month input[type='checkbox']").removeAttr("checked");
              }
              let yearDayAllCheck = true;
              let $yearDay = $(this).parents(".yearBox").find(".day");
              $yearDay.each(function(i2, e) {
                if ($(e).attr("data-check") == "true") {
                } else {
                  yearDayAllCheck = false;
                }
              });
              if (yearDayAllCheck) {
                $(this).parents(".yearBox").find(".year").attr("data-check", "true");
                $(this).parents(".yearBox").find(".year input[type='checkbox']").prop("checked", true);
              } else {
                $(this).parents(".yearBox").find(".year").attr("data-check", "false");
                $(this).parents(".yearBox").find(".year input[type='checkbox']").removeAttr("checked");
              }
            });
            $(document).off("click.ptFilterYearDropdown").on("click.ptFilterYearDropdown", "#luckysheet-pivotTableFilter-byvalue-select .yearBox .fa-caret-right", function() {
              let $p = $(this).parents(".luckysheet-mousedown-cancel");
              if ($p.hasClass("year")) {
                $(this).parents(".yearBox").find(".monthList").slideToggle();
              }
              if ($p.hasClass("month")) {
                $(this).parents(".monthBox").find(".dayList").slideToggle();
              }
            });
            $("#luckysheet-pivotTableFilter-byvalue-btn-all").click(function() {
              $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']").prop("checked", true);
              $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']").parents(".luckysheet-mousedown-cancel").attr("data-check", "true");
            });
            $("#luckysheet-pivotTableFilter-byvalue-btn-contra").click(function() {
              let $input = $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']");
              $input.each(function(i2, e) {
                if ($(e).is(":checked")) {
                  $(e).removeAttr("checked");
                  $(e).parents(".luckysheet-mousedown-cancel").attr("data-check", "false");
                } else {
                  $(e).prop("checked", true);
                  $(e).parents(".luckysheet-mousedown-cancel").attr("data-check", "true");
                }
              });
              let $month = $("#luckysheet-pivotTableFilter-byvalue-select .ListBox .monthBox");
              $month.each(function(index2, event2) {
                let monthDayAllCheck = true;
                let $monthDay = $(event2).find(".day input[type='checkbox']");
                $monthDay.each(function(i2, e) {
                  if ($(e).is(":checked")) {
                  } else {
                    monthDayAllCheck = false;
                  }
                });
                if (monthDayAllCheck) {
                  $(event2).find(".month input[type='checkbox']").prop("checked", true);
                  $(event2).attr("data-check", "true");
                } else {
                  $(event2).find(".month input[type='checkbox']").removeAttr("checked");
                  $(event2).attr("data-check", "false");
                }
              });
              let $year = $("#luckysheet-pivotTableFilter-byvalue-select .ListBox .yearBox");
              $year.each(function(index2, event2) {
                let yearDayAllCheck = true;
                let $yearDay = $(event2).find(".day input[type='checkbox']");
                $yearDay.each(function(i2, e) {
                  if ($(e).is(":checked")) {
                  } else {
                    yearDayAllCheck = false;
                  }
                });
                if (yearDayAllCheck) {
                  $(event2).find(".year input[type='checkbox']").prop("checked", true);
                  $(event2).attr("data-check", "true");
                } else {
                  $(event2).find(".year input[type='checkbox']").removeAttr("checked");
                  $(event2).attr("data-check", "false");
                }
              });
            });
            $("#luckysheet-pivotTableFilter-byvalue-btn-clear").click(function() {
              $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']").removeAttr("checked");
              $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']").parents(".luckysheet-mousedown-cancel").attr("data-check", "false");
            });
            $("#luckysheet-pivotTableFilter-byvalue-input").on("input propertychange", function() {
              let v = $(this).val().toString();
              $("#luckysheet-pivotTableFilter-byvalue-select .ListBox .luckysheet-mousedown-cancel").show();
              if (v != "") {
                let $check = $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']");
                $check.each(function(i2, e) {
                  let $p = $(e).parents(".luckysheet-mousedown-cancel");
                  if ($p.hasClass("day")) {
                    let day = $(e).siblings("label").text().toString();
                    let month = $(e).parents(".monthBox").find(".month label").text().toString();
                    let year = $(e).parents(".yearBox").find(".year label").text().toString();
                    let itemV = year + "-" + month + "-" + day;
                    if (itemV.indexOf(v) == -1) {
                      $(e).parents(".day").hide();
                      let $monthDay = $(e).parents(".dayList").find(".day:visible");
                      if ($monthDay.length == 0) {
                        $(e).parents(".monthBox").find(".month").hide();
                      }
                      let $yearDay = $(e).parents(".monthList").find(".day:visible");
                      if ($yearDay.length == 0) {
                        $(e).parents(".yearBox").find(".year").hide();
                      }
                    }
                  }
                  if ($p.hasClass("textBox")) {
                    let itemV = $(e).siblings("label").text().toString();
                    if (itemV.indexOf(v) == -1) {
                      $(e).parents(".textBox").hide();
                    }
                  }
                });
              }
            });
            $("#luckysheet-pivotTableFilter-bycondition, #luckysheet-pivotTableFilter-byvalue").click(function() {
              let $t = $(this);
              $t.next().slideToggle(200);
              setTimeout(function() {
                if ($t.attr("id") == "luckysheet-pivotTableFilter-bycondition" && $("#luckysheet-pivotTableFilter-bycondition").next().is(":visible")) {
                  if ($("#luckysheet-pivotTableFilter-selected span").text() != locale_filter.filiterInputNone) {
                    $("#luckysheet-pivotTableFilter-byvalue").next().slideUp(200);
                  }
                }
                if ($t.is($("#luckysheet-pivotTableFilter-bycondition"))) {
                  if ($("#luckysheet-pivotTableFilter-bycondition").next().is(":hidden") && $("#luckysheet-pivotTableFilter-byvalue").next().is(":hidden")) {
                    $("#luckysheet-pivotTableFilter-byvalue").next().slideDown(200);
                  }
                }
              }, 300);
            });
            $("#luckysheet-pivotTableFilter-cancel").click(function() {
              $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide();
            });
            $("#luckysheet-pivotTableFilter-selected").click(function() {
              let $t = $(this), toffset = $t.offset(), $menu = $("#luckysheet-pivotTableFilter-submenu");
              $menu.hide();
              let winH = $(window).height(), winW = $(window).width();
              let menuW = $menu.width(), menuH = $menu.height();
              let top = toffset.top, left = toffset.left, mheight = winH - toffset.top - 20;
              if (toffset.left + menuW > winW) {
                left = toffset.left - menuW;
              }
              if (toffset.top > winH / 2) {
                top = winH - toffset.top;
                if (top < 0) {
                  top = 0;
                }
                mheight = toffset.top - 20;
              }
              $menu.css({"top": top, "left": left, "height": mheight}).show();
              clearTimeout(hidefilersubmenu);
            });
            $("#luckysheet-pivotTableFilter-submenu").mouseover(function() {
              clearTimeout(hidefilersubmenu);
            }).find(".luckysheet-cols-menuitem").click(function(e) {
              $("#luckysheet-pivotTableFilter-selected span").html($(this).find(".luckysheet-cols-menuitem-content").text()).data("value", $(this).data("value"));
              $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input").hide();
              if ($(this).data("type") == "2") {
                $("#luckysheet-pivotTableFilter-selected span").data("type", "2");
                $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input2").show();
              } else if ($(this).data("type") == "0") {
                $("#luckysheet-pivotTableFilter-selected span").data("type", "0");
              } else {
                $("#luckysheet-pivotTableFilter-selected span").data("type", "1");
                $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input").eq(0).show();
                if ($(this).attr("data-value") == "dateequal" || $(this).attr("data-value") == "datelessthan" || $(this).attr("data-value") == "datemorethan") {
                  $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input input").prop("type", "date");
                } else {
                  $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input input").prop("type", "text");
                }
              }
              $("#luckysheet-pivotTableFilter-byvalue").next().slideUp();
              $("#luckysheet-pivotTableFilter-submenu").hide();
            });
            $("#luckysheet-modal-dialog-pivotTable-list").on("click", " .luckysheet-slider-list-item-filter", function(e) {
              _this.luckysheetsliderlistitemfilter($(this));
              e.stopPropagation();
              return false;
            });
            $("#luckysheet-modal-dialog-pivotTable-list").on("click", " .luckysheet-slider-list-item-filtered", function(e) {
              _this.luckysheetsliderlistclearfilter($(this).next());
              e.stopPropagation();
              return false;
            });
            $("#luckysheet-dialog-pivotTable-range-seleted").click(function() {
              $("#luckysheet-modal-dialog-slider-pivot").hide();
              luckysheetsizeauto();
              let $t = $("#luckysheet-data-pivotTable-selection"), myh = $t.outerHeight(), myw = $t.outerWidth();
              let winw = $(window).width(), winh = $(window).height();
              let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
              $("#luckysheet-data-pivotTable-selection").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 4}).show();
              _this.jgridCurrentPivotInput = $("#luckysheet-dialog-pivotTable-range").html();
              $("#luckysheet-pivotTable-range-selection-input").val(_this.jgridCurrentPivotInput);
              _this.luckysheet_pivotTable_select_state = true;
            });
            $("#luckysheet-pivotTableFilter-initial").click(function() {
              $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-slider-list-item-filtered").hide();
              $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").data("rowhidden", "");
              $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide();
              $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input").hide().find("input").val();
              $("#luckysheet-pivotTableFilter-selected span").data("type", "0").data("type", null).text(locale_filter.filiterInputNone);
              _this.setDatatojsfile("filterparm", null);
              _this.celldata = _this.origindata;
              _this.refreshPivotTable();
            });
            $("#luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column").on("click", ".luckysheet-modal-dialog-slider-config-item-icon", function(e) {
              let $t = $(e.target), $item = $t.closest(".luckysheet-modal-dialog-slider-config-item"), cindex = $item.data("index"), toffset = $item.offset();
              let order = $item.data("order"), orderby = $item.data("orderby"), stastic = $item.data("stastic");
              if (order == null) {
                order = "default";
              }
              let option = '<option value="self">' + $item.find(".luckysheet-modal-dialog-slider-config-item-txt").data("name") + "</option>";
              $("#luckysheet-modal-dialog-config-value .luckysheet-modal-dialog-slider-config-item").each(function(i2) {
                option += '<option value="' + i2 + '">' + $(this).find(".luckysheet-modal-dialog-slider-config-item-txt").text() + "</option>";
              });
              $("#luckysheet-pivotTable-config-option-orderby").empty().html(option);
              if (orderby == null) {
                orderby = "self";
              }
              if (stastic == null) {
                stastic = "1";
              }
              $("#luckysheet-pivotTable-config-option-order").val(order).data("index", cindex);
              $("#luckysheet-pivotTable-config-option-orderby").val(orderby).data("index", cindex);
              $("#luckysheet-pivotTable-config-option-stastic").val(stastic).data("index", cindex);
              mouseclickposition($("#luckysheet-pivotTable-config-option"), toffset.left + $item.outerWidth(), toffset.top - 13, "rightbottom");
              e.stopPropagation();
              return false;
            });
            $("#luckysheet-pivotTable-config-option-order,#luckysheet-pivotTable-config-option-orderby,#luckysheet-pivotTable-config-option-stastic").change(function() {
              let $t = $(this), cindex = $t.data("index");
              $("#luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column").find(".luckysheet-modal-dialog-slider-config-item").each(function() {
                if ($(this).data("index") == cindex) {
                  $(this).data($t.attr("id").replace("luckysheet-pivotTable-config-option-", ""), $t.val());
                }
              });
              _this.refreshPivotTable();
            });
            $("#luckysheet-modal-dialog-config-value").on("click", ".luckysheet-modal-dialog-slider-config-item-icon", function(e) {
              let $t = $(e.target), $item = $t.closest(".luckysheet-modal-dialog-slider-config-item"), cindex = $item.data("index"), toffset = $item.offset(), sumtype = $item.data("sumtype");
              let type = _this.pivot_data_type[cindex.toString()];
              if (sumtype == null) {
                if (type == "num") {
                  sumtype = "SUM";
                } else {
                  sumtype = "COUNTA";
                }
              }
              let $menu = $("#luckysheet-pivotTable-config-option-sumtype");
              $menu.find(".luckysheet-submenu-arrow").hide();
              $menu.find(".luckysheet-cols-menuitem[sumtype='" + sumtype + "'] .luckysheet-submenu-arrow").css("display", "inline");
              $menu.data("item", $item);
              mouseclickposition($menu, toffset.left + $item.outerWidth(), toffset.top - 13, "rightbottom");
              e.stopPropagation();
              return false;
            });
            $("#luckysheet-pivotTable-config-option-sumtype .luckysheet-cols-menuitem").click(function() {
              let $item = $("#luckysheet-pivotTable-config-option-sumtype").data("item");
              let sumtype = $(this).attr("sumtype");
              $item.data("sumtype", $(this).attr("sumtype"));
              let name2 = _this.getSumTypeName(sumtype) + ":" + $item.data("name");
              $item.attr("title", name2).find(".luckysheet-modal-dialog-slider-config-item-txt").html(name2);
              $("#luckysheet-pivotTable-config-option-sumtype").hide();
              _this.refreshPivotTable();
            });
            $("#luckysheet-modal-dialog-config-filter").on("click", ".luckysheet-modal-dialog-slider-config-item-icon", function(e) {
              let $t = $(e.target), cindex = $t.closest(".luckysheet-modal-dialog-slider-config-item").data("index");
              _this.luckysheetsliderlistitemfilter($("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").eq(cindex).find(".luckysheet-slider-list-item-filter"));
              e.stopPropagation();
              return false;
            });
            $("#luckysheet-pivotTableFilter-confirm").click(function() {
              let $menu = $("#luckysheet-pivotTableFilter-menu");
              let cindex = $menu.data("index");
              let rowhiddenother = {};
              $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").each(function() {
                let $t = $(this), rh = $t.data("rowhidden");
                if ($t.data("index") != cindex) {
                  if (rh == null || rh == "") {
                    return true;
                  }
                  if (getObjType(rh) == "string") {
                    rh = JSON.parse(rh);
                  }
                  for (let r2 in rh) {
                    rowhiddenother[r2] = 0;
                  }
                }
              });
              let d = _this.origindata;
              let filterdata = {};
              let rowhidden = {};
              let caljs = {};
              if ($("#luckysheet-pivotTableFilter-bycondition").next().is(":visible") && $("#luckysheet-pivotTableFilter-byvalue").next().is(":hidden") && $("#luckysheet-pivotTableFilter-selected span").data("value") != "null") {
                let $t = $("#luckysheet-pivotTableFilter-selected span");
                let type = $t.data("type"), value = $t.data("value");
                caljs["value"] = value;
                caljs["text"] = $t.text();
                if (type == "0") {
                  caljs["type"] = "0";
                } else if (type == "2") {
                  let $input = $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input2 input");
                  caljs["type"] = "2";
                  caljs["value1"] = $input.eq(0).val();
                  caljs["value2"] = $input.eq(1).val();
                } else {
                  caljs["type"] = "1";
                  caljs["value1"] = $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input").eq(0).find("input").val();
                }
                for (let r2 = 1; r2 < d.length; r2++) {
                  if (r2 in rowhiddenother) {
                    continue;
                  }
                  if (d[r2] == null) {
                    continue;
                  }
                  let cell = d[r2][cindex];
                  if (value == "cellnull") {
                    if (cell != null && !isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    }
                  } else if (value == "cellnonull") {
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    }
                  } else if (value == "textinclude") {
                    let value1 = caljs["value1"];
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else {
                      if (cell.m.indexOf(value1) == -1) {
                        rowhidden[r2] = 0;
                      }
                    }
                  } else if (value == "textnotinclude") {
                    let value1 = caljs["value1"];
                    if (cell == null || isRealNull(cell.v)) {
                    } else {
                      if (cell.m.indexOf(value1) > -1) {
                        rowhidden[r2] = 0;
                      }
                    }
                  } else if (value == "textstart") {
                    let value1 = caljs["value1"], valuelen = value1.length;
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else {
                      if (cell.m.substr(0, valuelen) != value1) {
                        rowhidden[r2] = 0;
                      }
                    }
                  } else if (value == "textend") {
                    let value1 = caljs["value1"], valuelen = value1.length;
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else {
                      if (valuelen > cell.m.length || cell.m.substr(cell.m.length - valuelen, valuelen) != value1) {
                        rowhidden[r2] = 0;
                      }
                    }
                  } else if (value == "textequal") {
                    let value1 = caljs["value1"];
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else {
                      if (cell.m != value1) {
                        rowhidden[r2] = 0;
                      }
                    }
                  } else if (value == "dateequal") {
                    let value1 = genarate(caljs["value1"])[2];
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else if (cell.ct != null && cell.ct.t == "d") {
                      if (parseInt(cell.v) != value1) {
                        rowhidden[r2] = 0;
                      }
                    } else {
                      rowhidden[r2] = 0;
                    }
                  } else if (value == "datelessthan") {
                    let value1 = genarate(caljs["value1"])[2];
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else if (cell.ct != null && cell.ct.t == "d") {
                      if (parseInt(cell.v) >= value1) {
                        rowhidden[r2] = 0;
                      }
                    } else {
                      rowhidden[r2] = 0;
                    }
                  } else if (value == "datemorethan") {
                    let value1 = genarate(caljs["value1"])[2];
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else if (cell.ct != null && cell.ct.t == "d") {
                      if (parseInt(cell.v) <= value1) {
                        rowhidden[r2] = 0;
                      }
                    } else {
                      rowhidden[r2] = 0;
                    }
                  } else if (value == "morethan") {
                    let value1 = parseFloat(caljs["value1"]);
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else if (cell.ct != null && cell.ct.t == "n") {
                      if (cell.v <= value1) {
                        rowhidden[r2] = 0;
                      }
                    } else {
                      rowhidden[r2] = 0;
                    }
                  } else if (value == "moreequalthan") {
                    let value1 = parseFloat(caljs["value1"]);
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else if (cell.ct != null && cell.ct.t == "n") {
                      if (cell.v < value1) {
                        rowhidden[r2] = 0;
                      }
                    } else {
                      rowhidden[r2] = 0;
                    }
                  } else if (value == "lessthan") {
                    let value1 = parseFloat(caljs["value1"]);
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else if (cell.ct != null && cell.ct.t == "n") {
                      if (cell.v >= value1) {
                        rowhidden[r2] = 0;
                      }
                    } else {
                      rowhidden[r2] = 0;
                    }
                  } else if (value == "lessequalthan") {
                    let value1 = parseFloat(caljs["value1"]);
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else if (cell.ct != null && cell.ct.t == "n") {
                      if (cell.v > value1) {
                        rowhidden[r2] = 0;
                      }
                    } else {
                      rowhidden[r2] = 0;
                    }
                  } else if (value == "equal") {
                    let value1 = parseFloat(caljs["value1"]);
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else if (cell.ct != null && cell.ct.t == "n") {
                      if (cell.v != value1) {
                        rowhidden[r2] = 0;
                      }
                    } else {
                      rowhidden[r2] = 0;
                    }
                  } else if (value == "noequal") {
                    let value1 = parseFloat(caljs["value1"]);
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else if (cell.ct != null && cell.ct.t == "n") {
                      if (cell.v == value1) {
                        rowhidden[r2] = 0;
                      }
                    } else {
                      rowhidden[r2] = 0;
                    }
                  } else if (value == "include") {
                    let value1 = parseFloat(caljs["value1"]), value2 = parseFloat(caljs["value2"]);
                    let min, max;
                    if (value1 < value2) {
                      min = value1;
                      max = value2;
                    } else {
                      max = value1;
                      min = value2;
                    }
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else if (cell.ct != null && cell.ct.t == "n") {
                      if (cell.v < min || cell.v > max) {
                        rowhidden[r2] = 0;
                      }
                    } else {
                      rowhidden[r2] = 0;
                    }
                  } else if (value == "noinclude") {
                    let value1 = parseFloat(caljs["value1"]), value2 = parseFloat(caljs["value2"]);
                    let min, max;
                    if (value1 < value2) {
                      min = value1;
                      max = value2;
                    } else {
                      max = value1;
                      min = value2;
                    }
                    if (cell == null || isRealNull(cell.v)) {
                      rowhidden[r2] = 0;
                    } else if (cell.ct != null && cell.ct.t == "n") {
                      if (cell.v >= min && cell.v <= max) {
                        rowhidden[r2] = 0;
                      }
                    } else {
                      rowhidden[r2] = 0;
                    }
                  }
                }
              } else {
                $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']").each(function(i2, e) {
                  if ($(e).is(":visible") && $(e).is(":checked")) {
                    return true;
                  }
                  if ($(e).closest(".day").length > 0) {
                    let day = $(e).siblings("label").text();
                    if (Number(day) < 10) {
                      day = "0" + day;
                    }
                    let month = $(e).closest(".monthBox").find(".month label").text().replace(locale_filter.filiterMonthText, "");
                    if (Number(month) < 10) {
                      month = "0" + month;
                    }
                    let year = $(e).closest(".yearBox").find(".year label").text().replace(locale_filter.filiterYearText, "");
                    let itemV = locale_filter.filterDateFormatTip + "#$$$#" + year + "-" + month + "-" + day;
                    filterdata[itemV] = "1";
                  }
                  if ($(e).closest(".textBox").length > 0) {
                    let itemV = $(e).closest(".textBox").data("filter");
                    filterdata[itemV] = "1";
                  }
                });
                for (let r2 = 1; r2 < d.length; r2++) {
                  if (r2 in rowhiddenother) {
                    continue;
                  }
                  if (d[r2] == null) {
                    continue;
                  }
                  let cell = d[r2][cindex];
                  let value;
                  if (cell == null || isRealNull(cell.v)) {
                    value = "null#$$$#null";
                  } else if (cell.ct != null && cell.ct.t == "d") {
                    let fmt = update("YYYY-MM-DD", cell.v);
                    value = locale_filter.filterDateFormatTip + "#$$$#" + fmt;
                  } else {
                    value = cell.v + "#$$$#" + cell.m;
                  }
                  if (value in filterdata) {
                    rowhidden[r2] = 0;
                  }
                }
              }
              let $top = $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").eq(cindex);
              if ($("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']:visible:checked").length < $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']:visible").length || $("#luckysheet-pivotTableFilter-byvalue-input").val().length > 0 || $("#luckysheet-pivotTableFilter-bycondition").next().is(":visible") && $("#luckysheet-pivotTableFilter-byvalue").next().is(":hidden") && $("#luckysheet-pivotTableFilter-selected span").data("value") != "null") {
                $top.data("rowhidden", JSON.stringify(rowhidden)).find(".luckysheet-slider-list-item-filtered").show();
                _this.setDatatojsfile("rowhidden", rowhidden, cindex);
                if (caljs != null) {
                  $top.data("byconditionvalue", caljs["value"]).data("byconditiontype", caljs["type"]).data("byconditiontext", caljs["text"]);
                  if (caljs["value1"] != null) {
                    $top.data("byconditionvalue1", caljs["value1"]);
                  }
                  if (caljs["value2"] != null) {
                    $top.data("byconditionvalue2", caljs["value2"]);
                  }
                  _this.setDatatojsfile("caljs", caljs, cindex);
                }
              } else {
                $top.data("rowhidden", "").find(".luckysheet-slider-list-item-filtered").hide();
                _this.setDatatojsfile("rowhidden", null, cindex);
              }
              let newdata = [];
              for (let i2 = 0; i2 < d.length; i2++) {
                if (i2 in rowhidden || i2 in rowhiddenother) {
                  continue;
                }
                newdata.push([].concat(d[i2]));
              }
              _this.celldata = newdata;
              _this.refreshPivotTable();
              $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide();
              cleargridelement();
            });
            $("#luckysheet-data-pivotTable-selection .luckysheet-model-close-btn, #luckysheet-data-pivotTable-selection .luckysheet-modal-dialog-title-close").click(function() {
              $("#luckysheet-modal-dialog-slider-pivot").show();
              luckysheetsizeauto();
              $("#luckysheet-cell-main .luckysheet-pivotTable-selection-set div").show();
              $("#luckysheet-data-pivotTable-selection").hide();
              sheetmanage_default.changeSheetExec(_this.pivotSheetIndex);
              _this.luckysheet_pivotTable_select_state = false;
              cleargridelement();
            });
            $("#luckysheet-pivotTable-selection-confirm").click(function() {
              let $input = $("#luckysheet-pivotTable-range-selection-input"), val = $input.val();
              if ($.trim(val).length == 0 || $.trim(val).toUpperCase() == _this.jgridCurrentPivotInput.toUpperCase()) {
                $input.val(_this.jgridCurrentPivotInput);
                $("#luckysheet-data-pivotTable-selection .luckysheet-model-close-btn").click();
                return;
              } else {
                let val1 = val.split("!");
                let sheettxt = "", rangetxt = "", sheetIndex = -1;
                if (val1.length > 1) {
                  sheettxt = val1[0];
                  rangetxt = val1[1];
                  for (let i2 in store_default.luckysheetfile) {
                    if (sheettxt == store_default.luckysheetfile[i2].name) {
                      sheetIndex = store_default.luckysheetfile[i2].index;
                      break;
                    }
                  }
                  if (sheetIndex == -1) {
                    sheetIndex = 0;
                  }
                } else {
                  let index2 = getSheetIndex(store_default.currentSheetIndex);
                  sheettxt = store_default.luckysheetfile[index2].name;
                  sheetIndex = store_default.luckysheetfile[index2].index;
                  rangetxt = val1[0];
                }
                if (store_default.luckysheetfile[getSheetIndex(sheetIndex)].isPivotTable) {
                  if (isEditMode()) {
                    alert(locale_pivotTable.errorNotAllowPivotData);
                  } else {
                    tooltip_default.info("", locale_pivotTable.errorNotAllowPivotData);
                  }
                  $input.val(_this.jgridCurrentPivotInput);
                  return;
                }
                if (rangetxt.indexOf(":") == -1) {
                  if (isEditMode()) {
                    alert(locale_pivotTable.errorSelectionRange);
                  } else {
                    tooltip_default.info("", locale_pivotTable.errorSelectionRange);
                  }
                  $input.val(_this.jgridCurrentPivotInput);
                  return;
                }
                rangetxt = rangetxt.split(":");
                let row = [], col = [];
                row[0] = parseInt(rangetxt[0].replace(/[^0-9]/g, "")) - 1;
                row[1] = parseInt(rangetxt[1].replace(/[^0-9]/g, "")) - 1;
                if (row[0] > row[1]) {
                  if (isEditMode()) {
                    alert(locale_pivotTable.errorSelectionRange);
                  } else {
                    tooltip_default.info("", locale_pivotTable.errorSelectionRange);
                  }
                  $input.val(_this.jgridCurrentPivotInput);
                  return;
                }
                col[0] = ABCatNum(rangetxt[0].replace(/[^A-Za-z]/g, ""));
                col[1] = ABCatNum(rangetxt[1].replace(/[^A-Za-z]/g, ""));
                if (col[0] > col[1]) {
                  if (isEditMode()) {
                    alert(locale_pivotTable.errorSelectionRange);
                  } else {
                    tooltip_default.info(locale_pivotTable.errorSelectionRange);
                  }
                  $input.val(_this.jgridCurrentPivotInput);
                  return;
                }
                sheetmanage_default.changeSheetExec(_this.pivotSheetIndex);
                _this.setDatatojsfile("pivot_select_save", {"row": row, "column": col});
                _this.setDatatojsfile("pivotDataSheetIndex", sheetIndex);
                _this.getCellData(_this.pivotSheetIndex, sheetIndex, {"row": row, "column": col});
                _this.initialPivotManage();
                $("#luckysheet-dialog-pivotTable-range").html(val);
                $("#luckysheet-modal-dialog-slider-pivot").show();
                $("#luckysheet-data-pivotTable-selection").hide();
                _this.luckysheet_pivotTable_select_state = false;
                _this.refreshPivotTable();
                luckysheetsizeauto();
                cleargridelement();
              }
            });
            $("#luckysheet-modal-dialog-slider-pivot").on("mousedown", ".luckysheet-slider-list-item-name, .luckysheet-modal-dialog-slider-config-item-txt", function(e) {
              let $cur = $(e.target);
              _this.movestate = true;
              _this.movesave.obj = $cur.parent();
              _this.movesave.name = $cur.data("name");
              _this.movesave.containerid = $cur.parent().parent().attr("id");
              _this.movesave.index = $cur.data("index");
              if ($("#luckysheet-modal-dialog-slider-pivot-move").length == 0) {
                $("body").append('<div id="luckysheet-modal-dialog-slider-pivot-move">' + _this.movesave.name + "</div>");
              }
              _this.movesave.width = $("#luckysheet-modal-dialog-slider-pivot-move").outerWidth();
              _this.movesave.height = $("#luckysheet-modal-dialog-slider-pivot-move").outerHeight();
              $("#luckysheet-modal-dialog-pivotTable-list, #luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").css("cursor", "default");
            });
            $("#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").mousemove(function(e) {
              if (_this.movestate) {
                if (_this.moveitemposition.length == 0) {
                  _this.moveitemposition = [0];
                  $(this).find(".luckysheet-modal-dialog-slider-config-item").each(function(i2) {
                    let $t = $(this), h = $t.outerHeight();
                    _this.moveitemposition.push(_this.moveitemposition[i2] + h + 2);
                  });
                  $(this).append('<div id="luckysheet-modal-dialog-config-order-help" style="position:absolute;height:3px;width:100%;background:#007ACC;z-index:1;pointer-events: none;user-select:none;"></div>');
                }
                $("#luckysheet-modal-dialog-slider-pivot-move").css({"background": "#FD8585", "color": "#fff", "border": "1px solid #FD7070"});
                let x = event.pageX, y = event.pageY, $container = $(this);
                let curtop = y - $container.offset().top + $container.scrollTop();
                let position = _this.moveitemposition;
                let row_index = luckysheet_searcharray(position, curtop);
                if (row_index == -1) {
                  $("#luckysheet-modal-dialog-config-order-help").css({"top": position[position.length - 1]});
                } else if (curtop - position[row_index - 1] > (position[row_index] - position[row_index - 1]) / 2) {
                  $("#luckysheet-modal-dialog-config-order-help").css({"top": position[row_index]});
                } else {
                  $("#luckysheet-modal-dialog-config-order-help").css({"top": position[row_index - 1]});
                }
              }
            }).mouseleave(function() {
              if (_this.movestate) {
                $("#luckysheet-modal-dialog-slider-pivot-move").css({"background": "#fff", "color": "#000", "border": "1px dotted #000"});
                _this.moveitemposition = [];
                $("#luckysheet-modal-dialog-config-order-help").remove();
              }
            }).mouseup(function(e) {
              if (_this.movestate) {
                let $t = $(this);
                let itemHTML;
                if (_this.movesave.containerid == $t.attr("id")) {
                  itemHTML = _this.movesave.obj.clone();
                } else {
                  let name2 = _this.movesave.name, sumtype = "", nameindex = "";
                  if ($t.attr("id") == "luckysheet-modal-dialog-config-value") {
                    let type = _this.pivot_data_type[_this.movesave.index.toString()];
                    if (type == "num") {
                      name2 = locale_pivotTable.valueStatisticsSUM + ":" + name2;
                      sumtype = "data-sumtype='SUM'";
                      nameindex = "data-nameindex='0'";
                    } else {
                      name2 = locale_pivotTable.valueStatisticsCOUNTA + ":" + name2;
                      sumtype = "data-sumtype='COUNTA'";
                      nameindex = "data-nameindex='0'";
                    }
                    $("#luckysheet-modal-dialog-config-value").find(".luckysheet-modal-dialog-slider-config-item").each(function() {
                      if ($(this).find(".luckysheet-modal-dialog-slider-config-item-txt").text() == name2) {
                        let ni = parseFloat($(this).data("nameindex")) + 1;
                        name2 = name2 + ni.toString();
                        $(this).data("nameindex", ni);
                        return false;
                      }
                    });
                  }
                  itemHTML = '<div title="' + name2 + '" class="luckysheet-modal-dialog-slider-config-item" ' + nameindex + " " + sumtype + ' data-index="' + _this.movesave.index + '" data-name="' + _this.movesave.name + '"><div class="luckysheet-modal-dialog-slider-config-item-txt" ' + nameindex + " " + sumtype + ' data-index="' + _this.movesave.index + '" data-name="' + _this.movesave.name + '">' + name2 + '</div><div class="luckysheet-modal-dialog-slider-config-item-icon"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
                }
                let x = event.pageX, y = event.pageY, $container = $(this);
                let curtop = y - $container.offset().top + $container.scrollTop();
                let position = _this.moveitemposition;
                let row_index = luckysheet_searcharray(position, curtop);
                if (_this.movesave.containerid == "luckysheet-modal-dialog-pivotTable-list" || _this.movesave.containerid == "luckysheet-modal-dialog-config-value" && _this.movesave.containerid != $t.attr("id")) {
                  $("#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column").find(".luckysheet-modal-dialog-slider-config-item").each(function() {
                    if ($(this).data("index") == _this.movesave.index) {
                      $(this).remove();
                    }
                  });
                }
                if (row_index == -1) {
                  if ($t.find(".luckysheet-modal-dialog-slider-config-item").length == 0) {
                    $t.append(itemHTML);
                  } else {
                    $t.find(".luckysheet-modal-dialog-slider-config-item").last().after(itemHTML);
                  }
                } else if (curtop - position[row_index - 1] > (position[row_index] - position[row_index - 1]) / 2) {
                  $t.find(".luckysheet-modal-dialog-slider-config-item").eq(row_index - 1).after(itemHTML);
                } else {
                  $t.find(".luckysheet-modal-dialog-slider-config-item").eq(row_index - 1).before(itemHTML);
                }
                if (_this.movesave.containerid == "luckysheet-modal-dialog-pivotTable-list") {
                } else if (_this.movesave.containerid == "luckysheet-modal-dialog-config-value" && _this.movesave.containerid != $t.attr("id")) {
                } else {
                  _this.movesave.obj.remove();
                }
                $("#luckysheet-modal-dialog-pivotTable-list").find(".luckysheet-modal-dialog-slider-list-item").each(function() {
                  let $seleted = $(this).find(".luckysheet-slider-list-item-selected");
                  if ($(this).data("index") == _this.movesave.index && $seleted.find("i").length == 0) {
                    $seleted.append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
                  }
                });
                _this.refreshPivotTable();
                $("#luckysheet-modal-dialog-slider-pivot-move").remove();
                _this.movestate = false;
                $("#luckysheet-modal-dialog-pivotTable-list, #luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").css("cursor", "default");
                _this.moveitemposition = [];
                $("#luckysheet-modal-dialog-config-order-help").remove();
                _this.showvaluecolrow();
                e.stopPropagation();
              }
            });
            $("#luckysheet-modal-dialog-pivotTable-list").on("click", ".luckysheet-slider-list-item-selected", function() {
              let $t = $(this), $item = $t.parent(), index2 = $item.data("index"), name2 = $item.data("name");
              if ($t.find("i").length == 0) {
                $t.append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
                let type = _this.pivot_data_type[index2.toString()], itemHTML;
                if (type == "num") {
                  itemHTML = '<div title="' + name2 + '" class="luckysheet-modal-dialog-slider-config-item" data-nameindex="0" data-sumtype="SUM" data-index="' + index2 + '" data-name="' + name2 + '"><div class="luckysheet-modal-dialog-slider-config-item-txt" data-nameindex="0" data-sumtype="SUM" data-index="' + index2 + '" data-name="' + name2 + '">\u6C42\u548C:' + name2 + '</div><div class="luckysheet-modal-dialog-slider-config-item-icon"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
                  $("#luckysheet-modal-dialog-config-value").append(itemHTML);
                } else {
                  itemHTML = '<div title="' + name2 + '" class="luckysheet-modal-dialog-slider-config-item" data-index="' + index2 + '" data-name="' + name2 + '"><div class="luckysheet-modal-dialog-slider-config-item-txt" data-index="' + index2 + '" data-name="' + name2 + '">' + name2 + '</div><div class="luckysheet-modal-dialog-slider-config-item-icon"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
                  let $column = $("#luckysheet-modal-dialog-config-column"), $row = $("#luckysheet-modal-dialog-config-row");
                  let columnitem = $column.find(".luckysheet-modal-dialog-slider-config-item"), rowitem = $row.find(".luckysheet-modal-dialog-slider-config-item");
                  if (columnitem.length < 2) {
                    $column.append(itemHTML);
                  } else if (rowitem.length < 2) {
                    $row.append(itemHTML);
                  } else {
                    $column.append(itemHTML);
                  }
                }
              } else {
                $t.find("i").remove();
                $("#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").find(".luckysheet-modal-dialog-slider-config-item").each(function() {
                  if ($(this).data("index") == index2) {
                    if ($(this).parent().attr("id") == "luckysheet-modal-dialog-config-value") {
                      _this.resetOrderby($(this));
                    }
                    $(this).remove();
                  }
                });
              }
              _this.refreshPivotTable();
              _this.showvaluecolrow();
            });
            $("#luckysheet-dialog-pivotTable-clearitem").click(function() {
              $("#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").find(".luckysheet-modal-dialog-slider-config-item").each(function() {
                $(this).remove();
              });
              $("#luckysheet-modal-dialog-pivotTable-list").find(".luckysheet-modal-dialog-slider-list-item").each(function() {
                $(this).find(".luckysheet-slider-list-item-selected").find("i").remove();
              });
              _this.refreshPivotTable();
              _this.showvaluecolrow();
            });
          }
          if (restore == null) {
            restore = false;
          }
          if (_this.celldata.length <= 1 && _this.celldata[0].length <= 1) {
            if (isEditMode()) {
              alert(locale_pivotTable.errorIncreaseRange);
            } else {
              tooltip_default.info("", locale_pivotTable.errorIncreaseRange);
            }
          }
          let selecteditem = "", selecteditemIndex = 1, selecteditemtest = {}, selecteditemNullIndex = 1;
          for (let i2 = 0; i2 < _this.celldata[0].length; i2++) {
            let name2;
            if (!!_this.celldata[0][i2] && !!_this.celldata[0][i2]["m"]) {
              name2 = _this.celldata[0][i2]["m"];
            } else {
              name2 = getcellvalue(0, i2, _this.celldata);
            }
            if (name2 != null) {
              name2 = name2.toString();
            }
            if (name2 == null || $.trim(name2.toString()).length == 0) {
              name2 = locale_pivotTable.titleColumn + " " + selecteditemNullIndex;
            }
            selecteditemNullIndex++;
            if (name2 in selecteditemtest) {
              name2 = name2 + selecteditemIndex++;
              if (name2 in selecteditemtest) {
                name2 = name2 + selecteditemIndex++;
                if (name2 in selecteditemtest) {
                  name2 = name2 + selecteditemIndex++;
                }
              }
            }
            selecteditemtest[name2] = 1;
            let dataother = "", style = "";
            if (restore && _this.filterparm != null) {
              if (_this.filterparm[i2.toString()] != null) {
                let itemset = _this.filterparm[i2.toString()];
                if (itemset.rowhidden != null) {
                  dataother += "data-rowhidden='" + JSON.stringify(itemset.rowhidden) + "'";
                }
                if (itemset.selected != null) {
                  dataother += "data-selected='" + JSON.stringify(itemset.selected) + "'";
                }
                if (itemset.caljs != null) {
                  let caljsset = itemset.caljs;
                  if (caljsset.value != null) {
                    dataother += "data-byconditionvalue='" + caljsset.value + "'";
                  }
                  if (caljsset.type != null) {
                    dataother += "data-byconditiontype='" + caljsset.type + "'";
                  }
                  if (caljsset.text != null) {
                    dataother += "data-byconditiontext='" + caljsset.text + "'";
                  }
                  if (caljsset.value1 != null) {
                    dataother += "data-byconditionvalue1='" + caljsset.value1 + "'";
                  }
                  if (caljsset.value2 != null) {
                    dataother += "data-byconditionvalue2='" + caljsset.value2 + "'";
                  }
                }
              }
            }
            if (dataother.length > 0) {
              style = "display:block;";
            }
            selecteditem += '<div class="luckysheet-modal-dialog-slider-list-item" ' + dataother + ' data-index="' + i2 + '" data-name="' + name2 + '"><div title="' + locale_pivotTable.titleAddColumn + '" class="luckysheet-slider-list-item-selected"><div></div></div><div title="' + locale_pivotTable.titleMoveColumn + '" class="luckysheet-slider-list-item-name" ' + dataother + ' data-index="' + i2 + '" data-name="' + name2 + '">' + name2 + '</div><div title="' + locale_pivotTable.titleClearColumnFilter + '" class="luckysheet-slider-list-item-filtered" style="' + style + '"><i class="fa fa-filter luckysheet-mousedown-cancel" aria-hidden="true"></i><i class="fa fa-times" aria-hidden="true"></i></div><div title="' + locale_pivotTable.titleFilterColumn + '" class="luckysheet-slider-list-item-filter"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
          }
          $("#luckysheet-modal-dialog-pivotTable-list").html(selecteditem);
          $("#luckysheetpivottablevaluecolrowshow").hide();
          $("#luckysheetpivottablevaluecolrow").prop("checked", true);
          $("#luckysheetpivottablevaluecolrow1").prop("checked", false);
          $("#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").empty();
          if (restore) {
            if (_this.filter != null && _this.filter.length > 0) {
              for (let i2 = 0; i2 < _this.filter.length; i2++) {
                let item2 = _this.filter[i2];
                let itemHTML = '<div title="' + name + '" class="luckysheet-modal-dialog-slider-config-item" data-index="' + item2.index + '" data-name="' + item2.name + '"><div class="luckysheet-modal-dialog-slider-config-item-txt" data-index="' + item2.index + '" data-name="' + item2.name + '">' + item2.name + '</div><div class="luckysheet-modal-dialog-slider-config-item-icon"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
                $("#luckysheet-modal-dialog-config-filter").append(itemHTML);
                let $seleted = $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").eq(item2.index).find(".luckysheet-slider-list-item-selected");
                if ($seleted.find("i").length == 0) {
                  $seleted.append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
                }
              }
            }
            if (_this.row != null && _this.row.length > 0) {
              for (let i2 = 0; i2 < _this.row.length; i2++) {
                let item2 = _this.row[i2];
                let otherset = "";
                if (item2.order != null) {
                  otherset += "data-order = '" + item2.order + "'";
                }
                if (item2.orderby != null) {
                  otherset += "data-orderby = '" + item2.orderby + "'";
                }
                if (item2.order != null) {
                  otherset += "data-stastic = '" + item2.stastic + "'";
                }
                let itemHTML = '<div title="' + name + '" class="luckysheet-modal-dialog-slider-config-item" ' + otherset + ' data-index="' + item2.index + '" data-name="' + item2.name + '"><div class="luckysheet-modal-dialog-slider-config-item-txt" ' + otherset + ' data-index="' + item2.index + '" data-name="' + item2.name + '">' + item2.name + '</div><div class="luckysheet-modal-dialog-slider-config-item-icon"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
                $("#luckysheet-modal-dialog-config-row").append(itemHTML);
                let $seleted = $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").eq(item2.index).find(".luckysheet-slider-list-item-selected");
                if ($seleted.find("i").length == 0) {
                  $seleted.append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
                }
              }
            }
            if (_this.column != null && _this.column.length > 0) {
              for (let i2 = 0; i2 < _this.column.length; i2++) {
                let item2 = _this.column[i2];
                let otherset = "";
                if (item2.order != null) {
                  otherset += "data-order = '" + item2.order + "'";
                }
                if (item2.orderby != null) {
                  otherset += "data-orderby = '" + item2.orderby + "'";
                }
                if (item2.order != null) {
                  otherset += "data-stastic = '" + item2.stastic + "'";
                }
                let itemHTML = '<div title="' + name + '" class="luckysheet-modal-dialog-slider-config-item" ' + otherset + ' data-index="' + item2.index + '" data-name="' + item2.name + '"><div class="luckysheet-modal-dialog-slider-config-item-txt" ' + otherset + ' data-index="' + item2.index + '" data-name="' + item2.name + '">' + item2.name + '</div><div class="luckysheet-modal-dialog-slider-config-item-icon"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
                $("#luckysheet-modal-dialog-config-column").append(itemHTML);
                let $seleted = $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").eq(item2.index).find(".luckysheet-slider-list-item-selected");
                if ($seleted.find("i").length == 0) {
                  $seleted.append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
                }
              }
            }
            if (_this.values != null && _this.values.length > 0) {
              for (let i2 = 0; i2 < _this.values.length; i2++) {
                let item2 = _this.values[i2];
                let otherset = "";
                if (item2.sumtype != null) {
                  otherset += "data-sumtype = '" + item2.sumtype + "'";
                }
                if (item2.nameindex != null) {
                  otherset += "data-nameindex = '" + item2.nameindex + "'";
                }
                let itemHTML = '<div title="' + name + '" class="luckysheet-modal-dialog-slider-config-item" ' + otherset + ' data-index="' + item2.index + '" data-name="' + item2.name + '"><div class="luckysheet-modal-dialog-slider-config-item-txt" ' + otherset + ' data-index="' + item2.index + '" data-name="' + item2.name + '">' + _this.getSumTypeName(item2.sumtype) + ":" + item2.name + '</div><div class="luckysheet-modal-dialog-slider-config-item-icon"><i class="fa fa-sort-desc" aria-hidden="true"></i></div></div>';
                $("#luckysheet-modal-dialog-config-value").append(itemHTML);
                let $seleted = $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").eq(item2.index).find(".luckysheet-slider-list-item-selected");
                if ($seleted.find("i").length == 0) {
                  $seleted.append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
                }
              }
              if (_this.values.length >= 2) {
                $("#luckysheetpivottablevaluecolrowshow").show();
                if (_this.showType == "column") {
                  $("#luckysheetpivottablevaluecolrow").prop("checked", true);
                  $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow']").addClass("ui-state-active");
                  $("#luckysheetpivottablevaluecolrow1").prop("checked", false);
                  $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow1']").removeClass("ui-state-active");
                } else {
                  $("#luckysheetpivottablevaluecolrow1").prop("checked", true);
                  $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow1']").addClass("ui-state-active");
                  $("#luckysheetpivottablevaluecolrow").prop("checked", false);
                  $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow']").removeClass("ui-state-active");
                }
              }
            }
          }
          $("#luckysheet-dialog-pivotTable-range").html(getRangetxt(_this.pivotDataSheetIndex, _this.pivot_select_save));
          $("#luckysheet-modal-dialog-slider-pivot").show();
          luckysheetsizeauto(false);
        },
        getComposeArray: function(data) {
          if (data.length == 0) {
            return [];
          }
          let ret = [];
          for (let i2 = 0; i2 < data.length; i2++) {
            let name2 = "";
            for (let x = 0; x <= i2; x++) {
              if (!!data[x] && !!data[x]["m"]) {
                name2 += data[x]["m"];
              } else {
                name2 += getcellvalue(x, null, data);
              }
            }
            ret.push(name2);
          }
          return ret;
        },
        getnameArray: function(data, field) {
          if (data.length == 0) {
            return [];
          }
          if (field.length == 0) {
            return [];
          }
          let ret = [];
          for (let i2 = 0; i2 < field.length; i2++) {
            let c_value;
            if (!!data[field[i2].index] && !!data[field[i2].index]["m"]) {
              c_value = data[field[i2].index]["m"];
            } else {
              c_value = getcellvalue(field[i2].index, null, data);
            }
            ret.push(c_value);
          }
          return ret;
        },
        getTitleFromGroup: function(group, config, dataposition) {
          let _this = this;
          let orderbygroup = _this.orderbygroup(group, config, dataposition);
          return _this.generategrouparraymain(orderbygroup, config);
        },
        orderbygroup: function(group, config, dataposition) {
          let _this = this;
          let stackset = [];
          if (group.length == 0) {
            return [];
          }
          stackset = group;
          let d = null, alllength = stackset.length, alllengthInital = stackset.length, a = 0;
          while (alllength != 0) {
            d = stackset[a++];
            alllength--;
            if (d.children != null && d.children.length > 0) {
              d.children = _this.orderbygroupchildren(d.children, config[d.index].orderby, config[d.index].order, dataposition);
              for (let i2 = 0; i2 < d.children.length; i2++) {
                stackset.push(d.children[i2]);
                alllength++;
              }
            }
          }
          return group.splice(0, alllengthInital);
        },
        orderbygroupchildren: function(childrens, orderby, order, dataposition) {
          if (childrens.length == 0) {
            return [];
          }
          let isAsc = false;
          if (order == null || order == "asc") {
            isAsc = true;
          }
          const _locale = locale_default();
          const locale_filter = _locale.filter;
          let a = function(x, y) {
            let f = null, s = null;
            if (orderby == "self" || orderby == null) {
              if (x.name == null) {
                f = locale_filter.valueBlank;
              } else {
                f = x.name.toString();
              }
              if (y.name == null) {
                s = locale_filter.valueBlank;
              } else {
                s = y.name.toString();
              }
              if (isdatetime(f) && isdatetime(s)) {
                return diff(f, s);
              }
            } else {
              f = parseFloat(dataposition[x.orderby].result);
              s = parseFloat(dataposition[y.orderby].result);
            }
            if (!isNaN(f) && !isNaN(s)) {
              return (0, import_numeral3.default)(f).value() - (0, import_numeral3.default)(s).value();
            } else if (isNaN(f) && isNaN(s)) {
              return f.localeCompare(s);
            } else if (isNaN(f)) {
              return 1;
            } else if (isNaN(s)) {
              return -1;
            }
          };
          let d = function(x, y) {
            let f = null, s = null;
            if (orderby == "self" || orderby == null) {
              if (x.name == null) {
                f = locale_filter.valueBlank;
              } else {
                f = x.name.toString();
              }
              if (y.name == null) {
                s = locale_filter.valueBlank;
              } else {
                s = y.name.toString();
              }
              if (isdatetime(f) && isdatetime(s)) {
                return diff(f, s);
              }
            } else {
              f = parseFloat(dataposition[x.orderby].result);
              s = parseFloat(dataposition[y.orderby].result);
            }
            if (!isNaN(f) && !isNaN(s)) {
              return (0, import_numeral3.default)(s).value() - (0, import_numeral3.default)(f).value();
            } else if (isNaN(f) && isNaN(s)) {
              return s.localeCompare(f);
            } else if (isNaN(f)) {
              return -1;
            } else if (isNaN(s)) {
              return 1;
            }
          };
          if (isAsc) {
            return childrens.sort(a);
          } else {
            return childrens.sort(d);
          }
        },
        generategroupaddstatic: function(arr, name2) {
          let stasticarr = [];
          const _locale = locale_default();
          const locale_pivotTable = _locale.pivotTable;
          for (let a = 0; a < arr[0].length; a++) {
            if (a == 0) {
              if (name2 == locale_pivotTable.valueSum) {
                stasticarr.push(name2);
              } else {
                stasticarr.push({"name": name2, "issum": true});
              }
            } else {
              stasticarr.push("");
            }
          }
          return stasticarr;
        },
        generategrouparraymain: function(group, config) {
          let _this = this;
          let ret = [];
          for (let i2 = 0; i2 < group.length; i2++) {
            let name2 = group[i2].name;
            let arr = _this.generategrouparray(group[i2].children, config, 1);
            if (config[0].stastic == "1" || config[0].stastic == null) {
              arr.push(_this.generategroupaddstatic(arr, name2));
            }
            ret = ret.concat(arr);
          }
          return ret;
        },
        generategrouparray: function(group, config, level) {
          let _this = this;
          let ret = [];
          for (let i2 = 0; i2 < group.length; i2++) {
            let name2 = group[i2].name;
            let arr;
            if (group[i2].children == 0 || group[i2].children.length == 0) {
              arr = [name2];
              ret.push(arr);
            } else {
              arr = _this.generategrouparray(group[i2].children, config, level + 1);
              for (let a = 0; a < arr.length; a++) {
                arr[a].unshift(name2);
              }
              if (config[level].stastic == "1" || config[level].stastic == null) {
                arr.push(_this.generategroupaddstatic(arr, name2));
              }
              ret = ret.concat(arr);
            }
          }
          return ret;
        },
        addStatisticsData: function(dataposition, valueobj, indicator, d_value) {
          if (dataposition[indicator] == null) {
            dataposition[indicator] = {
              "data": [],
              "count": 0,
              "max": -Infinity,
              "min": Infinity,
              "counta": 0,
              "countunique": 0,
              "countuniquedata": {},
              "sum": 0,
              "digitaldata": [],
              "sumtype": valueobj.sumtype,
              "index": valueobj.index,
              "name": valueobj.fullname,
              "acc": 0
            };
          }
          if (isdatatypemulti(d_value)["num"] === true) {
            let num = numFormat2(d_value, 6);
            dataposition[indicator]["digitaldata"].push(num);
            dataposition[indicator]["count"] += 1;
            dataposition[indicator]["sum"] += num;
            if (num > dataposition[indicator]["max"]) {
              dataposition[indicator]["max"] = num;
            }
            if (num < dataposition[indicator]["min"]) {
              dataposition[indicator]["min"] = num;
            }
            let newAcc = numfloatlen(num);
            if (newAcc > dataposition[indicator]["acc"]) {
              dataposition[indicator]["acc"] = newAcc;
            }
          }
          if (d_value != "") {
            dataposition[indicator]["data"].push(d_value);
            dataposition[indicator]["counta"] += 1;
            if (!(d_value in dataposition[indicator]["countuniquedata"])) {
              dataposition[indicator]["countuniquedata"][d_value] = 1;
              dataposition[indicator]["countunique"] += 1;
            }
          }
        },
        dataHandler: function(column, row, values, showType, celldata) {
          let _this = this;
          const _locale = locale_default();
          const locale_filter = _locale.filter;
          const locale_pivotTable = _locale.pivotTable;
          if (showType == null) {
            showType = "column";
          }
          if (column.length == 0 && row.length == 0 && values.length == 0 || celldata.length == 0) {
            _this.pivotDatas = [];
            return [];
          }
          let dataposition = {}, data = celldata, datarowtitle = [], datarowtitlegroup = [], datarowposition = {}, datarowposition_i = 0, datacoltitle = [], datacoltitlegroup = [], datacolposition = {}, datacolposition_i = 0;
          for (let i2 = 1; i2 < data.length; i2++) {
            let d = data[i2];
            let groupbyrowtxt = "", groupbycoltxt = "", rowtxt = "", rowtitle = [], rowtitlename = [], coltxt = "", coltitle = [], coltitlename = [];
            rowtitlename = _this.getnameArray(d, row);
            coltitlename = _this.getnameArray(d, column);
            rowtitle = _this.getComposeArray(rowtitlename);
            coltitle = _this.getComposeArray(coltitlename);
            if (rowtitle.length > 0) {
              rowtitle.unshift(locale_pivotTable.valueSum);
            }
            if (coltitle.length > 0) {
              coltitle.unshift(locale_pivotTable.valueSum);
            }
            let curentLevelobj_row = datarowposition, curentLevelarr_row = datarowtitlegroup;
            for (let r2 = 0; r2 < rowtitle.length; r2++) {
              let item2 = rowtitle[r2], name2 = r2 == 0 ? locale_pivotTable.valueSum : rowtitlename[r2 - 1];
              if (curentLevelobj_row[r2.toString()] != null && curentLevelobj_row[r2.toString()][item2] != null) {
                curentLevelarr_row = curentLevelarr_row[curentLevelobj_row[r2.toString()][item2]].children;
              } else {
                let orderby = r2 == 0 ? "self" : row[r2 - 1].orderby == "self" || row[r2 - 1].orderby == null ? item2 : showType == "column" ? item2 + values[parseInt(row[r2 - 1].orderby)].fullname : item2 + locale_pivotTable.valueSum;
                if (name2 == null) {
                  name2 = locale_filter.valueBlank;
                }
                curentLevelarr_row.push({"name": name2, "fullname": item2, "index": r2, "orderby": orderby, "children": []});
                if (curentLevelobj_row[r2.toString()] == null) {
                  curentLevelobj_row[r2.toString()] = {};
                }
                if (curentLevelobj_row[r2.toString()][item2] == null) {
                  curentLevelobj_row[r2.toString()][item2] = curentLevelarr_row.length - 1;
                }
                curentLevelarr_row = curentLevelarr_row[curentLevelarr_row.length - 1].children;
              }
            }
            let curentLevelobj_col = datacolposition, curentLevelarr_col = datacoltitlegroup;
            for (let r2 = 0; r2 < coltitle.length; r2++) {
              let item2 = coltitle[r2], name2 = r2 == 0 ? locale_pivotTable.valueSum : coltitlename[r2 - 1];
              if (curentLevelobj_col[r2.toString()] != null && curentLevelobj_col[r2.toString()][item2] != null) {
                curentLevelarr_col = curentLevelarr_col[curentLevelobj_col[r2.toString()][item2]].children;
              } else {
                let orderby = r2 == 0 ? "self" : column[r2 - 1].orderby == "self" || column[r2 - 1].orderby == null ? item2 : showType == "column" ? locale_pivotTable.valueSum + item2 : values[parseInt(column[r2 - 1].orderby)].fullname + item2;
                if (name2 == null) {
                  name2 = locale_filter.valueBlank;
                }
                curentLevelarr_col.push({"name": name2, "fullname": item2, "index": r2, "orderby": orderby, "children": []});
                if (curentLevelobj_col[r2.toString()] == null) {
                  curentLevelobj_col[r2.toString()] = {};
                }
                if (curentLevelobj_col[r2.toString()][item2] == null) {
                  curentLevelobj_col[r2.toString()][item2] = curentLevelarr_col.length - 1;
                }
                curentLevelarr_col = curentLevelarr_col[curentLevelarr_col.length - 1].children;
              }
            }
            let v_str = "";
            for (let v = 0; v < values.length; v++) {
              let d_value = getcellvalue(values[v].index, null, d);
              let coltitle_c = [].concat(coltitle), rowtitle_c = [].concat(rowtitle);
              if (showType == "column") {
                if (coltitle_c.length > 0) {
                  coltitle_c.push("");
                  coltitle_c = coltitle_c.join(values[v].fullname + "|||").split("|||").slice(0, coltitle_c.length - 1);
                } else {
                  coltitle_c.push(values[v].fullname);
                }
              } else {
                if (rowtitle_c.length > 0) {
                  rowtitle_c.push("");
                  rowtitle_c = rowtitle_c.join(values[v].fullname + "|||").split("|||").slice(0, rowtitle_c.length - 1);
                } else {
                  rowtitle_c.push(values[v].fullname);
                }
              }
              if (coltitle_c.length == 0) {
                coltitle_c.push("");
              }
              if (rowtitle_c.length == 0) {
                rowtitle_c.push("");
              }
              for (let r2 = 0; r2 < rowtitle_c.length; r2++) {
                for (let c2 = 0; c2 < coltitle_c.length; c2++) {
                  let indicator = rowtitle_c[r2] + coltitle_c[c2];
                  _this.addStatisticsData(dataposition, values[v], indicator, d_value);
                }
              }
            }
          }
          for (let indicator in dataposition) {
            let json2 = dataposition[indicator];
            if (json2.sumtype == "SUM") {
              json2.result = json2.sum;
            } else if (json2.sumtype == "COUNT") {
              json2.result = json2.count;
            } else if (json2.sumtype == "COUNTA") {
              json2.result = json2.counta;
            } else if (json2.sumtype == "COUNTUNIQUE") {
              json2.result = json2.countunique;
            } else if (json2.sumtype == "AVERAGE") {
              json2.result = numFormat2(json2.sum / json2.count);
            } else if (json2.sumtype == "MAX") {
              json2.result = json2.max;
            } else if (json2.sumtype == "MIN") {
              json2.result = json2.min;
            } else if (json2.sumtype == "MEDIAN") {
              let numArr = json2.digitaldata.sort(function(a, b) {
                return a - b;
              });
              let numLen = numArr.length;
              let numindex = parseInt(numLen / 2);
              if (numLen % 2 == 0) {
                json2.result = (numArr[numindex - 1] + numArr[numindex]) / 2;
              } else {
                json2.result = numArr[numindex];
              }
            } else if (json2.sumtype == "PRODUCT") {
              json2.result = new Function("return " + json2.digitaldata.join("*"))();
            } else if (json2.sumtype == "STDEV") {
              let mean = json2.sum / json2.count;
              json2.result = analysis_default.STDEV(mean, json2.digitaldata);
            } else if (json2.sumtype == "STDEVP") {
              let mean = json2.sum / json2.count;
              json2.result = analysis_default.STDEVP(mean, json2.digitaldata);
            } else if (json2.sumtype == "let") {
              let mean = json2.sum / json2.count;
              json2.result = analysis_default.let(mean, json2.digitaldata);
            } else if (json2.sumtype == "VARP") {
              let mean = json2.sum / json2.count;
              json2.result = analysis_default.VARP(mean, json2.digitaldata);
            }
            let newAcc = numfloatlen(json2.result);
            if (newAcc > json2.acc) {
              json2.acc = newAcc;
            }
            json2.result = numFormat2(json2.result, json2.acc);
          }
          datarowtitle = _this.getTitleFromGroup(datarowtitlegroup, row, dataposition);
          datacoltitle = _this.getTitleFromGroup(datacoltitlegroup, column, dataposition);
          if (showType == "column") {
            if (datacoltitle.length > 0 && datacoltitle[0].length > 0) {
              datacoltitle = _this.addValuesToTitle(datacoltitle, values);
            } else {
              for (let v = 0; v < values.length; v++) {
                datacoltitle.push([values[v].fullname]);
              }
            }
          } else {
            if (datarowtitle.length > 0 && datarowtitle[0].length > 0) {
              datarowtitle = _this.addValuesToTitle(datarowtitle, values);
            } else {
              for (let v = 0; v < values.length; v++) {
                datarowtitle.push([values[v].fullname]);
              }
            }
          }
          let datacoltitle_index = datacoltitle;
          datacoltitle = array_default.transpose(datacoltitle, false);
          let valuenslen = values.length == 0 ? 0 : 1;
          let rowLen = (datacoltitle.length == 0 ? valuenslen : datacoltitle.length) + (datarowtitle.length == 0 ? valuenslen : datarowtitle.length), colLen = (datacoltitle.length == 0 ? valuenslen : datacoltitle[0].length) + (datarowtitle.length == 0 ? valuenslen : datarowtitle[0].length);
          let rowOver = datacoltitle.length, colOver = datarowtitle.length == 0 ? 0 : datarowtitle[0].length;
          let retdata = [];
          for (let r2 = 0; r2 < rowLen; r2++) {
            retdata[r2] = new Array(colLen);
            for (let c2 = 0; c2 < colLen; c2++) {
              let drt = datarowtitle[r2 - rowOver];
              if (r2 < rowOver && c2 < colOver) {
                retdata[r2][c2] = "";
              } else if (r2 < rowOver && c2 >= colOver) {
                if (datacoltitle[r2] != null) {
                  if (getObjType(datacoltitle[r2][c2 - colOver]) == "object") {
                    retdata[r2][c2] = datacoltitle[r2][c2 - colOver].name + locale_pivotTable.valueSum;
                  } else {
                    retdata[r2][c2] = datacoltitle[r2][c2 - colOver];
                  }
                } else {
                  retdata[r2][c2] = "";
                }
              } else if (r2 >= rowOver && c2 < colOver) {
                if (drt != null) {
                  if (getObjType(drt[c2]) == "object") {
                    retdata[r2][c2] = drt[c2].name + locale_pivotTable.valueSum;
                  } else {
                    retdata[r2][c2] = drt[c2];
                  }
                } else {
                  retdata[r2][c2] = "";
                }
              } else {
                let prefix = "";
                if (drt != null) {
                  if (!(drt instanceof Array) || drt.length == 1) {
                    if (drt instanceof Array) {
                      prefix = drt[0];
                    } else {
                      prefix = drt;
                    }
                  } else {
                    for (let x = 0; x < drt.length; x++) {
                      if (getObjType(drt[x]) == "object") {
                        prefix += drt[x].name;
                      } else {
                        prefix += drt[x];
                      }
                    }
                  }
                }
                let suffix = "";
                let dct = datacoltitle_index[c2 - colOver];
                if (dct != null) {
                  if (!(dct instanceof Array) || dct.length == 1) {
                    if (dct instanceof Array) {
                      suffix = dct[0];
                    } else {
                      suffix = dct;
                    }
                  } else {
                    for (let x = 0; x < dct.length; x++) {
                      if (getObjType(dct[x]) == "object") {
                        suffix += dct[x].name;
                      } else {
                        suffix += dct[x];
                      }
                    }
                  }
                }
                let indicator = prefix;
                if (prefix != "" && suffix != "") {
                  indicator = prefix + suffix;
                } else if (prefix == "") {
                  indicator = suffix;
                }
                if (dataposition[indicator] == null) {
                  retdata[r2][c2] = "";
                } else {
                  retdata[r2][c2] = dataposition[indicator].result;
                }
              }
            }
          }
          if (values.length == 1 && column.length > 0 && row.length > 0) {
            retdata[0][0] = values[0].fullname;
            retdata.splice(column.length, 1);
          } else if (values.length == 1 && column.length > 0) {
            let titleRow = retdata.splice(column.length, 1);
            let newRetdata = [];
            for (let r2 = 0; r2 < retdata.length; r2++) {
              let row2 = [];
              if (r2 == retdata.length - 1) {
                row2.push(titleRow[0][0]);
              } else {
                row2.push("");
              }
              for (let c2 = 0; c2 < retdata[r2].length - 1; c2++) {
                row2.push(retdata[r2][c2]);
              }
              newRetdata.push(row2);
            }
            retdata = newRetdata;
          }
          _this.pivotDatas = retdata;
          return retdata;
        },
        drillDown: function(row_index, col_index) {
          if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "usePivotTablereports")) {
            return;
          }
          let _this = this;
          let cell = _this.pivotDatas[row_index][col_index];
          let d = $.extend(true, [], sheetmanage_default.nulldata);
          const _locale = locale_default();
          const locale_filter = _locale.filter;
          const locale_pivotTable = _locale.pivotTable;
          let selecteditemNullIndex = 1;
          for (let i2 = 0; i2 < _this.celldata[0].length; i2++) {
            let name2;
            if (!!_this.celldata[0][i2] && !!_this.celldata[0][i2]["m"]) {
              name2 = _this.celldata[0][i2]["m"];
            } else {
              name2 = getcellvalue(0, i2, _this.celldata);
            }
            if (name2 != null) {
              name2 = name2.toString();
            }
            if (name2 == null || $.trim(name2.toString()).length == 0) {
              name2 = locale_pivotTable.titleColumn + " " + selecteditemNullIndex;
            }
            selecteditemNullIndex++;
            d[0][i2] = name2;
          }
          let obj = {};
          if (_this.row != null && _this.row.length > 0) {
            for (let a = 0; a < _this.row.length; a++) {
              obj[_this.row[a]["index"]] = _this.pivotDatas[row_index][a];
            }
          }
          if (_this.column != null && _this.column.length > 0) {
            for (let b = 0; b < _this.column.length; b++) {
              obj[_this.column[b]["index"]] = _this.pivotDatas[b][col_index];
            }
          }
          let rowArr = [];
          for (let j = 1; j < _this.celldata.length; j++) {
            let isEqual = true;
            for (let x in obj) {
              let value;
              if (!!_this.celldata[j][x] && !!_this.celldata[j][x]["m"]) {
                value = _this.celldata[j][x]["m"];
              } else {
                value = getcellvalue(j, x, _this.celldata);
              }
              if (value != null) {
                value = value.toString();
              } else {
                value = locale_filter.valueBlank;
              }
              if (value != obj[x]) {
                isEqual = false;
                break;
              }
            }
            if (isEqual) {
              rowArr.push(j);
            }
          }
          for (let r2 = 0; r2 < rowArr.length; r2++) {
            for (let c2 = 0; c2 < _this.celldata[0].length; c2++) {
              let value;
              if (!!_this.celldata[rowArr[r2]][c2] && !!_this.celldata[rowArr[r2]][c2]["m"]) {
                value = _this.celldata[rowArr[r2]][c2]["m"];
              } else {
                value = getcellvalue(rowArr[r2], c2, _this.celldata);
              }
              if (value != null) {
                value = value.toString();
              } else {
                value = "";
              }
              d[r2 + 1][c2] = value;
            }
          }
          store_default.luckysheet_select_save = [{"row": [0, rowArr.length], "column": [0, _this.celldata[0].length - 1]}];
          store_default.clearjfundo = false;
          jfrefreshgrid(d, store_default.luckysheet_select_save);
          selectHightlightShow();
          store_default.clearjfundo = true;
        }
      };
      pivotTable_default = pivotTable;
    }
  });

  // src/controllers/sparkline.js
  var createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues, all, remove, isNumber, formatNumber, RangeMap, luckysheetSparkline, barHighlightMixin, _luckysheetSparkLineOptions, _luckysheetSparkLineTarget, sparkline_default;
  var init_sparkline = __esm({
    "src/controllers/sparkline.js"() {
      init_store();
      createClass = function() {
        let Class, args;
        Class = function() {
          this.init.apply(this, arguments);
        };
        if (arguments.length > 1) {
          if (arguments[0]) {
            Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);
            Class._super = arguments[0].prototype;
          } else {
            Class.prototype = arguments[arguments.length - 1];
          }
          if (arguments.length > 2) {
            args = Array.prototype.slice.call(arguments, 1, -1);
            args.unshift(Class.prototype);
            $.extend.apply($, args);
          }
        } else {
          Class.prototype = arguments[0];
        }
        Class.prototype.cls = Class;
        return Class;
      };
      SPFormat = createClass({
        fre: /\{\{([\w.]+?)(:(.+?))?\}\}/g,
        precre: /(\w+)\.(\d+)/,
        init: function(format, fclass) {
          this.format = format;
          this.fclass = fclass;
        },
        render: function(fieldset, lookups, options) {
          let self2 = this, fields = fieldset, match, token, lookupkey, fieldvalue, prec;
          return this.format.replace(this.fre, function() {
            let lookup;
            token = arguments[1];
            lookupkey = arguments[3];
            match = self2.precre.exec(token);
            if (match) {
              prec = match[2];
              token = match[1];
            } else {
              prec = false;
            }
            fieldvalue = fields[token];
            if (fieldvalue === void 0) {
              return "";
            }
            if (lookupkey && lookups && lookups[lookupkey]) {
              lookup = lookups[lookupkey];
              if (lookup.get) {
                return lookups[lookupkey].get(fieldvalue) || fieldvalue;
              } else {
                return lookups[lookupkey][fieldvalue] || fieldvalue;
              }
            }
            if (isNumber(fieldvalue)) {
              if (options.get("numberFormatter")) {
                fieldvalue = options.get("numberFormatter")(fieldvalue);
              } else {
                fieldvalue = formatNumber(fieldvalue, prec, options.get("numberDigitGroupCount"), options.get("numberDigitGroupSep"), options.get("numberDecimalMark"));
              }
            }
            return fieldvalue;
          });
        }
      });
      $.spformat = function(format, fclass) {
        return new SPFormat(format, fclass);
      };
      clipval = function(val, min, max) {
        if (val < min) {
          return min;
        }
        if (val > max) {
          return max;
        }
        return val;
      };
      quartile = function(values, q) {
        let vl;
        if (q === 2) {
          vl = Math.floor(values.length / 2);
          return values.length % 2 ? values[vl] : (values[vl - 1] + values[vl]) / 2;
        } else {
          if (values.length % 2) {
            vl = (values.length * q + q) / 4;
            return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl - 1];
          } else {
            vl = (values.length * q + 2) / 4;
            return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl - 1];
          }
        }
      };
      normalizeValue = function(val) {
        let nf;
        switch (val) {
          case "undefined":
            val = void 0;
            break;
          case "null":
            val = null;
            break;
          case "true":
            val = true;
            break;
          case "false":
            val = false;
            break;
          default:
            nf = parseFloat(val);
            if (val == nf) {
              val = nf;
            }
        }
        return val;
      };
      normalizeValues = function(vals) {
        let i2, result = [];
        for (i2 = vals.length; i2--; ) {
          result[i2] = normalizeValue(vals[i2]);
        }
        return result;
      };
      all = function(val, arr, ignoreNull) {
        let i2;
        for (i2 = arr.length; i2--; ) {
          if (ignoreNull && arr[i2] === null)
            continue;
          if (arr[i2] !== val) {
            return false;
          }
        }
        return true;
      };
      remove = function(vals, filter) {
        let i2, vl, result = [];
        for (i2 = 0, vl = vals.length; i2 < vl; i2++) {
          if (vals[i2] !== filter) {
            result.push(vals[i2]);
          }
        }
        return result;
      };
      isNumber = function(num) {
        return !isNaN(parseFloat(num)) && isFinite(num);
      };
      formatNumber = function(num, prec, groupsize, groupsep, decsep) {
        let p, i2;
        num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split("");
        p = (p = $.inArray(".", num)) < 0 ? num.length : p;
        if (p < num.length) {
          num[p] = decsep;
        }
        for (i2 = p - groupsize; i2 > 0; i2 -= groupsize) {
          num.splice(i2, 0, groupsep);
        }
        return num.join("");
      };
      RangeMap = createClass({
        init: function(map) {
          let key, range2, rangelist = [];
          for (key in map) {
            if (map.hasOwnProperty(key) && typeof key === "string" && key.indexOf(":") > -1) {
              range2 = key.split(":");
              range2[0] = range2[0].length === 0 ? -Infinity : parseFloat(range2[0]);
              range2[1] = range2[1].length === 0 ? Infinity : parseFloat(range2[1]);
              range2[2] = map[key];
              rangelist.push(range2);
            }
          }
          this.map = map;
          this.rangelist = rangelist || false;
        },
        get: function(value) {
          let rangelist = this.rangelist, i2, range2, result;
          if ((result = this.map[value]) !== void 0) {
            return result;
          }
          if (rangelist) {
            for (i2 = rangelist.length; i2--; ) {
              range2 = rangelist[i2];
              if (range2[0] <= value && range2[1] >= value) {
                return range2[2];
              }
            }
          }
          return void 0;
        }
      });
      $.range_map = function(map) {
        return new RangeMap(map);
      };
      luckysheetSparkline = {
        defaultOption: {
          common: {
            type: "line",
            lineColor: "#2ec7c9",
            fillColor: "#CCF3F4",
            defaultPixelsPerValue: 3,
            width: "auto",
            height: "auto",
            composite: false,
            tagValuesAttribute: "values",
            tagOptionsPrefix: "spark",
            enableTagOptions: false,
            enableHighlight: true,
            highlightLighten: 1.4,
            tooltipSkipNull: true,
            tooltipPrefix: "",
            tooltipSuffix: "",
            disableHiddenCheck: false,
            numberFormatter: false,
            numberDigitGroupCount: 3,
            numberDigitGroupSep: ",",
            numberDecimalMark: ".",
            disableTooltips: true,
            disableInteraction: true,
            offsetX: 0,
            offsetY: 0
          },
          line: {
            spotColor: 0,
            highlightSpotColor: "#5f5",
            highlightLineColor: "#f22",
            spotRadius: 1.5,
            minSpotColor: 0,
            maxSpotColor: 0,
            lineWidth: 1,
            normalRangeMin: void 0,
            normalRangeMax: void 0,
            normalRangeColor: "#ccc",
            drawNormalOnTop: true,
            chartRangeMin: void 0,
            chartRangeMax: void 0,
            chartRangeMinX: void 0,
            chartRangeMaxX: void 0
          },
          bar: {
            barColor: "#fc5c5c",
            negBarColor: "#97b552",
            stackedBarColor: ["#2ec7c9", "#fc5c5c", "#5ab1ef", "#ffb980", "#d87a80", "#8d98b3", "#e5cf0d", "#97b552", "#95706d", "#dc69aa", "#07a2a4", "#9a7fd1", "#588dd5", "#f5994e", "#c05050", "#59678c", "#c9ab00", "#7eb00a", "#6f5553", "#c14089"],
            zeroColor: void 0,
            nullColor: void 0,
            zeroAxis: true,
            barWidth: 4,
            barSpacing: 1,
            chartRangeMax: void 0,
            chartRangeMin: void 0,
            chartRangeClip: false,
            colorMap: void 0
          },
          column: {
            barColor: "#fc5c5c",
            negBarColor: "#97b552",
            stackedBarColor: ["#2ec7c9", "#fc5c5c", "#5ab1ef", "#ffb980", "#d87a80", "#8d98b3", "#e5cf0d", "#97b552", "#95706d", "#dc69aa", "#07a2a4", "#9a7fd1", "#588dd5", "#f5994e", "#c05050", "#59678c", "#c9ab00", "#7eb00a", "#6f5553", "#c14089"],
            zeroColor: void 0,
            nullColor: void 0,
            zeroAxis: true,
            barWidth: 4,
            barSpacing: 1,
            chartRangeMax: void 0,
            chartRangeMin: void 0,
            chartRangeClip: false,
            colorMap: void 0
          },
          tristate: {
            barWidth: 4,
            barSpacing: 1,
            posBarColor: "#fc5c5c",
            negBarColor: "#97b552",
            zeroBarColor: "#999",
            colorMap: {}
          },
          discrete: {
            lineHeight: "auto",
            thresholdColor: "#fc5c5c",
            thresholdValue: 0,
            chartRangeMax: void 0,
            chartRangeMin: void 0,
            chartRangeClip: false
          },
          bullet: {
            targetColor: "#f33",
            targetWidth: 3,
            performanceColor: "#33f",
            rangeColors: ["#d3dafe", "#a8b6ff", "#7f94ff", "#6D87FF", "#5876FF", "#4465FF", "#2F54FF", "#1A43FF", "#0532FF"],
            base: void 0
          },
          pie: {
            offset: 0,
            sliceColors: ["#2ec7c9", "#fc5c5c", "#5ab1ef", "#ffb980", "#d87a80", "#8d98b3", "#e5cf0d", "#97b552", "#95706d", "#dc69aa", "#07a2a4", "#9a7fd1", "#588dd5", "#f5994e", "#c05050", "#59678c", "#c9ab00", "#7eb00a", "#6f5553", "#c14089"],
            borderWidth: 0,
            borderColor: "#000"
          },
          box: {
            raw: false,
            boxLineColor: "#000",
            boxFillColor: "#cdf",
            whiskerColor: "#000",
            outlierLineColor: "#5E5E5E",
            outlierFillColor: "#fff",
            medianColor: "#f00",
            showOutliers: true,
            outlierIQR: 1.5,
            spotRadius: 1.5,
            target: void 0,
            targetColor: "#4a2",
            chartRangeMax: void 0,
            chartRangeMin: void 0
          }
        },
        line: {
          type: "line",
          init: function(el, values, options, width, height) {
            this.vertices = [];
            this.regionMap = [];
            this.xvalues = [];
            this.yvalues = [];
            this.yminmax = [];
            this.hightlightSpotId = null;
            this.lastShapeId = null;
          },
          getRegion: function(el, x, y) {
            let i2, regionMap = this.regionMap;
            for (i2 = regionMap.length; i2--; ) {
              if (regionMap[i2] !== null && x >= regionMap[i2][0] && x <= regionMap[i2][1]) {
                return regionMap[i2][2];
              }
            }
            return void 0;
          },
          getCurrentRegionFields: function() {
            let currentRegion = this.currentRegion;
            return {
              isNull: this.yvalues[currentRegion] === null,
              x: this.xvalues[currentRegion],
              y: this.yvalues[currentRegion],
              color: this.options.get("lineColor"),
              fillColor: this.options.get("fillColor"),
              offset: currentRegion
            };
          },
          renderHighlight: function() {
            let currentRegion = this.currentRegion, target = this.target, vertex = this.vertices[currentRegion], options = this.options, spotRadius = options.get("spotRadius"), highlightSpotColor = options.get("highlightSpotColor"), highlightLineColor = options.get("highlightLineColor"), highlightSpot, highlightLine;
            if (!vertex) {
              return;
            }
            if (spotRadius && highlightSpotColor) {
              highlightSpot = target.drawCircle(vertex[0], vertex[1], spotRadius, void 0, highlightSpotColor);
              this.highlightSpotId = highlightSpot.id;
              target.insertAfterShape(this.lastShapeId, highlightSpot);
            }
            if (highlightLineColor) {
              highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0], this.canvasTop + this.canvasHeight, highlightLineColor);
              this.highlightLineId = highlightLine.id;
              target.insertAfterShape(this.lastShapeId, highlightLine);
            }
          },
          removeHighlight: function() {
            let target = this.target;
            if (this.highlightSpotId) {
              target.removeShapeId(this.highlightSpotId);
              this.highlightSpotId = null;
            }
            if (this.highlightLineId) {
              target.removeShapeId(this.highlightLineId);
              this.highlightLineId = null;
            }
          },
          scanValues: function() {
            let values = this.values, valcount = values.length, xvalues = this.xvalues, yvalues = this.yvalues, yminmax = this.yminmax, i2, val, isStr, isArray, sp;
            for (i2 = 0; i2 < valcount; i2++) {
              val = values[i2];
              isStr = typeof values[i2] === "string";
              isArray = typeof values[i2] === "object" && values[i2] instanceof Array;
              sp = isStr && values[i2].split(":");
              if (isStr && sp.length === 2) {
                xvalues.push(Number(sp[0]));
                yvalues.push(Number(sp[1]));
                yminmax.push(Number(sp[1]));
              } else if (isArray) {
                xvalues.push(val[0]);
                yvalues.push(val[1]);
                yminmax.push(val[1]);
              } else {
                xvalues.push(i2);
                if (values[i2] === null || values[i2] === "null") {
                  yvalues.push(null);
                } else {
                  yvalues.push(Number(val));
                  yminmax.push(Number(val));
                }
              }
            }
            if (this.options.get("xvalues")) {
              xvalues = this.options.get("xvalues");
            }
            this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);
            this.miny = this.minyorg = Math.min.apply(Math, yminmax);
            this.maxx = Math.max.apply(Math, xvalues);
            this.minx = Math.min.apply(Math, xvalues);
            this.xvalues = xvalues;
            this.yvalues = yvalues;
            this.yminmax = yminmax;
          },
          processRangeOptions: function() {
            let options = this.options, normalRangeMin = options.get("normalRangeMin"), normalRangeMax = options.get("normalRangeMax");
            if (normalRangeMin !== void 0) {
              if (normalRangeMin < this.miny) {
                this.miny = normalRangeMin;
              }
              if (normalRangeMax > this.maxy) {
                this.maxy = normalRangeMax;
              }
            }
            if (options.get("chartRangeMin") !== void 0 && (options.get("chartRangeClip") || options.get("chartRangeMin") < this.miny)) {
              this.miny = options.get("chartRangeMin");
            }
            if (options.get("chartRangeMax") !== void 0 && (options.get("chartRangeClip") || options.get("chartRangeMax") > this.maxy)) {
              this.maxy = options.get("chartRangeMax");
            }
            if (options.get("chartRangeMinX") !== void 0 && (options.get("chartRangeClipX") || options.get("chartRangeMinX") < this.minx)) {
              this.minx = options.get("chartRangeMinX");
            }
            if (options.get("chartRangeMaxX") !== void 0 && (options.get("chartRangeClipX") || options.get("chartRangeMaxX") > this.maxx)) {
              this.maxx = options.get("chartRangeMaxX");
            }
          },
          drawNormalRange: function(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {
            let normalRangeMin = this.options.get("normalRangeMin"), normalRangeMax = this.options.get("normalRangeMax"), ytop = canvasTop + Math.round(canvasHeight - canvasHeight * ((normalRangeMax - this.miny) / rangey)), height = Math.round(canvasHeight * (normalRangeMax - normalRangeMin) / rangey);
            if (height == 0 && normalRangeMin == normalRangeMax) {
              height = 1;
            }
            this.target.drawRect(canvasLeft, ytop, canvasWidth, height, void 0, this.options.get("normalRangeColor")).append();
          },
          render: function(el, userValues) {
            this.vertices = [];
            this.regionMap = [];
            this.xvalues = [];
            this.yvalues = [];
            this.yminmax = [];
            this.hightlightSpotId = null;
            this.lastShapeId = null;
            this.values = userValues;
            let options = this.options, target = this.target, canvasWidth = el.mergedOptions.width, canvasHeight = el.mergedOptions.height, vertices = this.vertices, spotRadius = options.get("spotRadius"), regionMap = this.regionMap, rangex, rangey, yvallast, canvasTop, canvasLeft, vertex, path, paths, x, y, xnext, xpos, xposnext, last, next, yvalcount, lineShapes, fillShapes, plen, valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i2;
            this.scanValues();
            this.processRangeOptions();
            xvalues = this.xvalues;
            yvalues = this.yvalues;
            if (!this.yminmax.length || this.yvalues.length < 2) {
              return;
            }
            canvasTop = canvasLeft = 0;
            rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;
            rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;
            yvallast = this.yvalues.length - 1;
            if (spotRadius && (canvasWidth < spotRadius * 4 || canvasHeight < spotRadius * 4)) {
              spotRadius = 0;
            }
            if (spotRadius) {
              hlSpotsEnabled = options.get("highlightSpotColor") && !options.get("disableInteraction");
              if (hlSpotsEnabled || options.get("minSpotColor") || options.get("spotColor") && yvalues[yvallast] === this.miny) {
                canvasHeight -= Math.ceil(spotRadius);
              }
              if (hlSpotsEnabled || options.get("maxSpotColor") || options.get("spotColor") && yvalues[yvallast] === this.maxy) {
                canvasHeight -= Math.ceil(spotRadius);
                canvasTop += Math.ceil(spotRadius);
              }
              if (hlSpotsEnabled || (options.get("minSpotColor") || options.get("maxSpotColor")) && (yvalues[0] === this.miny || yvalues[0] === this.maxy)) {
                canvasLeft += Math.ceil(spotRadius);
                canvasWidth -= Math.ceil(spotRadius);
              }
              if (hlSpotsEnabled || options.get("spotColor") || (options.get("minSpotColor") || options.get("maxSpotColor") && (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {
                canvasWidth -= Math.ceil(spotRadius);
              }
            }
            canvasHeight--;
            if (options.get("normalRangeMin") !== void 0 && !options.get("drawNormalOnTop")) {
              this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);
            }
            path = [];
            paths = [path];
            last = next = null;
            yvalcount = yvalues.length;
            for (i2 = 0; i2 < yvalcount; i2++) {
              x = xvalues[i2];
              xnext = xvalues[i2 + 1];
              y = yvalues[i2];
              xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));
              xposnext = i2 < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;
              next = xpos + (xposnext - xpos) / 2;
              regionMap[i2] = [last || 0, next, i2];
              last = next;
              if (y === null) {
                if (i2) {
                  if (yvalues[i2 - 1] !== null) {
                    path = [];
                    paths.push(path);
                  }
                  vertices.push(null);
                }
              } else {
                if (y < this.miny) {
                  y = this.miny;
                }
                if (y > this.maxy) {
                  y = this.maxy;
                }
                if (!path.length) {
                  path.push([xpos, canvasTop + canvasHeight]);
                }
                vertex = [xpos, canvasTop + Math.round(canvasHeight - canvasHeight * ((y - this.miny) / rangey))];
                path.push(vertex);
                vertices.push(vertex);
              }
            }
            lineShapes = [];
            fillShapes = [];
            plen = paths.length;
            for (i2 = 0; i2 < plen; i2++) {
              path = paths[i2];
              if (path.length) {
                if (options.get("fillColor")) {
                  path.push([path[path.length - 1][0], canvasTop + canvasHeight]);
                  fillShapes.push(path.slice(0));
                  path.pop();
                }
                if (path.length > 2) {
                  path[0] = [path[0][0], path[1][1]];
                }
                lineShapes.push(path);
              }
            }
            plen = fillShapes.length;
            for (i2 = 0; i2 < plen; i2++) {
              target.drawShape(fillShapes[i2], options.get("fillColor"), options.get("fillColor")).append();
            }
            plen = lineShapes.length;
            for (i2 = 0; i2 < plen; i2++) {
              target.drawShape(lineShapes[i2], options.get("lineColor"), void 0, options.get("lineWidth")).append();
            }
            if (options.get("normalRangeMin") !== void 0 && options.get("drawNormalOnTop")) {
              this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);
            }
            if (spotRadius && options.get("valueSpots")) {
              valueSpots = options.get("valueSpots");
              if (valueSpots.get === void 0) {
                valueSpots = new RangeMap(valueSpots);
              }
              for (i2 = 0; i2 < yvalcount; i2++) {
                color = valueSpots.get(yvalues[i2]);
                if (color) {
                  target.drawCircle(canvasLeft + Math.round((xvalues[i2] - this.minx) * (canvasWidth / rangex)), canvasTop + Math.round(canvasHeight - canvasHeight * ((yvalues[i2] - this.miny) / rangey)), spotRadius, void 0, color).append();
                }
              }
            }
            if (spotRadius && options.get("spotColor") && yvalues[yvallast] !== null) {
              target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)), canvasTop + Math.round(canvasHeight - canvasHeight * ((yvalues[yvallast] - this.miny) / rangey)), spotRadius, void 0, options.get("spotColor")).append();
            }
            if (this.maxy !== this.minyorg) {
              if (spotRadius && options.get("minSpotColor")) {
                x = xvalues[$.inArray(this.minyorg, yvalues)];
                target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)), canvasTop + Math.round(canvasHeight - canvasHeight * ((this.minyorg - this.miny) / rangey)), spotRadius, void 0, options.get("minSpotColor")).append();
              }
              if (spotRadius && options.get("maxSpotColor")) {
                x = xvalues[$.inArray(this.maxyorg, yvalues)];
                target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)), canvasTop + Math.round(canvasHeight - canvasHeight * ((this.maxyorg - this.miny) / rangey)), spotRadius, void 0, options.get("maxSpotColor")).append();
              }
            }
          }
        },
        bar: {
          type: "bar",
          init: function(el, values) {
            let options = this.options;
            let width = el.mergedOptions.height;
            let height = el.mergedOptions.width;
            this.canvasWidth = el.mergedOptions.height;
            this.canvasHeight = el.mergedOptions.width;
            let barWidth = parseInt(options.get("barWidth"), 10), barSpacing = parseInt(options.get("barSpacing"), 10), chartRangeMin = options.get("chartRangeMin"), chartRangeMax = options.get("chartRangeMax"), chartRangeClip = options.get("chartRangeClip"), stackMin = Infinity, stackMax = -Infinity, isStackString, groupMin, groupMax, stackRanges, numValues, i2, vlen, range2, zeroAxis, xaxisOffset, min, max, clipMin, clipMax, stacked, vlist, j, slen2, svals, val, yoffset, yMaxCalc, canvasHeightEf;
            this.values = values;
            for (i2 = 0, vlen = values.length; i2 < vlen; i2++) {
              val = values[i2];
              isStackString = typeof val === "string" && val.indexOf(":") > -1;
              if (isStackString || $.isArray(val)) {
                stacked = true;
                if (isStackString) {
                  val = values[i2] = normalizeValues(val.split(":"));
                }
                val = remove(val, null);
                groupMin = Math.min.apply(Math, val);
                groupMax = Math.max.apply(Math, val);
                if (groupMin < stackMin) {
                  stackMin = groupMin;
                }
                if (groupMax > stackMax) {
                  stackMax = groupMax;
                }
              }
            }
            this.stacked = stacked;
            this.regionShapes = {};
            this.barWidth = Math.floor(width / values.length) - barSpacing;
            this.barSpacing = barSpacing;
            this.totalBarWidth = this.barWidth + barSpacing;
            this.width = width;
            if (chartRangeClip) {
              clipMin = chartRangeMin === void 0 ? -Infinity : chartRangeMin;
              clipMax = chartRangeMax === void 0 ? Infinity : chartRangeMax;
            }
            numValues = [];
            stackRanges = stacked ? [] : numValues;
            let stackTotals = [];
            let stackRangesNeg = [];
            for (i2 = 0, vlen = values.length; i2 < vlen; i2++) {
              if (stacked) {
                vlist = values[i2];
                values[i2] = svals = [];
                stackTotals[i2] = 0;
                stackRanges[i2] = stackRangesNeg[i2] = 0;
                for (j = 0, slen2 = vlist.length; j < slen2; j++) {
                  val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];
                  if (val !== null) {
                    if (val > 0) {
                      stackTotals[i2] += val;
                    }
                    if (stackMin < 0 && stackMax > 0) {
                      if (val < 0) {
                        stackRangesNeg[i2] += Math.abs(val);
                      } else {
                        stackRanges[i2] += val;
                      }
                    } else {
                      stackRanges[i2] += Math.abs(val);
                    }
                    numValues.push(val);
                  }
                }
              } else {
                val = chartRangeClip ? clipval(values[i2], clipMin, clipMax) : values[i2];
                val = values[i2] = normalizeValue(val);
                if (val !== null) {
                  numValues.push(val);
                }
              }
            }
            this.max = max = Math.max.apply(Math, numValues);
            this.min = min = Math.min.apply(Math, numValues);
            this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;
            this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;
            if (options.get("chartRangeMin") !== void 0 && (options.get("chartRangeClip") || options.get("chartRangeMin") < min)) {
              min = options.get("chartRangeMin");
            }
            if (options.get("chartRangeMax") !== void 0 && (options.get("chartRangeClip") || options.get("chartRangeMax") > max)) {
              max = options.get("chartRangeMax");
            }
            this.zeroAxis = zeroAxis = options.get("zeroAxis", true);
            if (min <= 0 && max >= 0 && zeroAxis) {
              xaxisOffset = 0;
            } else if (zeroAxis == false) {
              xaxisOffset = min;
            } else if (min > 0) {
              xaxisOffset = 0;
            } else {
              xaxisOffset = max;
            }
            this.xaxisOffset = xaxisOffset;
            range2 = stacked ? Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg) : max - xaxisOffset;
            this.canvasHeightEf = zeroAxis && min < 0 ? this.canvasHeight - 2 : this.canvasHeight - 1;
            this.isNeg = false;
            if (min < xaxisOffset) {
              yoffset = Math.floor(this.canvasHeight / 2);
              this.isNeg = true;
              if (yoffset !== Math.ceil(yoffset)) {
                this.canvasHeightEf -= 2;
                yoffset = Math.ceil(yoffset);
              }
            } else {
              yoffset = 0;
            }
            this.yoffset = yoffset;
            if ($.isArray(options.get("colorMap"))) {
              this.colorMapByIndex = options.get("colorMap");
              this.colorMapByValue = null;
            } else {
              this.colorMapByIndex = null;
              this.colorMapByValue = options.get("colorMap");
              if (this.colorMapByValue && this.colorMapByValue.get === void 0) {
                this.colorMapByValue = new RangeMap(this.colorMapByValue);
              }
            }
            this.range = range2;
          },
          getRegion: function(el, x, y) {
            let result = Math.floor(x / this.totalBarWidth);
            return result < 0 || result >= this.values.length ? void 0 : result;
          },
          getCurrentRegionFields: function() {
            let currentRegion = this.currentRegion, values = ensureArray(this.values[currentRegion]), result = [], value, i2;
            for (i2 = values.length; i2--; ) {
              value = values[i2];
              result.push({
                isNull: value === null,
                value,
                color: this.calcColor(i2, value, currentRegion),
                offset: currentRegion
              });
            }
            return result;
          },
          calcColor: function(stacknum, value, valuenum) {
            let colorMapByIndex = this.colorMapByIndex, colorMapByValue = this.colorMapByValue, options = this.options, color, newColor;
            if (this.stacked) {
              color = options.get("stackedBarColor");
            } else {
              color = value < 0 ? options.get("negBarColor") : options.get("barColor");
            }
            if (value === 0 && options.get("zeroColor") !== void 0) {
              color = options.get("zeroColor");
            }
            if (colorMapByValue && (newColor = colorMapByValue.get(value))) {
              color = newColor;
            } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {
              color = colorMapByIndex[valuenum];
            }
            return $.isArray(color) ? color[stacknum % color.length] : color;
          },
          renderRegion: function(valuenum, highlight) {
            let vals = this.values[valuenum], options = this.options, xaxisOffset = this.xaxisOffset, result = [], range2 = this.range, stacked = this.stacked, target = this.target, x = valuenum * this.totalBarWidth, canvasHeightEf = this.canvasHeightEf, yoffset = this.yoffset, y, height, color, isNull, yoffsetNeg, i2, valcount, val, minPlotted, allMin;
            vals = $.isArray(vals) ? vals : [vals];
            valcount = vals.length;
            val = vals[0];
            isNull = all(null, vals);
            allMin = all(xaxisOffset, vals, true);
            if (isNull) {
              if (options.get("nullColor")) {
                color = highlight ? options.get("nullColor") : this.calcHighlightColor(options.get("nullColor"), options);
                y = yoffset > 0 ? yoffset - 1 : yoffset;
                return target.drawRect(y, x, 0, this.barWidth - 1, color, color);
              } else {
                return void 0;
              }
            }
            yoffsetNeg = yoffset;
            if (this.isNeg) {
              canvasHeightEf = Math.floor(canvasHeightEf / 2);
            }
            for (i2 = 0; i2 < valcount; i2++) {
              val = vals[i2];
              if (stacked && val === xaxisOffset) {
                if (!allMin || minPlotted) {
                  continue;
                }
                minPlotted = true;
              }
              if (range2 > 0) {
                height = Math.floor(canvasHeightEf * (Math.abs(val - xaxisOffset) / range2));
              } else {
                height = canvasHeightEf;
              }
              if (val < xaxisOffset || val === xaxisOffset && yoffset === 0) {
                y = yoffsetNeg - height;
                yoffsetNeg += height;
              } else {
                if (stacked) {
                  y = yoffset;
                  yoffset += height;
                } else {
                  y = yoffset;
                  yoffset -= height;
                }
              }
              color = this.calcColor(i2, val, valuenum);
              if (highlight) {
                color = this.calcHighlightColor(color, options);
              }
              result.push(target.drawRect(y, x, height - 1, this.barWidth - 1, color, color));
            }
            if (result.length === 1) {
              return result[0];
            }
            return result;
          }
        },
        column: {
          type: "column",
          init: function(el, values) {
            let options = this.options;
            let width = el.mergedOptions.width;
            let height = el.mergedOptions.height;
            this.canvasWidth = el.mergedOptions.width;
            this.canvasHeight = el.mergedOptions.height;
            let barWidth = parseInt(options.get("barWidth"), 10), barSpacing = parseInt(options.get("barSpacing"), 10), chartRangeMin = options.get("chartRangeMin"), chartRangeMax = options.get("chartRangeMax"), chartRangeClip = options.get("chartRangeClip"), stackMin = Infinity, stackMax = -Infinity, isStackString, groupMin, groupMax, stackRanges, numValues, i2, vlen, range2, zeroAxis, xaxisOffset, min, max, clipMin, clipMax, stacked, vlist, j, slen2, svals, val, yoffset, yMaxCalc, canvasHeightEf;
            this.values = values;
            for (i2 = 0, vlen = values.length; i2 < vlen; i2++) {
              val = values[i2];
              isStackString = typeof val === "string" && val.indexOf(":") > -1;
              if (isStackString || $.isArray(val)) {
                stacked = true;
                if (isStackString) {
                  val = values[i2] = normalizeValues(val.split(":"));
                }
                val = remove(val, null);
                groupMin = Math.min.apply(Math, val);
                groupMax = Math.max.apply(Math, val);
                if (groupMin < stackMin) {
                  stackMin = groupMin;
                }
                if (groupMax > stackMax) {
                  stackMax = groupMax;
                }
              }
            }
            this.stacked = stacked;
            this.regionShapes = {};
            this.barWidth = Math.floor(width / values.length) - barSpacing;
            this.barSpacing = barSpacing;
            this.totalBarWidth = this.barWidth + barSpacing;
            this.width = width;
            if (chartRangeClip) {
              clipMin = chartRangeMin === void 0 ? -Infinity : chartRangeMin;
              clipMax = chartRangeMax === void 0 ? Infinity : chartRangeMax;
            }
            numValues = [];
            stackRanges = stacked ? [] : numValues;
            let stackTotals = [];
            let stackRangesNeg = [];
            for (i2 = 0, vlen = values.length; i2 < vlen; i2++) {
              if (stacked) {
                vlist = values[i2];
                values[i2] = svals = [];
                stackTotals[i2] = 0;
                stackRanges[i2] = stackRangesNeg[i2] = 0;
                for (j = 0, slen2 = vlist.length; j < slen2; j++) {
                  val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];
                  if (val !== null) {
                    if (val > 0) {
                      stackTotals[i2] += val;
                    }
                    if (stackMin < 0 && stackMax > 0) {
                      if (val < 0) {
                        stackRangesNeg[i2] += Math.abs(val);
                      } else {
                        stackRanges[i2] += val;
                      }
                    } else {
                      stackRanges[i2] += Math.abs(val);
                    }
                    numValues.push(val);
                  }
                }
              } else {
                val = chartRangeClip ? clipval(values[i2], clipMin, clipMax) : values[i2];
                val = values[i2] = normalizeValue(val);
                if (val !== null) {
                  numValues.push(val);
                }
              }
            }
            this.max = max = Math.max.apply(Math, numValues);
            this.min = min = Math.min.apply(Math, numValues);
            this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;
            this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;
            if (options.get("chartRangeMin") !== void 0 && (options.get("chartRangeClip") || options.get("chartRangeMin") < min)) {
              min = options.get("chartRangeMin");
            }
            if (options.get("chartRangeMax") !== void 0 && (options.get("chartRangeClip") || options.get("chartRangeMax") > max)) {
              max = options.get("chartRangeMax");
            }
            this.zeroAxis = zeroAxis = options.get("zeroAxis", true);
            if (min <= 0 && max >= 0 && zeroAxis) {
              xaxisOffset = 0;
            } else if (zeroAxis == false) {
              xaxisOffset = min;
            } else if (min > 0) {
              xaxisOffset = 0;
            } else {
              xaxisOffset = max;
            }
            this.xaxisOffset = xaxisOffset;
            range2 = stacked ? Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg) : max - xaxisOffset;
            this.canvasHeightEf = zeroAxis && min < 0 ? this.canvasHeight - 2 : this.canvasHeight - 1;
            this.isNeg = false;
            if (min < xaxisOffset) {
              yoffset = Math.floor(this.canvasHeight / 2);
              this.isNeg = true;
              if (yoffset !== Math.ceil(yoffset)) {
                this.canvasHeightEf -= 2;
                yoffset = Math.ceil(yoffset);
              }
            } else {
              yoffset = this.canvasHeight;
            }
            this.yoffset = yoffset;
            if ($.isArray(options.get("colorMap"))) {
              this.colorMapByIndex = options.get("colorMap");
              this.colorMapByValue = null;
            } else {
              this.colorMapByIndex = null;
              this.colorMapByValue = options.get("colorMap");
              if (this.colorMapByValue && this.colorMapByValue.get === void 0) {
                this.colorMapByValue = new RangeMap(this.colorMapByValue);
              }
            }
            this.range = range2;
          },
          getRegion: function(el, x, y) {
            let result = Math.floor(x / this.totalBarWidth);
            return result < 0 || result >= this.values.length ? void 0 : result;
          },
          getCurrentRegionFields: function() {
            let currentRegion = this.currentRegion, values = ensureArray(this.values[currentRegion]), result = [], value, i2;
            for (i2 = values.length; i2--; ) {
              value = values[i2];
              result.push({
                isNull: value === null,
                value,
                color: this.calcColor(i2, value, currentRegion),
                offset: currentRegion
              });
            }
            return result;
          },
          calcColor: function(stacknum, value, valuenum) {
            let colorMapByIndex = this.colorMapByIndex, colorMapByValue = this.colorMapByValue, options = this.options, color, newColor;
            if (this.stacked) {
              color = options.get("stackedBarColor");
            } else {
              color = value < 0 ? options.get("negBarColor") : options.get("barColor");
            }
            if (value === 0 && options.get("zeroColor") !== void 0) {
              color = options.get("zeroColor");
            }
            if (colorMapByValue && (newColor = colorMapByValue.get(value))) {
              color = newColor;
            } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {
              color = colorMapByIndex[valuenum];
            }
            return $.isArray(color) ? color[stacknum % color.length] : color;
          },
          renderRegion: function(valuenum, highlight) {
            let vals = this.values[valuenum], options = this.options, xaxisOffset = this.xaxisOffset, result = [], range2 = this.range, stacked = this.stacked, target = this.target, x = valuenum * this.totalBarWidth, canvasHeightEf = this.canvasHeightEf, yoffset = this.yoffset, y, height, color, isNull, yoffsetNeg, i2, valcount, val, minPlotted, allMin;
            vals = $.isArray(vals) ? vals : [vals];
            valcount = vals.length;
            val = vals[0];
            isNull = all(null, vals);
            allMin = all(xaxisOffset, vals, true);
            if (isNull) {
              if (options.get("nullColor")) {
                color = highlight ? options.get("nullColor") : this.calcHighlightColor(options.get("nullColor"), options);
                y = yoffset > 0 ? yoffset - 1 : yoffset;
                return target.drawRect(x, y, this.barWidth - 1, 0, color, color);
              } else {
                return void 0;
              }
            }
            yoffsetNeg = yoffset;
            if (this.isNeg) {
              canvasHeightEf = Math.floor(canvasHeightEf / 2);
            }
            for (i2 = 0; i2 < valcount; i2++) {
              val = vals[i2];
              if (stacked && val === xaxisOffset) {
                if (!allMin || minPlotted) {
                  continue;
                }
                minPlotted = true;
              }
              if (range2 > 0) {
                height = Math.floor(canvasHeightEf * (Math.abs(val - xaxisOffset) / range2));
              } else {
                height = canvasHeightEf;
              }
              if (val < xaxisOffset || val === xaxisOffset && yoffset === 0) {
                y = yoffsetNeg;
                yoffsetNeg += height;
              } else {
                y = yoffset - height;
                yoffset -= height;
              }
              color = this.calcColor(i2, val, valuenum);
              if (highlight) {
                color = this.calcHighlightColor(color, options);
              }
              result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));
            }
            if (result.length === 1) {
              return result[0];
            }
            return result;
          }
        },
        tristate: {
          type: "tristate",
          init: function(el, values) {
            let options = this.options;
            let width = el.mergedOptions.width;
            let height = el.mergedOptions.height;
            this.canvasWidth = el.mergedOptions.width;
            this.canvasHeight = el.mergedOptions.height;
            let barWidth = parseInt(options.get("barWidth"), 10), barSpacing = parseInt(options.get("barSpacing"), 10);
            this.regionShapes = {};
            this.barWidth = barWidth;
            this.barSpacing = barSpacing;
            this.totalBarWidth = barWidth + barSpacing;
            this.values = $.map(values, Number);
            this.width = width = values.length * barWidth + (values.length - 1) * barSpacing;
            if ($.isArray(options.get("colorMap"))) {
              this.colorMapByIndex = options.get("colorMap");
              this.colorMapByValue = null;
            } else {
              this.colorMapByIndex = null;
              this.colorMapByValue = options.get("colorMap");
              if (this.colorMapByValue && this.colorMapByValue.get === void 0) {
                this.colorMapByValue = new RangeMap(this.colorMapByValue);
              }
            }
          },
          getRegion: function(el, x, y) {
            return Math.floor(x / this.totalBarWidth);
          },
          getCurrentRegionFields: function() {
            let currentRegion = this.currentRegion;
            return {
              isNull: this.values[currentRegion] === void 0,
              value: this.values[currentRegion],
              color: this.calcColor(this.values[currentRegion], currentRegion),
              offset: currentRegion
            };
          },
          calcColor: function(value, valuenum) {
            let values = this.values, options = this.options, colorMapByIndex = this.colorMapByIndex, colorMapByValue = this.colorMapByValue, color, newColor;
            if (colorMapByValue && (newColor = colorMapByValue.get(value))) {
              color = newColor;
            } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {
              color = colorMapByIndex[valuenum];
            } else if (values[valuenum] < 0) {
              color = options.get("negBarColor");
            } else if (values[valuenum] > 0) {
              color = options.get("posBarColor");
            } else {
              color = options.get("zeroBarColor");
            }
            return color;
          },
          renderRegion: function(valuenum, highlight) {
            let values = this.values, options = this.options, target = this.target, canvasHeight, height, halfHeight, x, y, color;
            canvasHeight = this.canvasHeight;
            halfHeight = Math.round(canvasHeight / 2);
            x = valuenum * this.totalBarWidth;
            if (values[valuenum] < 0) {
              y = halfHeight;
              height = halfHeight - 1;
            } else if (values[valuenum] > 0) {
              y = 0;
              height = halfHeight - 1;
            } else {
              y = halfHeight - 1;
              height = 2;
            }
            color = this.calcColor(values[valuenum], valuenum);
            if (color === null) {
              return;
            }
            if (highlight) {
              color = this.calcHighlightColor(color, options);
            }
            return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);
          }
        },
        discrete: {
          type: "discrete",
          init: function(el, values) {
            let options = this.options;
            let width = el.mergedOptions.width;
            let height = el.mergedOptions.height;
            this.canvasWidth = el.mergedOptions.width;
            this.canvasHeight = el.mergedOptions.height;
            this.regionShapes = {};
            this.values = values = $.map(values, Number);
            this.min = Math.min.apply(Math, values);
            this.max = Math.max.apply(Math, values);
            this.range = this.max - this.min;
            this.width = width;
            this.interval = Math.floor(width / values.length);
            this.itemWidth = width / values.length;
            if (options.get("chartRangeMin") !== void 0 && (options.get("chartRangeClip") || options.get("chartRangeMin") < this.min)) {
              this.min = options.get("chartRangeMin");
            }
            if (options.get("chartRangeMax") !== void 0 && (options.get("chartRangeClip") || options.get("chartRangeMax") > this.max)) {
              this.max = options.get("chartRangeMax");
            }
            if (this.target) {
              this.lineHeight = options.get("lineHeight") === "auto" ? Math.round(this.canvasHeight * 0.3) : options.get("lineHeight");
            }
          },
          getRegion: function(el, x, y) {
            return Math.floor(x / this.itemWidth);
          },
          getCurrentRegionFields: function() {
            let currentRegion = this.currentRegion;
            return {
              isNull: this.values[currentRegion] === void 0,
              value: this.values[currentRegion],
              offset: currentRegion
            };
          },
          renderRegion: function(valuenum, highlight) {
            let values = this.values, options = this.options, min = this.min, max = this.max, range2 = this.range, interval = this.interval, target = this.target, canvasHeight = this.canvasHeight, lineHeight = this.lineHeight, pheight = canvasHeight - lineHeight, ytop, val, color, x;
            val = clipval(values[valuenum], min, max);
            x = valuenum * interval;
            ytop = Math.round(pheight - pheight * ((val - min) / range2));
            color = options.get("thresholdColor") && val < options.get("thresholdValue") ? options.get("thresholdColor") : options.get("lineColor");
            if (highlight) {
              color = this.calcHighlightColor(color, options);
            }
            return this.target.drawRect(x, ytop, interval <= 2 ? 1 : interval - 2, lineHeight, color, color);
          }
        },
        bullet: {
          type: "bullet",
          init: function(el, values) {
            let options = this.options;
            let width = el.mergedOptions.width;
            let height = el.mergedOptions.height;
            this.canvasWidth = el.mergedOptions.width;
            this.canvasHeight = el.mergedOptions.height;
            let min, max, vals;
            this.values = values = normalizeValues(values);
            vals = values.slice();
            vals[0] = vals[0] === null ? vals[2] : vals[0];
            vals[1] = values[1] === null ? vals[2] : vals[1];
            min = Math.min.apply(Math, values);
            max = Math.max.apply(Math, values);
            if (options.get("base") === void 0) {
              min = min < 0 ? min : 0;
            } else {
              min = options.get("base");
            }
            this.min = min;
            this.max = max;
            this.range = max - min;
            this.shapes = {};
            this.valueShapes = {};
            this.regiondata = {};
            this.width = width;
            if (!values.length) {
              this.disabled = true;
            }
          },
          getRegion: function(el, x, y) {
            let shapeid = this.target.getShapeAt(el, x, y);
            return shapeid !== void 0 && this.shapes[shapeid] !== void 0 ? this.shapes[shapeid] : void 0;
          },
          getCurrentRegionFields: function() {
            let currentRegion = this.currentRegion;
            return {
              fieldkey: currentRegion.substr(0, 1),
              value: this.values[currentRegion.substr(1)],
              region: currentRegion
            };
          },
          changeHighlight: function(highlight) {
            let currentRegion = this.currentRegion, shapeid = this.valueShapes[currentRegion], shape;
            delete this.shapes[shapeid];
            switch (currentRegion.substr(0, 1)) {
              case "r":
                shape = this.renderRange(currentRegion.substr(1), highlight);
                break;
              case "p":
                shape = this.renderPerformance(highlight);
                break;
              case "t":
                shape = this.renderTarget(highlight);
                break;
            }
            this.valueShapes[currentRegion] = shape.id;
            this.shapes[shape.id] = currentRegion;
            this.target.replaceWithShape(shapeid, shape);
          },
          renderRange: function(rn, highlight) {
            let rangeval = this.values[rn], rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)), color = this.options.get("rangeColors")[rn - 2];
            if (highlight) {
              color = this.calcHighlightColor(color, this.options);
            }
            return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);
          },
          renderPerformance: function(highlight) {
            let perfval = this.values[1], perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)), color = this.options.get("performanceColor");
            if (highlight) {
              color = this.calcHighlightColor(color, this.options);
            }
            return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1, Math.round(this.canvasHeight * 0.4) - 1, color, color);
          },
          renderTarget: function(highlight) {
            let targetval = this.values[0], x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - this.options.get("targetWidth") / 2), targettop = Math.round(this.canvasHeight * 0.1), targetheight = this.canvasHeight - targettop * 2, color = this.options.get("targetColor");
            if (highlight) {
              color = this.calcHighlightColor(color, this.options);
            }
            return this.target.drawRect(x, targettop, this.options.get("targetWidth") - 1, targetheight - 1, color, color);
          },
          render: function(el, userValues) {
            this.init(el, userValues);
            let vlen = this.values.length, target = this.target, i2, shape;
            for (i2 = 2; i2 < vlen; i2++) {
              shape = this.renderRange(i2).append();
              this.shapes[shape.id] = "r" + i2;
              this.valueShapes["r" + i2] = shape.id;
            }
            if (this.values[1] !== null) {
              shape = this.renderPerformance().append();
              this.shapes[shape.id] = "p1";
              this.valueShapes.p1 = shape.id;
            }
            if (this.values[0] !== null) {
              shape = this.renderTarget().append();
              this.shapes[shape.id] = "t0";
              this.valueShapes.t0 = shape.id;
            }
          }
        },
        pie: {
          type: "pie",
          init: function(el, values) {
            let options = this.options;
            let width = el.mergedOptions.width;
            let height = el.mergedOptions.height;
            this.canvasWidth = el.mergedOptions.width;
            this.canvasHeight = el.mergedOptions.height;
            let total = 0, i2;
            this.shapes = {};
            this.valueShapes = {};
            this.values = values = $.map(values, Number);
            if (options.get("width") === "auto") {
              this.width = this.height;
            }
            if (values.length > 0) {
              for (i2 = values.length; i2--; ) {
                total += values[i2];
              }
            }
            this.total = total;
            this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);
          },
          getRegion: function(el, x, y) {
            let shapeid = this.target.getShapeAt(el, x, y);
            return shapeid !== void 0 && this.shapes[shapeid] !== void 0 ? this.shapes[shapeid] : void 0;
          },
          getCurrentRegionFields: function() {
            let currentRegion = this.currentRegion;
            return {
              isNull: this.values[currentRegion] === void 0,
              value: this.values[currentRegion],
              percent: this.values[currentRegion] / this.total * 100,
              color: this.options.get("sliceColors")[currentRegion % this.options.get("sliceColors").length],
              offset: currentRegion
            };
          },
          changeHighlight: function(highlight) {
            let currentRegion = this.currentRegion, newslice = this.renderSlice(currentRegion, highlight), shapeid = this.valueShapes[currentRegion];
            delete this.shapes[shapeid];
            this.target.replaceWithShape(shapeid, newslice);
            this.valueShapes[currentRegion] = newslice.id;
            this.shapes[newslice.id] = currentRegion;
          },
          renderSlice: function(valuenum, highlight) {
            let target = this.target, options = this.options, radius = this.radius, borderWidth = options.get("borderWidth"), offset = options.get("offset"), circle = 2 * Math.PI, values = this.values, total = this.total, next = offset ? 2 * Math.PI * (offset / 360) : 0, start, end, i2, vlen, color;
            vlen = values.length;
            for (i2 = 0; i2 < vlen; i2++) {
              start = next;
              end = next;
              if (total > 0) {
                end = next + circle * (values[i2] / total);
              }
              if (valuenum === i2) {
                color = options.get("sliceColors")[i2 % options.get("sliceColors").length];
                if (highlight) {
                  color = this.calcHighlightColor(color, options);
                }
                return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, void 0, color);
              }
              next = end;
            }
          },
          render: function(el, userValues) {
            this.init(el, userValues);
            let target = this.target, values = this.values, options = this.options, radius = this.radius, borderWidth = options.get("borderWidth"), shape, i2;
            if (borderWidth) {
              target.drawCircle(radius, radius, Math.floor(radius - borderWidth / 2), options.get("borderColor"), void 0, borderWidth).append();
            }
            for (i2 = values.length; i2--; ) {
              if (values[i2]) {
                shape = this.renderSlice(i2).append();
                this.valueShapes[i2] = shape.id;
                this.shapes[shape.id] = i2;
              }
            }
          }
        },
        box: {
          type: "box",
          init: function(el, values) {
            let options = this.options;
            let width = el.mergedOptions.width;
            let height = el.mergedOptions.height;
            this.canvasWidth = el.mergedOptions.width;
            this.canvasHeight = el.mergedOptions.height;
            this.values = $.map(values, Number);
            this.width = options.get("width") === "auto" ? "4.0em" : width;
            if (!this.values.length) {
              this.disabled = 1;
            }
          },
          getRegion: function() {
            return 1;
          },
          getCurrentRegionFields: function() {
            let result = [
              {field: "lq", value: this.quartiles[0]},
              {field: "med", value: this.quartiles[1]},
              {field: "uq", value: this.quartiles[2]}
            ];
            if (this.loutlier !== void 0) {
              result.push({field: "lo", value: this.loutlier});
            }
            if (this.routlier !== void 0) {
              result.push({field: "ro", value: this.routlier});
            }
            if (this.lwhisker !== void 0) {
              result.push({field: "lw", value: this.lwhisker});
            }
            if (this.rwhisker !== void 0) {
              result.push({field: "rw", value: this.rwhisker});
            }
            return result;
          },
          render: function(el, userValues) {
            this.init(el, userValues);
            let target = this.target, values = this.values, vlen = values.length, options = this.options, canvasWidth = this.canvasWidth, canvasHeight = this.canvasHeight, minValue = options.get("chartRangeMin") === void 0 ? Math.min.apply(Math, values) : options.get("chartRangeMin"), maxValue = options.get("chartRangeMax") === void 0 ? Math.max.apply(Math, values) : options.get("chartRangeMax"), canvasLeft = 0, lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i2, size, unitSize;
            if (options.get("raw")) {
              if (options.get("showOutliers") && values.length > 5) {
                loutlier = values[0];
                lwhisker = values[1];
                q1 = values[2];
                q2 = values[3];
                q3 = values[4];
                rwhisker = values[5];
                routlier = values[6];
              } else {
                lwhisker = values[0];
                q1 = values[1];
                q2 = values[2];
                q3 = values[3];
                rwhisker = values[4];
              }
            } else {
              values.sort(function(a, b) {
                return a - b;
              });
              q1 = quartile(values, 1);
              q2 = quartile(values, 2);
              q3 = quartile(values, 3);
              iqr = q3 - q1;
              if (options.get("showOutliers")) {
                lwhisker = rwhisker = void 0;
                for (i2 = 0; i2 < vlen; i2++) {
                  if (lwhisker === void 0 && values[i2] > q1 - iqr * options.get("outlierIQR")) {
                    lwhisker = values[i2];
                  }
                  if (values[i2] < q3 + iqr * options.get("outlierIQR")) {
                    rwhisker = values[i2];
                  }
                }
                loutlier = values[0];
                routlier = values[vlen - 1];
              } else {
                lwhisker = values[0];
                rwhisker = values[vlen - 1];
              }
            }
            this.quartiles = [q1, q2, q3];
            this.lwhisker = lwhisker;
            this.rwhisker = rwhisker;
            this.loutlier = loutlier;
            this.routlier = routlier;
            unitSize = canvasWidth / (maxValue - minValue + 1);
            if (options.get("showOutliers")) {
              canvasLeft = Math.ceil(options.get("spotRadius"));
              canvasWidth -= 2 * Math.ceil(options.get("spotRadius"));
              unitSize = canvasWidth / (maxValue - minValue + 1);
              if (loutlier < lwhisker) {
                target.drawCircle((loutlier - minValue) * unitSize + canvasLeft, canvasHeight / 2, options.get("spotRadius"), options.get("outlierLineColor"), options.get("outlierFillColor")).append();
              }
              if (routlier > rwhisker) {
                target.drawCircle((routlier - minValue) * unitSize + canvasLeft, canvasHeight / 2, options.get("spotRadius"), options.get("outlierLineColor"), options.get("outlierFillColor")).append();
              }
            }
            target.drawRect(Math.round((q1 - minValue) * unitSize + canvasLeft), Math.round(canvasHeight * 0.1), Math.round((q3 - q1) * unitSize), Math.round(canvasHeight * 0.8), options.get("boxLineColor"), options.get("boxFillColor")).append();
            target.drawLine(Math.round((lwhisker - minValue) * unitSize + canvasLeft), Math.round(canvasHeight / 2), Math.round((q1 - minValue) * unitSize + canvasLeft), Math.round(canvasHeight / 2), options.get("lineColor")).append();
            target.drawLine(Math.round((lwhisker - minValue) * unitSize + canvasLeft), Math.round(canvasHeight / 4), Math.round((lwhisker - minValue) * unitSize + canvasLeft), Math.round(canvasHeight - canvasHeight / 4), options.get("whiskerColor")).append();
            target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft), Math.round(canvasHeight / 2), Math.round((q3 - minValue) * unitSize + canvasLeft), Math.round(canvasHeight / 2), options.get("lineColor")).append();
            target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft), Math.round(canvasHeight / 4), Math.round((rwhisker - minValue) * unitSize + canvasLeft), Math.round(canvasHeight - canvasHeight / 4), options.get("whiskerColor")).append();
            target.drawLine(Math.round((q2 - minValue) * unitSize + canvasLeft), Math.round(canvasHeight * 0.1), Math.round((q2 - minValue) * unitSize + canvasLeft), Math.round(canvasHeight * 0.9), options.get("medianColor")).append();
            if (options.get("target")) {
              size = Math.ceil(options.get("spotRadius"));
              target.drawLine(Math.round((options.get("target") - minValue) * unitSize + canvasLeft), Math.round(canvasHeight / 2 - size), Math.round((options.get("target") - minValue) * unitSize + canvasLeft), Math.round(canvasHeight / 2 + size), options.get("targetColor")).append();
              target.drawLine(Math.round((options.get("target") - minValue) * unitSize + canvasLeft - size), Math.round(canvasHeight / 2), Math.round((options.get("target") - minValue) * unitSize + canvasLeft + size), Math.round(canvasHeight / 2), options.get("targetColor")).append();
            }
          }
        },
        shapeCount: 0,
        shapes: {},
        shapeseq: [],
        lastShapeId: null,
        mergedOptions: null,
        init: function(userValues, userOptions) {
          let extendedOptions, defaults2, base;
          userOptions = userOptions || {};
          let _this = this;
          defaults2 = this.defaultOption;
          base = defaults2.common;
          extendedOptions = defaults2[userOptions.type || base.type];
          _this.shapeCount = 0;
          _this.shapes = {};
          _this.shapeseq = [];
          _this.lastShapeId = null;
          _this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);
          _this.mergedOptions.width = _this.mergedOptions.width;
          _this.mergedOptions.height = _this.mergedOptions.height;
          _this[_this.mergedOptions.type].render(_this, userValues);
          return {shapes: _this.shapes, shapeseq: _this.shapeseq, offsetX: _this.mergedOptions.offsetX, offsetY: _this.mergedOptions.offsetY, pixelWidth: _this.mergedOptions.width, pixelHeight: _this.mergedOptions.height};
        },
        _getContext: function(lineColor, fillColor, lineWidth) {
          let context;
          if (this.ctx != null) {
            context = this.ctx;
          } else {
            context = $("#" + this._canvasID).get(0).getContext("2d");
          }
          if (lineColor !== void 0) {
            context.strokeStyle = lineColor;
          }
          context.lineWidth = lineWidth === void 0 ? 1 : lineWidth;
          if (fillColor !== void 0) {
            context.fillStyle = fillColor;
          }
          return context;
        },
        reset: function() {
          let context = this._getContext();
          context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);
          this.shapes = {};
          this.shapeseq = [];
          this.currentTargetShapeId = void 0;
        },
        _drawShape: function(shapeid, path, lineColor, fillColor, lineWidth) {
          let context = this._getContext(lineColor, fillColor, lineWidth), i2, plen;
          context.beginPath();
          context.moveTo(path[0][0] + 0.5 + this.offsetX, path[0][1] + 0.5 + this.offsetY);
          for (i2 = 1, plen = path.length; i2 < plen; i2++) {
            context.lineTo(path[i2][0] + 0.5 + this.offsetX, path[i2][1] + 0.5 + this.offsetY);
          }
          if (lineColor !== void 0) {
            context.stroke();
          }
          if (fillColor !== void 0) {
            context.fill();
          }
          if (this.targetX !== void 0 && this.targetY !== void 0 && context.isPointInPath(this.targetX + this.offsetX, this.targetY + this.offsetY)) {
            this.currentTargetShapeId = shapeid;
          }
        },
        _drawCircle: function(shapeid, x, y, radius, lineColor, fillColor, lineWidth) {
          let context = this._getContext(lineColor, fillColor, lineWidth);
          context.beginPath();
          x += this.offsetX;
          y += this.offsetY;
          context.arc(x, y, radius, 0, 2 * Math.PI, false);
          if (this.targetX !== void 0 && this.targetY !== void 0 && context.isPointInPath(this.targetX + this.offsetX, this.targetY + this.offsetY)) {
            this.currentTargetShapeId = shapeid;
          }
          if (lineColor !== void 0) {
            context.stroke();
          }
          if (fillColor !== void 0) {
            context.fill();
          }
        },
        _drawPieSlice: function(shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {
          let context = this._getContext(lineColor, fillColor);
          x += this.offsetX;
          y += this.offsetY;
          context.beginPath();
          context.moveTo(x, y);
          context.arc(x, y, radius, startAngle, endAngle, false);
          context.lineTo(x, y);
          context.closePath();
          if (lineColor !== void 0) {
            context.stroke();
          }
          if (fillColor) {
            context.fill();
          }
          if (this.targetX !== void 0 && this.targetY !== void 0 && context.isPointInPath(this.targetX + this.offsetX, this.targetY + this.offsetY)) {
            this.currentTargetShapeId = shapeid;
          }
        },
        _drawRect: function(shapeid, x, y, width, height, lineColor, fillColor) {
          return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);
        },
        appendShape: function(shape) {
          this.shapes[shape.id] = shape;
          this.shapeseq.push(shape.id);
          this.lastShapeId = shape.id;
          return shape.id;
        },
        replaceWithShape: function(shapeid, shape) {
          let shapeseq = this.shapeseq, i2;
          this.shapes[shape.id] = shape;
          for (i2 = shapeseq.length; i2--; ) {
            if (shapeseq[i2] == shapeid) {
              shapeseq[i2] = shape.id;
            }
          }
          delete this.shapes[shapeid];
        },
        replaceWithShapes: function(shapeids, shapes) {
          let shapeseq = this.shapeseq, shapemap = {}, sid, i2, first;
          for (i2 = shapeids.length; i2--; ) {
            shapemap[shapeids[i2]] = true;
          }
          for (i2 = shapeseq.length; i2--; ) {
            sid = shapeseq[i2];
            if (shapemap[sid]) {
              shapeseq.splice(i2, 1);
              delete this.shapes[sid];
              first = i2;
            }
          }
          for (i2 = shapes.length; i2--; ) {
            shapeseq.splice(first, 0, shapes[i2].id);
            this.shapes[shapes[i2].id] = shapes[i2];
          }
        },
        insertAfterShape: function(shapeid, shape) {
          let shapeseq = this.shapeseq, i2;
          for (i2 = shapeseq.length; i2--; ) {
            if (shapeseq[i2] === shapeid) {
              shapeseq.splice(i2 + 1, 0, shape.id);
              this.shapes[shape.id] = shape;
              return;
            }
          }
        },
        removeShapeId: function(shapeid) {
          let shapeseq = this.shapeseq, i2;
          for (i2 = shapeseq.length; i2--; ) {
            if (shapeseq[i2] === shapeid) {
              shapeseq.splice(i2, 1);
              break;
            }
          }
          delete this.shapes[shapeid];
        },
        getShapeAt: function(el, x, y) {
          this.targetX = x;
          this.targetY = y;
          this.render();
          return this.currentTargetShapeId;
        },
        _canvasID: "luckysheetTableContent",
        render: function(shapeseq, shapes, offsetX, offsetY, pixelWidth, pixelHeight, canvasid, ctx) {
          if (canvasid == null) {
            canvasid = "luckysheetTableContent";
          }
          this._canvasID = canvasid;
          if (ctx != null) {
            this.ctx = ctx;
          }
          let shapeCount = shapeseq.length, context = this._getContext(), shapeid, shape, i2;
          this.offsetX = offsetX;
          this.offsetY = offsetY;
          this.pixelWidth = pixelWidth;
          this.pixelHeight = pixelHeight;
          for (i2 = 0; i2 < shapeCount; i2++) {
            shapeid = shapeseq[i2];
            shape = shapes[shapeid];
            this["_draw" + shape.type].apply(this, shape.args);
          }
        },
        drawLine: function(x1, y1, x2, y2, lineColor, lineWidth) {
          return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);
        },
        drawShape: function(path, lineColor, fillColor, lineWidth) {
          return this._genShape("Shape", [path, lineColor, fillColor, lineWidth]);
        },
        drawCircle: function(x, y, radius, lineColor, fillColor, lineWidth) {
          return this._genShape("Circle", [x, y, radius, lineColor, fillColor, lineWidth]);
        },
        drawPieSlice: function(x, y, radius, startAngle, endAngle, lineColor, fillColor) {
          return this._genShape("PieSlice", [x, y, radius, startAngle, endAngle, lineColor, fillColor]);
        },
        drawRect: function(x, y, width, height, lineColor, fillColor) {
          return this._genShape("Rect", [x, y, width, height, lineColor, fillColor]);
        },
        _genShape: function(shapetype, shapeargs) {
          let id = this.shapeCount++;
          shapeargs.unshift(id);
          let shape = {id, type: shapetype, args: shapeargs};
          this.shapes[id] = shape;
          this.shapeseq.push(id);
          this.lastShapeId = id;
          return {
            append: function() {
              return shape;
            },
            get: function() {
              return id;
            }
          };
        }
      };
      barHighlightMixin = {
        changeHighlight: function(highlight) {
          let currentRegion = this.currentRegion, target = this.target, shapeids = this.regionShapes[currentRegion], newShapes;
          if (shapeids) {
            newShapes = this.renderRegion(currentRegion, highlight);
            if ($.isArray(newShapes) || $.isArray(shapeids)) {
              target.replaceWithShapes(shapeids, newShapes);
              this.regionShapes[currentRegion] = $.map(newShapes, function(newShape) {
                return newShape.id;
              });
            } else {
              target.replaceWithShape(shapeids, newShapes);
              this.regionShapes[currentRegion] = newShapes.id;
            }
          }
        },
        render: function(el, userValues) {
          this.init(el, userValues);
          let values = this.values, target = this.target, regionShapes = this.regionShapes, shapes, ids, i2, j;
          for (i2 = values.length; i2--; ) {
            shapes = this.renderRegion(i2);
            if (shapes) {
              if ($.isArray(shapes)) {
                ids = [];
                for (j = shapes.length; j--; ) {
                  shapes[j].append();
                  ids.push(shapes[j].id);
                }
                regionShapes[i2] = ids;
              } else {
                shapes.append();
                regionShapes[i2] = shapes.id;
              }
            } else {
              regionShapes[i2] = null;
            }
          }
        }
      };
      _luckysheetSparkLineOptions = {
        get: function(type) {
          return luckysheetSparkline.mergedOptions[type];
        }
      };
      _luckysheetSparkLineTarget = {
        drawLine: function(x1, y1, x2, y2, lineColor, lineWidth) {
          return luckysheetSparkline.drawLine(x1, y1, x2, y2, lineColor, lineWidth);
        },
        drawShape: function(path, lineColor, fillColor, lineWidth) {
          return luckysheetSparkline.drawShape(path, lineColor, fillColor, lineWidth);
        },
        drawCircle: function(x, y, radius, lineColor, fillColor, lineWidth) {
          return luckysheetSparkline.drawCircle(x, y, radius, lineColor, fillColor, lineWidth);
        },
        drawPieSlice: function(x, y, radius, startAngle, endAngle, lineColor, fillColor) {
          return luckysheetSparkline.drawPieSlice(x, y, radius, startAngle, endAngle, lineColor, fillColor);
        },
        drawRect: function(x, y, width, height, lineColor, fillColor) {
          return luckysheetSparkline.drawRect(x, y, width, height, lineColor, fillColor);
        }
      };
      for (let item2 in luckysheetSparkline) {
        if (item2 in {"line": null, "bar": null, "column": null, "tristate": null, "discrete": null, "bullet": null, "pie": null, "box": null}) {
          luckysheetSparkline[item2].options = _luckysheetSparkLineOptions;
          luckysheetSparkline[item2].target = _luckysheetSparkLineTarget;
        }
        if (item2 in {"bar": null, "column": null, "tristate": null, "discrete": null}) {
          luckysheetSparkline[item2].changeHighlight = barHighlightMixin.changeHighlight;
          luckysheetSparkline[item2].render = barHighlightMixin.render;
        }
      }
      sparkline_default = luckysheetSparkline;
    }
  });

  // src/global/draw.js
  function luckysheetDrawgridRowTitle(scrollHeight, drawHeight, offsetTop) {
    if (scrollHeight == null) {
      scrollHeight = $("#luckysheet-cell-main").scrollTop();
    }
    if (drawHeight == null) {
      drawHeight = store_default.luckysheetTableContentHW[1];
    }
    if (offsetTop == null) {
      offsetTop = store_default.columnHeaderHeight;
    }
    let luckysheetTableContent = $("#luckysheetTableContent").get(0).getContext("2d");
    luckysheetTableContent.save();
    luckysheetTableContent.scale(store_default.devicePixelRatio, store_default.devicePixelRatio);
    luckysheetTableContent.clearRect(0, offsetTop, store_default.rowHeaderWidth - 1, drawHeight);
    luckysheetTableContent.font = luckysheetdefaultFont();
    luckysheetTableContent.textBaseline = luckysheetdefaultstyle.textBaseline;
    luckysheetTableContent.fillStyle = luckysheetdefaultstyle.fillStyle;
    let dataset_row_st, dataset_row_ed;
    dataset_row_st = luckysheet_searcharray(store_default.visibledatarow, scrollHeight);
    dataset_row_ed = luckysheet_searcharray(store_default.visibledatarow, scrollHeight + drawHeight);
    if (dataset_row_st == -1) {
      dataset_row_st = 0;
    }
    if (dataset_row_ed == -1) {
      dataset_row_ed = store_default.visibledatarow.length - 1;
    }
    luckysheetTableContent.save();
    luckysheetTableContent.beginPath();
    luckysheetTableContent.rect(0, offsetTop - 1, store_default.rowHeaderWidth - 1, drawHeight - 2);
    luckysheetTableContent.clip();
    let end_r, start_r;
    let bodrder05 = 0.5;
    let preEndR;
    for (let r2 = dataset_row_st; r2 <= dataset_row_ed; r2++) {
      if (r2 == 0) {
        start_r = -scrollHeight - 1;
      } else {
        start_r = store_default.visibledatarow[r2 - 1] - scrollHeight - 1;
      }
      end_r = store_default.visibledatarow[r2] - scrollHeight;
      let firstOffset = dataset_row_st == r2 ? -2 : 0;
      let lastOffset = dataset_row_ed == r2 ? -2 : 0;
      if (!method_default.createHookFunction("rowTitleCellRenderBefore", r2 + 1, {
        r: r2,
        top: start_r + offsetTop + firstOffset,
        width: store_default.rowHeaderWidth - 1,
        height: end_r - start_r + 1 + lastOffset - firstOffset
      }, luckysheetTableContent)) {
        continue;
      }
      if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][r2] != null) {
      } else {
        luckysheetTableContent.fillStyle = "#ffffff";
        luckysheetTableContent.fillRect(0, start_r + offsetTop + firstOffset, store_default.rowHeaderWidth - 1, end_r - start_r + 1 + lastOffset - firstOffset);
        luckysheetTableContent.fillStyle = "#000000";
        luckysheetTableContent.save();
        luckysheetTableContent.scale(store_default.zoomRatio, store_default.zoomRatio);
        let textMetrics = getMeasureText(r2 + 1, luckysheetTableContent);
        let horizonAlignPos = (store_default.rowHeaderWidth - textMetrics.width) / 2;
        let verticalAlignPos = start_r + (end_r - start_r) / 2 + offsetTop;
        luckysheetTableContent.fillText(r2 + 1, horizonAlignPos / store_default.zoomRatio, verticalAlignPos / store_default.zoomRatio);
        luckysheetTableContent.restore();
      }
      luckysheetTableContent.beginPath();
      luckysheetTableContent.moveTo(store_default.rowHeaderWidth - 2 + bodrder05, start_r + offsetTop - 2);
      luckysheetTableContent.lineTo(store_default.rowHeaderWidth - 2 + bodrder05, end_r + offsetTop - 2);
      luckysheetTableContent.lineWidth = 1;
      luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
      luckysheetTableContent.stroke();
      luckysheetTableContent.closePath();
      if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][r2] == null && store_default.config["rowhidden"][r2 + 1] != null) {
        luckysheetTableContent.beginPath();
        luckysheetTableContent.moveTo(-1, end_r + offsetTop - 4 + bodrder05);
        luckysheetTableContent.lineTo(store_default.rowHeaderWidth - 1, end_r + offsetTop - 4 + bodrder05);
        luckysheetTableContent.closePath();
        luckysheetTableContent.stroke();
      } else if (store_default.config["rowhidden"] == null || store_default.config["rowhidden"][r2] == null) {
        luckysheetTableContent.beginPath();
        luckysheetTableContent.moveTo(-1, end_r + offsetTop - 2 + bodrder05);
        luckysheetTableContent.lineTo(store_default.rowHeaderWidth - 1, end_r + offsetTop - 2 + bodrder05);
        luckysheetTableContent.closePath();
        luckysheetTableContent.stroke();
      }
      if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][r2 - 1] != null && preEndR != null) {
        luckysheetTableContent.beginPath();
        luckysheetTableContent.moveTo(-1, preEndR + offsetTop + bodrder05);
        luckysheetTableContent.lineTo(store_default.rowHeaderWidth - 1, preEndR + offsetTop + bodrder05);
        luckysheetTableContent.closePath();
        luckysheetTableContent.stroke();
      }
      preEndR = end_r;
      method_default.createHookFunction("rowTitleCellRenderAfter", r2 + 1, {
        r: r2,
        top: start_r + offsetTop + firstOffset,
        width: store_default.rowHeaderWidth - 1,
        height: end_r - start_r + 1 + lastOffset - firstOffset
      }, luckysheetTableContent);
    }
    luckysheetTableContent.restore();
    luckysheetTableContent.restore();
  }
  function luckysheetDrawgridColumnTitle(scrollWidth, drawWidth, offsetLeft) {
    if (scrollWidth == null) {
      scrollWidth = $("#luckysheet-cell-main").scrollLeft();
    }
    if (drawWidth == null) {
      drawWidth = store_default.luckysheetTableContentHW[0];
    }
    if (offsetLeft == null) {
      offsetLeft = store_default.rowHeaderWidth;
    }
    let luckysheetTableContent = $("#luckysheetTableContent").get(0).getContext("2d");
    luckysheetTableContent.save();
    luckysheetTableContent.scale(store_default.devicePixelRatio, store_default.devicePixelRatio);
    luckysheetTableContent.clearRect(offsetLeft, 0, drawWidth, store_default.columnHeaderHeight - 1);
    luckysheetTableContent.font = luckysheetdefaultFont();
    luckysheetTableContent.textBaseline = luckysheetdefaultstyle.textBaseline;
    luckysheetTableContent.fillStyle = luckysheetdefaultstyle.fillStyle;
    let dataset_col_st, dataset_col_ed;
    dataset_col_st = luckysheet_searcharray(store_default.visibledatacolumn, scrollWidth);
    dataset_col_ed = luckysheet_searcharray(store_default.visibledatacolumn, scrollWidth + drawWidth);
    if (dataset_col_st == -1) {
      dataset_col_st = 0;
    }
    if (dataset_col_ed == -1) {
      dataset_col_ed = store_default.visibledatacolumn.length - 1;
    }
    luckysheetTableContent.save();
    luckysheetTableContent.beginPath();
    luckysheetTableContent.rect(offsetLeft - 1, 0, drawWidth, store_default.columnHeaderHeight - 1);
    luckysheetTableContent.clip();
    let end_c, start_c;
    let bodrder05 = 0.5;
    let preEndC;
    for (let c2 = dataset_col_st; c2 <= dataset_col_ed; c2++) {
      if (c2 == 0) {
        start_c = -scrollWidth;
      } else {
        start_c = store_default.visibledatacolumn[c2 - 1] - scrollWidth;
      }
      end_c = store_default.visibledatacolumn[c2] - scrollWidth;
      let abc = chatatABC(c2);
      if (!method_default.createHookFunction("columnTitleCellRenderBefore", abc, {
        c: c2,
        left: start_c + offsetLeft - 1,
        width: end_c - start_c,
        height: store_default.columnHeaderHeight - 1
      }, luckysheetTableContent)) {
        continue;
      }
      if (store_default.config["colhidden"] != null && store_default.config["colhidden"][c2] != null) {
      } else {
        luckysheetTableContent.fillStyle = "#ffffff";
        luckysheetTableContent.fillRect(start_c + offsetLeft - 1, 0, end_c - start_c, store_default.columnHeaderHeight - 1);
        luckysheetTableContent.fillStyle = "#000000";
        luckysheetTableContent.save();
        luckysheetTableContent.scale(store_default.zoomRatio, store_default.zoomRatio);
        let textMetrics = getMeasureText(abc, luckysheetTableContent);
        let horizonAlignPos = Math.round(start_c + (end_c - start_c) / 2 + offsetLeft - textMetrics.width / 2);
        let verticalAlignPos = Math.round(store_default.columnHeaderHeight / 2);
        luckysheetTableContent.fillText(abc, horizonAlignPos / store_default.zoomRatio, verticalAlignPos / store_default.zoomRatio);
        luckysheetTableContent.restore();
      }
      if (store_default.config["colhidden"] != null && store_default.config["colhidden"][c2] == null && store_default.config["colhidden"][c2 + 1] != null) {
        luckysheetTableContent.beginPath();
        luckysheetTableContent.moveTo(end_c + offsetLeft - 4 + bodrder05, 0);
        luckysheetTableContent.lineTo(end_c + offsetLeft - 4 + bodrder05, store_default.columnHeaderHeight - 2);
        luckysheetTableContent.lineWidth = 1;
        luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
        luckysheetTableContent.closePath();
        luckysheetTableContent.stroke();
      } else if (store_default.config["colhidden"] == null || store_default.config["colhidden"][c2] == null) {
        luckysheetTableContent.beginPath();
        luckysheetTableContent.moveTo(end_c + offsetLeft - 2 + bodrder05, 0);
        luckysheetTableContent.lineTo(end_c + offsetLeft - 2 + bodrder05, store_default.columnHeaderHeight - 2);
        luckysheetTableContent.lineWidth = 1;
        luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
        luckysheetTableContent.closePath();
        luckysheetTableContent.stroke();
      }
      if (store_default.config["colhidden"] != null && store_default.config["colhidden"][c2 - 1] != null && preEndC != null) {
        luckysheetTableContent.beginPath();
        luckysheetTableContent.moveTo(preEndC + offsetLeft + bodrder05, 0);
        luckysheetTableContent.lineTo(preEndC + offsetLeft + bodrder05, store_default.columnHeaderHeight - 2);
        luckysheetTableContent.closePath();
        luckysheetTableContent.stroke();
      }
      luckysheetTableContent.beginPath();
      luckysheetTableContent.moveTo(start_c + offsetLeft - 1, store_default.columnHeaderHeight - 2 + bodrder05);
      luckysheetTableContent.lineTo(end_c + offsetLeft - 1, store_default.columnHeaderHeight - 2 + bodrder05);
      luckysheetTableContent.stroke();
      luckysheetTableContent.closePath();
      preEndC = end_c;
      method_default.createHookFunction("columnTitleCellRenderAfter", abc, {
        c: c2,
        left: start_c + offsetLeft - 1,
        width: end_c - start_c,
        height: store_default.columnHeaderHeight - 1
      }, luckysheetTableContent);
    }
    luckysheetTableContent.restore();
    luckysheetTableContent.restore();
  }
  function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, offsetLeft, offsetTop, columnOffsetCell, rowOffsetCell, mycanvas) {
    if (store_default.flowdata == null) {
      return;
    }
    let sheetFile = sheetmanage_default.getSheetByIndex();
    clearTimeout(store_default.measureTextCacheTimeOut);
    if (scrollWidth == null) {
      scrollWidth = $("#luckysheet-cell-main").scrollLeft();
    }
    if (scrollHeight == null) {
      scrollHeight = $("#luckysheet-cell-main").scrollTop();
    }
    if (drawWidth == null) {
      drawWidth = store_default.luckysheetTableContentHW[0];
    }
    if (drawHeight == null) {
      drawHeight = store_default.luckysheetTableContentHW[1];
    }
    if (offsetLeft == null) {
      offsetLeft = store_default.rowHeaderWidth;
    }
    if (offsetTop == null) {
      offsetTop = store_default.columnHeaderHeight;
    }
    if (columnOffsetCell == null) {
      columnOffsetCell = 0;
    }
    if (rowOffsetCell == null) {
      rowOffsetCell = 0;
    }
    let luckysheetTableContent = null;
    if (mycanvas == null) {
      luckysheetTableContent = $("#luckysheetTableContent").get(0).getContext("2d");
    } else {
      if (getObjType(mycanvas) == "object") {
        try {
          luckysheetTableContent = mycanvas.get(0).getContext("2d");
        } catch (err) {
          luckysheetTableContent = mycanvas;
        }
      } else {
        luckysheetTableContent = $("#" + mycanvas).get(0).getContext("2d");
      }
    }
    luckysheetTableContent.save();
    luckysheetTableContent.scale(store_default.devicePixelRatio, store_default.devicePixelRatio);
    luckysheetTableContent.clearRect(0, 0, store_default.luckysheetTableContentHW[0], store_default.luckysheetTableContentHW[1]);
    let dataset_row_st, dataset_row_ed, dataset_col_st, dataset_col_ed;
    dataset_row_st = luckysheet_searcharray(store_default.visibledatarow, scrollHeight);
    dataset_row_ed = luckysheet_searcharray(store_default.visibledatarow, scrollHeight + drawHeight);
    if (dataset_row_st == -1) {
      dataset_row_st = 0;
    }
    dataset_row_st += rowOffsetCell;
    if (dataset_row_ed == -1) {
      dataset_row_ed = store_default.visibledatarow.length - 1;
    }
    dataset_row_ed += rowOffsetCell;
    if (dataset_row_ed >= store_default.visibledatarow.length) {
      dataset_row_ed = store_default.visibledatarow.length - 1;
    }
    dataset_col_st = luckysheet_searcharray(store_default.visibledatacolumn, scrollWidth);
    dataset_col_ed = luckysheet_searcharray(store_default.visibledatacolumn, scrollWidth + drawWidth);
    if (dataset_col_st == -1) {
      dataset_col_st = 0;
    }
    dataset_col_st += columnOffsetCell;
    if (dataset_col_ed == -1) {
      dataset_col_ed = store_default.visibledatacolumn.length - 1;
    }
    dataset_col_ed += columnOffsetCell;
    if (dataset_col_ed >= store_default.visibledatacolumn.length) {
      dataset_col_ed = store_default.visibledatacolumn.length - 1;
    }
    let fill_row_st, fill_row_ed, fill_col_st, fill_col_ed;
    if (dataset_row_st == 0) {
      fill_row_st = 0;
    } else {
      fill_row_st = store_default.visibledatarow[dataset_row_st - 1];
    }
    fill_row_ed = store_default.visibledatarow[dataset_row_ed];
    if (dataset_col_st == 0) {
      fill_col_st = 0;
    } else {
      fill_col_st = store_default.visibledatacolumn[dataset_col_st - 1];
    }
    fill_col_ed = store_default.visibledatacolumn[dataset_col_ed];
    luckysheetTableContent.fillStyle = "#ffffff";
    luckysheetTableContent.fillRect(offsetLeft - 1, offsetTop - 1, fill_col_ed - scrollWidth, fill_row_ed - scrollHeight);
    luckysheetTableContent.font = luckysheetdefaultFont();
    luckysheetTableContent.fillStyle = luckysheetdefaultstyle.fillStyle;
    let cellupdate = [];
    let mergeCache = {};
    let borderOffset = {};
    let bodrder05 = 0.5;
    method_default.createHookFunction("cellAllRenderBefore", store_default.flowdata, sheetFile, luckysheetTableContent);
    for (let r2 = dataset_row_st; r2 <= dataset_row_ed; r2++) {
      let start_r;
      if (r2 == 0) {
        start_r = -scrollHeight - 1;
      } else {
        start_r = store_default.visibledatarow[r2 - 1] - scrollHeight - 1;
      }
      let end_r = store_default.visibledatarow[r2] - scrollHeight;
      if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][r2] != null) {
        continue;
      }
      for (let c2 = dataset_col_st; c2 <= dataset_col_ed; c2++) {
        let start_c;
        if (c2 == 0) {
          start_c = -scrollWidth;
        } else {
          start_c = store_default.visibledatacolumn[c2 - 1] - scrollWidth;
        }
        let end_c = store_default.visibledatacolumn[c2] - scrollWidth;
        if (store_default.config["colhidden"] != null && store_default.config["colhidden"][c2] != null) {
          continue;
        }
        let firstcolumnlen = store_default.defaultcollen;
        if (store_default.config["columnlen"] != null && store_default.config["columnlen"][c2] != null) {
          firstcolumnlen = store_default.config["columnlen"][c2];
        }
        if (store_default.flowdata[r2] != null && store_default.flowdata[r2][c2] != null) {
          let value = store_default.flowdata[r2][c2];
          if (getObjType(value) == "object" && "mc" in value) {
            borderOffset[r2 + "_" + c2] = {
              "start_r": start_r,
              "start_c": start_c,
              "end_r": end_r,
              "end_c": end_c
            };
            if ("rs" in value["mc"]) {
              let key = "r" + r2 + "c" + c2;
              mergeCache[key] = cellupdate.length;
            } else {
              let key = "r" + value["mc"].r + "c" + value["mc"].c;
              let margeMain = cellupdate[mergeCache[key]];
              if (margeMain == null) {
                mergeCache[key] = cellupdate.length;
                cellupdate.push({
                  "r": r2,
                  "c": c2,
                  "start_c": start_c,
                  "start_r": start_r,
                  "end_r": end_r,
                  "end_c": end_c,
                  "firstcolumnlen": firstcolumnlen
                });
              } else {
                if (margeMain.c == c2) {
                  margeMain.end_r += end_r - start_r - 1;
                }
                if (margeMain.r == r2) {
                  margeMain.end_c += end_c - start_c;
                  margeMain.firstcolumnlen += firstcolumnlen;
                }
              }
              continue;
            }
          }
        } else {
        }
        cellupdate.push({
          "r": r2,
          "c": c2,
          "start_r": start_r,
          "start_c": start_c,
          "end_r": end_r,
          "end_c": end_c,
          "firstcolumnlen": firstcolumnlen
        });
        borderOffset[r2 + "_" + c2] = {
          "start_r": start_r,
          "start_c": start_c,
          "end_r": end_r,
          "end_c": end_c
        };
      }
    }
    let dynamicArray_compute = dynamicArrayCompute(store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["dynamicArray"]);
    let af_compute = alternateformat_default.getComputeMap();
    let cf_compute = conditionformat_default.getComputeMap();
    let cellOverflowMap = getCellOverflowMap(luckysheetTableContent, dataset_col_st, dataset_col_ed, dataset_row_st, dataset_row_ed);
    let mcArr = [];
    for (let cud = 0; cud < cellupdate.length; cud++) {
      let item2 = cellupdate[cud];
      let r2 = item2.r, c2 = item2.c, start_r = item2.start_r, start_c = item2.start_c, end_r = item2.end_r, end_c = item2.end_c;
      let firstcolumnlen = item2.firstcolumnlen;
      if (store_default.flowdata[r2] == null) {
        continue;
      }
      if (store_default.flowdata[r2][c2] == null) {
        nullCellRender(r2, c2, start_r, start_c, end_r, end_c, luckysheetTableContent, af_compute, cf_compute, offsetLeft, offsetTop, dynamicArray_compute, cellOverflowMap, dataset_col_st, dataset_col_ed, scrollHeight, scrollWidth, bodrder05);
      } else {
        let cell = store_default.flowdata[r2][c2];
        let value = null;
        if (typeof cell == "object" && "mc" in cell) {
          mcArr.push(cellupdate[cud]);
        } else {
          value = getRealCellValue(r2, c2);
        }
        if (value == null || value.toString().length == 0) {
          nullCellRender(r2, c2, start_r, start_c, end_r, end_c, luckysheetTableContent, af_compute, cf_compute, offsetLeft, offsetTop, dynamicArray_compute, cellOverflowMap, dataset_col_st, dataset_col_ed, scrollHeight, scrollWidth, bodrder05);
          let borderfix = menuButton_default.borderfix(store_default.flowdata, r2, c2);
          let cellsize = [
            start_c + offsetLeft + borderfix[0],
            start_r + offsetTop + borderfix[1],
            end_c - start_c - 3 + borderfix[2],
            end_r - start_r - 3 - 1 + borderfix[3]
          ];
          sparklinesRender(r2, c2, cellsize[0], cellsize[1], "luckysheetTableContent", luckysheetTableContent);
        } else {
          if (r2 + "_" + c2 in dynamicArray_compute) {
            value = dynamicArray_compute[r2 + "_" + c2].v;
          }
          cellRender(r2, c2, start_r, start_c, end_r, end_c, value, luckysheetTableContent, af_compute, cf_compute, offsetLeft, offsetTop, dynamicArray_compute, cellOverflowMap, dataset_col_st, dataset_col_ed, scrollHeight, scrollWidth, bodrder05);
        }
      }
    }
    for (let m = 0; m < mcArr.length; m++) {
      let item2 = mcArr[m];
      let r2 = item2.r, c2 = item2.c, start_r = item2.start_r, start_c = item2.start_c, end_r = item2.end_r - 1, end_c = item2.end_c - 1;
      let firstcolumnlen = item2.firstcolumnlen;
      let cell = store_default.flowdata[r2][c2];
      let value = null;
      let margeMaindata = cell["mc"];
      value = getRealCellValue(margeMaindata.r, margeMaindata.c);
      r2 = margeMaindata.r;
      c2 = margeMaindata.c;
      let mainCell = store_default.flowdata[r2][c2];
      if (c2 == 0) {
        start_c = -scrollWidth;
      } else {
        start_c = store_default.visibledatacolumn[c2 - 1] - scrollWidth;
      }
      if (r2 == 0) {
        start_r = -scrollHeight - 1;
      } else {
        start_r = store_default.visibledatarow[r2 - 1] - scrollHeight - 1;
      }
      end_r = store_default.visibledatarow[r2 + mainCell["mc"].rs - 1] - scrollHeight;
      end_c = store_default.visibledatacolumn[c2 + mainCell["mc"].cs - 1] - scrollWidth;
      if (value == null || value.toString().length == 0) {
        nullCellRender(r2, c2, start_r, start_c, end_r, end_c, luckysheetTableContent, af_compute, cf_compute, offsetLeft, offsetTop, dynamicArray_compute, cellOverflowMap, dataset_col_st, dataset_col_ed, scrollHeight, scrollWidth, bodrder05, true);
        let borderfix = menuButton_default.borderfix(store_default.flowdata, r2, c2);
        let cellsize = [
          start_c + offsetLeft + borderfix[0],
          start_r + offsetTop + borderfix[1],
          end_c - start_c - 3 + borderfix[2],
          end_r - start_r - 3 - 1 + borderfix[3]
        ];
        sparklinesRender(r2, c2, cellsize[0], cellsize[1], "luckysheetTableContent", luckysheetTableContent);
      } else {
        if (r2 + "_" + c2 in dynamicArray_compute) {
          value = dynamicArray_compute[r2 + "_" + c2].v;
        }
        cellRender(r2, c2, start_r, start_c, end_r, end_c, value, luckysheetTableContent, af_compute, cf_compute, offsetLeft, offsetTop, dynamicArray_compute, cellOverflowMap, dataset_col_st, dataset_col_ed, scrollHeight, scrollWidth, bodrder05, true);
      }
    }
    for (let r2 = dataset_row_st; r2 <= dataset_row_ed; r2++) {
      let start_r;
      if (r2 == 0) {
        start_r = -scrollHeight - 1;
      } else {
        start_r = store_default.visibledatarow[r2 - 1] - scrollHeight - 1;
      }
      let end_r = store_default.visibledatarow[r2] - scrollHeight;
      for (let c2 = dataset_col_st; c2 <= dataset_col_ed; c2++) {
        let start_c;
        if (c2 == 0) {
          start_c = -scrollWidth;
        } else {
          start_c = store_default.visibledatacolumn[c2 - 1] - scrollWidth;
        }
        let end_c = store_default.visibledatacolumn[c2] - scrollWidth;
        if (!!store_default.luckysheetcurrentisPivotTable && pivotTable_default.drawPivotTable) {
          if ((c2 == 0 || c2 == 5) && r2 <= 11) {
            luckysheetTableContent.beginPath();
            luckysheetTableContent.moveTo(end_c - 2 + bodrder05 + offsetLeft, start_r + offsetTop);
            luckysheetTableContent.lineTo(end_c - 2 + bodrder05 + offsetLeft, end_r - 2 + bodrder05 + offsetTop);
            luckysheetTableContent.lineWidth = 1;
            luckysheetTableContent.strokeStyle = "#000000";
            luckysheetTableContent.closePath();
            luckysheetTableContent.stroke();
          }
          if ((r2 == 2 || r2 == 11) && c2 <= 5) {
            luckysheetTableContent.beginPath();
            luckysheetTableContent.moveTo(start_c - 1 + offsetLeft, end_r - 2 + bodrder05 + offsetTop);
            luckysheetTableContent.lineTo(end_c - 2 + bodrder05 + offsetLeft, end_r - 2 + bodrder05 + offsetTop);
            luckysheetTableContent.lineWidth = 1;
            luckysheetTableContent.strokeStyle = "#000000";
            luckysheetTableContent.closePath();
            luckysheetTableContent.stroke();
          }
          if (r2 == 6 && c2 == 3) {
            luckysheetTableContent.save();
            luckysheetTableContent.font = "bold 30px Arial";
            luckysheetTableContent.fillStyle = "#626675";
            luckysheetTableContent.textAlign = "center";
            luckysheetTableContent.fillText(locale_default().pivotTable.title, start_c + (end_c - start_c) / 2 + 4 + offsetLeft, start_r + (end_r - start_r) / 2 - 1 + offsetTop);
            luckysheetTableContent.restore();
          }
        } else if (!!store_default.luckysheetcurrentisPivotTable) {
          if (c2 < pivotTable_default.pivotTableBoundary[1] && r2 < pivotTable_default.pivotTableBoundary[0]) {
            luckysheetTableContent.beginPath();
            luckysheetTableContent.moveTo(end_c - 2 + bodrder05 + offsetLeft, start_r + offsetTop);
            luckysheetTableContent.lineTo(end_c - 2 + bodrder05 + offsetLeft, end_r - 2 + bodrder05 + offsetTop);
            luckysheetTableContent.lineWidth = 1;
            luckysheetTableContent.strokeStyle = "#000000";
            luckysheetTableContent.closePath();
            luckysheetTableContent.stroke();
            luckysheetTableContent.beginPath();
            luckysheetTableContent.moveTo(start_c - 1 + offsetLeft, end_r - 2 + bodrder05 + offsetTop);
            luckysheetTableContent.lineTo(end_c - 2 + offsetLeft, end_r - 2 + bodrder05 + offsetTop);
            luckysheetTableContent.lineWidth = 1;
            luckysheetTableContent.strokeStyle = "#000000";
            luckysheetTableContent.closePath();
            luckysheetTableContent.stroke();
          }
        }
      }
    }
    if (store_default.config["borderInfo"] != null && store_default.config["borderInfo"].length > 0) {
      let borderLeftRender = function(style, color, start_r, start_c, end_r, end_c, offsetLeft2, offsetTop2, canvas) {
        let linetype = style;
        let m_st = start_c - 2 + bodrder05 + offsetLeft2;
        let m_ed = start_r + offsetTop2 - 1;
        let line_st = start_c - 2 + bodrder05 + offsetLeft2;
        let line_ed = end_r - 2 + bodrder05 + offsetTop2;
        canvas.save();
        menuButton_default.setLineDash(canvas, linetype, "v", m_st, m_ed, line_st, line_ed);
        canvas.strokeStyle = color;
        canvas.stroke();
        canvas.closePath();
        canvas.restore();
      };
      let borderRightRender = function(style, color, start_r, start_c, end_r, end_c, offsetLeft2, offsetTop2, canvas) {
        let linetype = style;
        let m_st = end_c - 2 + bodrder05 + offsetLeft2;
        let m_ed = start_r + offsetTop2 - 1;
        let line_st = end_c - 2 + bodrder05 + offsetLeft2;
        let line_ed = end_r - 2 + bodrder05 + offsetTop2;
        canvas.save();
        menuButton_default.setLineDash(canvas, linetype, "v", m_st, m_ed, line_st, line_ed);
        canvas.strokeStyle = color;
        canvas.stroke();
        canvas.closePath();
        canvas.restore();
      };
      let borderBottomRender = function(style, color, start_r, start_c, end_r, end_c, offsetLeft2, offsetTop2, canvas) {
        let linetype = style;
        let m_st = start_c - 2 + bodrder05 + offsetLeft2;
        let m_ed = end_r - 2 + bodrder05 + offsetTop2;
        let line_st = end_c - 2 + bodrder05 + offsetLeft2;
        let line_ed = end_r - 2 + bodrder05 + offsetTop2;
        canvas.save();
        menuButton_default.setLineDash(canvas, linetype, "h", m_st, m_ed, line_st, line_ed);
        canvas.strokeStyle = color;
        canvas.stroke();
        canvas.closePath();
        canvas.restore();
      };
      let borderTopRender = function(style, color, start_r, start_c, end_r, end_c, offsetLeft2, offsetTop2, canvas) {
        let linetype = style;
        let m_st = start_c - 2 + bodrder05 + offsetLeft2;
        let m_ed = start_r - 1 + bodrder05 + offsetTop2;
        let line_st = end_c - 2 + bodrder05 + offsetLeft2;
        let line_ed = start_r - 1 + bodrder05 + offsetTop2;
        canvas.save();
        menuButton_default.setLineDash(canvas, linetype, "h", m_st, m_ed, line_st, line_ed);
        canvas.strokeStyle = color;
        canvas.stroke();
        canvas.closePath();
        canvas.restore();
      };
      let borderInfoCompute = getBorderInfoComputeRange(dataset_row_st, dataset_row_ed, dataset_col_st, dataset_col_ed);
      for (let x in borderInfoCompute) {
        let bd_r = x.substr(0, x.indexOf("_"));
        let bd_c = x.substr(x.indexOf("_") + 1);
        if (borderOffset[bd_r + "_" + bd_c]) {
          let start_r = borderOffset[bd_r + "_" + bd_c].start_r;
          let start_c = borderOffset[bd_r + "_" + bd_c].start_c;
          let end_r = borderOffset[bd_r + "_" + bd_c].end_r;
          let end_c = borderOffset[bd_r + "_" + bd_c].end_c;
          let cellOverflow_colInObj = cellOverflow_colIn(cellOverflowMap, bd_r, bd_c, dataset_col_st, dataset_col_ed);
          let borderLeft = borderInfoCompute[x].l;
          if (borderLeft != null && (!cellOverflow_colInObj.colIn || cellOverflow_colInObj.stc == bd_c)) {
            borderLeftRender(borderLeft.style, borderLeft.color, start_r, start_c, end_r, end_c, offsetLeft, offsetTop, luckysheetTableContent);
          }
          let borderRight = borderInfoCompute[x].r;
          if (borderRight != null && (!cellOverflow_colInObj.colIn || cellOverflow_colInObj.colLast)) {
            borderRightRender(borderRight.style, borderRight.color, start_r, start_c, end_r, end_c, offsetLeft, offsetTop, luckysheetTableContent);
          }
          let borderTop = borderInfoCompute[x].t;
          if (borderTop != null) {
            borderTopRender(borderTop.style, borderTop.color, start_r, start_c, end_r, end_c, offsetLeft, offsetTop, luckysheetTableContent);
          }
          let borderBottom = borderInfoCompute[x].b;
          if (borderBottom != null) {
            borderBottomRender(borderBottom.style, borderBottom.color, start_r, start_c, end_r, end_c, offsetLeft, offsetTop, luckysheetTableContent);
          }
        }
      }
    }
    if (dataset_col_ed == store_default.visibledatacolumn.length - 1) {
      luckysheetTableContent.clearRect(fill_col_ed - scrollWidth + offsetLeft - 1, offsetTop - 1, store_default.ch_width - store_default.visibledatacolumn[dataset_col_ed], fill_row_ed - scrollHeight);
    }
    luckysheetTableContent.restore();
    store_default.measureTextCacheTimeOut = setTimeout(() => {
      store_default.measureTextCache = {};
      store_default.measureTextCellInfoCache = {};
      store_default.cellOverflowMapCache = {};
    }, 100);
  }
  function getCellOverflowMap(canvas, col_st, col_ed, row_st, row_end) {
    let map = {};
    let data = store_default.flowdata;
    for (let r2 = row_st; r2 <= row_end; r2++) {
      if (data[r2] == null) {
        continue;
      }
      if (store_default.cellOverflowMapCache[r2] != null) {
        map[r2] = store_default.cellOverflowMapCache[r2];
        continue;
      }
      let hasCellOver = false;
      for (let c2 = 0; c2 < data[r2].length; c2++) {
        let cell = data[r2][c2];
        if (store_default.config["colhidden"] != null && store_default.config["colhidden"][c2] != null) {
          continue;
        }
        if (cell != null && (!isRealNull(cell.v) || isInlineStringCell(cell)) && cell.mc == null && cell.tb == "1") {
          let horizonAlign = menuButton_default.checkstatus(data, r2, c2, "ht");
          let textMetricsObj = getCellTextInfo(cell, canvas, {
            r: r2,
            c: c2
          });
          let textMetrics = 0;
          if (textMetricsObj != null) {
            textMetrics = textMetricsObj.textWidthAll;
          }
          let start_c = c2 - 1 < 0 ? 0 : store_default.visibledatacolumn[c2 - 1];
          let end_c = store_default.visibledatacolumn[c2];
          let stc, edc;
          if (end_c - start_c < textMetrics) {
            if (horizonAlign == "0") {
              let trace_forward = cellOverflow_trace(r2, c2, c2 - 1, "forward", horizonAlign, textMetrics);
              let trace_backward = cellOverflow_trace(r2, c2, c2 + 1, "backward", horizonAlign, textMetrics);
              if (trace_forward.success) {
                stc = trace_forward.c;
              } else {
                stc = trace_forward.c + 1;
              }
              if (trace_backward.success) {
                edc = trace_backward.c;
              } else {
                edc = trace_backward.c - 1;
              }
            } else if (horizonAlign == "1") {
              let trace = cellOverflow_trace(r2, c2, c2 + 1, "backward", horizonAlign, textMetrics);
              stc = c2;
              if (trace.success) {
                edc = trace.c;
              } else {
                edc = trace.c - 1;
              }
            } else if (horizonAlign == "2") {
              let trace = cellOverflow_trace(r2, c2, c2 - 1, "forward", horizonAlign, textMetrics);
              edc = c2;
              if (trace.success) {
                stc = trace.c;
              } else {
                stc = trace.c + 1;
              }
            }
          } else {
            stc = c2;
            edc = c2;
          }
          if ((stc <= col_ed || edc >= col_st) && stc < edc) {
            let item2 = {
              r: r2,
              stc,
              edc
            };
            if (map[r2] == null) {
              map[r2] = {};
            }
            map[r2][c2] = item2;
            hasCellOver = true;
          }
        }
      }
      if (hasCellOver) {
        store_default.cellOverflowMapCache[r2] = map[r2];
      }
    }
    return map;
  }
  function cellOverflow_trace(r2, curC, traceC, traceDir, horizonAlign, textMetrics) {
    let data = store_default.flowdata;
    if (traceDir == "forward" && traceC < 0) {
      return {
        success: false,
        r: r2,
        c: traceC
      };
    }
    if (traceDir == "backward" && traceC > data[r2].length - 1) {
      return {
        success: false,
        r: r2,
        c: traceC
      };
    }
    let cell = data[r2][traceC];
    if (cell != null && (!isRealNull(cell.v) || cell.mc != null)) {
      return {
        success: false,
        r: r2,
        c: traceC
      };
    }
    let start_curC = curC - 1 < 0 ? 0 : store_default.visibledatacolumn[curC - 1];
    let end_curC = store_default.visibledatacolumn[curC];
    let w = textMetrics - (end_curC - start_curC);
    if (horizonAlign == "0") {
      start_curC -= w / 2;
      end_curC += w / 2;
    } else if (horizonAlign == "1") {
      end_curC += w;
    } else if (horizonAlign == "2") {
      start_curC -= w;
    }
    let start_traceC = traceC - 1 < 0 ? 0 : store_default.visibledatacolumn[traceC - 1];
    let end_traceC = store_default.visibledatacolumn[traceC];
    if (traceDir == "forward") {
      if (start_curC < start_traceC) {
        return cellOverflow_trace(r2, curC, traceC - 1, traceDir, horizonAlign, textMetrics);
      } else if (start_curC < end_traceC) {
        return {
          success: true,
          r: r2,
          c: traceC
        };
      } else {
        return {
          success: false,
          r: r2,
          c: traceC
        };
      }
    }
    if (traceDir == "backward") {
      if (end_curC > end_traceC) {
        return cellOverflow_trace(r2, curC, traceC + 1, traceDir, horizonAlign, textMetrics);
      } else if (end_curC > start_traceC) {
        return {
          success: true,
          r: r2,
          c: traceC
        };
      } else {
        return {
          success: false,
          r: r2,
          c: traceC
        };
      }
    }
  }
  function cellOverflow_colIn(map, r2, c2, col_st, col_ed) {
    let colIn = false, colLast = false, rowIndex, colIndex, stc, edc;
    for (let rkey in map) {
      for (let ckey in map[rkey]) {
        rowIndex = rkey;
        colIndex = ckey;
        let mapItem = map[rkey][ckey];
        stc = mapItem.stc;
        edc = mapItem.edc;
        if (rowIndex == r2) {
          if (c2 >= stc && c2 <= edc) {
            colIn = true;
            if (c2 == edc || c2 == col_ed) {
              colLast = true;
              break;
            }
          }
        }
      }
      if (colLast) {
        break;
      }
    }
    return {
      colIn,
      colLast,
      rowIndex,
      colIndex,
      stc,
      edc
    };
  }
  function cellTextRender(textInfo, ctx, option) {
    if (textInfo == null) {
      return;
    }
    let values = textInfo.values;
    let pos_x = option.pos_x, pos_y = option.pos_y;
    if (values == null) {
      return;
    }
    if (textInfo.rotate != 0 && textInfo.type != "verticalWrap") {
      ctx.save();
      ctx.translate((pos_x + textInfo.textLeftAll) / store_default.zoomRatio, (pos_y + textInfo.textTopAll) / store_default.zoomRatio);
      ctx.rotate(-textInfo.rotate * Math.PI / 180);
      ctx.translate(-(textInfo.textLeftAll + pos_x) / store_default.zoomRatio, -(pos_y + textInfo.textTopAll) / store_default.zoomRatio);
    }
    for (let i2 = 0; i2 < values.length; i2++) {
      let word = values[i2];
      if (word.inline === true && word.style != null) {
        ctx.font = word.style.fontset;
        ctx.fillStyle = word.style.fc;
      } else {
        ctx.font = word.style;
      }
      let txt = typeof word.content === "object" ? word.content.m : word.content;
      ctx.fillText(txt, (pos_x + word.left) / store_default.zoomRatio, (pos_y + word.top) / store_default.zoomRatio);
      if (word.cancelLine != null) {
        let c2 = word.cancelLine;
        ctx.beginPath();
        ctx.moveTo(Math.floor((pos_x + c2.startX) / store_default.zoomRatio) + 0.5, Math.floor((pos_y + c2.startY) / store_default.zoomRatio) + 0.5);
        ctx.lineTo(Math.floor((pos_x + c2.endX) / store_default.zoomRatio) + 0.5, Math.floor((pos_y + c2.endY) / store_default.zoomRatio) + 0.5);
        ctx.lineWidth = Math.floor(c2.fs / 9);
        ctx.strokeStyle = ctx.fillStyle;
        ctx.stroke();
        ctx.closePath();
      }
      if (word.underLine != null) {
        let underLines = word.underLine;
        for (let a = 0; a < underLines.length; a++) {
          let item2 = underLines[a];
          ctx.beginPath();
          ctx.moveTo(Math.floor((pos_x + item2.startX) / store_default.zoomRatio) + 0.5, Math.floor((pos_y + item2.startY) / store_default.zoomRatio));
          ctx.lineTo(Math.floor((pos_x + item2.endX) / store_default.zoomRatio) + 0.5, Math.floor((pos_y + item2.endY) / store_default.zoomRatio) + 0.5);
          ctx.lineWidth = Math.floor(item2.fs / 9);
          ctx.strokeStyle = ctx.fillStyle;
          ctx.stroke();
          ctx.closePath();
        }
      }
    }
    if (textInfo.rotate != 0 && textInfo.type != "verticalWrap") {
      ctx.restore();
    }
  }
  var sparklinesRender, nullCellRender, cellRender, cellOverflowRender;
  var init_draw = __esm({
    "src/global/draw.js"() {
      init_pivotTable();
      init_conditionformat();
      init_alternateformat();
      init_sparkline();
      init_menuButton();
      init_dataVerificationCtrl();
      init_constant();
      init_sheetSearch();
      init_dynamicArray();
      init_browser();
      init_validate();
      init_getRowlen();
      init_getdata();
      init_border();
      init_get();
      init_util();
      init_inlineString();
      init_method();
      init_store();
      init_locale();
      init_sheetmanage();
      sparklinesRender = function(r2, c2, offsetX, offsetY, canvasid, ctx) {
        if (store_default.flowdata[r2] == null || store_default.flowdata[r2][c2] == null) {
          return;
        }
        let sparklines = store_default.flowdata[r2][c2].spl;
        if (sparklines != null) {
          if (typeof sparklines == "string") {
            sparklines = new Function("return " + sparklines)();
          }
          if (getObjType(sparklines) == "object") {
            let temp1 = sparklines;
            let x = temp1.offsetX;
            let y = temp1.offsetY;
            x = x == null ? 0 : x;
            y = y == null ? 0 : y;
            sparkline_default.render(temp1.shapeseq, temp1.shapes, offsetX + x, offsetY + y, temp1.pixelWidth, temp1.pixelHeight, canvasid, ctx);
          } else if (getObjType(sparklines) == "array" && getObjType(sparklines[0]) == "object") {
            for (let i2 = 0; i2 < sparklines.length; i2++) {
              let temp1 = sparklines[i2];
              let x = temp1.offsetX;
              let y = temp1.offsetY;
              x = x == null ? 0 : x;
              y = y == null ? 0 : y;
              sparkline_default.render(temp1.shapeseq, temp1.shapes, offsetX + x, offsetY + y, temp1.pixelWidth, temp1.pixelHeight, canvasid, ctx);
            }
          }
        }
      };
      nullCellRender = function(r2, c2, start_r, start_c, end_r, end_c, luckysheetTableContent, af_compute, cf_compute, offsetLeft, offsetTop, dynamicArray_compute, cellOverflowMap, dataset_col_st, dataset_col_ed, scrollHeight, scrollWidth, bodrder05, isMerge) {
        let checksAF = alternateformat_default.checksAF(r2, c2, af_compute);
        let checksCF = conditionformat_default.checksCF(r2, c2, cf_compute);
        let borderfix = menuButton_default.borderfix(store_default.flowdata, r2, c2);
        let fillStyle = menuButton_default.checkstatus(store_default.flowdata, r2, c2, "bg");
        if (checksAF != null && checksAF[1] != null) {
          fillStyle = checksAF[1];
        }
        if (checksCF != null && checksCF["cellColor"] != null) {
          fillStyle = checksCF["cellColor"];
        }
        if (store_default.flowdata[r2][c2] != null && store_default.flowdata[r2][c2].tc != null) {
          fillStyle = store_default.flowdata[r2][c2].tc;
        }
        if (fillStyle == null) {
          luckysheetTableContent.fillStyle = "#FFFFFF";
        } else {
          luckysheetTableContent.fillStyle = fillStyle;
        }
        let cellsize = [
          start_c + offsetLeft + borderfix[0] + 1,
          start_r + offsetTop + borderfix[1] + 1,
          end_c - start_c + borderfix[2] - (!!isMerge ? 1 : 0) - 1,
          end_r - start_r + borderfix[3] - 1
        ];
        if (!method_default.createHookFunction("cellRenderBefore", store_default.flowdata[r2][c2], {
          r: r2,
          c: c2,
          "start_r": cellsize[1],
          "start_c": cellsize[0],
          "end_r": cellsize[3] + cellsize[1],
          "end_c": cellsize[2] + cellsize[0]
        }, sheetmanage_default.getSheetByIndex(), luckysheetTableContent)) {
          return;
        }
        luckysheetTableContent.fillRect(cellsize[0], cellsize[1], cellsize[2], cellsize[3]);
        if (r2 + "_" + c2 in dynamicArray_compute) {
          let value = dynamicArray_compute[r2 + "_" + c2].v;
          luckysheetTableContent.fillStyle = "#000000";
          let fontset = luckysheetdefaultFont();
          luckysheetTableContent.font = fontset;
          let horizonAlignPos = start_c + 4 + offsetLeft;
          let verticalFixed = browser_default.luckysheetrefreshfixed();
          let verticalAlignPos = end_r + offsetTop - 2;
          luckysheetTableContent.textBaseline = "bottom";
          luckysheetTableContent.fillText(value == null ? "" : value, horizonAlignPos, verticalAlignPos);
        }
        if (store_default.flowdata[r2][c2] != null && store_default.flowdata[r2][c2].ps != null) {
          let ps_w = 8 * store_default.zoomRatio, ps_h = 8 * store_default.zoomRatio;
          luckysheetTableContent.beginPath();
          luckysheetTableContent.moveTo(end_c + offsetLeft - 1 - ps_w, start_r + offsetTop);
          luckysheetTableContent.lineTo(end_c + offsetLeft - 1, start_r + offsetTop);
          luckysheetTableContent.lineTo(end_c + offsetLeft - 1, start_r + offsetTop + ps_h);
          luckysheetTableContent.fillStyle = "#FC6666";
          luckysheetTableContent.fill();
          luckysheetTableContent.closePath();
        }
        let cellOverflow_colInObj = cellOverflow_colIn(cellOverflowMap, r2, c2, dataset_col_st, dataset_col_ed);
        if (cellOverflow_colInObj.colLast) {
          cellOverflowRender(cellOverflow_colInObj.rowIndex, cellOverflow_colInObj.colIndex, cellOverflow_colInObj.stc, cellOverflow_colInObj.edc, luckysheetTableContent, scrollHeight, scrollWidth, offsetLeft, offsetTop, af_compute, cf_compute);
        }
        if (!cellOverflow_colInObj.colIn || cellOverflow_colInObj.colLast) {
          if (!store_default.luckysheetcurrentisPivotTable && store_default.showGridLines) {
            luckysheetTableContent.beginPath();
            luckysheetTableContent.moveTo(end_c + offsetLeft - 2 + bodrder05, start_r + offsetTop);
            luckysheetTableContent.lineTo(end_c + offsetLeft - 2 + bodrder05, end_r + offsetTop);
            luckysheetTableContent.lineWidth = 1;
            luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
            luckysheetTableContent.stroke();
            luckysheetTableContent.closePath();
          }
        }
        if (!store_default.luckysheetcurrentisPivotTable && store_default.showGridLines) {
          luckysheetTableContent.beginPath();
          luckysheetTableContent.moveTo(start_c + offsetLeft - 1, end_r + offsetTop - 2 + bodrder05);
          luckysheetTableContent.lineTo(end_c + offsetLeft - 1, end_r + offsetTop - 2 + bodrder05);
          luckysheetTableContent.lineWidth = 1;
          luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
          luckysheetTableContent.stroke();
          luckysheetTableContent.closePath();
        }
        method_default.createHookFunction("cellRenderAfter", store_default.flowdata[r2][c2], {
          r: r2,
          c: c2,
          "start_r": cellsize[1],
          "start_c": cellsize[0],
          "end_r": cellsize[3] + cellsize[1],
          "end_c": cellsize[2] + cellsize[0]
        }, sheetmanage_default.getSheetByIndex(), luckysheetTableContent);
      };
      cellRender = function(r2, c2, start_r, start_c, end_r, end_c, value, luckysheetTableContent, af_compute, cf_compute, offsetLeft, offsetTop, dynamicArray_compute, cellOverflowMap, dataset_col_st, dataset_col_ed, scrollHeight, scrollWidth, bodrder05, isMerge) {
        let cell = store_default.flowdata[r2][c2];
        let cellWidth = end_c - start_c - 2;
        let cellHeight = end_r - start_r - 2;
        let space_width = 2, space_height = 2;
        let horizonAlign = menuButton_default.checkstatus(store_default.flowdata, r2, c2, "ht");
        let verticalAlign = menuButton_default.checkstatus(store_default.flowdata, r2, c2, "vt");
        let checksAF = alternateformat_default.checksAF(r2, c2, af_compute);
        let checksCF = conditionformat_default.checksCF(r2, c2, cf_compute);
        let fillStyle = menuButton_default.checkstatus(store_default.flowdata, r2, c2, "bg");
        if (checksAF != null && checksAF[1] != null) {
          fillStyle = checksAF[1];
        }
        if (checksCF != null && checksCF["cellColor"] != null) {
          fillStyle = checksCF["cellColor"];
        }
        if (fillStyle == null) {
          luckysheetTableContent.fillStyle = "#FFFFFF";
        } else {
          luckysheetTableContent.fillStyle = fillStyle;
        }
        let borderfix = menuButton_default.borderfix(store_default.flowdata, r2, c2);
        let cellsize = [
          start_c + offsetLeft + borderfix[0] + 1,
          start_r + offsetTop + borderfix[1] + 1,
          end_c - start_c + borderfix[2] - (!!isMerge ? 1 : 0) - 1,
          end_r - start_r + borderfix[3] + 1
        ];
        if (!method_default.createHookFunction("cellRenderBefore", store_default.flowdata[r2][c2], {
          r: r2,
          c: c2,
          "start_r": cellsize[1],
          "start_c": cellsize[0],
          "end_r": cellsize[3] + cellsize[1],
          "end_c": cellsize[2] + cellsize[0]
        }, sheetmanage_default.getSheetByIndex(), luckysheetTableContent)) {
          return;
        }
        luckysheetTableContent.fillRect(cellsize[0], cellsize[1], cellsize[2], cellsize[3]);
        let dataVerification = dataVerificationCtrl_default.dataVerification;
        if (dataVerification != null && dataVerification[r2 + "_" + c2] != null && !dataVerificationCtrl_default.validateCellData(value, dataVerification[r2 + "_" + c2])) {
          let dv_w = 5 * store_default.zoomRatio, dv_h = 5 * store_default.zoomRatio;
          luckysheetTableContent.beginPath();
          luckysheetTableContent.moveTo(start_c + offsetLeft, start_r + offsetTop);
          luckysheetTableContent.lineTo(start_c + offsetLeft + dv_w, start_r + offsetTop);
          luckysheetTableContent.lineTo(start_c + offsetLeft, start_r + offsetTop + dv_h);
          luckysheetTableContent.fillStyle = "#FC6666";
          luckysheetTableContent.fill();
          luckysheetTableContent.closePath();
        }
        if (cell.ps != null) {
          let ps_w = 8 * store_default.zoomRatio, ps_h = 8 * store_default.zoomRatio;
          luckysheetTableContent.beginPath();
          luckysheetTableContent.moveTo(end_c + offsetLeft - ps_w, start_r + offsetTop);
          luckysheetTableContent.lineTo(end_c + offsetLeft, start_r + offsetTop);
          luckysheetTableContent.lineTo(end_c + offsetLeft, start_r + offsetTop + ps_h);
          luckysheetTableContent.fillStyle = "#FC6666";
          luckysheetTableContent.fill();
          luckysheetTableContent.closePath();
        }
        if (cell.qp == 1 && isRealNum(cell.v)) {
          let ps_w = 6 * store_default.zoomRatio, ps_h = 6 * store_default.zoomRatio;
          luckysheetTableContent.beginPath();
          luckysheetTableContent.moveTo(start_c + offsetLeft + ps_w - 1, start_r + offsetTop);
          luckysheetTableContent.lineTo(start_c + offsetLeft - 1, start_r + offsetTop);
          luckysheetTableContent.lineTo(start_c + offsetLeft - 1, start_r + offsetTop + ps_h);
          luckysheetTableContent.fillStyle = "#487f1e";
          luckysheetTableContent.fill();
          luckysheetTableContent.closePath();
        }
        let cellOverflow_bd_r_render = true;
        let cellOverflow_colInObj = cellOverflow_colIn(cellOverflowMap, r2, c2, dataset_col_st, dataset_col_ed);
        if (cell.tb == "1" && cellOverflow_colInObj.colIn) {
          if (cellOverflow_colInObj.colLast) {
            cellOverflowRender(cellOverflow_colInObj.rowIndex, cellOverflow_colInObj.colIndex, cellOverflow_colInObj.stc, cellOverflow_colInObj.edc, luckysheetTableContent, scrollHeight, scrollWidth, offsetLeft, offsetTop, af_compute, cf_compute);
          } else {
            cellOverflow_bd_r_render = false;
          }
        } else if (dataVerification != null && dataVerification[r2 + "_" + c2] != null && dataVerification[r2 + "_" + c2].type == "checkbox") {
          let pos_x = start_c + offsetLeft;
          let pos_y = start_r + offsetTop + 1;
          luckysheetTableContent.save();
          luckysheetTableContent.beginPath();
          luckysheetTableContent.rect(pos_x, pos_y, cellWidth, cellHeight);
          luckysheetTableContent.clip();
          luckysheetTableContent.scale(store_default.zoomRatio, store_default.zoomRatio);
          let measureText = getMeasureText(value, luckysheetTableContent);
          let textMetrics = measureText.width + 14;
          let oneLineTextHeight = measureText.actualBoundingBoxDescent + measureText.actualBoundingBoxAscent;
          let horizonAlignPos = pos_x + space_width;
          if (horizonAlign == "0") {
            horizonAlignPos = pos_x + cellWidth / 2 - textMetrics / 2;
          } else if (horizonAlign == "2") {
            horizonAlignPos = pos_x + cellWidth - space_width - textMetrics;
          }
          let verticalCellHeight = cellHeight > oneLineTextHeight ? cellHeight : oneLineTextHeight;
          let verticalAlignPos_text = pos_y + verticalCellHeight - space_height;
          luckysheetTableContent.textBaseline = "bottom";
          let verticalAlignPos_checkbox = verticalAlignPos_text - 13 * store_default.zoomRatio;
          if (verticalAlign == "0") {
            verticalAlignPos_text = pos_y + verticalCellHeight / 2;
            luckysheetTableContent.textBaseline = "middle";
            verticalAlignPos_checkbox = verticalAlignPos_text - 6 * store_default.zoomRatio;
          } else if (verticalAlign == "1") {
            verticalAlignPos_text = pos_y + space_height;
            luckysheetTableContent.textBaseline = "top";
            verticalAlignPos_checkbox = verticalAlignPos_text + 1 * store_default.zoomRatio;
          }
          horizonAlignPos = horizonAlignPos / store_default.zoomRatio;
          verticalAlignPos_text = verticalAlignPos_text / store_default.zoomRatio;
          verticalAlignPos_checkbox = verticalAlignPos_checkbox / store_default.zoomRatio;
          luckysheetTableContent.lineWidth = 1;
          luckysheetTableContent.strokeStyle = "#000";
          luckysheetTableContent.strokeRect(horizonAlignPos, verticalAlignPos_checkbox, 10, 10);
          if (dataVerification[r2 + "_" + c2].checked) {
            luckysheetTableContent.beginPath();
            luckysheetTableContent.lineTo(horizonAlignPos + 1, verticalAlignPos_checkbox + 6);
            luckysheetTableContent.lineTo(horizonAlignPos + 4, verticalAlignPos_checkbox + 9);
            luckysheetTableContent.lineTo(horizonAlignPos + 9, verticalAlignPos_checkbox + 2);
            luckysheetTableContent.stroke();
            luckysheetTableContent.closePath();
          }
          luckysheetTableContent.fillStyle = menuButton_default.checkstatus(store_default.flowdata, r2, c2, "fc");
          luckysheetTableContent.fillText(value == null ? "" : value, horizonAlignPos + 14, verticalAlignPos_text);
          luckysheetTableContent.restore();
        } else {
          if (checksCF != null && checksCF["dataBar"] != null && checksCF["dataBar"]["valueLen"] && checksCF["dataBar"]["valueLen"].toString() !== "NaN") {
            let x = start_c + offsetLeft + space_width;
            let y = start_r + offsetTop + space_height;
            let w = cellWidth - space_width * 2;
            let h = cellHeight - space_height * 2;
            let valueType = checksCF["dataBar"]["valueType"];
            let valueLen = checksCF["dataBar"]["valueLen"];
            let format = checksCF["dataBar"]["format"];
            if (valueType == "minus") {
              let minusLen = checksCF["dataBar"]["minusLen"];
              if (format.length > 1) {
                let my_gradient = luckysheetTableContent.createLinearGradient(x + w * minusLen * (1 - valueLen), y, x + w * minusLen, y);
                my_gradient.addColorStop(0, "#ffffff");
                my_gradient.addColorStop(1, "#ff0000");
                luckysheetTableContent.fillStyle = my_gradient;
              } else {
                luckysheetTableContent.fillStyle = "#ff0000";
              }
              luckysheetTableContent.fillRect(x + w * minusLen * (1 - valueLen), y, w * minusLen * valueLen, h);
              luckysheetTableContent.beginPath();
              luckysheetTableContent.moveTo(x + w * minusLen * (1 - valueLen), y);
              luckysheetTableContent.lineTo(x + w * minusLen * (1 - valueLen), y + h);
              luckysheetTableContent.lineTo(x + w * minusLen, y + h);
              luckysheetTableContent.lineTo(x + w * minusLen, y);
              luckysheetTableContent.lineTo(x + w * minusLen * (1 - valueLen), y);
              luckysheetTableContent.lineWidth = 1;
              luckysheetTableContent.strokeStyle = "#ff0000";
              luckysheetTableContent.stroke();
              luckysheetTableContent.closePath();
            } else if (valueType == "plus") {
              let plusLen = checksCF["dataBar"]["plusLen"];
              if (plusLen == 1) {
                if (format.length > 1) {
                  let my_gradient = luckysheetTableContent.createLinearGradient(x, y, x + w * valueLen, y);
                  my_gradient.addColorStop(0, format[0]);
                  my_gradient.addColorStop(1, format[1]);
                  luckysheetTableContent.fillStyle = my_gradient;
                } else {
                  luckysheetTableContent.fillStyle = format[0];
                }
                luckysheetTableContent.fillRect(x, y, w * valueLen, h);
                luckysheetTableContent.beginPath();
                luckysheetTableContent.moveTo(x, y);
                luckysheetTableContent.lineTo(x, y + h);
                luckysheetTableContent.lineTo(x + w * valueLen, y + h);
                luckysheetTableContent.lineTo(x + w * valueLen, y);
                luckysheetTableContent.lineTo(x, y);
                luckysheetTableContent.lineWidth = 1;
                luckysheetTableContent.strokeStyle = format[0];
                luckysheetTableContent.stroke();
                luckysheetTableContent.closePath();
              } else {
                let minusLen = checksCF["dataBar"]["minusLen"];
                if (format.length > 1) {
                  let my_gradient = luckysheetTableContent.createLinearGradient(x + w * minusLen, y, x + w * minusLen + w * plusLen * valueLen, y);
                  my_gradient.addColorStop(0, format[0]);
                  my_gradient.addColorStop(1, format[1]);
                  luckysheetTableContent.fillStyle = my_gradient;
                } else {
                  luckysheetTableContent.fillStyle = format[0];
                }
                luckysheetTableContent.fillRect(x + w * minusLen, y, w * plusLen * valueLen, h);
                luckysheetTableContent.beginPath();
                luckysheetTableContent.moveTo(x + w * minusLen, y);
                luckysheetTableContent.lineTo(x + w * minusLen, y + h);
                luckysheetTableContent.lineTo(x + w * minusLen + w * plusLen * valueLen, y + h);
                luckysheetTableContent.lineTo(x + w * minusLen + w * plusLen * valueLen, y);
                luckysheetTableContent.lineTo(x + w * minusLen, y);
                luckysheetTableContent.lineWidth = 1;
                luckysheetTableContent.strokeStyle = format[0];
                luckysheetTableContent.stroke();
                luckysheetTableContent.closePath();
              }
            }
          }
          let pos_x = start_c + offsetLeft;
          let pos_y = start_r + offsetTop + 1;
          luckysheetTableContent.save();
          luckysheetTableContent.beginPath();
          luckysheetTableContent.rect(pos_x, pos_y, cellWidth, cellHeight);
          luckysheetTableContent.clip();
          luckysheetTableContent.scale(store_default.zoomRatio, store_default.zoomRatio);
          let textInfo = getCellTextInfo(cell, luckysheetTableContent, {
            cellWidth,
            cellHeight,
            space_width,
            space_height,
            r: r2,
            c: c2
          });
          if (checksCF != null && checksCF["icons"] != null && textInfo.type == "plain") {
            let l = checksCF["icons"]["left"];
            let t = checksCF["icons"]["top"];
            let value2 = textInfo.values[0];
            let horizonAlignPos = pos_x + value2.left;
            let verticalAlignPos = pos_y + value2.top - textInfo.textHeightAll;
            if (verticalAlign == "0") {
              verticalAlignPos = pos_y + cellHeight / 2 - textInfo.textHeightAll / 2;
            } else if (verticalAlign == "1") {
              verticalAlignPos = pos_y;
            } else if (verticalAlign == "2") {
              verticalAlignPos = verticalAlignPos - textInfo.desc;
            }
            verticalAlignPos = verticalAlignPos / store_default.zoomRatio;
            horizonAlignPos = horizonAlignPos / store_default.zoomRatio;
            luckysheetTableContent.drawImage(luckysheet_CFiconsImg, l * 42, t * 32, 32, 32, pos_x / store_default.zoomRatio, verticalAlignPos, textInfo.textHeightAll / store_default.zoomRatio, textInfo.textHeightAll / store_default.zoomRatio);
            if (horizonAlign != "0" && horizonAlign != "2") {
              horizonAlignPos = horizonAlignPos + textInfo.textHeightAll / store_default.zoomRatio;
            }
          }
          luckysheetTableContent.fillStyle = menuButton_default.checkstatus(store_default.flowdata, r2, c2, "fc");
          if (checksAF != null && checksAF[0] != null) {
            luckysheetTableContent.fillStyle = checksAF[0];
          }
          if (checksCF != null && checksCF["textColor"] != null) {
            luckysheetTableContent.fillStyle = checksCF["textColor"];
          }
          if (cell.ct && cell.ct.fa && cell.ct.fa.indexOf("[Red]") > -1 && cell.ct.t == "n" && cell.v < 0) {
            luckysheetTableContent.fillStyle = "#ff0000";
          }
          cellTextRender(textInfo, luckysheetTableContent, {
            pos_x,
            pos_y
          });
          luckysheetTableContent.restore();
        }
        if (cellOverflow_bd_r_render) {
          if (!store_default.luckysheetcurrentisPivotTable && store_default.showGridLines) {
            luckysheetTableContent.beginPath();
            luckysheetTableContent.moveTo(end_c + offsetLeft - 2 + bodrder05, start_r + offsetTop);
            luckysheetTableContent.lineTo(end_c + offsetLeft - 2 + bodrder05, end_r + offsetTop);
            luckysheetTableContent.lineWidth = 1;
            luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
            luckysheetTableContent.stroke();
            luckysheetTableContent.closePath();
          }
        }
        if (!store_default.luckysheetcurrentisPivotTable && store_default.showGridLines) {
          luckysheetTableContent.beginPath();
          luckysheetTableContent.moveTo(start_c + offsetLeft - 1, end_r + offsetTop - 2 + bodrder05);
          luckysheetTableContent.lineTo(end_c + offsetLeft - 1, end_r + offsetTop - 2 + bodrder05);
          luckysheetTableContent.lineWidth = 1;
          luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
          luckysheetTableContent.stroke();
          luckysheetTableContent.closePath();
        }
        method_default.createHookFunction("cellRenderAfter", store_default.flowdata[r2][c2], {
          r: r2,
          c: c2,
          "start_r": cellsize[1],
          "start_c": cellsize[0],
          "end_r": cellsize[3] + cellsize[1],
          "end_c": cellsize[2] + cellsize[0]
        }, sheetmanage_default.getSheetByIndex(), luckysheetTableContent);
      };
      cellOverflowRender = function(r2, c2, stc, edc, luckysheetTableContent, scrollHeight, scrollWidth, offsetLeft, offsetTop, af_compute, cf_compute) {
        let start_r;
        if (r2 == 0) {
          start_r = -scrollHeight - 1;
        } else {
          start_r = store_default.visibledatarow[r2 - 1] - scrollHeight - 1;
        }
        let end_r = store_default.visibledatarow[r2] - scrollHeight;
        let start_c;
        if (stc == 0) {
          start_c = -scrollWidth;
        } else {
          start_c = store_default.visibledatacolumn[stc - 1] - scrollWidth;
        }
        let end_c = store_default.visibledatacolumn[edc] - scrollWidth;
        let cell = store_default.flowdata[r2][c2];
        let cellWidth = end_c - start_c - 2;
        let cellHeight = end_r - start_r - 2;
        let space_width = 2, space_height = 2;
        let pos_x = start_c + offsetLeft;
        let pos_y = start_r + offsetTop + 1;
        let fontset = luckysheetfontformat(cell);
        luckysheetTableContent.font = fontset;
        luckysheetTableContent.save();
        luckysheetTableContent.beginPath();
        luckysheetTableContent.rect(pos_x, pos_y, cellWidth, cellHeight);
        luckysheetTableContent.clip();
        luckysheetTableContent.scale(store_default.zoomRatio, store_default.zoomRatio);
        let textInfo = getCellTextInfo(cell, luckysheetTableContent, {
          cellWidth,
          cellHeight,
          space_width,
          space_height,
          r: r2,
          c: c2
        });
        let checksAF = alternateformat_default.checksAF(r2, c2, af_compute);
        let checksCF = conditionformat_default.checksCF(r2, c2, cf_compute);
        luckysheetTableContent.fillStyle = menuButton_default.checkstatus(store_default.flowdata, r2, c2, "fc");
        if (checksAF != null && checksAF[0] != null) {
          luckysheetTableContent.fillStyle = checksAF[0];
        }
        if (checksCF != null && checksCF["textColor"] != null) {
          luckysheetTableContent.fillStyle = checksCF["textColor"];
        }
        cellTextRender(textInfo, luckysheetTableContent, {
          pos_x,
          pos_y
        });
        luckysheetTableContent.restore();
      };
    }
  });

  // src/controllers/hyperlinkCtrl.js
  var hyperlinkCtrl, hyperlinkCtrl_default;
  var init_hyperlinkCtrl = __esm({
    "src/controllers/hyperlinkCtrl.js"() {
      init_util();
      init_getdata();
      init_refresh();
      init_location();
      init_formula();
      init_tooltip();
      init_editor();
      init_constant();
      init_select();
      init_server();
      init_sheetmanage();
      init_freezen();
      init_menuButton();
      init_get();
      init_locale();
      init_store();
      hyperlinkCtrl = {
        item: {
          linkType: "external",
          linkAddress: "",
          linkTooltip: ""
        },
        hyperlink: null,
        createDialog: function() {
          let _this = this;
          const _locale = locale_default();
          const hyperlinkText = _locale.insertLink;
          const toolbarText = _locale.toolbar;
          const buttonText = _locale.button;
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-insertLink-dialog").remove();
          let sheetListOption = "";
          store_default.luckysheetfile.forEach((item2) => {
            sheetListOption += `<option value="${item2.name}">${item2.name}</option>`;
          });
          let content = `<div class="box">
                            <div class="box-item">
                                <label for="luckysheet-insertLink-dialog-linkText">${hyperlinkText.linkText}\uFF1A</label>
                                <input type="text" id="luckysheet-insertLink-dialog-linkText"/>
                            </div>
                            <div class="box-item">
                                <label for="luckysheet-insertLink-dialog-linkType">${hyperlinkText.linkType}\uFF1A</label>
                                <select id="luckysheet-insertLink-dialog-linkType">
                                    <option value="external">${hyperlinkText.external}</option>
                                    <option value="internal">${hyperlinkText.internal}</option>
                                </select>
                            </div>
                            <div class="show-box show-box-external">
                                <div class="box-item">
                                    <label for="luckysheet-insertLink-dialog-linkAddress">${hyperlinkText.linkAddress}\uFF1A</label>
                                    <input type="text" id="luckysheet-insertLink-dialog-linkAddress" placeholder="${hyperlinkText.placeholder1}" />
                                </div>
                            </div>
                            <div class="show-box show-box-internal">
                                <div class="box-item">
                                    <label for="luckysheet-insertLink-dialog-linkSheet">${hyperlinkText.linkSheet}\uFF1A</label>
                                    <select id="luckysheet-insertLink-dialog-linkSheet">
                                        ${sheetListOption}
                                    </select>
                                </div>
                                <div class="box-item">
                                    <label for="luckysheet-insertLink-dialog-linkCell">${hyperlinkText.linkCell}\uFF1A</label>
                                    <input type="text" id="luckysheet-insertLink-dialog-linkCell" value="A1" placeholder="${hyperlinkText.placeholder2}" />
                                </div>
                            </div>
                            <div class="box-item">
                                <label for="luckysheet-insertLink-dialog-linkTooltip">${hyperlinkText.linkTooltip}\uFF1A</label>
                                <input type="text" id="luckysheet-insertLink-dialog-linkTooltip" placeholder="${hyperlinkText.placeholder3}" />
                            </div>
                        </div>`;
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-insertLink-dialog",
            "addclass": "luckysheet-insertLink-dialog",
            "title": toolbarText.insertLink,
            "content": content,
            "botton": `<button id="luckysheet-insertLink-dialog-confirm" class="btn btn-primary">${buttonText.confirm}</button>
                        <button class="btn btn-default luckysheet-model-close-btn">${buttonText.cancel}</button>`,
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-insertLink-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 350).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-insertLink-dialog").css({
            "left": (winw + scrollLeft - myw) / 2,
            "top": (winh + scrollTop - myh) / 3
          }).show();
          _this.dataAllocation();
        },
        init: function() {
          let _this = this;
          const _locale = locale_default();
          const hyperlinkText = _locale.insertLink;
          $(document).off("change.linkType").on("change.linkType", "#luckysheet-insertLink-dialog-linkType", function(e) {
            let value = this.value;
            $("#luckysheet-insertLink-dialog .show-box").hide();
            $("#luckysheet-insertLink-dialog .show-box-" + value).show();
          });
          $(document).off("click.confirm").on("click.confirm", "#luckysheet-insertLink-dialog-confirm", function(e) {
            let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
            let rowIndex = last.row_focus || last.row[0];
            let colIndex = last.column_focus || last.column[0];
            let linkText = $("#luckysheet-insertLink-dialog-linkText").val();
            let linkType = $("#luckysheet-insertLink-dialog-linkType").val();
            let linkAddress = $("#luckysheet-insertLink-dialog-linkAddress").val();
            let linkSheet = $("#luckysheet-insertLink-dialog-linkSheet").val();
            let linkCell = $("#luckysheet-insertLink-dialog-linkCell").val();
            let linkTooltip = $("#luckysheet-insertLink-dialog-linkTooltip").val();
            if (linkType == "external") {
              if (!/^http[s]?:\/\//.test(linkAddress)) {
                linkAddress = "https://" + linkAddress;
              }
              if (!/^http[s]?:\/\/([\w\-\.]+)+[\w-]*([\w\-\.\/\?%&=]+)?$/ig.test(linkAddress)) {
                tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', hyperlinkText.tooltipInfo1);
                return;
              }
            } else {
              if (!formula_default.iscelldata(linkCell)) {
                tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', hyperlinkText.tooltipInfo2);
                return;
              }
              linkAddress = linkSheet + "!" + linkCell;
            }
            if (linkText == null || linkText.replace(/\s/g, "") == "") {
              linkText = linkAddress;
            }
            let item2 = {
              linkType,
              linkAddress,
              linkTooltip
            };
            let historyHyperlink = $.extend(true, {}, _this.hyperlink);
            let currentHyperlink = $.extend(true, {}, _this.hyperlink);
            currentHyperlink[rowIndex + "_" + colIndex] = item2;
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let cell = d[rowIndex][colIndex];
            if (cell == null) {
              cell = {};
            }
            cell.fc = "rgb(0, 0, 255)";
            cell.un = 1;
            cell.v = cell.m = linkText;
            d[rowIndex][colIndex] = cell;
            _this.ref(historyHyperlink, currentHyperlink, store_default.currentSheetIndex, d, [{row: [rowIndex, rowIndex], column: [colIndex, colIndex]}]);
            $("#luckysheet-modal-dialog-mask").hide();
            $("#luckysheet-insertLink-dialog").hide();
          });
        },
        dataAllocation: function() {
          let _this = this;
          let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
          let rowIndex = last.row_focus || last.row[0];
          let colIndex = last.column_focus || last.column[0];
          let hyperlink = _this.hyperlink || {};
          let item2 = hyperlink[rowIndex + "_" + colIndex] || {};
          let text = getcellvalue(rowIndex, colIndex, null, "m");
          $("#luckysheet-insertLink-dialog-linkText").val(text);
          let linkType = item2.linkType || "external";
          $("#luckysheet-insertLink-dialog-linkType").val(linkType);
          $("#luckysheet-insertLink-dialog .show-box").hide();
          $("#luckysheet-insertLink-dialog .show-box-" + linkType).show();
          let linkAddress = item2.linkAddress || "";
          if (linkType == "external") {
            $("#luckysheet-insertLink-dialog-linkAddress").val(linkAddress);
          } else {
            if (formula_default.iscelldata(linkAddress)) {
              let sheettxt = linkAddress.split("!")[0];
              let rangetxt = linkAddress.split("!")[1];
              $("#luckysheet-insertLink-dialog-linkSheet").val(sheettxt);
              $("#luckysheet-insertLink-dialog-linkCell").val(rangetxt);
            }
          }
          let linkTooltip = item2.linkTooltip || "";
          $("#luckysheet-insertLink-dialog-linkTooltip").val(linkTooltip);
        },
        cellFocus: function(r2, c2) {
          let _this = this;
          if (_this.hyperlink == null || _this.hyperlink[r2 + "_" + c2] == null) {
            return;
          }
          let item2 = _this.hyperlink[r2 + "_" + c2];
          if (item2.linkType == "external") {
            window.open(item2.linkAddress);
          } else {
            let cellrange = formula_default.getcellrange(item2.linkAddress);
            let sheetIndex = cellrange.sheetIndex;
            let range2 = [{
              row: cellrange.row,
              column: cellrange.column
            }];
            if (sheetIndex != store_default.currentSheetIndex) {
              $("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active");
              $("#luckysheet-sheets-item" + sheetIndex).addClass("luckysheet-sheets-item-active");
              sheetmanage_default.changeSheet(sheetIndex);
            }
            store_default.luckysheet_select_save = range2;
            selectHightlightShow(true);
            let row_pre = cellrange.row[0] - 1 == -1 ? 0 : store_default.visibledatarow[cellrange.row[0] - 1];
            let col_pre = cellrange.column[0] - 1 == -1 ? 0 : store_default.visibledatacolumn[cellrange.column[0] - 1];
            $("#luckysheet-scrollbar-x").scrollLeft(col_pre);
            $("#luckysheet-scrollbar-y").scrollTop(row_pre);
          }
        },
        overshow: function(event2) {
          let _this = this;
          $("#luckysheet-hyperlink-overshow").remove();
          if ($(event2.target).closest("#luckysheet-cell-main").length == 0) {
            return;
          }
          let mouse = mouseposition(event2.pageX, event2.pageY);
          let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
          let scrollTop = $("#luckysheet-cell-main").scrollTop();
          let x = mouse[0] + scrollLeft;
          let y = mouse[1] + scrollTop;
          if (freezen_default.freezenverticaldata != null && mouse[0] < freezen_default.freezenverticaldata[0] - freezen_default.freezenverticaldata[2]) {
            return;
          }
          if (freezen_default.freezenhorizontaldata != null && mouse[1] < freezen_default.freezenhorizontaldata[0] - freezen_default.freezenhorizontaldata[2]) {
            return;
          }
          let row_index = rowLocation(y)[2];
          let col_index = colLocation(x)[2];
          let margeset = menuButton_default.mergeborer(store_default.flowdata, row_index, col_index);
          if (!!margeset) {
            row_index = margeset.row[2];
            col_index = margeset.column[2];
          }
          if (_this.hyperlink == null || _this.hyperlink[row_index + "_" + col_index] == null) {
            return;
          }
          let item2 = _this.hyperlink[row_index + "_" + col_index];
          let linkTooltip = item2.linkTooltip;
          if (linkTooltip == null || linkTooltip.replace(/\s/g, "") == "") {
            linkTooltip = item2.linkAddress;
          }
          let row = store_default.visibledatarow[row_index], row_pre = row_index - 1 == -1 ? 0 : store_default.visibledatarow[row_index - 1];
          let col = store_default.visibledatacolumn[col_index], col_pre = col_index - 1 == -1 ? 0 : store_default.visibledatacolumn[col_index - 1];
          if (!!margeset) {
            row = margeset.row[1];
            row_pre = margeset.row[0];
            col = margeset.column[1];
            col_pre = margeset.column[0];
          }
          let html = `<div id="luckysheet-hyperlink-overshow" style="background:#fff;padding:5px 10px;border:1px solid #000;box-shadow:2px 2px #999;position:absolute;left:${col_pre}px;top:${row + 5}px;z-index:100;">
                        <div>${linkTooltip}</div>
                        <div>\u5355\u51FB\u9F20\u6807\u53EF\u4EE5\u8FFD\u8E2A</div>
                    </div>`;
          $(html).appendTo($("#luckysheet-cell-main"));
        },
        ref: function(historyHyperlink, currentHyperlink, sheetIndex, d, range2) {
          let _this = this;
          if (store_default.clearjfundo) {
            store_default.jfundo.length = 0;
            let redo2 = {};
            redo2["type"] = "updateHyperlink";
            redo2["sheetIndex"] = sheetIndex;
            redo2["historyHyperlink"] = historyHyperlink;
            redo2["currentHyperlink"] = currentHyperlink;
            redo2["data"] = store_default.flowdata;
            redo2["curData"] = d;
            redo2["range"] = range2;
            store_default.jfredo.push(redo2);
          }
          _this.hyperlink = currentHyperlink;
          store_default.luckysheetfile[getSheetIndex(sheetIndex)].hyperlink = currentHyperlink;
          store_default.flowdata = d;
          editor_default.webWorkerFlowDataCache(store_default.flowdata);
          store_default.luckysheetfile[getSheetIndex(sheetIndex)].data = store_default.flowdata;
          if (server_default.allowUpdate) {
            server_default.saveParam("all", sheetIndex, currentHyperlink, {"k": "hyperlink"});
            server_default.historyParam(store_default.flowdata, sheetIndex, range2[0]);
          }
          setTimeout(function() {
            luckysheetrefreshgrid();
          }, 1);
        }
      };
      hyperlinkCtrl_default = hyperlinkCtrl;
    }
  });

  // src/global/refresh.js
  function runExecFunction(range2, index2, data) {
    formula_default.execFunctionExist = [];
    for (let s = 0; s < range2.length; s++) {
      for (let r2 = range2[s].row[0]; r2 <= range2[s].row[1]; r2++) {
        for (let c2 = range2[s].column[0]; c2 <= range2[s].column[1]; c2++) {
          formula_default.execFunctionExist.push({"r": r2, "c": c2, "i": index2});
        }
      }
    }
    formula_default.execFunctionExist.reverse();
    formula_default.execFunctionGroup(null, null, null, null, data);
    formula_default.execFunctionGlobalData = null;
  }
  function jfrefreshgrid(data, range2, allParam, isRunExecFunction = true, isRefreshCanvas = true) {
    if (data == null) {
      data = store_default.flowdata;
    }
    if (range2 == null) {
      range2 = store_default.luckysheet_select_save;
    }
    range2 = JSON.parse(JSON.stringify(range2));
    clearTimeout(refreshCanvasTimeOut);
    if (allParam == null) {
      allParam = {};
    }
    let cfg = allParam["cfg"];
    let RowlChange = allParam["RowlChange"];
    let cdformat = allParam["cdformat"];
    let dataVerification = allParam["dataVerification"];
    let dynamicArray = allParam["dynamicArray"];
    let hyperlink = allParam["hyperlink"];
    let file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
    if (store_default.clearjfundo) {
      store_default.jfundo.length = 0;
      let curConfig;
      if (cfg == null) {
        curConfig = $.extend(true, {}, store_default.config);
      } else {
        curConfig = $.extend(true, {}, cfg);
      }
      let curCdformat;
      if (cdformat == null) {
        curCdformat = $.extend(true, [], file["luckysheet_conditionformat_save"]);
      } else {
        curCdformat = cdformat;
      }
      let curDataVerification;
      if (dataVerification == null) {
        curDataVerification = $.extend(true, {}, file["dataVerification"]);
      } else {
        curDataVerification = dataVerification;
      }
      let curDynamicArray;
      if (dynamicArray == null) {
        curDynamicArray = $.extend(true, [], file["dynamicArray"]);
      } else {
        curDynamicArray = dynamicArray;
      }
      store_default.jfredo.push({
        "type": "datachange",
        "data": store_default.flowdata,
        "curdata": data,
        "sheetIndex": store_default.currentSheetIndex,
        "config": $.extend(true, {}, store_default.config),
        "curConfig": curConfig,
        "cdformat": $.extend(true, [], file["luckysheet_conditionformat_save"]),
        "curCdformat": curCdformat,
        "RowlChange": RowlChange,
        "dataVerification": $.extend(true, [], file["dataVerification"]),
        "curDataVerification": curDataVerification,
        "dynamicArray": $.extend(true, [], file["dynamicArray"]),
        "curDynamicArray": curDynamicArray,
        "hyperlink": hyperlink && $.extend(true, {}, file.hyperlink),
        "curHyperlink": hyperlink,
        "range": range2,
        "dataRange": [...file.luckysheet_select_save]
      });
    }
    store_default.flowdata = data;
    editor_default.webWorkerFlowDataCache(store_default.flowdata);
    file.data = store_default.flowdata;
    if (cfg != null) {
      store_default.config = cfg;
      file.config = store_default.config;
      server_default.saveParam("all", store_default.currentSheetIndex, cfg, {"k": "config"});
      if (RowlChange != null) {
        jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
      }
    }
    if (cdformat != null && cdformat.length !== 0) {
      file["luckysheet_conditionformat_save"] = cdformat;
      server_default.saveParam("all", store_default.currentSheetIndex, cdformat, {"k": "luckysheet_conditionformat_save"});
    }
    if (dataVerification != null && Object.keys(dataVerification).length !== 0) {
      dataVerificationCtrl_default.dataVerification = dataVerification;
      file["dataVerification"] = dataVerification;
      server_default.saveParam("all", store_default.currentSheetIndex, dataVerification, {"k": "dataVerification"});
    }
    if (dynamicArray != null) {
      file["dynamicArray"] = dynamicArray;
      server_default.saveParam("all", store_default.currentSheetIndex, dynamicArray, {"k": "dynamicArray"});
    }
    if (hyperlink != null) {
      file["hyperlink"] = hyperlink;
      hyperlinkCtrl_default.hyperlink = hyperlink;
      server_default.saveParam("all", store_default.currentSheetIndex, hyperlink, {"k": "hyperlink"});
    }
    for (let s = 0; s < range2.length; s++) {
      let r1 = range2[s].row[0];
      let c1 = range2[s].column[0];
      if (store_default.flowdata[r1][c1] != null && store_default.flowdata[r1][c1].spl != null) {
        window.luckysheetCurrentRow = r1;
        window.luckysheetCurrentColumn = c1;
        window.luckysheetCurrentFunction = store_default.flowdata[r1][c1].f;
        let fp = $.trim(formula_default.functionParserExe(store_default.flowdata[r1][c1].f));
        let sparklines = new Function("return " + fp)();
        store_default.flowdata[r1][c1].spl = sparklines;
      }
      if (server_default.allowUpdate) {
        server_default.historyParam(store_default.flowdata, store_default.currentSheetIndex, range2[s]);
      }
      if (typeof store_default.chartparam.jfrefreshchartall == "function") {
        store_default.chartparam.jfrefreshchartall(store_default.flowdata, range2[s].row[0], range2[s].row[1], range2[s].column[0], range2[s].column[1]);
      }
    }
    if (isRunExecFunction) {
      runExecFunction(range2, store_default.currentSheetIndex, data);
    }
    if (isRefreshCanvas) {
      refreshCanvasTimeOut = setTimeout(function() {
        luckysheetrefreshgrid();
      }, 1);
    }
    selectHightlightShow();
    window.luckysheet_getcelldata_cache = null;
  }
  function jfrefreshgridall(colwidth, rowheight, data, cfg, range2, ctrlType, ctrlValue, cdformat, isRefreshCanvas = true) {
    let redo2 = {}, isRunExecFunction = false;
    clearTimeout(refreshCanvasTimeOut);
    if (ctrlType == "cellRowChange") {
      redo2["type"] = "cellRowChange";
      redo2["config"] = $.extend(true, {}, store_default.config);
      redo2["curconfig"] = $.extend(true, {}, cfg);
      redo2["range"] = $.extend(true, [], store_default.luckysheet_select_save);
      redo2["currange"] = range2;
      redo2["ctrlType"] = ctrlType;
      redo2["ctrlValue"] = ctrlValue;
      let setfield = cfg["rowlen"];
      if (setfield == null) {
        setfield = {};
      }
      server_default.saveParam("cg", store_default.currentSheetIndex, setfield, {"k": "rowlen"});
    } else if (ctrlType == "resizeC") {
      redo2["type"] = "resize";
      redo2["config"] = $.extend(true, {}, store_default.config);
      redo2["curconfig"] = $.extend(true, {}, cfg);
      redo2["range"] = $.extend(true, [], store_default.luckysheet_select_save);
      redo2["currange"] = range2;
      redo2["ctrlType"] = ctrlType;
      redo2["ctrlValue"] = ctrlValue;
      let setfield = cfg["columnlen"];
      if (setfield == null) {
        setfield = {};
      }
      server_default.saveParam("cg", store_default.currentSheetIndex, setfield, {"k": "columnlen"});
    } else if (ctrlType.indexOf("extend") > -1) {
      redo2["type"] = "extend";
      redo2["config"] = $.extend(true, {}, store_default.config);
      redo2["curconfig"] = $.extend(true, {}, cfg);
      redo2["range"] = $.extend(true, [], store_default.luckysheet_select_save);
      redo2["currange"] = range2;
      redo2["ctrlType"] = ctrlType;
      redo2["ctrlValue"] = ctrlValue;
      server_default.saveParam("arc", store_default.currentSheetIndex, {"index": ctrlValue.index, "len": ctrlValue.len, "direction": ctrlValue.direction, "mc": cfg.merge}, {"rc": ctrlValue.type});
    } else if (ctrlType.indexOf("dele") > -1) {
      redo2["type"] = "dele";
      redo2["config"] = $.extend(true, {}, store_default.config);
      redo2["curconfig"] = $.extend(true, {}, cfg);
      redo2["range"] = $.extend(true, [], store_default.luckysheet_select_save);
      redo2["currange"] = range2;
      redo2["ctrlType"] = ctrlType;
      redo2["ctrlValue"] = ctrlValue;
      server_default.saveParam("drc", store_default.currentSheetIndex, {"index": ctrlValue.index, "len": ctrlValue.len, "mc": cfg.merge, "borderInfo": cfg.borderInfo}, {"rc": ctrlValue.type});
    } else {
      redo2["type"] = "datachangeAll";
      redo2["range"] = $.extend(true, [], store_default.luckysheet_select_save);
      redo2["currange"] = range2;
      redo2["ctrlType"] = ctrlType;
      redo2["ctrlValue"] = ctrlValue;
      isRunExecFunction = true;
      for (let s = 0; s < range2.length; s++) {
        server_default.historyParam(data, store_default.currentSheetIndex, range2[s]);
      }
    }
    if (store_default.clearjfundo) {
      store_default.jfundo.length = 0;
      redo2["data"] = store_default.flowdata;
      redo2["curdata"] = data;
      redo2["sheetIndex"] = store_default.currentSheetIndex;
      redo2["cdformat"] = $.extend(true, [], store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"]);
      redo2["curCdformat"] = cdformat;
      store_default.jfredo.push(redo2);
    }
    store_default.flowdata = data;
    editor_default.webWorkerFlowDataCache(data);
    store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].data = store_default.flowdata;
    if (cfg != null) {
      store_default.config = cfg;
      store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
      server_default.saveParam("all", store_default.currentSheetIndex, cfg, {"k": "config"});
    }
    if (cdformat != null) {
      store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"] = cdformat;
      server_default.saveParam("all", store_default.currentSheetIndex, cdformat, {"k": "luckysheet_conditionformat_save"});
    }
    store_default.luckysheet_select_save = $.extend(true, [], range2);
    if (store_default.luckysheet_select_save.length > 0) {
      selectHightlightShow();
    }
    if (isRunExecFunction) {
      runExecFunction(range2, store_default.currentSheetIndex, data);
    }
    jfrefreshgrid_rhcw(rowheight, colwidth);
    if (isRefreshCanvas) {
      refreshCanvasTimeOut = setTimeout(function() {
        luckysheetrefreshgrid();
      }, 1);
    }
    sheetmanage_default.storeSheetParamALL();
    window.luckysheet_getcelldata_cache = null;
  }
  function jfrefreshrange(data, range2, cdformat) {
    clearTimeout(refreshCanvasTimeOut);
    if (store_default.clearjfundo) {
      store_default.jfundo.length = 0;
      store_default.jfredo.push({
        "type": "rangechange",
        "data": store_default.flowdata,
        "curdata": data,
        "range": range2,
        "sheetIndex": store_default.currentSheetIndex,
        "cdformat": $.extend(true, [], store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"]),
        "curCdformat": cdformat
      });
    }
    store_default.flowdata = data;
    editor_default.webWorkerFlowDataCache(store_default.flowdata);
    store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].data = store_default.flowdata;
    if (cdformat != null) {
      store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"] = cdformat;
    }
    runExecFunction(range2, store_default.currentSheetIndex, data);
    refreshCanvasTimeOut = setTimeout(function() {
      luckysheetrefreshgrid();
    }, 1);
    for (let s = 0; s < range2.length; s++) {
      server_default.historyParam(store_default.flowdata, store_default.currentSheetIndex, range2[s]);
    }
  }
  function jfrefreshgrid_adRC(data, cfg, ctrlType, ctrlValue, calc, filterObj, cf, af, freezen, dataVerification, hyperlink) {
    let file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
    collaborativeEditBox();
    let mcData = [];
    for (let m in cfg["merge"]) {
      let mc = cfg["merge"][m];
      for (let r2 = mc.r; r2 <= mc.r + mc.rs - 1; r2++) {
        for (let c2 = mc.c; c2 <= mc.c + mc.cs - 1; c2++) {
          if (data[r2][c2] == null) {
            data[r2][c2] = {};
          }
          if (r2 == mc.r && c2 == mc.c) {
            data[r2][c2].mc = mc;
          } else {
            data[r2][c2].mc = {"r": mc.r, "c": mc.c};
          }
          mcData.push({"r": r2, "c": c2});
        }
      }
    }
    let funcData = [];
    if (store_default.clearjfundo) {
      store_default.jfundo.length = 0;
      store_default.jfredo.push({
        "type": ctrlType,
        "sheetIndex": store_default.currentSheetIndex,
        "data": store_default.flowdata,
        "curData": data,
        "config": $.extend(true, {}, store_default.config),
        "curConfig": cfg,
        "ctrlValue": ctrlValue,
        "mcData": mcData,
        "calc": $.extend(true, [], file.calcChain),
        "curCalc": calc,
        "funcData": funcData,
        "filterObj": {"filter_select": $.extend(true, {}, file.filter_select), "filter": $.extend(true, {}, file.filter)},
        "curFilterObj": filterObj,
        "cf": $.extend(true, [], file.luckysheet_conditionformat_save),
        "curCf": cf,
        "af": $.extend(true, [], file.luckysheet_alternateformat_save),
        "curAf": af,
        "freezen": {"freezenhorizontaldata": freezen_default.freezenhorizontaldata, "freezenverticaldata": freezen_default.freezenverticaldata},
        "curFreezen": freezen,
        "dataVerification": $.extend(true, {}, file.dataVerification),
        "curDataVerification": dataVerification,
        "hyperlink": $.extend(true, {}, file.hyperlink),
        "curHyperlink": hyperlink,
        "range": file.luckysheet_select_save,
        "dataRange": [...file.luckysheet_select_save]
      });
    }
    let index2 = ctrlValue.index, len = ctrlValue.len, rc = ctrlValue.rc;
    if (ctrlType == "addRC") {
      let direction = ctrlValue.direction, restore = ctrlValue.restore;
      let addData = [];
      if (restore) {
        if (rc == "r") {
          let st_r;
          if (direction == "lefttop") {
            st_r = index2;
          } else if (direction == "rightbottom") {
            st_r = index2 + 1;
          }
          let ed_r = st_r + len - 1;
          for (let r2 = st_r; r2 <= ed_r; r2++) {
            let row = [];
            for (let c2 = 0; c2 < data[0].length; c2++) {
              let cell = data[r2][c2];
              row.push(cell);
            }
            addData.push(row);
          }
        } else if (rc == "c") {
          let st_c;
          if (direction == "lefttop") {
            st_c = index2;
          } else if (direction == "rightbottom") {
            st_c = index2 + 1;
          }
          let ed_c = st_c + len - 1;
          for (let r2 = 0; r2 < data.length; r2++) {
            let row = [];
            for (let c2 = st_c; c2 <= ed_c; c2++) {
              let cell = data[r2][c2];
              row.push(cell);
            }
            addData.push(row);
          }
        }
      }
      server_default.saveParam("arc", store_default.currentSheetIndex, {"index": index2, "len": len, "direction": direction, "data": addData}, {"rc": rc});
    } else if (ctrlType == "delRC") {
      server_default.saveParam("drc", store_default.currentSheetIndex, {"index": index2, "len": len}, {"rc": rc});
    }
    store_default.flowdata = data;
    editor_default.webWorkerFlowDataCache(store_default.flowdata);
    file.data = data;
    store_default.config = cfg;
    file.config = store_default.config;
    server_default.saveParam("all", store_default.currentSheetIndex, cfg, {"k": "config"});
    for (let i2 = 0; i2 < mcData.length; i2++) {
      let mcData_r = mcData[i2].r, mcData_c = mcData[i2].c;
      server_default.saveParam("v", store_default.currentSheetIndex, store_default.flowdata[mcData_r][mcData_c], {"r": mcData_r, "c": mcData_c});
    }
    if (calc.length > 0) {
      for (let i2 = 0; i2 < calc.length; i2++) {
        let clc = calc[i2];
        let clc_r = clc.r, clc_c = clc.c, clc_i = clc.index, clc_funcStr = getcellFormula(clc_r, clc_c, clc_i, data);
        let clc_result = formula_default.execfunction(clc_funcStr, clc_r, clc_c, clc_i, null, true);
        clc.func = clc_result;
        if (data[clc_r][clc_c].f == clc_funcStr) {
          setcellvalue(clc_r, clc_c, data, clc_result[1]);
        }
      }
    }
    file.calcChain = calc;
    server_default.saveParam("all", store_default.currentSheetIndex, calc, {"k": "calcChain"});
    for (let i2 = 0; i2 < funcData.length; i2++) {
      let funcData_r = funcData[i2].r, funcData_c = funcData[i2].c;
      server_default.saveParam("v", store_default.currentSheetIndex, store_default.flowdata[funcData_r][funcData_c], {"r": funcData_r, "c": funcData_c});
    }
    if (filterObj != null) {
      file.filter_select = filterObj.filter_select;
      file.filter = filterObj.filter;
    } else {
      file.filter_select = null;
      file.filter = null;
    }
    createFilterOptions(file.filter_select, file.filter);
    server_default.saveParam("all", store_default.currentSheetIndex, file.filter_select, {"k": "filter_select"});
    server_default.saveParam("all", store_default.currentSheetIndex, file.filter, {"k": "filter"});
    file.luckysheet_conditionformat_save = cf;
    server_default.saveParam("all", store_default.currentSheetIndex, file.luckysheet_conditionformat_save, {"k": "luckysheet_conditionformat_save"});
    file.luckysheet_alternateformat_save = af;
    server_default.saveParam("all", store_default.currentSheetIndex, file.luckysheet_alternateformat_save, {"k": "luckysheet_alternateformat_save"});
    if (freezen != null) {
      freezen_default.freezenhorizontaldata = freezen.freezenhorizontaldata;
      freezen_default.freezenverticaldata = freezen.freezenverticaldata;
    } else {
      freezen_default.freezenhorizontaldata = null;
      freezen_default.freezenverticaldata = null;
    }
    dataVerificationCtrl_default.dataVerification = dataVerification;
    file.dataVerification = dataVerification;
    server_default.saveParam("all", store_default.currentSheetIndex, file.dataVerification, {"k": "dataVerification"});
    hyperlinkCtrl_default.hyperlink = hyperlink;
    file.hyperlink = hyperlink;
    server_default.saveParam("all", store_default.currentSheetIndex, file.hyperlink, {"k": "hyperlink"});
    jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
  }
  function jfrefreshgrid_deleteCell(data, cfg, ctrl, calc, filterObj, cf, dataVerification, hyperlink) {
    let file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
    clearTimeout(refreshCanvasTimeOut);
    collaborativeEditBox();
    let mcData = [];
    if (JSON.stringify(cfg["merge"]) == "{}") {
      for (let r2 = 0; r2 < data.length; r2++) {
        for (let c2 = 0; c2 < data[0].length; c2++) {
          let cell = data[r2][c2];
          if (cell != null && cell.mc != null) {
            delete cell.mc;
            mcData.push({"r": r2, "c": c2});
          }
        }
      }
    } else {
      for (let m in cfg["merge"]) {
        let mc = cfg["merge"][m];
        for (let r2 = mc.r; r2 <= mc.r + mc.rs - 1; r2++) {
          for (let c2 = mc.c; c2 <= mc.c + mc.cs - 1; c2++) {
            if (data[r2][c2] == null) {
              data[r2][c2] = {};
            }
            if (r2 == mc.r && c2 == mc.c) {
              if (JSON.stringify(data[r2][c2].mc) != JSON.stringify(mc)) {
                data[r2][c2].mc = mc;
                mcData.push({"r": r2, "c": c2});
              }
            } else {
              let tempMc = {"r": mc.r, "c": mc.c};
              if (JSON.stringify(data[r2][c2].mc) != JSON.stringify(tempMc)) {
                data[r2][c2].mc = tempMc;
                mcData.push({"r": r2, "c": c2});
              }
            }
          }
        }
      }
    }
    let funcData = [];
    if (store_default.clearjfundo) {
      store_default.jfundo.length = 0;
      store_default.jfredo.push({
        "type": "deleteCell",
        "sheetIndex": store_default.currentSheetIndex,
        "ctrl": ctrl,
        "data": store_default.flowdata,
        "curData": data,
        "config": $.extend(true, {}, store_default.config),
        "curConfig": cfg,
        "mcData": mcData,
        "calc": $.extend(true, [], file.calcChain),
        "curCalc": calc,
        "funcData": funcData,
        "filterObj": {"filter_select": $.extend(true, {}, file.filter_select), "filter": $.extend(true, {}, file.filter)},
        "curFilterObj": filterObj,
        "cf": $.extend(true, [], file.luckysheet_conditionformat_save),
        "curCf": cf,
        "dataVerification": $.extend(true, {}, file.dataVerification),
        "curDataVerification": dataVerification,
        "hyperlink": $.extend(true, {}, file.hyperlink),
        "curHyperlink": hyperlink,
        "range": file.luckysheet_select_save,
        "dataRange": [...file.luckysheet_select_save]
      });
    }
    store_default.flowdata = data;
    editor_default.webWorkerFlowDataCache(store_default.flowdata);
    file.data = data;
    if (server_default.allowUpdate) {
      let type = ctrl.type, str = ctrl.str, edr = ctrl.edr, stc = ctrl.stc, edc = ctrl.edc;
      let range2;
      if (type == "moveUp") {
        range2 = {
          "row": [str, data.length - 1],
          "column": [stc, edc]
        };
      } else if (type == "moveLeft") {
        range2 = {
          "row": [str, edr],
          "column": [stc, data[0].length - 1]
        };
      }
      server_default.historyParam(store_default.flowdata, store_default.currentSheetIndex, range2);
    }
    store_default.config = cfg;
    file.config = store_default.config;
    server_default.saveParam("all", store_default.currentSheetIndex, cfg, {"k": "config"});
    for (let i2 = 0; i2 < mcData.length; i2++) {
      let mcData_r = mcData[i2].r, mcData_c = mcData[i2].c;
      server_default.saveParam("v", store_default.currentSheetIndex, store_default.flowdata[mcData_r][mcData_c], {"r": mcData_r, "c": mcData_c});
    }
    if (calc.length > 0) {
      for (let i2 = 0; i2 < calc.length; i2++) {
        let clc = calc[i2];
        let clc_r = clc.r, clc_c = clc.c, clc_i = clc.index, clc_funcStr = getcellFormula(clc_r, clc_c, clc_i, data);
        let clc_result = formula_default.execfunction(clc_funcStr, clc_r, clc_c, clc_i, null, true);
        clc.func = clc_result;
        if (data[clc_r][clc_c].f == clc_funcStr) {
          setcellvalue(clc_r, clc_c, data, clc_result[1]);
        }
      }
    }
    file.calcChain = calc;
    server_default.saveParam("all", store_default.currentSheetIndex, calc, {"k": "calcChain"});
    for (let i2 = 0; i2 < funcData.length; i2++) {
      let funcData_r = funcData[i2].r, funcData_c = funcData[i2].c;
      server_default.saveParam("v", store_default.currentSheetIndex, store_default.flowdata[funcData_r][funcData_c], {"r": funcData_r, "c": funcData_c});
    }
    if (filterObj != null) {
      file.filter_select = filterObj.filter_select;
      file.filter = filterObj.filter;
    } else {
      file.filter_select = null;
      file.filter = null;
    }
    createFilterOptions(file.filter_select, file.filter);
    server_default.saveParam("all", store_default.currentSheetIndex, file.filter_select, {"k": "filter_select"});
    server_default.saveParam("all", store_default.currentSheetIndex, file.filter, {"k": "filter"});
    file.luckysheet_conditionformat_save = cf;
    server_default.saveParam("all", store_default.currentSheetIndex, file.luckysheet_conditionformat_save, {"k": "luckysheet_conditionformat_save"});
    dataVerificationCtrl_default.dataVerification = dataVerification;
    file.dataVerification = dataVerification;
    server_default.saveParam("all", store_default.currentSheetIndex, file.dataVerification, {"k": "dataVerification"});
    hyperlinkCtrl_default.hyperlink = hyperlink;
    file.hyperlink = hyperlink;
    server_default.saveParam("all", store_default.currentSheetIndex, file.hyperlink, {"k": "hyperlink"});
    refreshCanvasTimeOut = setTimeout(function() {
      luckysheetrefreshgrid();
    }, 1);
  }
  function jfrefreshgrid_pastcut(source, target, RowlChange) {
    let execF_rc = {};
    formula_default.execFunctionExist = [];
    clearTimeout(refreshCanvasTimeOut);
    for (let r2 = source["range"].row[0]; r2 <= source["range"].row[1]; r2++) {
      for (let c2 = source["range"].column[0]; c2 <= source["range"].column[1]; c2++) {
        if (r2 + "_" + c2 + "_" + source["sheetIndex"] in execF_rc) {
          continue;
        }
        execF_rc[r2 + "_" + c2 + "_" + source["sheetIndex"]] = 0;
        formula_default.execFunctionExist.push({"r": r2, "c": c2, "i": source["sheetIndex"]});
      }
    }
    for (let r2 = target["range"].row[0]; r2 <= target["range"].row[1]; r2++) {
      for (let c2 = target["range"].column[0]; c2 <= target["range"].column[1]; c2++) {
        if (r2 + "_" + c2 + "_" + target["sheetIndex"] in execF_rc) {
          continue;
        }
        execF_rc[r2 + "_" + c2 + "_" + target["sheetIndex"]] = 0;
        formula_default.execFunctionExist.push({"r": r2, "c": c2, "i": target["sheetIndex"]});
      }
    }
    if (store_default.clearjfundo) {
      store_default.jfundo.length = 0;
      store_default.jfredo.push({
        "type": "pasteCut",
        "source": source,
        "target": target,
        "RowlChange": RowlChange
      });
    }
    let rowHeight;
    if (store_default.currentSheetIndex == source["sheetIndex"]) {
      store_default.config = source["curConfig"];
      rowHeight = source["curData"].length;
      store_default.luckysheetfile[getSheetIndex(target["sheetIndex"])]["config"] = target["curConfig"];
    } else if (store_default.currentSheetIndex == target["sheetIndex"]) {
      store_default.config = target["curConfig"];
      rowHeight = target["curData"].length;
      store_default.luckysheetfile[getSheetIndex(source["sheetIndex"])]["config"] = source["curConfig"];
    }
    if (RowlChange) {
      store_default.visibledatarow = [];
      store_default.rh_height = 0;
      for (let i2 = 0; i2 < rowHeight; i2++) {
        let rowlen = store_default.defaultrowlen;
        if (store_default.config["rowlen"] != null && store_default.config["rowlen"][i2] != null) {
          rowlen = store_default.config["rowlen"][i2];
        }
        if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][i2] != null) {
          rowlen = store_default.config["rowhidden"][i2];
          store_default.visibledatarow.push(store_default.rh_height);
          continue;
        } else {
          store_default.rh_height += rowlen + 1;
        }
        store_default.visibledatarow.push(store_default.rh_height);
      }
      store_default.rh_height += 80;
      if (store_default.currentSheetIndex == source["sheetIndex"]) {
        let rowlenArr = computeRowlenArr(target["curData"].length, target["curConfig"]);
        store_default.luckysheetfile[getSheetIndex(target["sheetIndex"])]["visibledatarow"] = rowlenArr;
      } else if (store_default.currentSheetIndex == target["sheetIndex"]) {
        let rowlenArr = computeRowlenArr(source["curData"].length, source["curConfig"]);
        store_default.luckysheetfile[getSheetIndex(source["sheetIndex"])]["visibledatarow"] = rowlenArr;
      }
    }
    if (store_default.currentSheetIndex == source["sheetIndex"]) {
      store_default.flowdata = source["curData"];
      store_default.luckysheetfile[getSheetIndex(target["sheetIndex"])]["data"] = target["curData"];
    } else if (store_default.currentSheetIndex == target["sheetIndex"]) {
      store_default.flowdata = target["curData"];
      store_default.luckysheetfile[getSheetIndex(source["sheetIndex"])]["data"] = source["curData"];
    }
    editor_default.webWorkerFlowDataCache(store_default.flowdata);
    store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].data = store_default.flowdata;
    if (store_default.currentSheetIndex == target["sheetIndex"]) {
      store_default.luckysheet_select_save = [{"row": target["range"].row, "column": target["range"].column}];
    } else {
      store_default.luckysheet_select_save = [{"row": source["range"].row, "column": source["range"].column}];
    }
    if (store_default.luckysheet_select_save.length > 0) {
      selectHightlightShow();
    }
    store_default.luckysheetfile[getSheetIndex(source["sheetIndex"])].luckysheet_conditionformat_save = source["curCdformat"];
    store_default.luckysheetfile[getSheetIndex(target["sheetIndex"])].luckysheet_conditionformat_save = target["curCdformat"];
    if (store_default.currentSheetIndex == source["sheetIndex"]) {
      dataVerificationCtrl_default.dataVerification = source["curDataVerification"];
    } else if (store_default.currentSheetIndex == target["sheetIndex"]) {
      dataVerificationCtrl_default.dataVerification = target["curDataVerification"];
    }
    store_default.luckysheetfile[getSheetIndex(source["sheetIndex"])].dataVerification = source["curDataVerification"];
    store_default.luckysheetfile[getSheetIndex(target["sheetIndex"])].dataVerification = target["curDataVerification"];
    formula_default.execFunctionExist.reverse();
    formula_default.execFunctionGroup(null, null, null, null, target["curData"]);
    formula_default.execFunctionGlobalData = null;
    let index2 = getSheetIndex(store_default.currentSheetIndex);
    let file = store_default.luckysheetfile[index2];
    file.scrollTop = $("#luckysheet-cell-main").scrollTop();
    file.scrollLeft = $("#luckysheet-cell-main").scrollLeft();
    sheetmanage_default.showSheet();
    refreshCanvasTimeOut = setTimeout(function() {
      luckysheetrefreshgrid();
    }, 1);
    sheetmanage_default.storeSheetParamALL();
    server_default.saveParam("all", source["sheetIndex"], source["curConfig"], {"k": "config"});
    server_default.saveParam("all", target["sheetIndex"], target["curConfig"], {"k": "config"});
    server_default.historyParam(source["curData"], source["sheetIndex"], {"row": source["range"]["row"], "column": source["range"]["column"]});
    server_default.historyParam(target["curData"], target["sheetIndex"], {"row": target["range"]["row"], "column": target["range"]["column"]});
    server_default.saveParam("all", source["sheetIndex"], source["curCdformat"], {"k": "luckysheet_conditionformat_save"});
    server_default.saveParam("all", target["sheetIndex"], target["curCdformat"], {"k": "luckysheet_conditionformat_save"});
    server_default.saveParam("all", source["sheetIndex"], source["curDataVerification"], {"k": "dataVerification"});
    server_default.saveParam("all", target["sheetIndex"], target["curDataVerification"], {"k": "dataVerification"});
  }
  function jfrefreshgrid_rhcw(rowheight, colwidth, isRefreshCanvas = true) {
    rhchInit(rowheight, colwidth);
    clearTimeout(refreshCanvasTimeOut);
    sheetmanage_default.storeSheetParam();
    let calcChain = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].calcChain;
    if (calcChain != null && calcChain.length > 0) {
      if (store_default.config["rowlen"] == null) {
        store_default.config["rowlen"] = {};
      }
      if (store_default.config["columnlen"] == null) {
        store_default.config["columnlen"] = {};
      }
      for (let i2 = 0; i2 < calcChain.length; i2++) {
        let r2 = calcChain[i2].r, c2 = calcChain[i2].c, index2 = calcChain[i2].index;
        if (index2 == store_default.currentSheetIndex && store_default.flowdata[r2][c2] != null && store_default.flowdata[r2][c2].spl != null && (r2 in store_default.config["rowlen"] || c2 in store_default.config["columnlen"])) {
          window.luckysheetCurrentRow = r2;
          window.luckysheetCurrentColumn = c2;
          window.luckysheetCurrentFunction = store_default.flowdata[r2][c2].f;
          let fp = $.trim(formula_default.functionParserExe(store_default.flowdata[r2][c2].f));
          let sparklines = new Function("return " + fp)();
          store_default.flowdata[r2][c2].spl = sparklines;
          server_default.saveParam("v", store_default.currentSheetIndex, store_default.flowdata[r2][c2], {"r": r2, "c": c2});
        }
      }
      store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].data = store_default.flowdata;
    }
    postil_default.positionSync();
    selectHightlightShow();
    collaborativeEditBox();
    if ($(".luckysheet-selection-copy").is(":visible")) {
      selectionCopyShow();
    }
    if ($("#luckysheet-dropCell-icon").is(":visible")) {
      $("#luckysheet-dropCell-icon").remove();
    }
    if (freezen_default.freezenhorizontaldata != null && freezen_default.freezenverticaldata != null) {
      let row_st = freezen_default.freezenhorizontaldata[1] - 1;
      let col_st = freezen_default.freezenverticaldata[1] - 1;
      let scrollTop = freezen_default.freezenhorizontaldata[2];
      let scrollLeft = freezen_default.freezenverticaldata[2];
      let top = store_default.visibledatarow[row_st] - 2 - scrollTop + store_default.columnHeaderHeight;
      let freezenhorizontaldata = [
        store_default.visibledatarow[row_st],
        row_st + 1,
        scrollTop,
        freezen_default.cutVolumn(store_default.visibledatarow, row_st + 1),
        top
      ];
      let left = store_default.visibledatacolumn[col_st] - 2 - scrollLeft + store_default.rowHeaderWidth;
      let freezenverticaldata = [
        store_default.visibledatacolumn[col_st],
        col_st + 1,
        scrollLeft,
        freezen_default.cutVolumn(store_default.visibledatacolumn, col_st + 1),
        left
      ];
      freezen_default.saveFreezen(freezenhorizontaldata, top, freezenverticaldata, left);
      freezen_default.createFreezenHorizontal(freezenhorizontaldata, top);
      freezen_default.createFreezenVertical(freezenverticaldata, left);
      freezen_default.createAssistCanvas();
    } else if (freezen_default.freezenhorizontaldata != null) {
      let row_st = freezen_default.freezenhorizontaldata[1] - 1;
      let scrollTop = freezen_default.freezenhorizontaldata[2];
      let top = store_default.visibledatarow[row_st] - 2 - scrollTop + store_default.columnHeaderHeight;
      let freezenhorizontaldata = [
        store_default.visibledatarow[row_st],
        row_st + 1,
        scrollTop,
        freezen_default.cutVolumn(store_default.visibledatarow, row_st + 1),
        top
      ];
      freezen_default.saveFreezen(freezenhorizontaldata, top, null, null);
      freezen_default.createFreezenHorizontal(freezenhorizontaldata, top);
      freezen_default.createAssistCanvas();
    } else if (freezen_default.freezenverticaldata != null) {
      let col_st = freezen_default.freezenverticaldata[1] - 1;
      let scrollLeft = freezen_default.freezenverticaldata[2];
      let left = store_default.visibledatacolumn[col_st] - 2 - scrollLeft + store_default.rowHeaderWidth;
      let freezenverticaldata = [
        store_default.visibledatacolumn[col_st],
        col_st + 1,
        scrollLeft,
        freezen_default.cutVolumn(store_default.visibledatacolumn, col_st + 1),
        left
      ];
      freezen_default.saveFreezen(null, null, freezenverticaldata, left);
      freezen_default.createFreezenVertical(freezenverticaldata, left);
      freezen_default.createAssistCanvas();
    } else {
      if ($("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").length > 0) {
        $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").each(function(i2, e) {
          let str = $(e).data("str"), cindex = $(e).data("cindex");
          let left = store_default.visibledatacolumn[cindex] - 20;
          let top = str - 1 == -1 ? 0 : store_default.visibledatarow[str - 1];
          $(e).css({"left": left, "top": top});
        });
      }
    }
    if ($("#luckysheet-filter-selected-sheet" + store_default.currentSheetIndex).length > 0) {
      let luckysheet_filter_save = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].filter_select;
      let r1 = luckysheet_filter_save.row[0], r2 = luckysheet_filter_save.row[1];
      let c1 = luckysheet_filter_save.column[0], c2 = luckysheet_filter_save.column[1];
      let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
      let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
      $("#luckysheet-filter-selected-sheet" + store_default.currentSheetIndex).css({
        "left": col_pre,
        "width": col - col_pre - 1,
        "top": row_pre,
        "height": row - row_pre - 1
      });
    }
    sheetmanage_default.showSheet();
    if (isRefreshCanvas) {
      refreshCanvasTimeOut = setTimeout(function() {
        luckysheetrefreshgrid();
      }, 1);
    }
  }
  function luckysheetrefreshgrid(scrollWidth, scrollHeight) {
    formula_default.groupValuesRefresh();
    if (scrollWidth == null) {
      scrollWidth = $("#luckysheet-cell-main").scrollLeft();
    }
    if (scrollHeight == null) {
      scrollHeight = $("#luckysheet-cell-main").scrollTop();
    }
    if (freezen_default.freezenverticaldata != null || freezen_default.freezenhorizontaldata != null) {
      let freezen_horizon_px, freezen_horizon_ed, freezen_horizon_scrollTop;
      let freezen_vertical_px, freezen_vertical_ed, freezen_vertical_scrollTop;
      let drawWidth = store_default.luckysheetTableContentHW[0], drawHeight = store_default.luckysheetTableContentHW[1];
      if (freezen_default.freezenverticaldata != null && freezen_default.freezenhorizontaldata != null) {
        freezen_horizon_px = freezen_default.freezenhorizontaldata[0];
        freezen_horizon_ed = freezen_default.freezenhorizontaldata[1];
        freezen_horizon_scrollTop = freezen_default.freezenhorizontaldata[2];
        freezen_vertical_px = freezen_default.freezenverticaldata[0];
        freezen_vertical_ed = freezen_default.freezenverticaldata[1];
        freezen_vertical_scrollTop = freezen_default.freezenverticaldata[2];
        luckysheetDrawMain(freezen_vertical_scrollTop, freezen_horizon_scrollTop, freezen_vertical_px, freezen_horizon_px, 1, 1, null, null, "freezen_3");
        luckysheetDrawMain(scrollWidth + freezen_vertical_px - freezen_vertical_scrollTop, freezen_horizon_scrollTop, drawWidth - freezen_vertical_px + freezen_vertical_scrollTop, freezen_horizon_px, 1, 1, null, null, "freezen_4");
        luckysheetDrawMain(freezen_vertical_scrollTop, scrollHeight + freezen_horizon_px - freezen_horizon_scrollTop, freezen_vertical_px, drawHeight - freezen_horizon_px + freezen_horizon_scrollTop, 1, 1, null, null, "freezen_7");
        luckysheetDrawMain(scrollWidth + freezen_vertical_px - freezen_vertical_scrollTop, scrollHeight + freezen_horizon_px - freezen_horizon_scrollTop, drawWidth - freezen_vertical_px + freezen_vertical_scrollTop, drawHeight - freezen_horizon_px + freezen_horizon_scrollTop, freezen_vertical_px - freezen_vertical_scrollTop + store_default.rowHeaderWidth, freezen_horizon_px - freezen_horizon_scrollTop + store_default.columnHeaderHeight);
        luckysheetDrawgridColumnTitle(freezen_vertical_scrollTop, freezen_vertical_px, store_default.rowHeaderWidth);
        luckysheetDrawgridColumnTitle(scrollWidth + freezen_vertical_px - freezen_vertical_scrollTop, drawWidth - freezen_vertical_px + freezen_vertical_scrollTop, freezen_vertical_px - freezen_vertical_scrollTop + store_default.rowHeaderWidth);
        luckysheetDrawgridRowTitle(freezen_horizon_scrollTop, freezen_horizon_px, store_default.columnHeaderHeight);
        luckysheetDrawgridRowTitle(scrollHeight + freezen_horizon_px - freezen_horizon_scrollTop, drawHeight - freezen_horizon_px + freezen_horizon_scrollTop, freezen_horizon_px - freezen_horizon_scrollTop + store_default.columnHeaderHeight);
      } else if (freezen_default.freezenhorizontaldata != null) {
        freezen_horizon_px = freezen_default.freezenhorizontaldata[0];
        freezen_horizon_ed = freezen_default.freezenhorizontaldata[1];
        freezen_horizon_scrollTop = freezen_default.freezenhorizontaldata[2];
        luckysheetDrawMain(scrollWidth, freezen_horizon_scrollTop, drawWidth, freezen_horizon_px, 1, 1, null, null, "freezen_h");
        luckysheetDrawMain(scrollWidth, scrollHeight + freezen_horizon_px - freezen_horizon_scrollTop, drawWidth, drawHeight - freezen_horizon_px + freezen_horizon_scrollTop, null, freezen_horizon_px - freezen_horizon_scrollTop + store_default.columnHeaderHeight);
        luckysheetDrawgridColumnTitle(scrollWidth, drawWidth, null);
        luckysheetDrawgridRowTitle(freezen_horizon_scrollTop, freezen_horizon_px, store_default.columnHeaderHeight);
        luckysheetDrawgridRowTitle(scrollHeight + freezen_horizon_px - freezen_horizon_scrollTop, drawHeight - freezen_horizon_px + freezen_horizon_scrollTop, freezen_horizon_px - freezen_horizon_scrollTop + store_default.columnHeaderHeight);
      } else if (freezen_default.freezenverticaldata != null) {
        freezen_vertical_px = freezen_default.freezenverticaldata[0];
        freezen_vertical_ed = freezen_default.freezenverticaldata[1];
        freezen_vertical_scrollTop = freezen_default.freezenverticaldata[2];
        luckysheetDrawMain(freezen_vertical_scrollTop, scrollHeight, freezen_vertical_px, drawHeight, 1, 1, null, null, "freezen_v");
        luckysheetDrawMain(scrollWidth + freezen_vertical_px - freezen_vertical_scrollTop, scrollHeight, drawWidth - freezen_vertical_px + freezen_vertical_scrollTop, drawHeight, freezen_vertical_px - freezen_vertical_scrollTop + store_default.rowHeaderWidth, null);
        luckysheetDrawgridRowTitle(scrollHeight, drawHeight, null);
        luckysheetDrawgridColumnTitle(freezen_vertical_scrollTop, freezen_vertical_px, store_default.rowHeaderWidth);
        luckysheetDrawgridColumnTitle(scrollWidth + freezen_vertical_px - freezen_vertical_scrollTop, drawWidth - freezen_vertical_px + freezen_vertical_scrollTop, freezen_vertical_px - freezen_vertical_scrollTop + store_default.rowHeaderWidth);
      }
    } else {
      if ($("#luckysheetTableContent").length == 0) {
        return;
      }
      let luckysheetTableContent = $("#luckysheetTableContent").get(0).getContext("2d");
      luckysheetDrawMain(scrollWidth, scrollHeight);
      luckysheetDrawgridColumnTitle(scrollWidth);
      luckysheetDrawgridRowTitle(scrollHeight);
      luckysheetTableContent.clearRect(0, 0, store_default.rowHeaderWidth * store_default.devicePixelRatio - 1, store_default.columnHeaderHeight * store_default.devicePixelRatio - 1);
    }
  }
  var refreshCanvasTimeOut;
  var init_refresh = __esm({
    "src/global/refresh.js"() {
      init_rhchInit();
      init_formula();
      init_editor();
      init_setdata();
      init_getdata();
      init_getRowlen();
      init_draw();
      init_freezen();
      init_server();
      init_sheetmanage();
      init_postil();
      init_dataVerificationCtrl();
      init_hyperlinkCtrl();
      init_select();
      init_filter();
      init_get();
      init_store();
      refreshCanvasTimeOut = null;
    }
  });

  // src/controllers/imageUpdateCtrl.js
  function customImageUpdate(method2, url, obj) {
    return new Promise((resolve, reject) => {
      const xhr = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHTTP");
      xhr.open(method2, url);
      xhr.send(JSON.stringify(obj));
      xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
          if (xhr.status == 200) {
            resolve(xhr.responseText);
          } else {
            reject("error");
          }
        }
      };
    });
  }
  var init_imageUpdateCtrl = __esm({
    "src/controllers/imageUpdateCtrl.js"() {
    }
  });

  // src/controllers/server.js
  var import_pako, import_dayjs3, server, server_default;
  var init_server = __esm({
    "src/controllers/server.js"() {
      import_pako = __toModule(require_pako());
      init_loading();
      init_refresh();
      init_editor();
      init_constant();
      init_sheetmanage();
      init_menuButton();
      init_filter();
      init_freezen();
      init_postil();
      init_imageCtrl();
      init_dataVerificationCtrl();
      init_hyperlinkCtrl();
      init_util();
      init_get();
      init_store();
      init_select();
      init_locale();
      import_dayjs3 = __toModule(require_dayjs_min());
      init_json();
      init_luckysheetConfigsetting();
      init_imageUpdateCtrl();
      init_method();
      server = {
        gridKey: null,
        loadUrl: null,
        updateUrl: null,
        updateImageUrl: null,
        title: null,
        loadSheetUrl: null,
        retryTimer: null,
        allowUpdate: false,
        historyParam: function(data, sheetIndex, range2) {
          let _this = this;
          let r1 = range2.row[0], r2 = range2.row[1];
          let c1 = range2.column[0], c2 = range2.column[1];
          if (r1 == r2 && c1 == c2) {
            let v = data[r1][c1];
            _this.saveParam("v", sheetIndex, v, {"r": r1, "c": c1});
          } else {
            let rowlen = r2 - r1 + 1;
            let collen = c2 - c1 + 1;
            let timeR = Math.floor(1e3 / collen);
            let n = Math.ceil(rowlen / timeR);
            for (let i2 = 0; i2 < n; i2++) {
              let str = r1 + timeR * i2;
              let edr;
              if (i2 == n - 1) {
                edr = r2;
              } else {
                edr = r1 + timeR * (i2 + 1) - 1;
              }
              let v = [];
              for (let r3 = str; r3 <= edr; r3++) {
                let v_row = [];
                for (let c3 = c1; c3 <= c2; c3++) {
                  if (data[r3] == null) {
                    v_row.push(null);
                  } else {
                    v_row.push(data[r3][c3]);
                  }
                }
                v.push(v_row);
              }
              _this.saveParam("rv", sheetIndex, v, {"range": {"row": [str, edr], "column": [c1, c2]}});
              if (i2 == n - 1) {
                _this.saveParam("rv_end", sheetIndex, null);
              }
            }
          }
        },
        saveParam: function(type, index2, value, params) {
          let _this = this;
          if (!_this.allowUpdate) {
            return;
          }
          if (value == void 0) {
            value = null;
          }
          let d = {};
          d.t = type;
          d.i = index2;
          d.v = value;
          if (type === "shs") {
            return;
          }
          if (type == "rv") {
            d.range = params.range;
          } else if (type == "v" || type == "fu" || type == "fm") {
            d.r = params.r;
            d.c = params.c;
          } else if (type == "fc") {
            d.op = params.op;
            d.pos = params.pos;
          } else if (type == "drc" || type == "arc" || type == "h" || type == "wh") {
            d.rc = params.rc;
          } else if (type == "c") {
            d.cid = params.cid;
            d.op = params.op;
          } else if (type == "f") {
            d.op = params.op;
            d.pos = params.pos;
          } else if (type == "s") {
          } else if (type == "sh") {
            d.op = params.op;
            if (params.cur != null) {
              d.cur = params.cur;
            }
          } else if (type == "cg") {
            d.k = params.k;
          } else if (type == "all") {
            d.k = params.k;
          }
          const customImageUpdateMethodConfig = luckysheetConfigsetting_default.imageUpdateMethodConfig;
          if (JSON.stringify(customImageUpdateMethodConfig) !== "{}") {
            if (d.k != "images") {
              let msg = import_pako.default.gzip(encodeURIComponent(JSON.stringify(d)), {to: "string"});
              if (_this.websocket != null) {
                _this.websocket.send(msg);
              }
            } else {
              customImageUpdate(customImageUpdateMethodConfig.method, customImageUpdateMethodConfig.url, d).then((data) => {
                console.log(data);
              }).catch((err) => {
                console.log(err);
              });
            }
          } else {
            let msg = import_pako.default.gzip(encodeURIComponent(JSON.stringify(d)), {to: "string"});
            if (_this.websocket != null) {
              _this.websocket.send(msg);
            }
          }
        },
        websocket: null,
        wxErrorCount: 0,
        openWebSocket: function() {
          let _this = this;
          if ("WebSocket" in window) {
            let wxUrl = _this.updateUrl + "?t=111&g=" + encodeURIComponent(_this.gridKey);
            if (_this.updateUrl.indexOf("?") > -1) {
              wxUrl = _this.updateUrl + "&t=111&g=" + encodeURIComponent(_this.gridKey);
            }
            _this.websocket = new WebSocket(wxUrl);
            _this.websocket.onopen = function() {
              console.info(locale_default().websocket.success);
              hideloading();
              _this.wxErrorCount = 0;
              _this.retryTimer = setInterval(function() {
                _this.websocket.send("rub");
              }, 6e4);
            };
            _this.websocket.onmessage = function(result) {
              store_default.result = result;
              let data = new Function("return " + result.data)();
              method_default.createHookFunction("cooperativeMessage", data);
              console.info(data);
              let type = data.type;
              let {message, id} = data;
              if (message === "\u7528\u6237\u9000\u51FA") {
                $("#luckysheet-multipleRange-show-" + id).hide();
                store_default.cooperativeEdit.changeCollaborationSize = store_default.cooperativeEdit.changeCollaborationSize.filter((value) => {
                  return value.id != id;
                });
                store_default.cooperativeEdit.checkoutData = store_default.cooperativeEdit.checkoutData.filter((value) => {
                  return value.id != id;
                });
              }
              if (type == 1) {
                const oldIndex = data.data.v.index;
                const sheetToUpdate = store_default.luckysheetfile.filter((sheet) => sheet.index === oldIndex)[0];
                if (sheetToUpdate !== null) {
                  setTimeout(() => {
                    const index2 = data.data.i;
                    sheetToUpdate.index = index2;
                    store_default.currentSheetIndex = index2;
                    $(`#luckysheet-sheets-item${oldIndex}`).attr("data-index", index2);
                    $(`#luckysheet-sheets-item${oldIndex}`).prop("id", `luckysheet-sheets-item${index2}`);
                    $(`#luckysheet-datavisual-selection-set-${oldIndex}`).prop("id", `luckysheet-datavisual-selection-set-${index2}`);
                  }, 1);
                }
              } else if (type == 2) {
                let item2 = JSON.parse(data.data);
                _this.wsUpdateMsg(item2);
                let chang_data = JSON.parse(data.data);
                if (chang_data.k == "columnlen") {
                  collaborativeEditBox(chang_data.v, null);
                } else if (chang_data.k == "rowlen") {
                  collaborativeEditBox(null, chang_data.v);
                }
              } else if (type == 3) {
                let id2 = data.id;
                let username = data.username;
                let item2 = JSON.parse(data.data);
                let type2 = item2.t, index2 = item2.i, value = item2.v;
                if (store_default.cooperativeEdit.changeCollaborationSize.length === 0) {
                  store_default.cooperativeEdit.changeCollaborationSize.push({id: id2, v: item2.v[0], i: index2});
                }
                let flag = store_default.cooperativeEdit.changeCollaborationSize.some((value1) => {
                  return value1.id == id2;
                });
                if (flag) {
                  store_default.cooperativeEdit.changeCollaborationSize.forEach((val) => {
                    if (val.id == id2) {
                      val.v = item2.v[0] || item2.range[0];
                      val.i = index2;
                    }
                  });
                } else {
                  store_default.cooperativeEdit.changeCollaborationSize.push({id: id2, v: item2.v[0], i: index2});
                }
                if (getObjType(value) != "array" && getObjType(value) !== "object") {
                  value = JSON.parse(value);
                }
                let r2 = 0;
                let c2 = 0;
                if (index2 == store_default.currentSheetIndex) {
                  if (getObjType(value) === "object" && value.op === "enterEdit") {
                    r2 = value.range[value.range.length - 1].row[0];
                    c2 = value.range[value.range.length - 1].column[0];
                    _this.multipleRangeShow(id2, username, r2, c2, value.op);
                  } else {
                    r2 = value[value.length - 1].row[0];
                    c2 = value[value.length - 1].column[0];
                    _this.multipleRangeShow(id2, username, r2, c2);
                  }
                } else {
                  if (getObjType(value) === "object" && value.op === "enterEdit") {
                    r2 = value.range[value.range.length - 1].row[0];
                    c2 = value.range[value.range.length - 1].column[0];
                  } else {
                    r2 = value[value.length - 1].row[0];
                    c2 = value[value.length - 1].column[0];
                  }
                }
                if (store_default.cooperativeEdit.checkoutData.length === 0) {
                  if (value.op) {
                    store_default.cooperativeEdit.checkoutData.push({id: id2, username, r: r2, c: c2, op: value.op, index: index2});
                  } else {
                    store_default.cooperativeEdit.checkoutData.push({id: id2, username, r: r2, c: c2, index: index2});
                  }
                }
                let checkoutFlag = store_default.cooperativeEdit.checkoutData.some((item3) => {
                  return item3.id == id2;
                });
                if (checkoutFlag) {
                  store_default.cooperativeEdit.checkoutData.forEach((item3) => {
                    if (item3.id == id2) {
                      item3.username = username;
                      item3.r = r2;
                      item3.c = c2;
                      item3.index = index2;
                      if (value.op === "enterEdit") {
                        item3.op = value.op;
                      }
                    }
                  });
                } else {
                  if (value.op === "enterEdit") {
                    store_default.cooperativeEdit.checkoutData.push({id: id2, username, r: r2, c: c2, op: value.op, index: index2});
                  } else {
                    store_default.cooperativeEdit.checkoutData.push({id: id2, username, r: r2, c: c2, index: index2});
                  }
                }
                store_default.cooperativeEdit.checkoutData.forEach((item3) => {
                  if (item3.index != store_default.currentSheetIndex) {
                    $("#luckysheet-multipleRange-show-" + item3.id).hide();
                    item3.op == "";
                  }
                });
                if ($("#luckysheet-multipleRange-show-" + id2)[0]) {
                  let change_bottom = $("#luckysheet-multipleRange-show-" + id2)[0].offsetHeight - 1;
                  $("#luckysheet-multipleRange-show-" + id2 + ">.username").css({"bottom": change_bottom + "px"});
                }
              } else if (type == 4) {
                let items = data.data === "" ? data.data : JSON.parse(data.data);
                for (let i2 = 0; i2 < items.length; i2++) {
                  _this.wsUpdateMsg(item[i2]);
                }
              } else if (type == 5) {
                showloading(data.data);
              } else if (type == 6) {
                hideloading();
              }
            };
            _this.websocket.onerror = function() {
              _this.wxErrorCount++;
              if (_this.wxErrorCount > 3) {
                showloading(locale_default().websocket.refresh);
              } else {
                showloading(locale_default().websocket.wait);
                _this.openWebSocket();
              }
            };
            _this.websocket.onclose = function(e) {
              console.info(locale_default().websocket.close);
              if (e.code === 1e3) {
                clearInterval(_this.retryTimer);
                _this.retryTimer = null;
              } else {
                alert(locale_default().websocket.contact);
              }
            };
          } else {
            alert(locale_default().websocket.support);
          }
        },
        wsUpdateMsg: function(item2) {
          let type = item2.t, index2 = item2.i, value = item2.v;
          let file = store_default.luckysheetfile[getSheetIndex(index2)];
          if (["v", "rv", "cg", "all", "fc", "drc", "arc", "f", "fsc", "fsr", "sh", "c"].includes(type) && file == null) {
            return;
          }
          if (type == "v") {
            if (file.data == null || file.data.length == 0) {
              return;
            }
            let r2 = item2.r, c2 = item2.c;
            file.data[r2][c2] = value;
            if (index2 == store_default.currentSheetIndex) {
              store_default.flowdata = file.data;
              editor_default.webWorkerFlowDataCache(store_default.flowdata);
              if (value != null && value.ps != null) {
                postil_default.buildPs(r2, c2, value.ps);
              } else {
                postil_default.buildPs(r2, c2, null);
              }
              setTimeout(function() {
                luckysheetrefreshgrid();
              }, 1);
            }
          } else if (type == "rv") {
            if (Object.keys(item2.range).length > 0) {
              store_default.cooperativeEdit.merge_range = item2.range;
              store_default.cooperativeEdit.merge_range.v = item2.v;
              collaborativeEditBox();
            }
            if (file.data == null || file.data.length == 0) {
              return;
            }
            let r1 = item2.range.row[0], r2 = item2.range.row[1];
            let c1 = item2.range.column[0], c2 = item2.range.column[1];
            for (let r3 = r1; r3 <= r2; r3++) {
              for (let c3 = c1; c3 <= c2; c3++) {
                file.data[r3][c3] = value[r3 - r1][c3 - c1];
              }
            }
            if (index2 == store_default.currentSheetIndex) {
              store_default.flowdata = file.data;
              editor_default.webWorkerFlowDataCache(store_default.flowdata);
              for (let r3 = r1; r3 <= r2; r3++) {
                for (let c3 = c1; c3 <= c2; c3++) {
                  if (value[r3 - r1][c3 - c1] != null && value[r3 - r1][c3 - c1].ps != null) {
                    postil_default.buildPs(r3, c3, value[r3 - r1][c3 - c1].ps);
                  } else {
                    postil_default.buildPs(r3, c3, null);
                  }
                }
              }
              setTimeout(function() {
                luckysheetrefreshgrid();
              }, 1);
            }
          } else if (type == "cg") {
            let k = item2.k;
            if (k == "borderInfo") {
              file["config"]["borderInfo"] = value;
            } else {
              if (!(k in file["config"])) {
                file["config"][k] = {};
              }
              if (value && typeof value == "object") {
                file["config"][k] = value;
              }
            }
            if (index2 == store_default.currentSheetIndex) {
              store_default.config = file["config"];
              if (k == "rowlen" || k == "columnlen" || k == "rowhidden") {
                jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
              }
              setTimeout(function() {
                luckysheetrefreshgrid();
              }, 1);
            }
          } else if (type == "all") {
            let k = item2.k;
            file[k] = value;
            if (k == "name") {
              $("#luckysheet-sheet-container-c #luckysheet-sheets-item" + index2).find("span.luckysheet-sheets-item-name").html(value);
            } else if (k == "color") {
              let currentSheetItem = $("#luckysheet-sheet-container-c #luckysheet-sheets-item" + index2);
              currentSheetItem.find(".luckysheet-sheets-item-color").remove();
              if (value != null || value != "") {
                currentSheetItem.append('<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + value + ';"></div>');
              }
            } else if (k == "pivotTable") {
            } else if (k == "frozen") {
              freezen_default.frozenTofreezen();
              if (index2 == store_default.currentSheetIndex) {
                const _locale = locale_default();
                const locale_freezen = _locale.freezen;
                if (file["freezen"].horizontal == null) {
                  $("#luckysheet-freezen-btn-horizontal").html('<i class="fa fa-list-alt"></i> ' + locale_freezen.freezenRow);
                  freezen_default.freezenhorizontaldata = null;
                  $("#luckysheet-freezebar-horizontal").hide();
                } else {
                  freezen_default.createFreezenHorizontal(file["freezen"].horizontal.freezenhorizontaldata, file["freezen"].horizontal.top);
                }
                if (file["freezen"].vertical == null) {
                  $("#luckysheet-freezen-btn-vertical").html('<i class="fa fa-indent"></i> ' + locale_freezen.freezenColumn);
                  freezen_default.freezenverticaldata = null;
                  $("#luckysheet-freezebar-vertical").hide();
                } else {
                  freezen_default.createFreezenVertical(file["freezen"].vertical.freezenverticaldata, file["freezen"].vertical.left);
                }
                freezen_default.createAssistCanvas();
              }
            } else if (k == "filter_select") {
              if (index2 == store_default.currentSheetIndex) {
                createFilterOptions(value);
              }
            } else if (k == "filter") {
              if (index2 == store_default.currentSheetIndex) {
                createFilterOptions(file.filter_select, value);
              }
            } else if (k == "luckysheet_conditionformat_save") {
              if (index2 == store_default.currentSheetIndex) {
                setTimeout(function() {
                  luckysheetrefreshgrid();
                }, 1);
              }
            } else if (k == "luckysheet_alternateformat_save") {
              if (index2 == store_default.currentSheetIndex) {
                setTimeout(function() {
                  luckysheetrefreshgrid();
                }, 1);
              }
            } else if (k == "config") {
              if (index2 == store_default.currentSheetIndex) {
                store_default.config = value;
                jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
              }
            } else if (k == "dynamicArray") {
              if (index2 == store_default.currentSheetIndex) {
                setTimeout(function() {
                  luckysheetrefreshgrid();
                }, 1);
              }
            } else if (k == "images") {
              if (index2 == store_default.currentSheetIndex) {
                imageCtrl_default.images = value;
                imageCtrl_default.allImagesShow();
                imageCtrl_default.init();
              }
            } else if (k == "dataVerification") {
              if (index2 == store_default.currentSheetIndex) {
                dataVerificationCtrl_default.dataVerification = value;
                dataVerificationCtrl_default.init();
              }
            } else if (k == "hyperlink") {
              if (index2 == store_default.currentSheetIndex) {
                hyperlinkCtrl_default.hyperlink = value;
                hyperlinkCtrl_default.init();
              }
            }
          } else if (type == "fc") {
            let op = item2.op, pos = item2.pos;
            if (getObjType(value) != "object") {
              value = new Function("return " + value)();
            }
            let r2 = value.r, c2 = value.c;
            let calcChain = file["calcChain"] == null ? [] : file["calcChain"];
            if (op == "add") {
              calcChain.push(value);
            } else if (op == "del") {
              for (let a = 0; a < calcChain.length; a++) {
                if (r2 == calcChain[a].r && c2 == calcChain[a].c && index2 == calcChain[a].index) {
                  calcChain.splice(a, 1);
                }
              }
            }
            setTimeout(function() {
              luckysheetrefreshgrid();
            }, 1);
          } else if (type == "drc") {
            if (file.data == null || file.data.length == 0) {
              return;
            }
            let rc = item2.rc, st_i = value.index, len = value.len, mc = value.mc, borderInfo = value.borderInfo;
            let data = file.data;
            if (rc == "r") {
              file["row"] -= len;
              data.splice(st_i, len);
              let row = [];
              for (let c2 = 0; c2 < data[0].length; c2++) {
                row.push(null);
              }
              for (let r2 = 0; r2 < len; r2++) {
                data.push(row);
              }
            } else {
              file["column"] -= len;
              let addcol = [];
              for (let r2 = 0; r2 < len; r2++) {
                addcol.push(null);
              }
              for (let i2 = 0; i2 < data.length; i2++) {
                data[i2].splice(st_i, len);
                data[i2] = data[i2].concat(addcol);
              }
            }
            for (let x in mc) {
              let r2 = mc[x].r, c2 = mc[x].c;
              data[r2][c2].mc = mc[x];
            }
            file["config"].merge = mc;
            file["config"].borderInfo = borderInfo;
            if (index2 == store_default.currentSheetIndex) {
              store_default.flowdata = data;
              editor_default.webWorkerFlowDataCache(store_default.flowdata);
              store_default.config["merge"] = mc;
              store_default.config["borderInfo"] = borderInfo;
              setTimeout(function() {
                luckysheetrefreshgrid();
              }, 1);
            }
          } else if (type == "arc") {
            if (file.data == null || file.data.length == 0) {
              return;
            }
            let rc = item2.rc, st_i = value.index, len = value.len, addData = value.data, direction = value.direction, mc = value.mc, borderInfo = value.borderInfo;
            let data = $.extend(true, [], file.data);
            if (rc == "r") {
              file["row"] += len;
              let row = [];
              for (let c2 = 0; c2 < data[0].length; c2++) {
                row.push(null);
              }
              let arr = [];
              for (let i2 = 0; i2 < len; i2++) {
                if (addData[i2] == null) {
                  arr.push(JSON.stringify(row));
                } else {
                  arr.push(JSON.stringify(addData[i2]));
                }
              }
              if (direction == "lefttop") {
                if (st_i == 0) {
                  new Function("data", "return data.unshift(" + arr.join(",") + ")")(data);
                } else {
                  new Function("data", "return data.splice(" + st_i + ", 0, " + arr.join(",") + ")")(data);
                }
              } else {
                new Function("data", "return data.splice(" + (st_i + 1) + ", 0, " + arr.join(",") + ")")(data);
              }
            } else {
              file["column"] += len;
              for (let i2 = 0; i2 < data.length; i2++) {
                for (let j = 0; j < len; j++) {
                  if (direction == "lefttop") {
                    data[i2].splice(st_i, 0, addData[j]);
                  } else {
                    data[i2].splice(st_i + 1, 0, addData[j]);
                  }
                }
              }
            }
            for (let x in mc) {
              let r2 = mc[x].r, c2 = mc[x].c;
              data[r2][c2].mc = mc[x];
            }
            file.data = data;
            file["config"].merge = mc;
            file["config"].borderInfo = borderInfo;
            if (index2 == store_default.currentSheetIndex) {
              store_default.flowdata = data;
              editor_default.webWorkerFlowDataCache(store_default.flowdata);
              store_default.config["merge"] = mc;
              store_default.config["borderInfo"] = borderInfo;
              setTimeout(function() {
                luckysheetrefreshgrid();
              }, 1);
            }
          } else if (type == "f") {
            let op = item2.op, pos = item2.pos;
            let filter = file.filter;
            if (filter == null) {
              filter = {};
            }
            if (op == "upOrAdd") {
              filter[pos] = value;
            } else if (op == "del") {
              delete filter[pos];
            }
            if (index2 == store_default.currentSheetIndex) {
              createFilterOptions(file.filter_select, filter);
            }
          } else if (type == "fsc") {
            file.filter = null;
            file.filter_select = null;
            if (index2 == store_default.currentSheetIndex) {
              $("#luckysheet-filter-selected-sheet" + store_default.currentSheetIndex + ", #luckysheet-filter-options-sheet" + store_default.currentSheetIndex).remove();
              $("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
            }
          } else if (type == "fsr") {
            file.filter = value.filter;
            file.filter_select = value.filter_select;
            if (index2 == store_default.currentSheetIndex) {
              createFilterOptions(file.filter_select, file.filter);
            }
          } else if (type == "sha") {
            store_default.luckysheetfile.push(value);
            let colorset = "";
            if (value.color != null) {
              colorset = '<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + value.color + ';"></div>';
            }
            $("#luckysheet-sheet-container-c").append(replaceHtml(sheetHTML, {"index": value.index, "active": "", "name": value.name, "style": "", "colorset": colorset}));
            $("#luckysheet-cell-main").append('<div id="luckysheet-datavisual-selection-set-' + value.index + '" class="luckysheet-datavisual-selection-set"></div>');
            sheetmanage_default.locationSheet();
          } else if (type == "shc") {
            let copyindex = value.copyindex, name2 = value.name;
            let copyarrindex = getSheetIndex(copyindex);
            let copyjson = $.extend(true, {}, store_default.luckysheetfile[copyarrindex]);
            copyjson.index = index2;
            copyjson.name = name2;
            store_default.luckysheetfile.splice(copyarrindex + 1, 0, copyjson);
            let copyobject = $("#luckysheet-sheets-item" + copyindex);
            $("#luckysheet-sheet-container-c").append(replaceHtml(sheetHTML, {"index": copyjson.index, "active": "", "name": copyjson.name, "style": "", "colorset": ""}));
            $("#luckysheet-sheets-item" + copyjson.index).insertAfter(copyobject);
            $("#luckysheet-cell-main").append('<div id="luckysheet-datavisual-selection-set-' + copyjson.index + '" class="luckysheet-datavisual-selection-set"></div>');
          } else if (type == "shd") {
            for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
              if (store_default.luckysheetfile[i2].index == value.deleIndex) {
                if (store_default.currentSheetIndex === value.deleIndex) {
                  const index3 = value.deleIndex;
                  store_default.luckysheetfile[sheetmanage_default.getSheetIndex(index3)].hide = 1;
                  let luckysheetcurrentSheetitem2 = $("#luckysheet-sheets-item" + index3);
                  luckysheetcurrentSheetitem2.hide();
                  $("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active");
                  let indicator = luckysheetcurrentSheetitem2.nextAll(":visible");
                  if (luckysheetcurrentSheetitem2.nextAll(":visible").length > 0) {
                    indicator = indicator.eq(0).data("index");
                  } else {
                    indicator = luckysheetcurrentSheetitem2.prevAll(":visible").eq(0).data("index");
                  }
                  $("#luckysheet-sheets-item" + indicator).addClass("luckysheet-sheets-item-active");
                  sheetmanage_default.changeSheetExec(indicator);
                }
                server.sheetDeleSave.push(store_default.luckysheetfile[i2]);
                store_default.luckysheetfile.splice(i2, 1);
                break;
              }
            }
            $("#luckysheet-sheets-item" + value.deleIndex).remove();
            $("#luckysheet-datavisual-selection-set-" + value.deleIndex).remove();
            sheetmanage_default.locationSheet();
          } else if (type == "shr") {
            for (let x in value) {
              store_default.luckysheetfile[getSheetIndex(x)].order = value[x];
            }
          } else if (type == "shre") {
            for (let i2 = 0; i2 < server.sheetDeleSave.length; i2++) {
              if (server.sheetDeleSave[i2].index == value.reIndex) {
                let datav = server.sheetDeleSave[i2];
                store_default.luckysheetfile.push(datav);
                let colorset = "";
                if (value.color != null) {
                  colorset = '<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + datav.color + ';"></div>';
                }
                $("#luckysheet-sheet-container-c").append(replaceHtml(sheetHTML, {"index": datav.index, "active": "", "name": datav.name, "style": "", "colorset": colorset}));
                $("#luckysheet-cell-main").append('<div id="luckysheet-datavisual-selection-set-' + datav.index + '" class="luckysheet-datavisual-selection-set"></div>');
                break;
              }
            }
          } else if (type == "sh") {
            let op = item2.op, cur = item2.cur;
            if (op == "hide") {
              file.hide = 1;
              $("#luckysheet-sheets-item" + index2).hide();
              if (index2 == store_default.currentSheetIndex) {
                $("#luckysheet-sheets-item" + cur).addClass("luckysheet-sheets-item-active");
                sheetmanage_default.changeSheetExec(cur);
              }
            } else if (op == "show") {
              file.hide = 0;
              $("#luckysheet-sheets-item" + index2).show();
            }
            sheetmanage_default.locationSheet();
          } else if (type == "c") {
            let op = item2.op, cid = item2.cid;
            if (op == "add") {
              file.chart.push(value);
              luckysheet.insertChartTosheet(value.sheetIndex, value.dataSheetIndex, value.option, value.chartType, value.selfOption, value.defaultOption, value.row, value.column, value.chart_selection_color, value.chart_id, value.chart_selection_id, value.chartStyle, value.rangeConfigCheck, value.rangeRowCheck, value.rangeColCheck, value.chartMarkConfig, value.chartTitleConfig, value.winWidth, value.winHeight, value.scrollLeft1, value.scrollTop1, value.chartTheme, value.myWidth, value.myHeight, value.myLeft, value.myTop, value.myindexrank1, true);
            } else if (op == "xy" || op == "wh" || op == "update") {
              for (let i2 = 0; i2 < file.chart.length; i2++) {
                let chartjson = file.chart[i2];
                if (chartjson.chart_id == cid) {
                  for (let item3 in chartjson) {
                    for (let vitem in value) {
                      if (item3 == vitem) {
                        chartjson[item3] = value[vitem];
                      }
                    }
                  }
                  sheetmanage_default.saveChart(chartjson);
                  return;
                }
              }
            } else if (op == "del") {
              for (let i2 = 0; i2 < file.chart.length; i2++) {
                let chartjson = file.chart[i2];
                if (chartjson.chart_id == cid) {
                  file.chart.splice(i2, 1);
                  $("#" + cid).remove();
                  sheetmanage_default.delChart($("#" + cid).attr("chart_id"), $("#" + cid).attr("sheetIndex"));
                  return;
                }
              }
            }
          } else if (type == "na") {
            $("#luckysheet_info_detail_input").val(value).css("width", getByteLen(value) * 10);
          }
        },
        multipleIndex: 0,
        multipleRangeShow: function(id, name2, r2, c2, value) {
          let _this = this;
          const fullName = name2;
          let row = store_default.visibledatarow[r2], row_pre = r2 - 1 == -1 ? 0 : store_default.visibledatarow[r2 - 1], col = store_default.visibledatacolumn[c2], col_pre = c2 - 1 == -1 ? 0 : store_default.visibledatacolumn[c2 - 1];
          let margeset = menuButton_default.mergeborer(store_default.flowdata, r2, c2);
          if (!!margeset) {
            row = margeset.row[1];
            row_pre = margeset.row[0];
            col = margeset.column[1];
            col_pre = margeset.column[0];
          }
          if (col_pre <= 0) {
            col_pre += 1;
          }
          if (row_pre <= 0) {
            row_pre += 1;
          }
          if (getByteLen(name2) > 16) {
            name2 = getByteLen(name2, 16) + "...";
          }
          if (value === "enterEdit") {
            name2 += " " + locale_default().edit.typing;
          }
          if ($("#luckysheet-multipleRange-show-" + id).length > 0) {
            $("#luckysheet-multipleRange-show-" + id).css({"position": "absolute", "left": col_pre - 1, "width": col - col_pre - 1, "top": row_pre - 1, "height": row - row_pre - 1});
            $("#luckysheet-multipleRange-show-" + id + " .username").text(name2);
            $("#luckysheet-multipleRange-show-" + id + " .username").show();
            if (store_default.cooperativeEdit.usernameTimeout["user" + id] != null) {
              clearTimeout(store_default.cooperativeEdit.usernameTimeout["user" + id]);
            }
            store_default.cooperativeEdit.usernameTimeout["user" + id] = setTimeout(() => {
              clearTimeout(store_default.cooperativeEdit.usernameTimeout["user" + id]);
              store_default.cooperativeEdit.usernameTimeout["user" + id] = null;
            }, 10 * 1e3);
          } else {
            let itemHtml = `<div
								id="luckysheet-multipleRange-show-${id}"
								class="luckysheet-multipleRange-show"
								data-color="${luckyColor[_this.multipleIndex]}"
								title="${fullName}"
								style="position: absolute;left: ${col_pre - 1}px;width: ${col - col_pre - 1}px;top: ${row_pre - 1}px;height: ${row - row_pre - 1}px;border: 1px solid ${luckyColor[_this.multipleIndex]};z-index: 15;">

								<div class="username" style="height: 19px;line-height:19px;width: max-content;position: absolute;bottom: ${row - row_pre - 1}px;right: 0;background-color: ${luckyColor[_this.multipleIndex]};color:#ffffff;padding:0 10px;">
								${name2}
								</div>

								<div style="width: 100%;height: 100%;position: absolute;top: 0;right: 0;bottom: 0;left: 0;opacity: 0.03;background-color: ${luckyColor[_this.multipleIndex]}">
								</div>

							</div>`;
            $(itemHtml).appendTo($("#luckysheet-cell-main #luckysheet-multipleRange-show"));
            _this.multipleIndex++;
            if (store_default.cooperativeEdit.usernameTimeout["user" + id] != null) {
              clearTimeout(store_default.cooperativeEdit.usernameTimeout["user" + id]);
            }
            store_default.cooperativeEdit.usernameTimeout["user" + id] = setTimeout(() => {
              clearTimeout(store_default.cooperativeEdit.usernameTimeout["user" + id]);
              store_default.cooperativeEdit.usernameTimeout["user" + id] = null;
            }, 10 * 1e3);
          }
        },
        sheetDeleSave: [],
        submitInterval: 1e3,
        imagesubmitInterval: 5e3,
        submitdatalimit: 50,
        submitcompresslimit: 1e3,
        checksubmit: function(data) {
          let _this = this;
          _this.submitTimeout();
          clearTimeout(_this.imageRequestTimeout);
          _this.imageRequestTimeout = setTimeout(function() {
            _this.imageRequest();
          }, _this.imagesubmitInterval);
        },
        submitTimeout: function() {
          let _this = this;
          clearTimeout(_this.requestTimeOut);
          if (!_this.requestLock && (_this.requestlast != null && _this.requestlast.clone().add(1, "seconds").isBefore((0, import_dayjs3.default)()))) {
            _this.request();
          }
          _this.requestTimeOut = setTimeout(function() {
            _this.submitTimeout();
          }, _this.submitInterval);
        },
        requestLock: false,
        requestlast: null,
        firstchange: true,
        requestTimeOut: null,
        request: function() {
          let _this = this;
          let key = this.gridKey;
          let cahce_key = key + "__qkcache";
          _this.cachelocaldata(function(cahce_key2, params) {
            if (params.length == 0) {
              return;
            }
            params = encodeURIComponent(JSON.stringify(params));
            let compressBeginLen = params.length;
            let iscommpress = false;
            _this.requestLock = true;
            if (_this.updateUrl != "") {
              $.post(_this.updateUrl, {compress: iscommpress, gridKey: _this.gridKey, data: params}, function(data) {
                let re = new Function("return " + data)();
                if (re.status) {
                  $("#luckysheet_info_detail_update").html("\u6700\u8FD1\u5B58\u6863\u65F6\u95F4:" + (0, import_dayjs3.default)().format("M-D H:m:s"));
                  $("#luckysheet_info_detail_save").html("\u540C\u6B65\u6210\u529F");
                  _this.clearcachelocaldata();
                } else {
                  $("#luckysheet_info_detail_save").html("<span style='color:#ff2121'>\u540C\u6B65\u5931\u8D25</span>");
                  _this.restorecachelocaldata();
                }
                _this.requestlast = (0, import_dayjs3.default)();
                _this.requestLock = false;
              });
            }
          });
        },
        imageRequestLast: null,
        imageRequestLock: false,
        imageRequestTimeout: null,
        imageRequest: function() {
          let _this = this;
          html2canvas($("#" + container).find(".luckysheet-grid-window").get(0), {
            onrendered: function(canvas) {
              let old = $(canvas).appendTo("body");
              old.hide();
              let newwidth = old.width();
              let newheight = old.height();
              let imageData = old.get(0).getContext("2d").getImageData(0, 0, newwidth, newheight);
              let cutW = newwidth, cutH = newheight;
              if (cutW * 0.54 > cutH) {
                cutW = cutH / 0.54;
              } else {
                cutH = cutW * 0.54;
              }
              let newCanvas = $("<canvas>").attr("width", cutW).attr("height", cutH)[0];
              newCanvas.getContext("2d").putImageData(imageData, 0, 0);
              old.attr("width", 350);
              old.attr("height", 189);
              old.get(0).getContext("2d").drawImage(newCanvas, 0, 0, 350, 189);
              let base64 = old.get(0).toDataURL("image/jpeg", 0.9);
              let curindex = luckysheet.sheetmanage.getCurSheetnoset();
              _this.imageRequestLock = true;
              let data1 = encodeURIComponent(JSON.stringify({"t": "thumb", "img": base64, "curindex": curindex}));
              old.remove();
              if (_this.updateImageUrl != "") {
                $.post(_this.updateImageUrl, {compress: false, gridKey: _this.gridKey, data: data1}, function(data) {
                  let re = new Function("return " + data)();
                  if (re.status) {
                    imageRequestLast = (0, import_dayjs3.default)();
                  } else {
                    $("#luckysheet_info_detail_save").html("<span style='color:#ff2121'>\u7F51\u7EDC\u4E0D\u7A33\u5B9A</span>");
                  }
                  _this.imageRequestLock = true;
                });
              }
            }
          });
        },
        localdata: [],
        matchOpt: function(v, d) {
          for (let vitem in v) {
            if (vitem == "t" && v["t"] in {"drc": 1, "arc": 1, "sha": 1, "shc": 1, "shd": 1}) {
              return false;
            }
            if (vitem == "v") {
              continue;
            }
            if (!(vitem in d)) {
              return false;
            }
            if (d[vitem] != v[vitem]) {
              return false;
            }
          }
          return true;
        },
        deleteRepeatOpt: function(data, value) {
          let d = data;
          let _this = this;
          if (value instanceof Array) {
            for (let i2 = 0; i2 < value.length; i2++) {
              let vitem = value[i2];
              for (let a = 0; a < d.length; a++) {
                let ditem = data[i2];
                if (_this.matchOpt(vitem, ditem)) {
                  delete d[a];
                }
              }
            }
          } else {
            for (let a = 0; a < d.length; a++) {
              let ditem = d[a];
              if (_this.matchOpt(value, ditem)) {
                delete d[a];
              }
            }
          }
          let ret = [];
          for (let i2 = 0; i2 < d.length; i2++) {
            if (d[i2] != null) {
              ret.push(d[i2]);
            }
          }
          return ret;
        },
        setlocaldata: function(value, func) {
          let key = this.gridKey;
          let _this = this;
          _this.getlocaldata(function(data) {
            if (data == null) {
              data = [];
            }
            if (value instanceof Array) {
              data = data.concat(value);
            } else {
              data.push(value);
            }
            _this.localdata = data;
            func(_this.localdata);
          });
        },
        getlocaldata: function(func) {
          let key = this.gridKey;
          func(this.localdata);
        },
        clearlocaldata: function(func) {
          let key = this.gridKey;
          this.localdata = [];
          func();
        },
        cachelocaldata: function(func) {
          let key = this.gridKey;
          let _this = this;
          let cahce_key = key + "__qkcache";
          let updatedata = _this.localdata;
          let uLen = updatedata.length;
          if (uLen > 1) {
            let prevData = [];
            prevData[0] = updatedata[0];
            for (let i2 = 1; i2 < uLen; i2++) {
              let value = updatedata[i2];
              let flag = true;
              for (let a = 0; a < prevData.length; a++) {
                let ditem = prevData[a];
                if (_this.matchOpt(value, ditem)) {
                  prevData.splice(a, 1, value);
                  flag = false;
                  break;
                }
              }
              if (flag) {
                prevData = prevData.concat(value);
              }
            }
            updatedata = prevData;
          }
          if (updatedata == null || updatedata.length == 0) {
            return;
          }
          _this.clearlocaldata(function() {
            localforage.setItem(cahce_key, updatedata).then(function() {
              func(cahce_key, updatedata);
            });
          });
        },
        clearcachelocaldata: function(func) {
          let key = this.gridKey;
          let cahce_key = key + "__qkcache";
          localforage.removeItem(cahce_key, function(err, value) {
            if (func && typeof func == "function") {
              func();
            }
          });
        },
        restorecachelocaldata: function(func) {
          let key = this.gridKey;
          let cahce_key = key + "__qkcache";
          let _this = this;
          localforage.getItem(cahce_key).then(function(readValue) {
            let updatedata = readValue;
            _this.getlocaldata(function(data) {
              if (data == null) {
                data = [];
              }
              let newdata = updatedata.concat(data);
              _this.localdata = newdata;
              if (func instanceof Function) {
                func(_this.localdata);
              }
            });
          });
        },
        keepHighLightBox: function() {
          store_default.cooperativeEdit.checkoutData.forEach((value) => {
            if (value.index == store_default.currentSheetIndex) {
              if (value.op === "enterEdit") {
                server.multipleRangeShow(value.id, value.username, value.r, value.c, value.op);
              } else {
                server.multipleRangeShow(value.id, value.username, value.r, value.c);
              }
            }
          });
        }
      };
      server_default = server;
    }
  });

  // src/global/tooltip.js
  var tooltip, tooltip_default;
  var init_tooltip = __esm({
    "src/global/tooltip.js"() {
      init_constant();
      init_browser();
      init_util();
      init_locale();
      init_server();
      tooltip = {
        info: function(title, content) {
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-info").remove();
          let _locale = locale_default();
          let locale_button = _locale.button;
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-info",
            "addclass": "",
            "title": title,
            "content": content,
            "botton": '<button class="btn btn-default luckysheet-model-close-btn">&nbsp;&nbsp;' + locale_button.close + "&nbsp;&nbsp;</button>",
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-info").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-info").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3}).show();
        },
        confirm: function(title, content, func1, func2, name1, name2) {
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-confirm").remove();
          const _locale = locale_default();
          const locale_button = _locale.button;
          if (name1 == null) {
            name1 = locale_button.confirm;
          }
          if (name2 == null) {
            name2 = locale_button.cancel;
          }
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-confirm",
            "addclass": "",
            "style": "z-index:100003",
            "title": title,
            "content": content,
            "botton": '<button class="btn btn-primary luckysheet-model-conform-btn">&nbsp;&nbsp;' + name1 + '&nbsp;&nbsp;</button><button class="btn btn-default luckysheet-model-cancel-btn">&nbsp;&nbsp;' + name2 + "&nbsp;&nbsp;</button>"
          }));
          let $t = $("#luckysheet-confirm").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-confirm").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3}).show();
          $t.find(".luckysheet-model-conform-btn").click(function() {
            if (typeof func1 == "function") {
              func1();
            }
            server_default.keepHighLightBox();
            $("#luckysheet-confirm").hide();
            $("#luckysheet-modal-dialog-mask").hide();
          });
          $t.find(".luckysheet-model-cancel-btn").click(function() {
            if (typeof func2 == "function") {
              func2();
            }
            $("#luckysheet-confirm").hide();
            $("#luckysheet-modal-dialog-mask").hide();
          });
        },
        screenshot: function(title, content, imgurl) {
          const _locale = locale_default();
          const locale_screenshot = _locale.screenshot;
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-confirm").remove();
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-confirm",
            "addclass": "",
            "style": "z-index:100003",
            "title": title,
            "content": content,
            "botton": '<a style="text-decoration:none;color:#fff;" class="download btn btn-primary luckysheet-model-conform-btn">&nbsp;&nbsp;' + locale_screenshot.downLoadBtn + '&nbsp;&nbsp;</a>&nbsp;&nbsp;<button class="btn btn-primary luckysheet-model-copy-btn">&nbsp;&nbsp;' + locale_screenshot.downLoadCopy + '&nbsp;&nbsp;</button><button class="btn btn-default luckysheet-model-cancel-btn">&nbsp;&nbsp;' + locale_screenshot.downLoadClose + "&nbsp;&nbsp;</button>"
          }));
          let $t = $("#luckysheet-confirm").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-confirm").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3}).show();
          $t.find(".luckysheet-model-conform-btn").click(function() {
            if (browser_default.isIE() == "1") {
              alert(locale_screenshot.browserNotTip);
            } else {
              if (!!window.ActiveXObject || "ActiveXObject" in window) {
                if ($("#IframeReportImg").length === 0) {
                  $('<iframe style="display:none;" id="IframeReportImg" name="IframeReportImg" onload="downloadImg();" width="0" height="0" src="about:blank"></iframe>').appendTo("body");
                }
                if ($("#IframeReportImg").attr("src") != imgurl) {
                  $("#IframeReportImg").attr("src", imgurl);
                } else {
                  if ($("#IframeReportImg").src != "about:blank") {
                    window.frames["IframeReportImg"].document.execCommand("SaveAs");
                  }
                }
              }
            }
          });
          $t.find(".luckysheet-model-cancel-btn").click(function() {
            $("#luckysheet-confirm").hide();
            $("#luckysheet-modal-dialog-mask").hide();
          });
          $("#luckysheet-confirm .luckysheet-model-copy-btn").click(function() {
            let dt = new clipboard.DT();
            dt.setData("text/html", "<img src='" + imgurl + "'>");
            if (browser_default.isIE() == "1") {
              alert(locale_screenshot.rightclickTip);
            } else {
              clipboard.write(dt);
              alert(locale_screenshot.successTip);
            }
          });
        },
        chartPointConfig: function(id, savefunc1, closefunc2) {
          $("body").append(replaceHtml(modelHTML, {
            "id": id,
            "addclass": "luckysheet-chart-point-config-c",
            "title": "\u6570\u636E\u70B9\u6279\u91CF\u8BBE\u7F6E",
            "content": luckysheetchartpointconfigHTML,
            "botton": '<button class="btn btn-danger luckysheet-model-save-btn">&nbsp;&nbsp;\u4FDD\u5B58\u8BBE\u7F6E&nbsp;&nbsp;</button><button class="btn btn-default luckysheet-model-close-btn">&nbsp;&nbsp;\u53D6\u6D88&nbsp;&nbsp;</button>',
            "style": "z-index:100003;height:80%;width:80%;top:10%;left:10%;"
          }));
          $("#luckysheet-modal-dialog-mask").show();
          let winw = $(window).width(), winh = $(window).height();
          $("#" + id).find(".luckysheet-chart-point-config").css("height", winh - 160);
          $("#" + id).css({
            "height": winh - 90,
            "width": winw - 100,
            "left": 7,
            "top": 14
          }).show().find(".luckysheet-model-save-btn").click(function() {
            if (typeof savefunc1 == "function") {
              savefunc1();
            }
            $("#" + id).hide();
            $("#luckysheet-modal-dialog-mask").hide();
          });
          $("#" + id).find(".luckysheet-model-save-btn").click(function() {
            if (typeof closefunc2 == "function") {
              closefunc2();
            }
            $("#" + id).hide();
            $("#luckysheet-modal-dialog-mask").hide();
          });
        },
        sheetConfig: function() {
        },
        hoverTipshowState: false,
        hoverTipshowTimeOut: null,
        createHoverTip: function(obj, to) {
          let _this = this;
          $(obj).on("mouseover", to, function(e) {
            if (_this.hoverTipshowState) {
              return;
            }
            clearTimeout(_this.hoverTipshowTimeOut);
            _this.hoverTipshowTimeOut = setTimeout(function() {
              let $t = $(e.currentTarget), toffset = $t.offset(), $toolup = $("#luckysheet-tooltip-up");
              let tips = $t.data("tips");
              if (tips == null || tips.length == 0) {
                tips = $t.prev().data("tips");
                if (tips == null || tips.length == 0) {
                  return;
                }
              }
              if ($toolup.length == 0) {
                $("body").append(luckysheetToolHTML);
                $toolup = $("#luckysheet-tooltip-up");
              }
              $toolup.removeClass("jfk-tooltip-hide").find("div.jfk-tooltip-contentId").html(tips);
              let toolwidth = $toolup.outerWidth();
              $toolup.find("div.jfk-tooltip-arrow").css("left", toolwidth / 2);
              let toolleft = toffset.left + ($t.outerWidth() - toolwidth) / 2;
              if (toolleft < 2) {
                toolleft = 2;
                $toolup.find("div.jfk-tooltip-arrow").css("left", $t.outerWidth() / 2);
              }
              $toolup.css({"top": toffset.top + $t.outerHeight() + 1, "left": toolleft});
            }, 300);
          }).on("mouseout", to, function(e) {
            _this.hoverTipshowState = false;
            clearTimeout(_this.hoverTipshowTimeOut);
            $("#luckysheet-tooltip-up").addClass("jfk-tooltip-hide");
          }).on("click", to, function(e) {
            _this.hoverTipshowState = true;
            clearTimeout(_this.hoverTipshowTimeOut);
            $("#luckysheet-tooltip-up").addClass("jfk-tooltip-hide");
          });
        },
        popover: function(content, position, close, style, btntxt, exitsFuc) {
          let _locale = locale_default();
          let locale_button = _locale.button;
          let locale_paint = _locale.paint;
          if (btntxt == null) {
            btntxt = locale_button.close;
          }
          let htmldiv = '<div id="luckysheetpopover" class="luckysheetpopover"><div class="luckysheetpopover-content">' + locale_paint.start + '</div><div class="luckysheetpopover-btn">' + btntxt + "</div></div>";
          $("#luckysheetpopover").remove();
          $("body").append(htmldiv);
          $("#luckysheetpopover .luckysheetpopover-content").html(content);
          let w = $("#luckysheetpopover").outerWidth(), h = $("#luckysheetpopover").outerHeight();
          let pcss = {};
          if (position == "topLeft") {
            pcss.top = "20px";
            pcss.left = "20px";
          } else if (position == "topCenter") {
            pcss.top = "20px";
            pcss.left = "50%";
            pcss["margin-left"] = -w / 2;
          } else if (position == "topRight") {
            pcss.top = "20px";
            pcss.right = "20px";
          } else if (position == "midLeft") {
            pcss.top = "50%";
            pcss["margin-top"] = -h / 2;
            pcss.left = "20px";
          } else if (position == "center") {
            pcss.top = "50%";
            pcss["margin-top"] = -h / 2;
            pcss.left = "50%";
            pcss["margin-left"] = -w / 2;
          } else if (position == "midRight") {
            pcss.top = "50%";
            pcss["margin-top"] = -h / 2;
            pcss.right = "20px";
          } else if (position == "bottomLeft") {
            pcss.bottom = "20px";
            pcss.left = "20px";
          } else if (position == "bottomCenter") {
            pcss.bottom = "20px";
            pcss.left = "50%";
            pcss["margin-left"] = -w / 2;
          } else if (position == "bottomRight") {
            pcss.bottom = "20px";
            pcss.right = "20px";
          } else {
            pcss.top = "20px";
            pcss.left = "50%";
            pcss["margin-left"] = -w / 2;
          }
          if (style == "white") {
            pcss.background = "rgba(255, 255, 255, 0.65)";
            pcss.color = "#000";
            $("#luckysheetpopover .luckysheetpopover-btn").css({"border": "1px solid #000"});
          }
          setTimeout(function() {
            $("#luckysheetpopover .luckysheetpopover-content").css({"margin-left": -$("#luckysheetpopover .luckysheetpopover-btn").outerWidth() / 2});
          }, 1);
          $("#luckysheetpopover").css(pcss).fadeIn();
          $("#luckysheetpopover .luckysheetpopover-btn").click(function() {
            if (typeof exitsFuc == "function") {
              exitsFuc();
            }
          });
          if (close != null && typeof close == "number") {
            setTimeout(function() {
              $("#luckysheetpopover").fadeOut().remove();
              if (typeof exitsFuc == "function") {
                exitsFuc();
              }
            }, close);
          }
        }
      };
      tooltip_default = tooltip;
    }
  });

  // src/controllers/conditionformat.js
  var import_dayjs4, conditionformat, conditionformat_default;
  var init_conditionformat = __esm({
    "src/controllers/conditionformat.js"() {
      init_get();
      init_util();
      init_formula();
      init_validate();
      init_tooltip();
      init_refresh();
      init_getdata();
      init_format();
      init_constant();
      init_server();
      init_select();
      init_sheetmanage();
      init_locale();
      init_protection();
      init_store();
      import_dayjs4 = __toModule(require_dayjs_min());
      conditionformat = {
        fileClone: [],
        editorRule: null,
        ruleTypeHtml: function() {
          const conditionformat_Text = locale_default().conditionformat;
          return `<div class="ruleTypeBox">
                    <div class="ruleTypeItem">
                        <span class="icon iconfont luckysheet-iconfont-youjiantou"></span>
                        <span>${conditionformat_Text.ruleTypeItem1}</span>
                    </div>
                    <div class="ruleTypeItem">
                        <span class="icon iconfont luckysheet-iconfont-youjiantou"></span>
                        <span>${conditionformat_Text.ruleTypeItem2}</span>
                    </div>
                    <div class="ruleTypeItem">
                        <span class="icon iconfont luckysheet-iconfont-youjiantou"></span>
                        <span>${conditionformat_Text.ruleTypeItem3}</span>
                    </div>
                    <div class="ruleTypeItem">
                        <span class="icon iconfont luckysheet-iconfont-youjiantou"></span>
                        <span>${conditionformat_Text.ruleTypeItem4}</span>
                    </div>
                    <div class="ruleTypeItem">
                        <span class="icon iconfont luckysheet-iconfont-youjiantou"></span>
                        <span>${conditionformat_Text.ruleTypeItem5}</span>
                    </div>
                    <div class="ruleTypeItem">
                        <span class="icon iconfont luckysheet-iconfont-youjiantou"></span>
                        <span>${conditionformat_Text.ruleTypeItem6}</span>
                    </div>
                </div>`;
        },
        textCellColorHtml: function() {
          const conditionformat_Text = locale_default().conditionformat;
          return `<div id="textCellColor">
                    <div class="colorbox">
                        <input id="checkTextColor" type="checkbox" checked="checked">
                        <label for="checkTextColor">${conditionformat_Text.textColor}\uFF1A</label>
                        <input id="textcolorshow" data-tips="${conditionformat_Text.textColor}" data-func="background" class="luckysheet-conditionformat-config-color" type="text" value="#9c0006" style="display: none;">
                    </div>
                    <div class="colorbox">
                        <input id="checkCellColor" type="checkbox" checked="checked">
                        <label for="checkCellColor">${conditionformat_Text.cellColor}\uFF1A</label>
                        <input id="cellcolorshow" data-tips="${conditionformat_Text.cellColor}" data-func="background" class="luckysheet-conditionformat-config-color" type="text" value="#ffc7ce" style="display: none;">
                    </div>
                </div>`;
        },
        selectRange: [],
        selectStatus: false,
        dataBarList: [
          {"format": ["#638ec6", "#ffffff"]},
          {"format": ["#63c384", "#ffffff"]},
          {"format": ["#ff555a", "#ffffff"]},
          {"format": ["#ffb628", "#ffffff"]},
          {"format": ["#008aef", "#ffffff"]},
          {"format": ["#d6007b", "#ffffff"]},
          {"format": ["#638ec6"]},
          {"format": ["#63c384"]},
          {"format": ["#ff555a"]},
          {"format": ["#ffb628"]},
          {"format": ["#008aef"]},
          {"format": ["#d6007b"]}
        ],
        colorGradationList: [
          {"format": ["rgb(99, 190, 123)", "rgb(255, 235, 132)", "rgb(248, 105, 107)"]},
          {"format": ["rgb(248, 105, 107)", "rgb(255, 235, 132)", "rgb(99, 190, 123)"]},
          {"format": ["rgb(99, 190, 123)", "rgb(252, 252, 255)", "rgb(248, 105, 107)"]},
          {"format": ["rgb(248, 105, 107)", "rgb(252, 252, 255)", "rgb(99, 190, 123)"]},
          {"format": ["rgb(90, 138, 198)", "rgb(252, 252, 255)", "rgb(248, 105, 107)"]},
          {"format": ["rgb(248, 105, 107)", "rgb(252, 252, 255)", "rgb(90, 138, 198)"]},
          {"format": ["rgb(252, 252, 255)", "rgb(248, 105, 107)"]},
          {"format": ["rgb(248, 105, 107)", "rgb(252, 252, 255)"]},
          {"format": ["rgb(99, 190, 123)", "rgb(252, 252, 255)"]},
          {"format": ["rgb(252, 252, 255)", "rgb(99, 190, 123)"]},
          {"format": ["rgb(99, 190, 123)", "rgb(255, 235, 132)"]},
          {"format": ["rgb(255, 235, 132)", "rgb(99, 190, 123)"]}
        ],
        init: function() {
          let _this = this;
          const conditionformat_Text = locale_default().conditionformat;
          $(document).off("change.CFchooseSheet").on("change.CFchooseSheet", "#luckysheet-administerRule-dialog .chooseSheet", function() {
            let index2 = $("#luckysheet-administerRule-dialog .chooseSheet option:selected").val();
            _this.getConditionRuleList(index2);
          });
          $(document).off("click.CFadministerRuleItem").on("click.CFadministerRuleItem", "#luckysheet-administerRule-dialog .ruleList .listBox .item", function() {
            $(this).addClass("on").siblings().removeClass("on");
          });
          $(document).off("click.CFadministerRuleConfirm").on("click.CFadministerRuleConfirm", "#luckysheet-administerRule-dialog-confirm", function() {
            if (!checkProtectionFormatCells(store_default.currentSheetIndex)) {
              return;
            }
            let fileH = $.extend(true, [], store_default.luckysheetfile);
            let historyRules = _this.getHistoryRules(fileH);
            let fileClone = $.extend(true, [], _this.fileClone);
            for (let c2 = 0; c2 < fileClone.length; c2++) {
              let sheetIndex = fileClone[c2]["index"];
              store_default.luckysheetfile[getSheetIndex(sheetIndex)]["luckysheet_conditionformat_save"] = fileClone[getSheetIndex(sheetIndex)]["luckysheet_conditionformat_save"];
            }
            let fileC = $.extend(true, [], store_default.luckysheetfile);
            let currentRules = _this.getCurrentRules(fileC);
            _this.ref(historyRules, currentRules);
            $("#luckysheet-modal-dialog-mask").hide();
            $("#luckysheet-administerRule-dialog").hide();
            if (server_default.allowUpdate) {
              let files = $.extend(true, [], store_default.luckysheetfile);
              for (let i2 = 0; i2 < files.length; i2++) {
                server_default.saveParam("all", files[i2]["index"], files[i2]["luckysheet_conditionformat_save"], {"k": "luckysheet_conditionformat_save"});
              }
            }
          });
          $(document).off("click.CFadministerRuleClose").on("click.CFadministerRuleClose", "#luckysheet-administerRule-dialog-close", function() {
            $("#luckysheet-modal-dialog-mask").hide();
            $("#luckysheet-administerRule-dialog").hide();
            _this.fileClone = [];
          });
          $(document).off("click.CFadministerRuleFa").on("click.CFadministerRuleFa", "#luckysheet-administerRule-dialog .item .fa-table", function() {
            $(this).parents("#luckysheet-administerRule-dialog").hide();
            let sheetIndex = $("#luckysheet-administerRule-dialog .chooseSheet select option:selected").val();
            if (sheetIndex != store_default.currentSheetIndex) {
              sheetmanage_default.changeSheetExec(sheetIndex);
            }
            let txt = $(this).siblings("input").val().trim();
            let dataItem = $(this).parents(".item").attr("data-item");
            _this.multiRangeDialog(dataItem, txt);
            _this.selectRange = [];
            let range2 = _this.getRangeByTxt(txt);
            if (range2.length > 0) {
              for (let s = 0; s < range2.length; s++) {
                let r1 = range2[s].row[0], r2 = range2[s].row[1];
                let c1 = range2[s].column[0], c2 = range2[s].column[1];
                let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
                let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
                _this.selectRange.push({
                  "left": col_pre,
                  "width": col - col_pre - 1,
                  "top": row_pre,
                  "height": row - row_pre - 1,
                  "left_move": col_pre,
                  "width_move": col - col_pre - 1,
                  "top_move": row_pre,
                  "height_move": row - row_pre - 1,
                  "row": [r1, r2],
                  "column": [c1, c2],
                  "row_focus": r1,
                  "column_focus": c1
                });
              }
            }
            selectionCopyShow(_this.selectRange);
          });
          $(document).off("click.CFmultiRangeConfirm").on("click.CFmultiRangeConfirm", "#luckysheet-multiRange-dialog-confirm", function() {
            $(this).parents("#luckysheet-multiRange-dialog").hide();
            let dataItem = $(this).attr("data-item");
            let v = $(this).parents("#luckysheet-multiRange-dialog").find("input").val();
            $("#luckysheet-administerRule-dialog .item[data-item=" + dataItem + "] input").val(v);
            let sheetIndex = $("#luckysheet-administerRule-dialog .chooseSheet option:selected").val();
            _this.fileClone[getSheetIndex(sheetIndex)]["luckysheet_conditionformat_save"][dataItem].cellrange = _this.getRangeByTxt(v);
            $("#luckysheet-modal-dialog-mask").show();
            $("#luckysheet-administerRule-dialog").show();
            let range2 = [];
            selectionCopyShow(range2);
          });
          $(document).off("click.CFmultiRangeClose").on("click.CFmultiRangeClose", "#luckysheet-multiRange-dialog-close", function() {
            $(this).parents("#luckysheet-multiRange-dialog").hide();
            $("#luckysheet-modal-dialog-mask").show();
            $("#luckysheet-administerRule-dialog").show();
            $("#luckysheet-formula-functionrange-select").hide();
            $("#luckysheet-row-count-show").hide();
            $("#luckysheet-column-count-show").hide();
            let range2 = [];
            selectionCopyShow(range2);
          });
          $(document).off("click.CFnewConditionRule").on("click.CFnewConditionRule", "#newConditionRule", function() {
            let sheetIndex = $("#luckysheet-administerRule-dialog .chooseSheet option:selected").val();
            if (!checkProtectionFormatCells(sheetIndex)) {
              return;
            }
            if (store_default.luckysheet_select_save.length == 0) {
              if (isEditMode()) {
                alert(conditionformat_Text.pleaseSelectRange);
              } else {
                tooltip_default.info(conditionformat_Text.pleaseSelectRange, "");
              }
              return;
            }
            _this.newConditionRuleDialog(1);
          });
          $(document).off("click.CFnewConditionRuleConfirm").on("click.CFnewConditionRuleConfirm", "#luckysheet-newConditionRule-dialog-confirm", function() {
            if (!checkProtectionFormatCells(store_default.currentSheetIndex)) {
              return;
            }
            let index2 = $("#luckysheet-newConditionRule-dialog .ruleTypeItem.on").index();
            let type1 = $("#luckysheet-newConditionRule-dialog #type1 option:selected").val();
            let type2 = $("#luckysheet-newConditionRule-dialog ." + type1 + "Box #type2 option:selected").val();
            let format, rule;
            if (index2 == 0) {
              if (type1 == "dataBar") {
                let color = $(this).parents("#luckysheet-newConditionRule-dialog").find(".dataBarBox .luckysheet-conditionformat-config-color").spectrum("get").toHexString();
                if (type2 == "gradient") {
                  format = [color, "#ffffff"];
                } else if (type2 == "solid") {
                  format = [color];
                }
                rule = {
                  "type": "dataBar",
                  "cellrange": $.extend(true, [], store_default.luckysheet_select_save),
                  "format": format
                };
              } else if (type1 == "colorGradation") {
                let maxcolor = $(this).parents("#luckysheet-newConditionRule-dialog").find(".colorGradationBox .maxVal .luckysheet-conditionformat-config-color").spectrum("get").toRgbString();
                let midcolor = $(this).parents("#luckysheet-newConditionRule-dialog").find(".colorGradationBox .midVal .luckysheet-conditionformat-config-color").spectrum("get").toRgbString();
                let mincolor = $(this).parents("#luckysheet-newConditionRule-dialog").find(".colorGradationBox .minVal .luckysheet-conditionformat-config-color").spectrum("get").toRgbString();
                if (type2 == "threeColor") {
                  format = [maxcolor, midcolor, mincolor];
                } else if (type2 == "twoColor") {
                  format = [maxcolor, mincolor];
                }
                rule = {
                  "type": "colorGradation",
                  "cellrange": $.extend(true, [], store_default.luckysheet_select_save),
                  "format": format
                };
              } else if (type1 == "icons") {
                let len = $(this).parents("#luckysheet-newConditionRule-dialog").find(".iconsBox .model").attr("data-len");
                let leftMin = $(this).parents("#luckysheet-newConditionRule-dialog").find(".iconsBox .model").attr("data-leftmin");
                let top = $(this).parents("#luckysheet-newConditionRule-dialog").find(".iconsBox .model").attr("data-top");
                format = {
                  "len": len,
                  "leftMin": leftMin,
                  "top": top
                };
                rule = {
                  "type": "icons",
                  "cellrange": $.extend(true, [], store_default.luckysheet_select_save),
                  "format": format
                };
              }
            } else {
              let conditionName = "", conditionRange = [], conditionValue = [];
              if (index2 == 1) {
                if (type1 == "number") {
                  conditionName = type2;
                  if (type2 == "betweenness") {
                    let v1 = $("#luckysheet-newConditionRule-dialog #conditionVal input").val().trim();
                    let v2 = $("#luckysheet-newConditionRule-dialog #conditionVal2 input").val().trim();
                    let rangeArr1 = _this.getRangeByTxt(v1);
                    if (rangeArr1.length > 1) {
                      _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                      return;
                    } else if (rangeArr1.length == 1) {
                      let r1 = rangeArr1[0].row[0], r2 = rangeArr1[0].row[1];
                      let c1 = rangeArr1[0].column[0], c2 = rangeArr1[0].column[1];
                      if (r1 == r2 && c1 == c2) {
                        v1 = getcellvalue(r1, c1, store_default.flowdata);
                        conditionRange.push({"row": rangeArr1[0].row, "column": rangeArr1[0].column});
                        conditionValue.push(v1);
                      } else {
                        _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                        return;
                      }
                    } else if (rangeArr1.length == 0) {
                      if (isNaN(v1) || v1 == "") {
                        _this.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
                        return;
                      } else {
                        conditionValue.push(v1);
                      }
                    }
                    let rangeArr2 = _this.getRangeByTxt(v2);
                    if (rangeArr2.length > 1) {
                      _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                      return;
                    } else if (rangeArr2.length == 1) {
                      let r1 = rangeArr2[0].row[0], r2 = rangeArr2[0].row[1];
                      let c1 = rangeArr2[0].column[0], c2 = rangeArr2[0].column[1];
                      if (r1 == r2 && c1 == c2) {
                        v2 = getcellvalue(r1, c1, store_default.flowdata);
                        conditionRange.push({"row": rangeArr2[0].row, "column": rangeArr2[0].column});
                        conditionValue.push(v2);
                      } else {
                        _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                        return;
                      }
                    } else if (rangeArr2.length == 0) {
                      if (isNaN(v2) || v2 == "") {
                        _this.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
                        return;
                      } else {
                        conditionValue.push(v2);
                      }
                    }
                  } else {
                    let v = $("#luckysheet-newConditionRule-dialog #conditionVal input").val().trim();
                    let rangeArr = _this.getRangeByTxt(v);
                    if (rangeArr.length > 1) {
                      _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                      return;
                    } else if (rangeArr.length == 1) {
                      let r1 = rangeArr[0].row[0], r2 = rangeArr[0].row[1];
                      let c1 = rangeArr[0].column[0], c2 = rangeArr[0].column[1];
                      if (r1 == r2 && c1 == c2) {
                        v = getcellvalue(r1, c1, store_default.flowdata);
                        conditionRange.push({"row": rangeArr[0].row, "column": rangeArr[0].column});
                        conditionValue.push(v);
                      } else {
                        _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                        return;
                      }
                    } else if (rangeArr.length == 0) {
                      if (isNaN(v) || v == "") {
                        _this.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
                        return;
                      } else {
                        conditionValue.push(v);
                      }
                    }
                  }
                } else if (type1 == "text") {
                  conditionName = "textContains";
                  let v = $("#luckysheet-newConditionRule-dialog #conditionVal input").val().trim();
                  let rangeArr = _this.getRangeByTxt(v);
                  if (rangeArr.length > 1) {
                    _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                    return;
                  } else if (rangeArr.length == 1) {
                    let r1 = rangeArr[0].row[0], r2 = rangeArr[0].row[1];
                    let c1 = rangeArr[0].column[0], c2 = rangeArr[0].column[1];
                    if (r1 == r2 && c1 == c2) {
                      v = getcellvalue(r1, c1, store_default.flowdata);
                      conditionRange.push({"row": rangeArr[0].row, "column": rangeArr[0].column});
                      conditionValue.push(v);
                    } else {
                      _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                      return;
                    }
                  } else if (rangeArr.length == 0) {
                    if (v == "") {
                      _this.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
                      return;
                    } else {
                      conditionValue.push(v);
                    }
                  }
                } else if (type1 == "date") {
                  conditionName = "occurrenceDate";
                  let v = $("#luckysheet-newConditionRule-dialog #daterange-btn").val();
                  if (v == "" || v == null) {
                    _this.infoDialog(conditionformat_Text.pleaseSelectADate, "");
                    return;
                  }
                  conditionValue.push(v);
                }
              } else if (index2 == 2) {
                if (type1 == "top") {
                  if ($("#luckysheet-newConditionRule-dialog #isPercent").is(":selected")) {
                    conditionName = "top10%";
                  } else {
                    conditionName = "top10";
                  }
                } else if (type1 == "last") {
                  if ($("#luckysheet-newConditionRule-dialog #isPercent").is(":selected")) {
                    conditionName = "last10%";
                  } else {
                    conditionName = "last10";
                  }
                }
                let v = $("#luckysheet-newConditionRule-dialog #conditionVal input").val().trim();
                if (parseInt(v) != v || parseInt(v) < 1 || parseInt(v) > 1e3) {
                  _this.infoDialog(conditionformat_Text.pleaseEnterInteger, "");
                  return;
                }
                conditionValue.push(parseInt(v));
              } else if (index2 == 3) {
                if (type1 == "AboveAverage") {
                  conditionName = "AboveAverage";
                  conditionValue.push("AboveAverage");
                } else if (type1 == "SubAverage") {
                  conditionName = "SubAverage";
                  conditionValue.push("SubAverage");
                }
              } else if (index2 == 4) {
                conditionName = "duplicateValue";
                conditionValue.push(type1);
              } else if (index2 == 5) {
                conditionName = "formula";
                let v = $("#luckysheet-newConditionRule-dialog #formulaConditionVal input").val().trim();
                if (v == "") {
                  _this.infoDialog("Condition value cannot be empty!", "");
                  return;
                }
                conditionValue.push(v);
              }
              let textcolor;
              if ($("#luckysheet-newConditionRule-dialog #checkTextColor").is(":checked")) {
                textcolor = $("#luckysheet-newConditionRule-dialog #textcolorshow").spectrum("get").toHexString();
              } else {
                textcolor = null;
              }
              let cellcolor;
              if ($("#luckysheet-newConditionRule-dialog #checkCellColor").is(":checked")) {
                cellcolor = $("#luckysheet-newConditionRule-dialog #cellcolorshow").spectrum("get").toHexString();
              } else {
                cellcolor = null;
              }
              format = {
                "textColor": textcolor,
                "cellColor": cellcolor
              };
              rule = {
                "type": "default",
                "cellrange": $.extend(true, [], store_default.luckysheet_select_save),
                "format": format,
                "conditionName": conditionName,
                "conditionRange": conditionRange,
                "conditionValue": conditionValue
              };
            }
            $("#luckysheet-newConditionRule-dialog").hide();
            let source = $(this).attr("data-source");
            if (source == 0) {
              $("#luckysheet-modal-dialog-mask").hide();
              let fileH = $.extend(true, [], store_default.luckysheetfile);
              let historyRules = _this.getHistoryRules(fileH);
              let ruleArr2 = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"] == void 0 ? [] : store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"];
              ruleArr2.push(rule);
              store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"] = ruleArr2;
              let fileC = $.extend(true, [], store_default.luckysheetfile);
              let currentRules = _this.getCurrentRules(fileC);
              _this.ref(historyRules, currentRules);
              if (server_default.allowUpdate) {
                server_default.saveParam("all", store_default.currentSheetIndex, ruleArr2, {"k": "luckysheet_conditionformat_save"});
              }
            } else if (source == 1) {
              let ruleArr2 = !!_this.fileClone[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"] ? _this.fileClone[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"] : [];
              ruleArr2.push(rule);
              _this.fileClone[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"] = ruleArr2;
              _this.administerRuleDialog();
            }
          });
          $(document).off("click.CFnewConditionRuleClose").on("click.CFnewConditionRuleClose", "#luckysheet-newConditionRule-dialog-close", function() {
            let source = $(this).attr("data-source");
            if (source == 0) {
              $("#luckysheet-modal-dialog-mask").hide();
            }
            if (source == 1) {
              $("#luckysheet-administerRule-dialog").show();
            }
            $("#luckysheet-newConditionRule-dialog").hide();
            $("#luckysheet-formula-functionrange-select").hide();
            $("#luckysheet-row-count-show").hide();
            $("#luckysheet-column-count-show").hide();
          });
          $(document).off("click.CFeditorConditionRule").on("click.CFeditorConditionRule", "#editorConditionRule", function() {
            let sheetIndex = $("#luckysheet-administerRule-dialog .chooseSheet option:selected").val();
            if (!checkProtectionFormatCells(sheetIndex)) {
              return;
            }
            let itemIndex = $("#luckysheet-administerRule-dialog .ruleList .listBox .item.on").attr("data-item");
            let rule = {
              "sheetIndex": sheetIndex,
              "itemIndex": itemIndex,
              "data": _this.fileClone[getSheetIndex(sheetIndex)]["luckysheet_conditionformat_save"][itemIndex]
            };
            _this.editorRule = rule;
            _this.editorConditionRuleDialog();
          });
          $(document).off("click.CFeditorConditionRuleConfirm").on("click.CFeditorConditionRuleConfirm", "#luckysheet-editorConditionRule-dialog-confirm", function() {
            let index2 = $("#luckysheet-editorConditionRule-dialog .ruleTypeItem.on").index();
            let type1 = $("#luckysheet-editorConditionRule-dialog #type1 option:selected").val();
            let type2 = $("#luckysheet-editorConditionRule-dialog ." + type1 + "Box #type2 option:selected").val();
            let cellrange = _this.editorRule["data"].cellrange;
            let format, rule;
            if (index2 == 0) {
              if (type1 == "dataBar") {
                let color = $(this).parents("#luckysheet-editorConditionRule-dialog").find(".dataBarBox .luckysheet-conditionformat-config-color").spectrum("get").toHexString();
                if (type2 == "gradient") {
                  format = [color, "#ffffff"];
                } else if (type2 == "solid") {
                  format = [color];
                }
                rule = {
                  "type": "dataBar",
                  "cellrange": cellrange,
                  "format": format
                };
              } else if (type1 == "colorGradation") {
                let maxcolor = $(this).parents("#luckysheet-editorConditionRule-dialog").find(".colorGradationBox .maxVal .luckysheet-conditionformat-config-color").spectrum("get").toRgbString();
                let midcolor = $(this).parents("#luckysheet-editorConditionRule-dialog").find(".colorGradationBox .midVal .luckysheet-conditionformat-config-color").spectrum("get").toRgbString();
                let mincolor = $(this).parents("#luckysheet-editorConditionRule-dialog").find(".colorGradationBox .minVal .luckysheet-conditionformat-config-color").spectrum("get").toRgbString();
                if (type2 == "threeColor") {
                  format = [maxcolor, midcolor, mincolor];
                } else if (type2 == "twoColor") {
                  format = [maxcolor, mincolor];
                }
                rule = {
                  "type": "colorGradation",
                  "cellrange": cellrange,
                  "format": format
                };
              } else if (type1 == "icons") {
                let len = $(this).parents("#luckysheet-editorConditionRule-dialog").find(".iconsBox .model").attr("data-len");
                let leftMin = $(this).parents("#luckysheet-editorConditionRule-dialog").find(".iconsBox .model").attr("data-leftmin");
                let top = $(this).parents("#luckysheet-editorConditionRule-dialog").find(".iconsBox .model").attr("data-top");
                format = {
                  "len": len,
                  "leftMin": leftMin,
                  "top": top
                };
                rule = {
                  "type": "icons",
                  "cellrange": cellrange,
                  "format": format
                };
              }
            } else {
              let conditionName = "", conditionRange = [], conditionValue = [];
              if (index2 == 1) {
                if (type1 == "number") {
                  conditionName = type2;
                  if (type2 == "betweenness") {
                    let v1 = $("#luckysheet-editorConditionRule-dialog #conditionVal input").val().trim();
                    let v2 = $("#luckysheet-editorConditionRule-dialog #conditionVal2 input").val().trim();
                    let rangeArr1 = _this.getRangeByTxt(v1);
                    if (rangeArr1.length > 1) {
                      _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                      return;
                    } else if (rangeArr1.length == 1) {
                      let r1 = rangeArr1[0].row[0], r2 = rangeArr1[0].row[1];
                      let c1 = rangeArr1[0].column[0], c2 = rangeArr1[0].column[1];
                      if (r1 == r2 && c1 == c2) {
                        v1 = getcellvalue(r1, c1, store_default.flowdata);
                        conditionRange.push({"row": rangeArr1[0].row, "column": rangeArr1[0].column});
                        conditionValue.push(v1);
                      } else {
                        _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                        return;
                      }
                    } else if (rangeArr1.length == 0) {
                      if (isNaN(v1) || v1 == "") {
                        _this.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
                        return;
                      } else {
                        conditionValue.push(v1);
                      }
                    }
                    let rangeArr2 = _this.getRangeByTxt(v2);
                    if (rangeArr2.length > 1) {
                      _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                      return;
                    } else if (rangeArr2.length == 1) {
                      let r1 = rangeArr2[0].row[0], r2 = rangeArr2[0].row[1];
                      let c1 = rangeArr2[0].column[0], c2 = rangeArr2[0].column[1];
                      if (r1 == r2 && c1 == c2) {
                        v2 = getcellvalue(r1, c1, store_default.flowdata);
                        conditionRange.push({"row": rangeArr2[0].row, "column": rangeArr2[0].column});
                        conditionValue.push(v2);
                      } else {
                        _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                        return;
                      }
                    } else if (rangeArr2.length == 0) {
                      if (isNaN(v2) || v2 == "") {
                        _this.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
                        return;
                      } else {
                        conditionValue.push(v2);
                      }
                    }
                  } else {
                    let v = $("#luckysheet-editorConditionRule-dialog #conditionVal input").val().trim();
                    let rangeArr = _this.getRangeByTxt(v);
                    if (rangeArr.length > 1) {
                      _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                      return;
                    } else if (rangeArr.length == 1) {
                      let r1 = rangeArr[0].row[0], r2 = rangeArr[0].row[1];
                      let c1 = rangeArr[0].column[0], c2 = rangeArr[0].column[1];
                      if (r1 == r2 && c1 == c2) {
                        v = getcellvalue(r1, c1, store_default.flowdata);
                        conditionRange.push({"row": rangeArr[0].row, "column": rangeArr[0].column});
                        conditionValue.push(v);
                      } else {
                        _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                        return;
                      }
                    } else if (rangeArr.length == 0) {
                      if (isNaN(v) || v == "") {
                        _this.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
                        return;
                      } else {
                        conditionValue.push(v);
                      }
                    }
                  }
                } else if (type1 == "text") {
                  conditionName = "textContains";
                  let v = $("#luckysheet-editorConditionRule-dialog #conditionVal input").val().trim();
                  let rangeArr = _this.getRangeByTxt(v);
                  if (rangeArr.length > 1) {
                    _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                    return;
                  } else if (rangeArr.length == 1) {
                    let r1 = rangeArr[0].row[0], r2 = rangeArr[0].row[1];
                    let c1 = rangeArr[0].column[0], c2 = rangeArr[0].column[1];
                    if (r1 == r2 && c1 == c2) {
                      v = getcellvalue(r1, c1, store_default.flowdata);
                      conditionRange.push({"row": rangeArr[0].row, "column": rangeArr[0].column});
                      conditionValue.push(v);
                    } else {
                      _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                      return;
                    }
                  } else if (rangeArr.length == 0) {
                    if (isNaN(v) || v == "") {
                      _this.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
                      return;
                    } else {
                      conditionValue.push(v);
                    }
                  }
                } else if (type1 == "date") {
                  conditionName = "occurrenceDate";
                  let v = $("#luckysheet-editorConditionRule-dialog #daterange-btn").val();
                  if (v == "" || v == null) {
                    _this.infoDialog(conditionformat_Text.pleaseSelectADate, "");
                    return;
                  }
                  conditionValue.push(v);
                }
              } else if (index2 == 2) {
                if (type1 == "top") {
                  if ($("#luckysheet-editorConditionRule-dialog #isPercent").is(":selected")) {
                    conditionName = "top10%";
                  } else {
                    conditionName = "top10";
                  }
                } else if (type1 == "last") {
                  if ($("#luckysheet-editorConditionRule-dialog #isPercent").is(":selected")) {
                    conditionName = "last10%";
                  } else {
                    conditionName = "last10";
                  }
                }
                let v = $("#luckysheet-editorConditionRule-dialog #conditionVal input").val().trim();
                if (parseInt(v) != v || parseInt(v) < 1 || parseInt(v) > 1e3) {
                  _this.infoDialog(conditionformat_Text.pleaseEnterInteger, "");
                  return;
                }
                conditionValue.push(v);
              } else if (index2 == 3) {
                if (type1 == "AboveAverage") {
                  conditionName = "AboveAverage";
                  conditionValue.push("AboveAverage");
                } else if (type1 == "SubAverage") {
                  conditionName = "SubAverage";
                  conditionValue.push("SubAverage");
                }
              } else if (index2 == 4) {
                conditionName = "duplicateValue";
                conditionValue.push(type1);
              } else if (index2 == 5) {
                conditionName = "formula";
                let v = $("#luckysheet-editorConditionRule-dialog #formulaConditionVal input").val().trim();
                console.log(v);
                if (v == "") {
                  _this.infoDialog("Condition value cannot be empty!", "");
                  return;
                }
                conditionValue.push(v);
              }
              let textcolor;
              if ($("#luckysheet-editorConditionRule-dialog #checkTextColor").is(":checked")) {
                textcolor = $("#luckysheet-editorConditionRule-dialog #textcolorshow").spectrum("get").toHexString();
              } else {
                textcolor = null;
              }
              let cellcolor;
              if ($("#luckysheet-editorConditionRule-dialog #checkCellColor").is(":checked")) {
                cellcolor = $("#luckysheet-editorConditionRule-dialog #cellcolorshow").spectrum("get").toHexString();
              } else {
                cellcolor = null;
              }
              format = {
                "textColor": textcolor,
                "cellColor": cellcolor
              };
              rule = {
                "type": "default",
                "cellrange": cellrange,
                "format": format,
                "conditionName": conditionName,
                "conditionRange": conditionRange,
                "conditionValue": conditionValue
              };
            }
            let sheetIndex = _this.editorRule["sheetIndex"];
            let itemIndex = _this.editorRule["itemIndex"];
            _this.fileClone[getSheetIndex(sheetIndex)]["luckysheet_conditionformat_save"][itemIndex] = rule;
            $("#luckysheet-editorConditionRule-dialog").hide();
            _this.administerRuleDialog();
          });
          $(document).off("click.CFeditorConditionRuleClose").on("click.CFeditorConditionRuleClose", "#luckysheet-editorConditionRule-dialog-close", function() {
            $("#luckysheet-editorConditionRule-dialog").hide();
            $("#luckysheet-administerRule-dialog").show();
            $("#luckysheet-formula-functionrange-select").hide();
            $("#luckysheet-row-count-show").hide();
            $("#luckysheet-column-count-show").hide();
          });
          $(document).off("click.CFnewEditorRuleItem").on("click.CFnewEditorRuleItem", ".luckysheet-newEditorRule-dialog .ruleTypeItem", function() {
            $(this).addClass("on").siblings().removeClass("on");
            let index2 = $(this).index();
            $(this).parents(".luckysheet-newEditorRule-dialog").find(".ruleExplainBox").html(_this.getRuleExplain(index2));
            _this.colorSelectInit();
          });
          $(document).off("change.CFnewEditorRuleType1").on("change.CFnewEditorRuleType1", ".luckysheet-newEditorRule-dialog #type1", function() {
            let optionVal = $(this).find("option:selected").val();
            if (optionVal == "dataBar" || optionVal == "colorGradation" || optionVal == "icons" || optionVal == "number" || optionVal == "text" || optionVal == "date") {
              $(this).parents(".luckysheet-newEditorRule-dialog").find("." + optionVal + "Box").show().siblings().hide();
            }
            if (optionVal == "date") {
              _this.daterangeInit($(this).parents(".luckysheet-newEditorRule-dialog").attr("id"));
            }
          });
          $(document).off("change.CFnewEditorRuleType2").on("change.CFnewEditorRuleType2", ".luckysheet-newEditorRule-dialog #type2", function() {
            let type1 = $(this).parents(".luckysheet-newEditorRule-dialog").find("#type1 option:selected").val();
            if (type1 == "colorGradation") {
              let type2 = $(this).find("option:selected").val();
              if (type2 == "threeColor") {
                $(this).parents(".luckysheet-newEditorRule-dialog").find(".midVal").show();
              } else {
                $(this).parents(".luckysheet-newEditorRule-dialog").find(".midVal").hide();
              }
            } else if (type1 == "number") {
              let type2 = $(this).find("option:selected").val();
              if (type2 == "betweenness") {
                $(this).parents(".luckysheet-newEditorRule-dialog").find(".txt").show();
                $(this).parents(".luckysheet-newEditorRule-dialog").find("#conditionVal2").show();
              } else {
                $(this).parents(".luckysheet-newEditorRule-dialog").find(".txt").hide();
                $(this).parents(".luckysheet-newEditorRule-dialog").find("#conditionVal2").hide();
              }
            }
          });
          $(document).off("click.CFiconsShowbox").on("click.CFiconsShowbox", ".luckysheet-newEditorRule-dialog .iconsBox .showbox", function() {
            $(this).parents(".iconsBox").find("ul").toggle();
          });
          $(document).off("click.CFiconsLi").on("click.CFiconsLi", ".luckysheet-newEditorRule-dialog .iconsBox li", function() {
            let len = $(this).find("div").attr("data-len");
            let leftmin = $(this).find("div").attr("data-leftmin");
            let top = $(this).find("div").attr("data-top");
            let title = $(this).find("div").attr("title");
            let position = $(this).find("div").css("background-position");
            $(this).parents(".iconsBox").find(".showbox .model").css("background-position", position);
            $(this).parents(".iconsBox").find(".showbox .model").attr("data-len", len);
            $(this).parents(".iconsBox").find(".showbox .model").attr("data-leftmin", leftmin);
            $(this).parents(".iconsBox").find(".showbox .model").attr("data-top", top);
            $(this).parents(".iconsBox").find(".showbox .model").attr("title", title);
            $(this).parents("ul").hide();
          });
          $(document).off("click.CFdeleteConditionRule").on("click.CFdeleteConditionRule", "#deleteConditionRule", function() {
            let sheetIndex = $("#luckysheet-administerRule-dialog .chooseSheet option:selected").val();
            if (!checkProtectionFormatCells(sheetIndex)) {
              return;
            }
            let itemIndex = $("#luckysheet-administerRule-dialog .ruleList .listBox .item.on").attr("data-item");
            _this.fileClone[getSheetIndex(sheetIndex)]["luckysheet_conditionformat_save"].splice(itemIndex, 1);
            _this.administerRuleDialog();
          });
          $(document).off("click.CFdefault").on("click.CFdefault", "#luckysheet-conditionformat-dialog-confirm", function() {
            if (!checkProtectionFormatCells(store_default.currentSheetIndex)) {
              return;
            }
            let conditionName = $("#luckysheet-conditionformat-dialog .box").attr("data-itemvalue");
            let conditionRange = [];
            let conditionValue = [];
            if (conditionName == "greaterThan" || conditionName == "lessThan" || conditionName == "equal" || conditionName == "textContains") {
              let v = $("#luckysheet-conditionformat-dialog #conditionVal").val().trim();
              let rangeArr = _this.getRangeByTxt(v);
              if (rangeArr.length > 1) {
                _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                return;
              } else if (rangeArr.length == 1) {
                let r1 = rangeArr[0].row[0], r2 = rangeArr[0].row[1];
                let c1 = rangeArr[0].column[0], c2 = rangeArr[0].column[1];
                if (r1 == r2 && c1 == c2) {
                  v = getcellvalue(r1, c1, store_default.flowdata);
                  conditionRange.push({"row": rangeArr[0].row, "column": rangeArr[0].column});
                  conditionValue.push(v);
                } else {
                  _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                  return;
                }
              } else if (rangeArr.length == 0) {
                if (isNaN(v) || v == "") {
                  _this.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
                  return;
                } else {
                  conditionValue.push(v);
                }
              }
            } else if (conditionName == "betweenness") {
              let v1 = $("#luckysheet-conditionformat-dialog #conditionVal").val().trim();
              let v2 = $("#luckysheet-conditionformat-dialog #conditionVal2").val().trim();
              let rangeArr1 = _this.getRangeByTxt(v1);
              if (rangeArr1.length > 1) {
                _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                return;
              } else if (rangeArr1.length == 1) {
                let r1 = rangeArr1[0].row[0], r2 = rangeArr1[0].row[1];
                let c1 = rangeArr1[0].column[0], c2 = rangeArr1[0].column[1];
                if (r1 == r2 && c1 == c2) {
                  v1 = getcellvalue(r1, c1, store_default.flowdata);
                  conditionRange.push({"row": rangeArr1[0].row, "column": rangeArr1[0].column});
                  conditionValue.push(v1);
                } else {
                  _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                  return;
                }
              } else if (rangeArr1.length == 0) {
                if (isNaN(v1) || v1 == "") {
                  _this.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
                  return;
                } else {
                  conditionValue.push(v1);
                }
              }
              let rangeArr2 = _this.getRangeByTxt(v2);
              if (rangeArr2.length > 1) {
                _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                return;
              } else if (rangeArr2.length == 1) {
                let r1 = rangeArr2[0].row[0], r2 = rangeArr2[0].row[1];
                let c1 = rangeArr2[0].column[0], c2 = rangeArr2[0].column[1];
                if (r1 == r2 && c1 == c2) {
                  v2 = getcellvalue(r1, c1, store_default.flowdata);
                  conditionRange.push({"row": rangeArr2[0].row, "column": rangeArr2[0].column});
                  conditionValue.push(v2);
                } else {
                  _this.infoDialog(conditionformat_Text.onlySingleCell, "");
                  return;
                }
              } else if (rangeArr2.length == 0) {
                if (isNaN(v2) || v2 == "") {
                  _this.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
                  return;
                } else {
                  conditionValue.push(v2);
                }
              }
            } else if (conditionName == "occurrenceDate") {
              let v = $("#luckysheet-conditionformat-dialog #daterange-btn").val();
              if (v == "" || v == null) {
                _this.infoDialog(conditionformat_Text.pleaseSelectADate, "");
                return;
              }
              conditionValue.push(v);
            } else if (conditionName == "duplicateValue") {
              conditionValue.push($("#luckysheet-conditionformat-dialog #conditionVal option:selected").val());
            } else if (conditionName == "top10" || conditionName == "top10%" || conditionName == "last10" || conditionName == "last10%") {
              let v = $("#luckysheet-conditionformat-dialog #conditionVal").val().trim();
              if (parseInt(v) != v || parseInt(v) < 1 || parseInt(v) > 1e3) {
                _this.infoDialog(conditionformat_Text.pleaseEnterInteger, "");
                return;
              }
              conditionValue.push(v);
            } else if (conditionName == "AboveAverage") {
              conditionValue.push("AboveAverage");
            } else if (conditionName == "SubAverage") {
              conditionValue.push("SubAverage");
            }
            let textcolor;
            if ($("#checkTextColor").is(":checked")) {
              textcolor = $("#textcolorshow").spectrum("get").toHexString();
            } else {
              textcolor = null;
            }
            let cellcolor;
            if ($("#checkCellColor").is(":checked")) {
              cellcolor = $("#cellcolorshow").spectrum("get").toHexString();
            } else {
              cellcolor = null;
            }
            let fileH = $.extend(true, [], store_default.luckysheetfile);
            let historyRules = _this.getHistoryRules(fileH);
            let rule = {
              "type": "default",
              "cellrange": $.extend(true, [], store_default.luckysheet_select_save),
              "format": {
                "textColor": textcolor,
                "cellColor": cellcolor
              },
              "conditionName": conditionName,
              "conditionRange": conditionRange,
              "conditionValue": conditionValue
            };
            let ruleArr2 = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"] == void 0 ? [] : store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"];
            ruleArr2.push(rule);
            store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"] = ruleArr2;
            let fileC = $.extend(true, [], store_default.luckysheetfile);
            let currentRules = _this.getCurrentRules(fileC);
            _this.ref(historyRules, currentRules);
            $("#luckysheet-modal-dialog-mask").hide();
            $("#luckysheet-conditionformat-dialog").hide();
            if (server_default.allowUpdate) {
              server_default.saveParam("all", store_default.currentSheetIndex, ruleArr2, {"k": "luckysheet_conditionformat_save"});
            }
          });
          $(document).off("click.CFicons").on("click.CFicons", "#luckysheet-CFicons-dialog .item", function() {
            $("#luckysheet-modal-dialog-mask").hide();
            $("#luckysheet-CFicons-dialog").hide();
            if (store_default.luckysheet_select_save.length > 0) {
              let cellrange = $.extend(true, [], store_default.luckysheet_select_save);
              let format = {
                "len": $(this).attr("data-len"),
                "leftMin": $(this).attr("data-leftMin"),
                "top": $(this).attr("data-top")
              };
              _this.updateItem("icons", cellrange, format);
            }
          });
          $(document).on("click", ".range .fa-table", function() {
            let id = $(this).parents(".luckysheet-modal-dialog").attr("id");
            $("#" + id).hide();
            let source;
            if (id == "luckysheet-conditionformat-dialog") {
              let $id = $(this).siblings("input").attr("id");
              if ($id == "conditionVal") {
                source = "0_1";
              } else {
                source = "0_2";
              }
            } else if (id == "luckysheet-newConditionRule-dialog") {
              let $id = $(this).parents(".range").attr("id");
              if ($id == "formulaConditionVal") {
                source = "1_0";
              } else if ($id == "conditionVal") {
                source = "1_1";
              } else {
                source = "1_2";
              }
            } else if (id == "luckysheet-editorConditionRule-dialog") {
              let $id = $(this).parents(".range").attr("id");
              if ($id == "formulaConditionVal") {
                source = "2_0";
              } else if ($id == "conditionVal") {
                source = "2_1";
              } else {
                source = "2_2";
              }
            }
            let v = $(this).siblings("input").val();
            _this.singleRangeDialog(source, v);
            selectionCopyShow(_this.getRangeByTxt(v));
          });
          $(document).on("click", "#luckysheet-singleRange-dialog-confirm", function() {
            $("#luckysheet-modal-dialog-mask").show();
            $(this).parents("#luckysheet-singleRange-dialog").hide();
            let source = $(this).attr("data-source");
            let v = $(this).parents("#luckysheet-singleRange-dialog").find("input").val();
            if (source == "0_1") {
              $("#luckysheet-conditionformat-dialog").show();
              $("#luckysheet-conditionformat-dialog #conditionVal").val(v);
            } else if (source == "0_2") {
              $("#luckysheet-conditionformat-dialog").show();
              $("#luckysheet-conditionformat-dialog #conditionVal2").val(v);
            } else if (source == "1_0") {
              $("#luckysheet-newConditionRule-dialog").show();
              $("#luckysheet-newConditionRule-dialog #formulaConditionVal input").val(v);
            } else if (source == "1_1") {
              $("#luckysheet-newConditionRule-dialog").show();
              $("#luckysheet-newConditionRule-dialog #conditionVal input").val(v);
            } else if (source == "1_2") {
              $("#luckysheet-newConditionRule-dialog").show();
              $("#luckysheet-newConditionRule-dialog #conditionVal2 input").val(v);
            } else if (source == "2_0") {
              $("#luckysheet-editorConditionRule-dialog").show();
              $("#luckysheet-editorConditionRule-dialog #formulaConditionVal input").val(v);
            } else if (source == "2_1") {
              $("#luckysheet-editorConditionRule-dialog").show();
              $("#luckysheet-editorConditionRule-dialog #conditionVal input").val(v);
            } else if (source == "2_2") {
              $("#luckysheet-editorConditionRule-dialog").show();
              $("#luckysheet-editorConditionRule-dialog #conditionVal2 input").val(v);
            }
            let range2 = [];
            selectionCopyShow(range2);
          });
          $(document).on("click", "#luckysheet-singleRange-dialog-close", function() {
            $("#luckysheet-modal-dialog-mask").show();
            $(this).parents("#luckysheet-singleRange-dialog").hide();
            let source = $(this).attr("data-source");
            if (source == "0_1" || source == "0_2") {
              $("#luckysheet-conditionformat-dialog").show();
            } else if (source == "1_0" || source == "1_1" || source == "1_2") {
              $("#luckysheet-newConditionRule-dialog").show();
            } else if (source == "2_0" || source == "2_1" || source == "2_2") {
              $("#luckysheet-editorConditionRule-dialog").show();
            }
            let range2 = [];
            selectionCopyShow(range2);
          });
          $(document).on("click", ".luckysheet-modal-dialog-title-close", function() {
            let id = $(this).parents(".luckysheet-modal-dialog").attr("id");
            if (id == "luckysheet-newConditionRule-dialog") {
              let source = $("#" + id).find("#luckysheet-newConditionRule-dialog-close").attr("data-source");
              if (source == 1) {
                $("#luckysheet-administerRule-dialog").show();
              }
            }
            if (id == "luckysheet-editorConditionRule-dialog") {
              $("#luckysheet-administerRule-dialog").show();
            }
            if (id == "luckysheet-singleRange-dialog") {
              $("#luckysheet-modal-dialog-mask").show();
              let source = $(this).parents("#luckysheet-singleRange-dialog").find("#luckysheet-singleRange-dialog-confirm").attr("data-source");
              if (source == "0_1" || source == "0_2") {
                $("#luckysheet-conditionformat-dialog").show();
              } else if (source == "1_1" || source == "1_2") {
                $("#luckysheet-newConditionRule-dialog").show();
              } else if (source == "2_1" || source == "2_2") {
                $("#luckysheet-editorConditionRule-dialog").show();
              }
              let range2 = [];
              selectionCopyShow(range2);
            }
            if (id == "luckysheet-multiRange-dialog") {
              $("#luckysheet-modal-dialog-mask").show();
              $("#luckysheet-administerRule-dialog").show();
              let range2 = [];
              selectionCopyShow(range2);
            }
            if (id == "luckysheet-conditionformat-info-dialog") {
              $("#luckysheet-modal-dialog-mask").show();
            }
          });
          $(document).on("click", "#luckysheet-conditionformat-info-dialog-close", function() {
            $(this).parents("#luckysheet-conditionformat-info-dialog").hide();
          });
        },
        singleRangeDialog: function(source, value) {
          $("#luckysheet-modal-dialog-mask").hide();
          $("#luckysheet-singleRange-dialog").remove();
          const conditionformat_Text = locale_default().conditionformat;
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-singleRange-dialog",
            "addclass": "luckysheet-singleRange-dialog",
            "title": conditionformat_Text.selectCell,
            "content": `<input readonly="readonly" placeholder="${conditionformat_Text.pleaseSelectCell}" value="${value}"/>`,
            "botton": `<button id="luckysheet-singleRange-dialog-confirm" class="btn btn-primary" data-source="${source}">${conditionformat_Text.confirm}</button>
                        <button id="luckysheet-singleRange-dialog-close" class="btn btn-default" data-source="${source}">${conditionformat_Text.cancel}</button>`,
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-singleRange-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-singleRange-dialog").css({
            "left": (winw + scrollLeft - myw) / 2,
            "top": (winh + scrollTop - myh) / 3
          }).show();
        },
        multiRangeDialog: function(dataItem, value) {
          let _this = this;
          $("#luckysheet-modal-dialog-mask").hide();
          $("#luckysheet-multiRange-dialog").remove();
          const conditionformat_Text = locale_default().conditionformat;
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-multiRange-dialog",
            "addclass": "luckysheet-multiRange-dialog",
            "title": conditionformat_Text.selectRange,
            "content": `<input readonly="readonly" placeholder="${conditionformat_Text.pleaseSelectRange}" value="${value}"/>`,
            "botton": `<button id="luckysheet-multiRange-dialog-confirm" class="btn btn-primary" data-item="${dataItem}">${conditionformat_Text.confirm}</button>
                        <button id="luckysheet-multiRange-dialog-close" class="btn btn-default">${conditionformat_Text.cancel}</button>`,
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-multiRange-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-multiRange-dialog").css({
            "left": (winw + scrollLeft - myw) / 2,
            "top": (winh + scrollTop - myh) / 3
          }).show();
          selectionCopyShow(_this.getRangeByTxt(value));
        },
        getTxtByRange: function(range2) {
          if (range2.length > 0) {
            let txt = [];
            for (let s = 0; s < range2.length; s++) {
              let r1 = range2[s].row[0], r2 = range2[s].row[1];
              let c1 = range2[s].column[0], c2 = range2[s].column[1];
              txt.push(getRangetxt(store_default.currentSheetIndex, {"row": [r1, r2], "column": [c1, c2]}, store_default.currentSheetIndex));
            }
            return txt.join(",");
          }
        },
        getRangeByTxt: function(txt) {
          let range2 = [];
          txt = txt.toString();
          if (txt.indexOf(",") != -1) {
            let arr = txt.split(",");
            for (let i2 = 0; i2 < arr.length; i2++) {
              if (formula_default.iscelldata(arr[i2])) {
                range2.push(formula_default.getcellrange(arr[i2]));
              } else {
                range2 = [];
                break;
              }
            }
          } else {
            if (formula_default.iscelldata(txt)) {
              range2.push(formula_default.getcellrange(txt));
            }
          }
          return range2;
        },
        colorSelectInit: function() {
          const conditionformat_Text = locale_default().conditionformat;
          $(".luckysheet-conditionformat-config-color").spectrum({
            showPalette: true,
            showPaletteOnly: true,
            preferredFormat: "hex",
            clickoutFiresChange: false,
            showInitial: true,
            showInput: true,
            hideAfterPaletteSelect: true,
            showSelectionPalette: true,
            maxPaletteSize: 8,
            maxSelectionSize: 8,
            cancelText: conditionformat_Text.cancel,
            chooseText: conditionformat_Text.confirmColor,
            togglePaletteMoreText: "\u81EA\u5B9A\u4E49",
            togglePaletteLessText: "\u6536\u8D77",
            togglePaletteOnly: true,
            clearText: conditionformat_Text.clearColorSelect,
            noColorSelectedText: "\u6CA1\u6709\u989C\u8272\u88AB\u9009\u62E9",
            localStorageKey: "spectrum.textcolor" + server_default.gridKey,
            palette: [
              ["#000", "#444", "#666", "#999", "#ccc", "#eee", "#f3f3f3", "#fff"],
              ["#f00", "#f90", "#ff0", "#0f0", "#0ff", "#00f", "#90f", "#f0f"],
              ["#f4cccc", "#fce5cd", "#fff2cc", "#d9ead3", "#d0e0e3", "#cfe2f3", "#d9d2e9", "#ead1dc"],
              ["#ea9999", "#f9cb9c", "#ffe599", "#b6d7a8", "#a2c4c9", "#9fc5e8", "#b4a7d6", "#d5a6bd"],
              ["#e06666", "#f6b26b", "#ffd966", "#93c47d", "#76a5af", "#6fa8dc", "#8e7cc3", "#c27ba0"],
              ["#c00", "#e69138", "#f1c232", "#6aa84f", "#45818e", "#3d85c6", "#674ea7", "#a64d79"],
              ["#900", "#b45f06", "#bf9000", "#38761d", "#134f5c", "#0b5394", "#351c75", "#741b47"],
              ["#600", "#783f04", "#7f6000", "#274e13", "#0c343d", "#073763", "#20124d", "#4c1130"]
            ],
            change: function(color) {
              if (color != null) {
                color = color.toHexString();
              }
            }
          });
        },
        conditionformatDialog: function(title, content) {
          let _this = this;
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-conditionformat-dialog").remove();
          const conditionformat_Text = locale_default().conditionformat;
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-conditionformat-dialog",
            "addclass": "luckysheet-conditionformat-dialog",
            "title": title,
            "content": content,
            "botton": `<button id="luckysheet-conditionformat-dialog-confirm" class="btn btn-primary">${conditionformat_Text.confirm}</button>
                        <button class="btn btn-default luckysheet-model-close-btn">${conditionformat_Text.cancel}</button>`,
            "style": "z-index:9999"
          }));
          let $t = $("#luckysheet-conditionformat-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-conditionformat-dialog").css({
            "left": (winw + scrollLeft - myw) / 2,
            "top": (winh + scrollTop - myh) / 3
          }).show();
          _this.init();
          _this.colorSelectInit();
          if (title == locale_default().conditionformat.conditionformat_occurrenceDate) {
            _this.daterangeInit("luckysheet-conditionformat-dialog");
          }
        },
        CFiconsDialog: function() {
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-CFicons-dialog").remove();
          const conditionformat_Text = locale_default().conditionformat;
          let content = `<div class="box">
                            <div style="margin-bottom: 10px;">${conditionformat_Text.pleaseSelectIcon}</div>
                            <div class="title">${conditionformat_Text.direction}</div>
                            <div class="list">
                                <div class="left">
                                    <div class="item" data-len="3" data-leftMin="0" data-top="0" title="${conditionformat_Text.threeWayArrow}(${conditionformat_Text.multicolor})"><div style="background-position:0 0;"></div></div>
                                    <div class="item" data-len="3" data-leftMin="0" data-top="1" title="${conditionformat_Text.threeTriangles}"><div style="background-position:0 -20px;"></div></div>
                                    <div class="item" data-len="4" data-leftMin="0" data-top="2" title="${conditionformat_Text.fourWayArrow}(${conditionformat_Text.multicolor})"><div style="background-position:0 -40px;"></div></div>
                                    <div class="item" data-len="5" data-leftMin="0" data-top="3" title="${conditionformat_Text.fiveWayArrow}(${conditionformat_Text.multicolor})"><div style="background-position:0 -60px;"></div></div>
                                </div>
                                <div class="right">
                                    <div class="item" data-len="3" data-leftMin="5" data-top="0" title="${conditionformat_Text.threeWayArrow}(${conditionformat_Text.grayColor})"><div style="background-position:-131px 0;"></div></div>
                                    <div class="item" data-len="4" data-leftMin="5" data-top="1" title="${conditionformat_Text.fourWayArrow}(${conditionformat_Text.grayColor})"><div style="background-position:-131px -20px;"></div></div>
                                    <div class="item" data-len="5" data-leftMin="5" data-top="2" title="${conditionformat_Text.fiveWayArrow}(${conditionformat_Text.grayColor})"><div style="background-position:-131px -40px;"></div></div>
                                </div>
                                <div style="clear:both;"></div>
                            </div>
                            <div class="title">${conditionformat_Text.shape}</div>
                            <div class="list">
                                <div class="left">
                                    <div class="item" data-len="3" data-leftMin="0" data-top="4" title="${conditionformat_Text.threeColorTrafficLight}(${conditionformat_Text.rimless})"><div style="background-position:0 -80px;"></div></div>
                                    <div class="item" data-len="3" data-leftMin="0" data-top="5" title="${conditionformat_Text.threeSigns}"><div style="background-position:0 -100px;"></div></div>
                                    <div class="item" data-len="4" data-leftMin="0" data-top="6" title="${conditionformat_Text.greenRedBlackGradient}"><div style="background-position:0 -120px;"></div></div>
                                </div>
                                <div class="right">
                                    <div class="item" data-len="3" data-leftMin="5" data-top="4" title="${conditionformat_Text.threeColorTrafficLight}(${conditionformat_Text.bordered})"><div style="background-position:-131px -80px;"></div></div>
                                    <div class="item" data-len="4" data-leftMin="5" data-top="5" title="${conditionformat_Text.fourColorTrafficLight}"><div style="background-position:-131px -100px;"></div></div>
                                </div>
                                <div style="clear:both;"></div>
                            </div>
                            <div class="title">${conditionformat_Text.mark}</div>
                            <div class="list">
                                <div class="left">
                                    <div class="item" data-len="3" data-leftMin="0" data-top="7" title="${conditionformat_Text.threeSymbols}(${conditionformat_Text.circled})"><div style="background-position:0 -140px;"></div></div>
                                    <div class="item" data-len="3" data-leftMin="0" data-top="8" title="${conditionformat_Text.tricolorFlag}"><div style="background-position:0 -160px;"></div></div>
                                </div>
                                <div class="right">
                                    <div class="item" data-len="3" data-leftMin="5" data-top="7" title="${conditionformat_Text.threeSymbols}(${conditionformat_Text.noCircle})"><div style="background-position:-131px -140px;"></div></div>
                                </div>
                                <div style="clear:both;"></div>
                            </div>
                            <div class="title">${conditionformat_Text.grade}</div>
                            <div class="list">
                                <div class="left">
                                    <div class="item" data-len="3" data-leftMin="0" data-top="9" title="${conditionformat_Text.threeStars}"><div style="background-position:0 -180px;"></div></div>
                                    <div class="item" data-len="5" data-leftMin="0" data-top="10" title="${conditionformat_Text.fiveQuadrantDiagram}"><div style="background-position:0 -200px;"></div></div>
                                    <div class="item" data-len="5" data-leftMin="0" data-top="11" title="${conditionformat_Text.fiveBoxes}"><div style="background-position:0 -220px;"></div></div>
                                </div>
                                <div class="right">
                                    <div class="item" data-len="4" data-leftMin="5" data-top="9" title="${conditionformat_Text.grade4}"><div style="background-position:-131px -180px;"></div></div>
                                    <div class="item" data-len="5" data-leftMin="5" data-top="10" title="${conditionformat_Text.grade5}"><div style="background-position:-131px -200px;"></div></div>
                                </div>
                                <div style="clear:both;"></div>
                            </div>
                        </div>`;
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-CFicons-dialog",
            "addclass": "luckysheet-CFicons-dialog",
            "title": conditionformat_Text.icons,
            "content": content,
            "botton": `<button class="btn btn-default luckysheet-model-close-btn">${conditionformat_Text.close}</button>`,
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-CFicons-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 400).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-CFicons-dialog").css({
            "left": (winw + scrollLeft - myw) / 2,
            "top": (winh + scrollTop - myh) / 3
          }).show();
        },
        administerRuleDialog: function() {
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-administerRule-dialog").remove();
          const conditionformat_Text = locale_default().conditionformat;
          let opHtml = "";
          for (let j = 0; j < store_default.luckysheetfile.length; j++) {
            if (store_default.luckysheetfile[j].status == "1") {
              opHtml += `<option value="${store_default.luckysheetfile[j]["index"]}" selected="selected">
                                ${conditionformat_Text.currentSheet}\uFF1A${store_default.luckysheetfile[j]["name"]}
                            </option>`;
            } else {
              opHtml += `<option value="${store_default.luckysheetfile[j]["index"]}">
                                ${conditionformat_Text.sheet}\uFF1A${store_default.luckysheetfile[j]["name"]}
                            </option>`;
            }
          }
          let content = `<div class="chooseSheet">
                            <label>${conditionformat_Text.showRules}\uFF1A</label>
                            <select>${opHtml}</select>
                        </div>
                        <div class="ruleBox">
                            <div class="ruleBtn">
                                <button id="newConditionRule" class="btn btn-default">${conditionformat_Text.newRule}</button>
                                <button id="editorConditionRule" class="btn btn-default">${conditionformat_Text.editRule}</button>
                                <button id="deleteConditionRule" class="btn btn-default">${conditionformat_Text.deleteRule}</button>
                            </div>
                            <div class="ruleList">
                                <div class="listTitle">
                                    <span>${conditionformat_Text.rule}</span>
                                    <span>${conditionformat_Text.format}</span>
                                    <span>${conditionformat_Text.applyRange}</span>
                                </div>
                                <div class="listBox"></div>
                            </div>
                        </div>`;
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-administerRule-dialog",
            "addclass": "luckysheet-administerRule-dialog",
            "title": conditionformat_Text.conditionformatManageRules,
            "content": content,
            "botton": `<button id="luckysheet-administerRule-dialog-confirm" class="btn btn-primary">${conditionformat_Text.confirm}</button>
                        <button id="luckysheet-administerRule-dialog-close" class="btn btn-default">${conditionformat_Text.close}</button>`,
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-administerRule-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 400).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-administerRule-dialog").css({
            "left": (winw + scrollLeft - myw) / 2,
            "top": (winh + scrollTop - myh) / 3
          }).show();
          let index2 = $("#luckysheet-administerRule-dialog .chooseSheet option:selected").val();
          this.getConditionRuleList(index2);
        },
        getConditionRuleList: function(index2) {
          let _this = this;
          $("#luckysheet-administerRule-dialog .ruleList .listBox").empty();
          let ruleArr2 = _this.fileClone[getSheetIndex(index2)].luckysheet_conditionformat_save;
          if (ruleArr2 != null && ruleArr2.length > 0) {
            const conditionformat_Text = locale_default().conditionformat;
            for (let i2 = 0; i2 < ruleArr2.length; i2++) {
              let type = ruleArr2[i2]["type"];
              let format = ruleArr2[i2]["format"];
              let cellrange = ruleArr2[i2]["cellrange"];
              let ruleName;
              let formatHtml = "";
              if (type == "dataBar") {
                ruleName = conditionformat_Text.dataBar;
                formatHtml = '<canvas width="46" height="18" style="width: 46px;height: 18px;margin: 3px 0 0 5px;"></canvas>';
              } else if (type == "colorGradation") {
                ruleName = conditionformat_Text.colorGradation;
                formatHtml = '<canvas width="46" height="18" style="width: 46px;height: 18px;margin: 3px 0 0 5px;"></canvas>';
              } else if (type == "icons") {
                ruleName = conditionformat_Text.icons;
                formatHtml = '<canvas width="46" height="18" style="width: 46px;height: 18px;margin: 3px 0 0 5px;"></canvas>';
              } else {
                ruleName = _this.getConditionRuleName(ruleArr2[i2].conditionName, ruleArr2[i2].conditionRange, ruleArr2[i2].conditionValue);
                if (format["textColor"] != null) {
                  formatHtml += '<span class="colorbox" title="' + conditionformat_Text.textColor + '" style="background-color:' + format["textColor"] + '"></span>';
                }
                if (format["cellColor"] != null) {
                  formatHtml += '<span class="colorbox" title="' + conditionformat_Text.cellColor + '" style="background-color:' + format["cellColor"] + '"></span>';
                }
              }
              let rangeTxtArr = [];
              for (let s = 0; s < cellrange.length; s++) {
                let r1 = cellrange[s].row[0], r2 = cellrange[s].row[1];
                let c1 = cellrange[s].column[0], c2 = cellrange[s].column[1];
                rangeTxtArr.push(chatatABC(c1) + (r1 + 1) + ":" + chatatABC(c2) + (r2 + 1));
              }
              let itemHtml = '<div class="item" data-item="' + i2 + '"><div class="ruleName" title="' + ruleName + '">' + ruleName + '</div><div class="format">' + formatHtml + '</div><div class="ruleRange"><input class="formulaInputFocus" readonly="true" value="' + rangeTxtArr.join(",") + '"/><i class="fa fa-table" aria-hidden="true" title="' + conditionformat_Text.selectRange + '"></i></div></div>';
              $("#luckysheet-administerRule-dialog .ruleList .listBox").prepend(itemHtml);
            }
            $("#luckysheet-administerRule-dialog .ruleList .listBox .item canvas").each(function(i2) {
              let x = $(this).closest(".item").attr("data-item");
              let type = ruleArr2[x]["type"];
              let format = ruleArr2[x]["format"];
              let can = $(this).get(0).getContext("2d");
              if (type == "dataBar") {
                if (format.length == 2) {
                  let my_gradient = can.createLinearGradient(0, 0, 46, 0);
                  my_gradient.addColorStop(0, format[0]);
                  my_gradient.addColorStop(1, format[1]);
                  can.fillStyle = my_gradient;
                  can.fillRect(0, 0, 46, 18);
                  can.beginPath();
                  can.moveTo(0, 0);
                  can.lineTo(0, 18);
                  can.lineTo(46, 18);
                  can.lineTo(46, 0);
                  can.lineTo(0, 0);
                  can.lineWidth = store_default.devicePixelRatio;
                  can.strokeStyle = format[0];
                  can.stroke();
                  can.closePath();
                } else if (format.length == 1) {
                  can.fillStyle = format[0];
                  can.fillRect(0, 0, 46, 18);
                  can.beginPath();
                  can.moveTo(0, 0);
                  can.lineTo(0, 18);
                  can.lineTo(46, 18);
                  can.lineTo(46, 0);
                  can.lineTo(0, 0);
                  can.lineWidth = store_default.devicePixelRatio;
                  can.strokeStyle = format[0];
                  can.stroke();
                  can.closePath();
                }
              } else if (type == "colorGradation") {
                let my_gradient = can.createLinearGradient(0, 0, 46, 0);
                if (format.length == 3) {
                  my_gradient.addColorStop(0, format[0]);
                  my_gradient.addColorStop(0.5, format[1]);
                  my_gradient.addColorStop(1, format[2]);
                } else if (format.length == 2) {
                  my_gradient.addColorStop(0, format[0]);
                  my_gradient.addColorStop(1, format[1]);
                }
                can.fillStyle = my_gradient;
                can.fillRect(0, 0, 46, 18);
              } else if (type == "icons") {
                let len = format["len"];
                let l = format["leftMin"];
                let t = format["top"];
                let w1 = 32 * len + 10 * (len - 1);
                let h1 = 32;
                let w2 = 46;
                let h2 = 46 * 32 / w1;
                if (l == "0") {
                  can.drawImage(luckysheet_CFiconsImg, 0, t * 32, w1, h1, 0, (18 - h2) / 2, w2, h2);
                } else if (l == "5") {
                  can.drawImage(luckysheet_CFiconsImg, 210, t * 32, w1, h1, 0, (18 - h2) / 2, w2, h2);
                }
              }
            });
            $("#luckysheet-administerRule-dialog .ruleList .listBox .item").eq(0).addClass("on");
          }
        },
        getConditionRuleName: function(conditionName, conditionRange, conditionValue) {
          let v;
          if (conditionRange[0] != null) {
            v = chatatABC(conditionRange[0]["column"][0]) + (conditionRange[0]["row"][0] + 1);
          } else {
            v = conditionValue[0];
          }
          const conditionformat_Text = locale_default().conditionformat;
          if (conditionName == "greaterThan") {
            return conditionformat_Text.cellValue + " > " + v;
          } else if (conditionName == "lessThan") {
            return conditionformat_Text.cellValue + " < " + v;
          } else if (conditionName == "betweenness") {
            let v2;
            if (conditionRange[1] != null) {
              v2 = chatatABC(conditionRange[1]["column"][0]) + (conditionRange[1]["row"][0] + 1);
            } else {
              v2 = conditionValue[1];
            }
            return conditionformat_Text.cellValue + " " + conditionformat_Text.between + " " + v + " " + conditionformat_Text.in + " " + v2 + " " + conditionformat_Text.between2;
          } else if (conditionName == "equal") {
            return conditionformat_Text.cellValue + " = " + v;
          } else if (conditionName == "textContains") {
            return conditionformat_Text.cellValue + conditionformat_Text.contain + " =" + v;
          } else if (conditionName == "occurrenceDate") {
            return conditionValue;
          } else if (conditionName == "duplicateValue") {
            if (conditionValue == "0") {
              return conditionformat_Text.duplicateValue;
            }
            if (conditionValue == "1") {
              return conditionformat_Text.uniqueValue;
            }
          } else if (conditionName == "top10") {
            return conditionformat_Text.top + " " + v + " " + conditionformat_Text.oneself;
          } else if (conditionName == "top10%") {
            return conditionformat_Text.top + " " + v + "% " + conditionformat_Text.oneself;
          } else if (conditionName == "last10") {
            return conditionformat_Text.last + " " + v + " " + conditionformat_Text.oneself;
          } else if (conditionName == "last10%") {
            return conditionformat_Text.last + " " + v + "% " + conditionformat_Text.oneself;
          } else if (conditionName == "AboveAverage") {
            return conditionformat_Text.aboveAverage;
          } else if (conditionName == "SubAverage") {
            return conditionformat_Text.belowAverage;
          } else if (conditionName == "formula") {
            if (v.slice(0, 1) != "=") {
              v = "=" + v;
            }
            return conditionformat_Text.formula + ": " + v;
          }
        },
        newConditionRuleDialog: function(source) {
          let _this = this;
          const conditionformat_Text = locale_default().conditionformat;
          let ruleExplainHtml = _this.getRuleExplain(0);
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-administerRule-dialog").hide();
          $("#luckysheet-newConditionRule-dialog").remove();
          let content = '<div><div class="boxTitle">' + conditionformat_Text.chooseRuleType + "\uFF1A</div>" + _this.ruleTypeHtml() + '<div class="boxTitle">' + conditionformat_Text.editRuleDescription + '\uFF1A</div><div class="ruleExplainBox">' + ruleExplainHtml + "</div></div>";
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-newConditionRule-dialog",
            "addclass": "luckysheet-newEditorRule-dialog",
            "title": conditionformat_Text.newFormatRule,
            "content": content,
            "botton": `<button id="luckysheet-newConditionRule-dialog-confirm" class="btn btn-primary" data-source="${source}">${conditionformat_Text.confirm}</button>
                        <button id="luckysheet-newConditionRule-dialog-close" class="btn btn-default" data-source="${source}">${conditionformat_Text.cancel}</button>`,
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-newConditionRule-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 400).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-newConditionRule-dialog").css({
            "left": (winw + scrollLeft - myw) / 2,
            "top": (winh + scrollTop - myh) / 3
          }).show();
          $("#luckysheet-newConditionRule-dialog .ruleTypeBox .ruleTypeItem:eq(0)").addClass("on").siblings().removeClass("on");
          _this.colorSelectInit();
        },
        editorConditionRuleDialog: function() {
          let _this = this;
          const conditionformat_Text = locale_default().conditionformat;
          let rule = _this.editorRule.data;
          if (rule == null) {
            return;
          }
          let ruleType = rule["type"], ruleFormat = rule["format"], conditionName = rule["conditionName"];
          let index2, type1;
          if (ruleType == "dataBar" || ruleType == "colorGradation" || ruleType == "icons") {
            index2 = 0;
            type1 = ruleType;
          } else {
            if (conditionName == "greaterThan" || conditionName == "lessThan" || conditionName == "betweenness" || conditionName == "equal" || conditionName == "textContains" || conditionName == "occurrenceDate") {
              index2 = 1;
              if (conditionName == "greaterThan" || conditionName == "lessThan" || conditionName == "betweenness" || conditionName == "equal") {
                type1 = "number";
              } else if (conditionName == "textContains") {
                type1 = "text";
              } else if (conditionName == "occurrenceDate") {
                type1 = "date";
              }
            } else if (conditionName == "top10" || conditionName == "top10%" || conditionName == "last10" || conditionName == "last10%") {
              index2 = 2;
              if (conditionName == "top10" || conditionName == "top10%") {
                type1 = "top";
              } else if (conditionName == "last10" || conditionName == "last10%") {
                type1 = "last";
              }
            } else if (conditionName == "AboveAverage" || conditionName == "SubAverage") {
              index2 = 3;
              type1 = conditionName;
            } else if (conditionName == "duplicateValue") {
              index2 = 4;
              type1 = rule["conditionValue"];
            } else if (conditionName == "formula") {
              index2 = 5;
            }
          }
          let ruleExplainHtml = _this.getRuleExplain(index2);
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-administerRule-dialog").hide();
          $("#luckysheet-editorConditionRule-dialog").remove();
          let content = '<div><div class="boxTitle">' + conditionformat_Text.chooseRuleType + "\uFF1A</div>" + _this.ruleTypeHtml() + '<div class="boxTitle">' + conditionformat_Text.editRuleDescription + '\uFF1A</div><div class="ruleExplainBox">' + ruleExplainHtml + "</div></div>";
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-editorConditionRule-dialog",
            "addclass": "luckysheet-newEditorRule-dialog",
            "title": conditionformat_Text.editFormatRule,
            "content": content,
            "botton": `<button id="luckysheet-editorConditionRule-dialog-confirm" class="btn btn-primary">${conditionformat_Text.confirm}</button>
                        <button id="luckysheet-editorConditionRule-dialog-close" class="btn btn-default">${conditionformat_Text.cancel}</button>`,
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-editorConditionRule-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 400).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-editorConditionRule-dialog").css({
            "left": (winw + scrollLeft - myw) / 2,
            "top": (winh + scrollTop - myh) / 3
          }).show();
          _this.colorSelectInit();
          $("#luckysheet-editorConditionRule-dialog .ruleTypeBox .ruleTypeItem:eq(" + index2 + ")").addClass("on").siblings().removeClass("on");
          $("#luckysheet-editorConditionRule-dialog #type1").val(type1);
          if (type1 == "dataBar" || type1 == "colorGradation" || type1 == "icons" || type1 == "number" || type1 == "text" || type1 == "date") {
            $("#luckysheet-editorConditionRule-dialog ." + type1 + "Box").show();
            $("#luckysheet-editorConditionRule-dialog ." + type1 + "Box").siblings().hide();
          }
          if (type1 == "date") {
            _this.daterangeInit("luckysheet-editorConditionRule-dialog");
          }
          if (ruleType == "dataBar" || ruleType == "colorGradation" || ruleType == "icons") {
            if (type1 == "dataBar") {
              if (ruleFormat.length == 2) {
                $("#luckysheet-editorConditionRule-dialog .dataBarBox #type2").val("gradient");
              } else if (ruleFormat.length == 1) {
                $("#luckysheet-editorConditionRule-dialog .dataBarBox #type2").val("solid");
              }
              $("#luckysheet-editorConditionRule-dialog .dataBarBox .luckysheet-conditionformat-config-color").spectrum("set", ruleFormat[0]);
            } else if (type1 == "colorGradation") {
              if (ruleFormat.length == 3) {
                $("#luckysheet-editorConditionRule-dialog .colorGradationBox #type2").val("threeColor");
                $("#luckysheet-editorConditionRule-dialog .colorGradationBox .midVal").show();
                $("#luckysheet-editorConditionRule-dialog .colorGradationBox .maxVal .luckysheet-conditionformat-config-color").spectrum("set", ruleFormat[0]);
                $("#luckysheet-editorConditionRule-dialog .colorGradationBox .midVal .luckysheet-conditionformat-config-color").spectrum("set", ruleFormat[1]);
                $("#luckysheet-editorConditionRule-dialog .colorGradationBox .minVal .luckysheet-conditionformat-config-color").spectrum("set", ruleFormat[2]);
              } else if (ruleFormat.length == 2) {
                $("#luckysheet-editorConditionRule-dialog .colorGradationBox #type2").val("twoColor");
                $("#luckysheet-editorConditionRule-dialog .colorGradationBox .midVal").hide();
                $("#luckysheet-editorConditionRule-dialog .colorGradationBox .maxVal .luckysheet-conditionformat-config-color").spectrum("set", ruleFormat[0]);
                $("#luckysheet-editorConditionRule-dialog .colorGradationBox .minVal .luckysheet-conditionformat-config-color").spectrum("set", ruleFormat[1]);
              }
            } else if (type1 == "icons") {
              let len = ruleFormat["len"];
              let l = ruleFormat["leftMin"];
              let t = ruleFormat["top"];
              $("#luckysheet-editorConditionRule-dialog .iconsBox li").each(function(i2, e) {
                if ($(e).find("div").attr("data-len") == len && $(e).find("div").attr("data-leftmin") == l && $(e).find("div").attr("data-top") == t) {
                  $("#luckysheet-editorConditionRule-dialog .iconsBox .showbox .model").css("background-position", $(e).find("div").css("background-position"));
                  $("#luckysheet-editorConditionRule-dialog .iconsBox .showbox .model").attr("data-len", $(e).find("div").attr("data-len"));
                  $("#luckysheet-editorConditionRule-dialog .iconsBox .showbox .model").attr("data-leftmin", $(e).find("div").attr("data-leftmin"));
                  $("#luckysheet-editorConditionRule-dialog .iconsBox .showbox .model").attr("data-top", $(e).find("div").attr("data-leftmin"));
                  $("#luckysheet-editorConditionRule-dialog .iconsBox .showbox .model").attr("title", $(e).find("div").attr("title"));
                  return true;
                }
              });
            }
          } else {
            if (type1 == "number") {
              $("#luckysheet-editorConditionRule-dialog .numberBox #type2").val(conditionName);
              let val1;
              if (rule.conditionRange[0] != null) {
                val1 = getRangetxt(store_default.currentSheetIndex, {"row": rule.conditionRange[0]["row"], "column": rule.conditionRange[0]["column"]}, store_default.currentSheetIndex);
              } else {
                val1 = rule.conditionValue[0];
              }
              $("#luckysheet-editorConditionRule-dialog .numberBox #conditionVal input").val(val1);
              if (conditionName == "betweenness") {
                $("#luckysheet-editorConditionRule-dialog .numberBox .txt").show();
                $("#luckysheet-editorConditionRule-dialog .numberBox #conditionVal2").show();
                let val2;
                if (rule.conditionRange[1] != null) {
                  val2 = getRangetxt(store_default.currentSheetIndex, {"row": rule.conditionRange[1]["row"], "column": rule.conditionRange[1]["column"]}, store_default.currentSheetIndex);
                } else {
                  val2 = rule.conditionValue[1];
                }
                $("#luckysheet-editorConditionRule-dialog .numberBox #conditionVal2 input").val(val2);
              } else {
                $("#luckysheet-editorConditionRule-dialog .numberBox .txt").hide();
                $("#luckysheet-editorConditionRule-dialog .numberBox #conditionVal2").hide();
              }
            } else if (type1 == "text") {
              let val1;
              if (rule.conditionRange[0] != null) {
                val1 = getRangetxt(store_default.currentSheetIndex, {"row": rule.conditionRange[0]["row"], "column": rule.conditionRange[0]["column"]}, store_default.currentSheetIndex);
              } else {
                val1 = rule.conditionValue[0];
              }
              $("#luckysheet-editorConditionRule-dialog .textBox #conditionVal input").val(val1);
            } else if (type1 == "date") {
              _this.daterangeInit("luckysheet-editorConditionRule-dialog");
              let val1 = rule.conditionValue[0];
              $("#luckysheet-editorConditionRule-dialog .dateBox #daterange-btn").val(val1);
            } else if (type1 == "top" || type1 == "last") {
              let val1 = rule.conditionValue[0];
              if (conditionName == "top10%" || conditionName == "last10%") {
                $("#luckysheet-editorConditionRule-dialog #isPercent").attr("checked", "checked");
              }
            } else {
              if (conditionName == "formula") {
                let val1 = rule.conditionValue[0];
                $("#luckysheet-editorConditionRule-dialog #formulaConditionVal input").val(val1);
              }
            }
            $("#luckysheet-editorConditionRule-dialog #textcolorshow").spectrum("set", ruleFormat.textColor);
            $("#luckysheet-editorConditionRule-dialog #cellcolorshow").spectrum("set", ruleFormat.cellColor);
          }
        },
        infoDialog: function(title, content) {
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-conditionformat-info-dialog").remove();
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-conditionformat-info-dialog",
            "addclass": "",
            "title": title,
            "content": content,
            "botton": `<button id="luckysheet-conditionformat-info-dialog-close" class="btn btn-default">${locale_default().conditionformat.close}</button>`,
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-conditionformat-info-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-conditionformat-info-dialog").css({
            "left": (winw + scrollLeft - myw) / 2,
            "top": (winh + scrollTop - myh) / 3
          }).show();
        },
        getRuleExplain: function(index2) {
          const conditionformat_Text = locale_default().conditionformat;
          let textCellColorHtml = this.textCellColorHtml();
          let ruleExplainHtml;
          switch (index2) {
            case 0:
              ruleExplainHtml = `<div class="title">${conditionformat_Text.ruleTypeItem1}\uFF1A</div>
                                    <div style="height: 30px;margin-bottom: 5px;">
                                        <label style="display: block;width: 80px;height: 30px;line-height: 30px;float: left;">${conditionformat_Text.formatStyle}\uFF1A</label>
                                        <select id="type1">
                                            <option value="dataBar">${conditionformat_Text.dataBar}</option>
                                            <option value="colorGradation">${conditionformat_Text.colorGradation}</option>
                                            <option value="icons">${conditionformat_Text.icons}</option>
                                        </select>
                                    </div>
                                    <div>
                                        <div class="type1Box dataBarBox">
                                            <div style="height: 30px;margin-bottom: 5px;">
                                                <label style="display: block;width: 80px;height: 30px;line-height: 30px;float: left;">${conditionformat_Text.fillType}\uFF1A</label>
                                                <select id="type2">
                                                    <option value="gradient">${conditionformat_Text.gradient}</option>
                                                    <option value="solid">${conditionformat_Text.solid}</option>
                                                </select>
                                            </div>
                                            <div style="height: 30px;margin-bottom: 5px;">
                                                <label style="display: block;width: 80px;height: 30px;line-height: 30px;float: left;">${conditionformat_Text.color}\uFF1A</label>
                                                <input data-tips="${conditionformat_Text.dataBarColor}" data-func="background" class="luckysheet-conditionformat-config-color" type="text" value="#638ec6" style="display: none;"> 
                                            </div>
                                        </div>
                                        <div class="type1Box colorGradationBox" style="display: none;">
                                            <div style="height: 30px;margin-bottom: 5px;">
                                                <label style="display: block;width: 80px;height: 30px;line-height: 30px;float: left;">${conditionformat_Text.fillType}\uFF1A</label>
                                                <select id="type2">
                                                    <option value="threeColor">${conditionformat_Text.tricolor}</option>
                                                    <option value="twoColor">${conditionformat_Text.twocolor}</option>
                                                </select>
                                            </div>
                                            <div class="maxVal" style="height: 30px;margin-bottom: 5px;">
                                                <label style="display: block;width: 80px;height: 30px;line-height: 30px;float: left;">${conditionformat_Text.maxValue}\uFF1A</label>
                                                <input data-tips="${conditionformat_Text.maxValue} ${conditionformat_Text.color}" data-func="background" class="luckysheet-conditionformat-config-color" type="text" value="rgb(99, 190, 123)" style="display: none;">
                                            </div>
                                            <div class="midVal" style="height: 30px;margin-bottom: 5px;">
                                                <label style="display: block;width: 80px;height: 30px;line-height: 30px;float: left;">${conditionformat_Text.medianValue}\uFF1A</label>
                                                <input data-tips="${conditionformat_Text.medianValue} ${conditionformat_Text.color}" data-func="background" class="luckysheet-conditionformat-config-color" type="text" value="rgb(255, 235, 132)" style="display: none;">
                                            </div>
                                            <div class="minVal" style="height: 30px;margin-bottom: 5px;">
                                                <label style="display: block;width: 80px;height: 30px;line-height: 30px;float: left;">${conditionformat_Text.minValue}\uFF1A</label>
                                                <input data-tips="${conditionformat_Text.minValue} ${conditionformat_Text.color}" data-func="background" class="luckysheet-conditionformat-config-color" type="text" value="rgb(248, 105, 107)" style="display: none;">
                                            </div>
                                        </div>
                                        <div class="type1Box iconsBox" style="display: none;">
                                            <label>${conditionformat_Text.fillType}\uFF1A</label>
                                            <div class="showbox">
                                                <div class="model" data-len="3" data-leftmin="0" data-top="0" title="${conditionformat_Text.threeWayArrow}(${conditionformat_Text.multicolor})" style="background-position: 0 0;"></div>
                                                <span class="ui-selectmenu-icon ui-icon ui-icon-triangle-1-s" style="margin-top: 2px;"></span>
                                            </div>
                                            <ul>
                                                <li><div data-len="3" data-leftmin="0" data-top="0" title="${conditionformat_Text.threeWayArrow}(${conditionformat_Text.multicolor})" style="background-position: 0 0;"></div></li>
                                                <li><div data-len="3" data-leftmin="5" data-top="0" title="${conditionformat_Text.threeWayArrow}(${conditionformat_Text.grayColor})" style="background-position: -131px 0;"></div></li>
                                                <li><div data-len="3" data-leftmin="0" data-top="1" title="${conditionformat_Text.threeTriangles}" style="background-position: 0 -20px;"></div></li>
                                                <li><div data-len="4" data-leftmin="0" data-top="2" title="${conditionformat_Text.fourWayArrow}(${conditionformat_Text.multicolor})" style="background-position: 0 -40px;"></div></li>
                                                <li><div data-len="4" data-leftmin="5" data-top="1" title="${conditionformat_Text.fourWayArrow}(${conditionformat_Text.grayColor})" style="background-position: -131px -20px;"></div></li>
                                                <li><div data-len="5" data-leftmin="0" data-top="3" title="${conditionformat_Text.fiveWayArrow}(${conditionformat_Text.multicolor})" style="background-position: 0 -60px;"></div></li>
                                                <li><div data-len="5" data-leftmin="5" data-top="2" title="${conditionformat_Text.fiveWayArrow}(${conditionformat_Text.grayColor})" style="background-position: -131px -40px;"></div></li>
                                                <li><div data-len="3" data-leftmin="0" data-top="4" title="${conditionformat_Text.threeColorTrafficLight}(${conditionformat_Text.rimless})" style="background-position: 0 -80px;"></div></li>
                                                <li><div data-len="3" data-leftmin="5" data-top="4" title="${conditionformat_Text.threeColorTrafficLight}(${conditionformat_Text.bordered})" style="background-position: -131px -80px;"></div></li>
                                                <li><div data-len="3" data-leftmin="0" data-top="5" title="${conditionformat_Text.threeSigns}" style="background-position: 0 -100px;"></div></li>
                                                <li><div data-len="4" data-leftmin="5" data-top="5" title="${conditionformat_Text.fourColorTrafficLight}" style="background-position: -131px -100px;"></div></li>
                                                <li><div data-len="4" data-leftmin="0" data-top="6" title="${conditionformat_Text.greenRedBlackGradient}" style="background-position: 0 -120px;"></div></li>
                                                <li><div data-len="3" data-leftmin="0" data-top="7" title="${conditionformat_Text.threeSymbols}(${conditionformat_Text.circled})" style="background-position: 0 -140px;"></div></li>
                                                <li><div data-len="3" data-leftmin="5" data-top="7" title="${conditionformat_Text.threeSymbols}(${conditionformat_Text.noCircle})" style="background-position: -131px -140px;"></div></li>
                                                <li><div data-len="3" data-leftmin="0" data-top="8" title="${conditionformat_Text.tricolorFlag}" style="background-position: 0 -160px;"></div></li>
                                                <li><div data-len="3" data-leftmin="0" data-top="9" title="${conditionformat_Text.threeStars}" style="background-position: 0 -180px;"></div></li>
                                                <li><div data-len="5" data-leftmin="0" data-top="10" title="${conditionformat_Text.fiveQuadrantDiagram}" style="background-position: 0 -200px;"></div></li>
                                                <li><div data-len="5" data-leftmin="0" data-top="11" title="${conditionformat_Text.fiveBoxes}" style="background-position: 0 -220px;"></div></li>
                                                <li><div data-len="4" data-leftmin="5" data-top="9" title="${conditionformat_Text.grade4}" style="background-position: -131px -180px;"></div></li>
                                                <li><div data-len="5" data-leftmin="5" data-top="10" title="${conditionformat_Text.grade5}" style="background-position: -131px -200px;"></div></li>
                                            </ul>
                                        </div>
                                    </div>`;
              break;
            case 1:
              ruleExplainHtml = `<div class="title">${conditionformat_Text.ruleTypeItem2_title}\uFF1A</div>
                                    <div style="height: 30px;margin-bottom: 10px;">
                                        <select id="type1">
                                            <option value="number">${conditionformat_Text.cellValue}</option>
                                            <option value="text">${conditionformat_Text.specificText}</option>
                                            <option value="date">${conditionformat_Text.occurrence}</option>
                                        </select>
                                        <div>
                                            <div class="type1Box numberBox">
                                                <select id="type2">
                                                    <option value="greaterThan">${conditionformat_Text.greaterThan}</option>
                                                    <option value="lessThan">${conditionformat_Text.lessThan}</option>
                                                    <option value="betweenness">${conditionformat_Text.between}</option>
                                                    <option value="equal">${conditionformat_Text.equal}</option>
                                                </select>
                                                <div class="inpbox range" id="conditionVal">
                                                    <input class="formulaInputFocus"/>
                                                    <i class="fa fa-table" aria-hidden="true" title="${conditionformat_Text.selectCell}"></i>
                                                </div>
                                                <span class="txt" style="display: none;">${conditionformat_Text.in}</span>
                                                <div class="inpbox range" id="conditionVal2" style="display: none;">
                                                    <input class="formulaInputFocus"/>
                                                    <i class="fa fa-table" aria-hidden="true" title="${conditionformat_Text.selectDataRange}"></i>
                                                </div>
                                            </div>
                                            <div class="type1Box textBox" style="display: none;">
                                                <select id="type2">
                                                    <option value="">${conditionformat_Text.contain}</option>
                                                </select>
                                                <div class="inpbox range" id="conditionVal">
                                                    <input class="formulaInputFocus"/>
                                                    <i class="fa fa-table" aria-hidden="true" title="${conditionformat_Text.selectCell}"></i>
                                                </div>
                                            </div>
                                            <div class="type1Box dateBox" style="display: none;">
                                                <div style="width: 162px;" class="inpbox">
                                                    <input style="width: 150px;" id="daterange-btn" readonly="readonly" placeholder="${conditionformat_Text.pleaseSelectADate}"/>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="title">${conditionformat_Text.setFormat}: </div>${textCellColorHtml}`;
              break;
            case 2:
              ruleExplainHtml = `<div class="title">${conditionformat_Text.ruleTypeItem3_title}\uFF1A</div>
                                    <div style="height: 30px;margin-bottom: 10px;">
                                        <select id="type1">
                                            <option value="top">${conditionformat_Text.top}</option>
                                            <option value="last">${conditionformat_Text.last}</option>
                                        </select>
                                        <div class="inpbox" id="conditionVal">
                                            <input class="formulaInputFocus" type="number" value="10"/>
                                        </div>
                                        <input id="isPercent" type="checkbox"/>
                                        <label for="isPercent" class="txt">${conditionformat_Text.selectRange_percent}</label>
                                    </div>
                                    <div class="title">${conditionformat_Text.setFormat}\uFF1A</div>${textCellColorHtml}`;
              break;
            case 3:
              ruleExplainHtml = `<div class="title">${conditionformat_Text.ruleTypeItem4_title}\uFF1A</div>
                                    <div style="height: 30px;margin-bottom: 10px;">
                                        <select id="type1">
                                            <option value="AboveAverage">${conditionformat_Text.above}</option>
                                            <option value="SubAverage">${conditionformat_Text.below}</option>
                                        </select>
                                        <span class="txt">${conditionformat_Text.selectRange_average}</span>
                                    </div>
                                    <div class="title">${conditionformat_Text.setFormat}\uFF1A</div>${textCellColorHtml}`;
              break;
            case 4:
              ruleExplainHtml = `<div class="title">${conditionformat_Text.all}\uFF1A</div>
                                    <div style="height: 30px;margin-bottom: 10px;">
                                        <select id="type1">
                                            <option value="0">${conditionformat_Text.duplicateValue}</option>
                                            <option value="1">${conditionformat_Text.uniqueValue}</option>
                                        </select>
                                        <span class="txt">${conditionformat_Text.selectRange_value}</span>
                                    </div>
                                    <div class="title">${conditionformat_Text.setFormat}\uFF1A</div>${textCellColorHtml}`;
              break;
            case 5:
              ruleExplainHtml = `<div class="title">${conditionformat_Text.ruleTypeItem2_title}\uFF1A</div>
                                    <div style="height: 30px;margin-bottom: 10px;">
                                        <div class="inpbox range" id="formulaConditionVal" style="width: 250px;">
                                            <input class="formulaInputFocus" style="width: 200px;"/>
                                            <i class="fa fa-table" aria-hidden="true" title="${conditionformat_Text.selectCell}"></i>
                                        </div>
                                    </div>
                                    <div class="title">${conditionformat_Text.setFormat}: </div>${textCellColorHtml}`;
              break;
          }
          return ruleExplainHtml;
        },
        daterangeInit: function(id) {
          const conditionformat_Text = locale_default().conditionformat;
          $(".ranges_1 ul").remove();
          $("#" + id).find("#daterange-btn").flatpickr({
            mode: "range",
            onChange: function(data, label) {
              const [start, end] = data;
              let format1 = [
                conditionformat_Text.yesterday,
                conditionformat_Text.today
              ];
              let format2 = [
                conditionformat_Text.lastWeek,
                conditionformat_Text.thisWeek,
                conditionformat_Text.lastMonth,
                conditionformat_Text.thisMonth,
                conditionformat_Text.lastYear,
                conditionformat_Text.thisYear,
                conditionformat_Text.last7days,
                conditionformat_Text.last30days
              ];
              if (label == conditionformat_Text.all) {
                $("#daterange-btn").val("");
              } else if (format1.indexOf(label) > -1) {
                $("#daterange-btn").val((0, import_dayjs4.default)(start).format("YYYY/MM/DD"));
              } else if (format2.indexOf(label) > -1) {
                $("#daterange-btn").val((0, import_dayjs4.default)(start).format("YYYY/MM/DD") + "-" + (0, import_dayjs4.default)(end).format("YYYY/MM/DD"));
              }
            }
          });
        },
        CFSplitRange: function(range1, range2, range3, type) {
          let range4 = [];
          let offset_r = range3["row"][0] - range2["row"][0];
          let offset_c = range3["column"][0] - range2["column"][0];
          let r1 = range1["row"][0], r2 = range1["row"][1];
          let c1 = range1["column"][0], c2 = range1["column"][1];
          if (r1 >= range2["row"][0] && r2 <= range2["row"][1] && c1 >= range2["column"][0] && c2 <= range2["column"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1 + offset_r, r2 + offset_r], "column": [c1 + offset_c, c2 + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [r1 + offset_r, r2 + offset_r], "column": [c1 + offset_c, c2 + offset_c]}
              ];
            }
          } else if (r1 >= range2["row"][0] && r1 <= range2["row"][1] && c1 >= range2["column"][0] && c2 <= range2["column"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]},
                {"row": [r1 + offset_r, range2["row"][1] + offset_r], "column": [c1 + offset_c, c2 + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [r1 + offset_r, range2["row"][1] + offset_r], "column": [c1 + offset_c, c2 + offset_c]}
              ];
            }
          } else if (r2 >= range2["row"][0] && r2 <= range2["row"][1] && c1 >= range2["column"][0] && c2 <= range2["column"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][0] + offset_r, r2 + offset_r], "column": [c1 + offset_c, c2 + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [range2["row"][0] + offset_r, r2 + offset_r], "column": [c1 + offset_c, c2 + offset_c]}
              ];
            }
          } else if (r1 < range2["row"][0] && r2 > range2["row"][1] && c1 >= range2["column"][0] && c2 <= range2["column"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]},
                {"row": [range2["row"][0] + offset_r, range2["row"][1] + offset_r], "column": [c1 + offset_c, c2 + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [range2["row"][0] + offset_r, range2["row"][1] + offset_r], "column": [c1 + offset_c, c2 + offset_c]}
              ];
            }
          } else if (c1 >= range2["column"][0] && c1 <= range2["column"][1] && r1 >= range2["row"][0] && r2 <= range2["row"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, r2], "column": [range2["column"][1] + 1, c2]},
                {"row": [r1 + offset_r, r2 + offset_r], "column": [c1 + offset_c, range2["column"][1] + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, r2], "column": [range2["column"][1] + 1, c2]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [r1 + offset_r, r2 + offset_r], "column": [c1 + offset_c, range2["column"][1] + offset_c]}
              ];
            }
          } else if (c2 >= range2["column"][0] && c2 <= range2["column"][1] && r1 >= range2["row"][0] && r2 <= range2["row"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, r2], "column": [c1, range2["column"][0] - 1]},
                {"row": [r1 + offset_r, r2 + offset_r], "column": [range2["column"][0] + offset_c, c2 + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, r2], "column": [c1, range2["column"][0] - 1]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [r1 + offset_r, r2 + offset_r], "column": [range2["column"][0] + offset_c, c2 + offset_c]}
              ];
            }
          } else if (c1 < range2["column"][0] && c2 > range2["column"][1] && r1 >= range2["row"][0] && r2 <= range2["row"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, r2], "column": [c1, range2["column"][0] - 1]},
                {"row": [r1, r2], "column": [range2["column"][1] + 1, c2]},
                {"row": [r1 + offset_r, r2 + offset_r], "column": [range2["column"][0] + offset_c, range2["column"][1] + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, r2], "column": [c1, range2["column"][0] - 1]},
                {"row": [r1, r2], "column": [range2["column"][1] + 1, c2]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [r1 + offset_r, r2 + offset_r], "column": [range2["column"][0] + offset_c, range2["column"][1] + offset_c]}
              ];
            }
          } else if (r1 >= range2["row"][0] && r1 <= range2["row"][1] && c1 >= range2["column"][0] && c1 <= range2["column"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, range2["row"][1]], "column": [range2["column"][1] + 1, c2]},
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]},
                {"row": [r1 + offset_r, range2["row"][1] + offset_r], "column": [c1 + offset_c, range2["column"][1] + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, range2["row"][1]], "column": [range2["column"][1] + 1, c2]},
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [r1 + offset_r, range2["row"][1] + offset_r], "column": [c1 + offset_c, range2["column"][1] + offset_c]}
              ];
            }
          } else if (r1 >= range2["row"][0] && r1 <= range2["row"][1] && c2 >= range2["column"][0] && c2 <= range2["column"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, range2["row"][1]], "column": [c1, range2["column"][0] - 1]},
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]},
                {"row": [r1 + offset_r, range2["row"][1] + offset_r], "column": [range2["column"][0] + offset_c, c2 + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, range2["row"][1]], "column": [c1, range2["column"][0] - 1]},
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [r1 + offset_r, range2["row"][1] + offset_r], "column": [range2["column"][0] + offset_c, c2 + offset_c]}
              ];
            }
          } else if (r2 >= range2["row"][0] && r2 <= range2["row"][1] && c1 >= range2["column"][0] && c1 <= range2["column"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][0], r2], "column": [range2["column"][1] + 1, c2]},
                {"row": [range2["row"][0] + offset_r, r2 + offset_r], "column": [c1 + offset_c, range2["column"][1] + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][0], r2], "column": [range2["column"][1] + 1, c2]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [range2["row"][0] + offset_r, r2 + offset_r], "column": [c1 + offset_c, range2["column"][1] + offset_c]}
              ];
            }
          } else if (r2 >= range2["row"][0] && r2 <= range2["row"][1] && c2 >= range2["column"][0] && c2 <= range2["column"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][0], r2], "column": [c1, range2["column"][0] - 1]},
                {"row": [range2["row"][0] + offset_r, r2 + offset_r], "column": [range2["column"][0] + offset_c, c2 + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][0], r2], "column": [c1, range2["column"][0] - 1]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [range2["row"][0] + offset_r, r2 + offset_r], "column": [range2["column"][0] + offset_c, c2 + offset_c]}
              ];
            }
          } else if (r1 < range2["row"][0] && r2 > range2["row"][1] && c1 >= range2["column"][0] && c1 <= range2["column"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][0], range2["row"][1]], "column": [range2["column"][1] + 1, c2]},
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]},
                {"row": [range2["row"][0] + offset_r, range2["row"][1] + offset_r], "column": [c1 + offset_c, range2["column"][1] + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][0], range2["row"][1]], "column": [range2["column"][1] + 1, c2]},
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [range2["row"][0] + offset_r, range2["row"][1] + offset_r], "column": [c1 + offset_c, range2["column"][1] + offset_c]}
              ];
            }
          } else if (r1 < range2["row"][0] && r2 > range2["row"][1] && c2 >= range2["column"][0] && c2 <= range2["column"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][0], range2["row"][1]], "column": [c1, range2["column"][0] - 1]},
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]},
                {"row": [range2["row"][0] + offset_r, range2["row"][1] + offset_r], "column": [range2["column"][0] + offset_c, c2 + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][0], range2["row"][1]], "column": [c1, range2["column"][0] - 1]},
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [range2["row"][0] + offset_r, range2["row"][1] + offset_r], "column": [range2["column"][0] + offset_c, c2 + offset_c]}
              ];
            }
          } else if (c1 < range2["column"][0] && c2 > range2["column"][1] && r1 >= range2["row"][0] && r1 <= range2["row"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, range2["row"][1]], "column": [c1, range2["column"][0] - 1]},
                {"row": [r1, range2["row"][1]], "column": [range2["column"][1] + 1, c2]},
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]},
                {"row": [r1 + offset_r, range2["row"][1] + offset_r], "column": [range2["column"][0] + offset_c, range2["column"][1] + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, range2["row"][1]], "column": [c1, range2["column"][0] - 1]},
                {"row": [r1, range2["row"][1]], "column": [range2["column"][1] + 1, c2]},
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [r1 + offset_r, range2["row"][1] + offset_r], "column": [range2["column"][0] + offset_c, range2["column"][1] + offset_c]}
              ];
            }
          } else if (c1 < range2["column"][0] && c2 > range2["column"][1] && r2 >= range2["row"][0] && r2 <= range2["row"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][0], r2], "column": [c1, range2["column"][0] - 1]},
                {"row": [range2["row"][0], r2], "column": [range2["column"][1] + 1, c2]},
                {"row": [range2["row"][0] + offset_r, r2 + offset_r], "column": [range2["column"][0] + offset_c, range2["column"][1] + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][0], r2], "column": [c1, range2["column"][0] - 1]},
                {"row": [range2["row"][0], r2], "column": [range2["column"][1] + 1, c2]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [range2["row"][0] + offset_r, r2 + offset_r], "column": [range2["column"][0] + offset_c, range2["column"][1] + offset_c]}
              ];
            }
          } else if (r1 < range2["row"][0] && r2 > range2["row"][1] && c1 < range2["column"][0] && c2 > range2["column"][1]) {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][0], range2["row"][1]], "column": [c1, range2["column"][0] - 1]},
                {"row": [range2["row"][0], range2["row"][1]], "column": [range2["column"][1] + 1, c2]},
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]},
                {"row": [range2["row"][0] + offset_r, range2["row"][1] + offset_r], "column": [range2["column"][0] + offset_c, range2["column"][1] + offset_c]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, range2["row"][0] - 1], "column": [c1, c2]},
                {"row": [range2["row"][0], range2["row"][1]], "column": [c1, range2["column"][0] - 1]},
                {"row": [range2["row"][0], range2["row"][1]], "column": [range2["column"][1] + 1, c2]},
                {"row": [range2["row"][1] + 1, r2], "column": [c1, c2]}
              ];
            } else if (type == "operatePart") {
              range4 = [
                {"row": [range2["row"][0] + offset_r, range2["row"][1] + offset_r], "column": [range2["column"][0] + offset_c, range2["column"][1] + offset_c]}
              ];
            }
          } else {
            if (type == "allPart") {
              range4 = [
                {"row": [r1, r2], "column": [c1, c2]}
              ];
            } else if (type == "restPart") {
              range4 = [
                {"row": [r1, r2], "column": [c1, c2]}
              ];
            } else if (type == "operatePart") {
              range4 = [];
            }
          }
          return range4;
        },
        getcolorGradation: function(color1, color2, value1, value2, value) {
          let rgb1 = color1.split(",");
          let r1 = parseInt(rgb1[0].split("(")[1]);
          let g1 = parseInt(rgb1[1]);
          let b1 = parseInt(rgb1[2].split(")")[0]);
          let rgb2 = color2.split(",");
          let r2 = parseInt(rgb2[0].split("(")[1]);
          let g2 = parseInt(rgb2[1]);
          let b2 = parseInt(rgb2[2].split(")")[0]);
          let r3 = Math.round(r1 - (r1 - r2) / (value1 - value2) * (value1 - value));
          let g = Math.round(g1 - (g1 - g2) / (value1 - value2) * (value1 - value));
          let b = Math.round(b1 - (b1 - b2) / (value1 - value2) * (value1 - value));
          return "rgb(" + r3 + ", " + g + ", " + b + ")";
        },
        getCFPartRange: function(sheetIndex, range1, range2) {
          let ruleArr2 = [];
          let cf = store_default.luckysheetfile[getSheetIndex(sheetIndex)].luckysheet_conditionformat_save;
          if (cf != null && cf.length > 0) {
            label:
              for (let i2 = 0; i2 < cf.length; i2++) {
                let cellrange = cf[i2].cellrange;
                for (let j = 0; j < cellrange.length; j++) {
                  let r1 = cellrange[j].row[0], r2 = cellrange[j].row[1];
                  let c1 = cellrange[j].column[0], c2 = cellrange[j].column[1];
                  for (let s = 0; s < range.length; s++) {
                    if (range[s].row[0] >= r1 && range[s].row[0] <= r2 || range[s].row[1] >= r1 && range[s].row[1] <= r2 || range[s].column[0] >= c1 && range[s].column[0] <= c2 || range[s].column[1] >= c1 && range[s].column[1] <= c2) {
                      ruleArr2.push(cf[i2]);
                      continue label;
                    }
                  }
                }
              }
          }
          return ruleArr2;
        },
        checksCF: function(r2, c2, computeMap2) {
          if (computeMap2 != null && r2 + "_" + c2 in computeMap2) {
            return computeMap2[r2 + "_" + c2];
          } else {
            return null;
          }
        },
        getComputeMap: function(sheetIndex) {
          let index2 = getSheetIndex(store_default.currentSheetIndex);
          if (sheetIndex != null) {
            index2 = getSheetIndex(sheetIndex);
          }
          let ruleArr2 = store_default.luckysheetfile[index2]["luckysheet_conditionformat_save"];
          let data = store_default.luckysheetfile[index2]["data"];
          if (data == null) {
            return null;
          }
          let computeMap2 = this.compute(ruleArr2, data);
          return computeMap2;
        },
        compute: function(ruleArr2, d) {
          let _this = this;
          if (ruleArr2 == null) {
            ruleArr2 = [];
          }
          let computeMap2 = {};
          if (ruleArr2.length > 0) {
            for (let i2 = 0; i2 < ruleArr2.length; i2++) {
              let type = ruleArr2[i2]["type"];
              let cellrange = ruleArr2[i2]["cellrange"];
              let format = ruleArr2[i2]["format"];
              if (type == "dataBar") {
                let max = null, min = null;
                for (let s = 0; s < cellrange.length; s++) {
                  for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                    for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                      if (d[r2] == null || d[r2][c2] == null) {
                        continue;
                      }
                      let cell = d[r2][c2];
                      if (getObjType(cell) == "object" && cell["ct"] != null && cell["ct"].t == "n" && cell.v != null) {
                        if (max == null || parseInt(cell.v) > max) {
                          max = parseInt(cell.v);
                        }
                        if (min == null || parseInt(cell.v) < min) {
                          min = parseInt(cell.v);
                        }
                      }
                    }
                  }
                }
                if (max != null && min != null) {
                  if (min < 0) {
                    let plusLen = Math.round(max / (max - min) * 10) / 10;
                    let minusLen = Math.round(Math.abs(min) / (max - min) * 10) / 10;
                    for (let s = 0; s < cellrange.length; s++) {
                      for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                        for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                          if (d[r2] == null || d[r2][c2] == null) {
                            continue;
                          }
                          let cell = d[r2][c2];
                          if (getObjType(cell) == "object" && cell["ct"] != null && cell["ct"].t == "n" && cell.v != null) {
                            if (parseInt(cell.v) < 0) {
                              let valueLen = Math.round(Math.abs(parseInt(cell.v)) / Math.abs(min) * 100) / 100;
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["dataBar"] = {"valueType": "minus", "minusLen": minusLen, "valueLen": valueLen, "format": format};
                              } else {
                                computeMap2[r2 + "_" + c2] = {"dataBar": {"valueType": "minus", "minusLen": minusLen, "valueLen": valueLen, "format": format}};
                              }
                            }
                            if (parseInt(cell.v) > 0) {
                              let valueLen = Math.round(parseInt(cell.v) / max * 100) / 100;
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["dataBar"] = {"valueType": "plus", "plusLen": plusLen, "minusLen": minusLen, "valueLen": valueLen, "format": format};
                              } else {
                                computeMap2[r2 + "_" + c2] = {"dataBar": {"valueType": "plus", "plusLen": plusLen, "minusLen": minusLen, "valueLen": valueLen, "format": format}};
                              }
                            }
                          }
                        }
                      }
                    }
                  } else {
                    let plusLen = 1;
                    for (let s = 0; s < cellrange.length; s++) {
                      for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                        for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                          if (d[r2] == null || d[r2][c2] == null) {
                            continue;
                          }
                          let cell = d[r2][c2];
                          if (getObjType(cell) == "object" && cell["ct"] != null && cell["ct"].t == "n" && cell.v != null) {
                            let valueLen;
                            if (max == 0) {
                              valueLen = 1;
                            } else {
                              valueLen = Math.round(parseInt(cell.v) / max * 100) / 100;
                            }
                            if (r2 + "_" + c2 in computeMap2) {
                              computeMap2[r2 + "_" + c2]["dataBar"] = {"valueType": "plus", "plusLen": plusLen, "valueLen": valueLen, "format": format};
                            } else {
                              computeMap2[r2 + "_" + c2] = {"dataBar": {"valueType": "plus", "plusLen": plusLen, "valueLen": valueLen, "format": format}};
                            }
                          }
                        }
                      }
                    }
                  }
                }
              } else if (type == "colorGradation") {
                let max = null, min = null, sum = 0, count = 0;
                for (let s = 0; s < cellrange.length; s++) {
                  for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                    for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                      if (d[r2] == null || d[r2][c2] == null) {
                        continue;
                      }
                      let cell = d[r2][c2];
                      if (getObjType(cell) == "object" && cell["ct"] != null && cell["ct"].t == "n" && cell.v != null) {
                        count++;
                        sum += parseInt(cell.v);
                        if (max == null || parseInt(cell.v) > max) {
                          max = parseInt(cell.v);
                        }
                        if (min == null || parseInt(cell.v) < min) {
                          min = parseInt(cell.v);
                        }
                      }
                    }
                  }
                }
                if (max != null && min != null) {
                  if (format.length == 3) {
                    let avg = Math.floor(sum / count);
                    for (let s = 0; s < cellrange.length; s++) {
                      for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                        for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                          if (d[r2] == null || d[r2][c2] == null) {
                            continue;
                          }
                          let cell = d[r2][c2];
                          if (getObjType(cell) == "object" && cell["ct"] != null && cell["ct"].t == "n" && cell.v != null) {
                            if (parseInt(cell.v) == min) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["cellColor"] = format[2];
                              } else {
                                computeMap2[r2 + "_" + c2] = {"cellColor": format[2]};
                              }
                            } else if (parseInt(cell.v) > min && parseInt(cell.v) < avg) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["cellColor"] = _this.getcolorGradation(format[2], format[1], min, avg, parseInt(cell.v));
                              } else {
                                computeMap2[r2 + "_" + c2] = {"cellColor": _this.getcolorGradation(format[2], format[1], min, avg, parseInt(cell.v))};
                              }
                            } else if (parseInt(cell.v) == avg) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["cellColor"] = format[1];
                              } else {
                                computeMap2[r2 + "_" + c2] = {"cellColor": format[1]};
                              }
                            } else if (parseInt(cell.v) > avg && parseInt(cell.v) < max) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["cellColor"] = _this.getcolorGradation(format[1], format[0], avg, max, parseInt(cell.v));
                              } else {
                                computeMap2[r2 + "_" + c2] = {"cellColor": _this.getcolorGradation(format[1], format[0], avg, max, parseInt(cell.v))};
                              }
                            } else if (parseInt(cell.v) == max) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["cellColor"] = format[0];
                              } else {
                                computeMap2[r2 + "_" + c2] = {"cellColor": format[0]};
                              }
                            }
                          }
                        }
                      }
                    }
                  } else if (format.length == 2) {
                    for (let s = 0; s < cellrange.length; s++) {
                      for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                        for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                          if (d[r2] == null || d[r2][c2] == null) {
                            continue;
                          }
                          let cell = d[r2][c2];
                          if (getObjType(cell) == "object" && cell["ct"] != null && cell["ct"].t == "n" && cell.v != null) {
                            if (parseInt(cell.v) == min) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["cellColor"] = format[1];
                              } else {
                                computeMap2[r2 + "_" + c2] = {"cellColor": format[1]};
                              }
                            } else if (parseInt(cell.v) > min && parseInt(cell.v) < max) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["cellColor"] = _this.getcolorGradation(format[1], format[0], min, max, parseInt(cell.v));
                              } else {
                                computeMap2[r2 + "_" + c2] = {"cellColor": _this.getcolorGradation(format[1], format[0], min, max, parseInt(cell.v))};
                              }
                            } else if (parseInt(cell.v) == max) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["cellColor"] = format[0];
                              } else {
                                computeMap2[r2 + "_" + c2] = {"cellColor": format[0]};
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              } else if (type == "icons") {
                let len = parseInt(format["len"]);
                let leftMin = parseInt(format["leftMin"]);
                let top = parseInt(format["top"]);
                let max = null, min = null;
                for (let s = 0; s < cellrange.length; s++) {
                  for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                    for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                      if (d[r2] == null || d[r2][c2] == null) {
                        continue;
                      }
                      let cell = d[r2][c2];
                      if (getObjType(cell) == "object" && cell["ct"] != null && cell["ct"].t == "n" && cell.v != null) {
                        if (max == null || parseInt(cell.v) > max) {
                          max = parseInt(cell.v);
                        }
                        if (min == null || parseInt(cell.v) < min) {
                          min = parseInt(cell.v);
                        }
                      }
                    }
                  }
                }
                if (max != null && min != null) {
                  let a = Math.floor((max - min + 1) / len);
                  let b = (max - min + 1) % len;
                  if (len == 3) {
                    let v1, v2, v3;
                    if (b == 2) {
                      v1 = [min, min + a];
                      v2 = [min + a + 1, min + a * 2];
                      v3 = [min + a * 2 + 1, max];
                    } else {
                      v1 = [min, min + a - 1];
                      v2 = [min + a, min + a * 2 - 1];
                      v3 = [min + a * 2, max];
                    }
                    for (let s = 0; s < cellrange.length; s++) {
                      for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                        for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                          if (d[r2] == null || d[r2][c2] == null) {
                            continue;
                          }
                          let cell = d[r2][c2];
                          if (getObjType(cell) == "object" && cell["ct"] != null && cell["ct"].t == "n" && cell.v != null) {
                            if (parseInt(cell.v) >= v1[0] && parseInt(cell.v) <= v1[1]) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["icons"] = {"left": leftMin + 2, "top": top};
                              } else {
                                computeMap2[r2 + "_" + c2] = {"icons": {"left": leftMin + 2, "top": top}};
                              }
                            } else if (parseInt(cell.v) >= v2[0] && parseInt(cell.v) <= v2[1]) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["icons"] = {"left": leftMin + 1, "top": top};
                              } else {
                                computeMap2[r2 + "_" + c2] = {"icons": {"left": leftMin + 1, "top": top}};
                              }
                            } else if (parseInt(cell.v) >= v3[0] && parseInt(cell.v) <= v3[1]) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["icons"] = {"left": leftMin, "top": top};
                              } else {
                                computeMap2[r2 + "_" + c2] = {"icons": {"left": leftMin, "top": top}};
                              }
                            }
                          }
                        }
                      }
                    }
                  } else if (len == 4) {
                    let v1, v2, v3, v4;
                    if (b == 2) {
                      v1 = [min, min + a];
                      v2 = [min + a + 1, min + a * 2];
                      v3 = [min + a * 2 + 1, min + a * 3];
                      v4 = [min + a * 3 + 1, max];
                    } else if (b == 3) {
                      v1 = [min, min + a];
                      v2 = [min + a + 1, min + a * 2];
                      v3 = [min + a * 2 + 1, min + a * 3 + 1];
                      v4 = [min + a * 3 + 2, max];
                    } else {
                      v1 = [min, min + a - 1];
                      v2 = [min + a, min + a * 2 - 1];
                      v3 = [min + a * 2, min + a * 3 - 1];
                      v4 = [min + a * 3, max];
                    }
                    for (let s = 0; s < cellrange.length; s++) {
                      for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                        for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                          if (d[r2] == null || d[r2][c2] == null) {
                            continue;
                          }
                          let cell = d[r2][c2];
                          if (getObjType(cell) == "object" && cell["ct"] != null && cell["ct"].t == "n" && cell.v != null) {
                            if (parseInt(cell.v) >= v1[0] && parseInt(cell.v) <= v1[1]) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["icons"] = {"left": leftMin + 3, "top": top};
                              } else {
                                computeMap2[r2 + "_" + c2] = {"icons": {"left": leftMin + 3, "top": top}};
                              }
                            } else if (parseInt(cell.v) >= v2[0] && parseInt(cell.v) <= v2[1]) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["icons"] = {"left": leftMin + 2, "top": top};
                              } else {
                                computeMap2[r2 + "_" + c2] = {"icons": {"left": leftMin + 2, "top": top}};
                              }
                            } else if (parseInt(cell.v) >= v3[0] && parseInt(cell.v) <= v3[1]) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["icons"] = {"left": leftMin + 1, "top": top};
                              } else {
                                computeMap2[r2 + "_" + c2] = {"icons": {"left": leftMin + 1, "top": top}};
                              }
                            } else if (parseInt(cell.v) >= v4[0] && parseInt(cell.v) <= v4[1]) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["icons"] = {"left": leftMin, "top": top};
                              } else {
                                computeMap2[r2 + "_" + c2] = {"icons": {"left": leftMin, "top": top}};
                              }
                            }
                          }
                        }
                      }
                    }
                  } else if (len == 5) {
                    let v1, v2, v3, v4, v5;
                    if (b == 2) {
                      v1 = [min, min + a];
                      v2 = [min + a + 1, min + a * 2];
                      v3 = [min + a * 2 + 1, min + a * 3];
                      v4 = [min + a * 3 + 1, min + a * 4];
                      v5 = [min + a * 4 + 1, max];
                    } else if (b == 3) {
                      v1 = [min, min + a];
                      v2 = [min + a + 1, min + a * 2];
                      v3 = [min + a * 2 + 1, min + a * 3 + 1];
                      v4 = [min + a * 3 + 2, min + a * 4 + 1];
                      v5 = [min + a * 4 + 2, max];
                    } else if (b == 4) {
                      v1 = [min, min + a];
                      v2 = [min + a + 1, min + a * 2 + 1];
                      v3 = [min + a * 2 + 2, min + a * 3 + 1];
                      v4 = [min + a * 3 + 2, min + a * 4 + 2];
                      v5 = [min + a * 4 + 3, max];
                    } else {
                      v1 = [min, min + a - 1];
                      v2 = [min + a, min + a * 2 - 1];
                      v3 = [min + a * 2, min + a * 3 - 1];
                      v4 = [min + a * 3, min + a * 4 - 1];
                      v5 = [min + a * 4, max];
                    }
                    for (let s = 0; s < cellrange.length; s++) {
                      for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                        for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                          if (d[r2] == null || d[r2][c2] == null) {
                            continue;
                          }
                          let cell = d[r2][c2];
                          if (getObjType(cell) == "object" && cell["ct"] != null && cell["ct"].t == "n" && cell.v != null) {
                            if (parseInt(cell.v) >= v1[0] && parseInt(cell.v) <= v1[1]) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["icons"] = {"left": leftMin + 4, "top": top};
                              } else {
                                computeMap2[r2 + "_" + c2] = {"icons": {"left": leftMin + 4, "top": top}};
                              }
                            } else if (parseInt(cell.v) >= v2[0] && parseInt(cell.v) <= v2[1]) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["icons"] = {"left": leftMin + 3, "top": top};
                              } else {
                                computeMap2[r2 + "_" + c2] = {"icons": {"left": leftMin + 3, "top": top}};
                              }
                            } else if (parseInt(cell.v) >= v3[0] && parseInt(cell.v) <= v3[1]) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["icons"] = {"left": leftMin + 2, "top": top};
                              } else {
                                computeMap2[r2 + "_" + c2] = {"icons": {"left": leftMin + 2, "top": top}};
                              }
                            } else if (parseInt(cell.v) >= v4[0] && parseInt(cell.v) <= v4[1]) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["icons"] = {"left": leftMin + 1, "top": top};
                              } else {
                                computeMap2[r2 + "_" + c2] = {"icons": {"left": leftMin + 1, "top": top}};
                              }
                            } else if (parseInt(cell.v) >= v5[0] && parseInt(cell.v) <= v5[1]) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["icons"] = {"left": leftMin, "top": top};
                              } else {
                                computeMap2[r2 + "_" + c2] = {"icons": {"left": leftMin, "top": top}};
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              } else {
                let conditionName = ruleArr2[i2].conditionName, conditionValue0 = ruleArr2[i2].conditionValue[0], conditionValue1 = ruleArr2[i2].conditionValue[1], textColor = format.textColor, cellColor = format.cellColor;
                for (let s = 0; s < cellrange.length; s++) {
                  if (conditionName == "greaterThan" || conditionName == "lessThan" || conditionName == "equal" || conditionName == "textContains") {
                    for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                      for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                        if (d[r2] == null || d[r2][c2] == null) {
                          continue;
                        }
                        let cell = d[r2][c2];
                        if (getObjType(cell) != "object" || isRealNull(cell.v)) {
                          continue;
                        }
                        if (conditionName == "greaterThan" && cell.v > conditionValue0) {
                          if (r2 + "_" + c2 in computeMap2) {
                            computeMap2[r2 + "_" + c2]["textColor"] = textColor;
                            computeMap2[r2 + "_" + c2]["cellColor"] = cellColor;
                          } else {
                            computeMap2[r2 + "_" + c2] = {"textColor": textColor, "cellColor": cellColor};
                          }
                        } else if (conditionName == "lessThan" && cell.v < conditionValue0) {
                          if (r2 + "_" + c2 in computeMap2) {
                            computeMap2[r2 + "_" + c2]["textColor"] = textColor;
                            computeMap2[r2 + "_" + c2]["cellColor"] = cellColor;
                          } else {
                            computeMap2[r2 + "_" + c2] = {"textColor": textColor, "cellColor": cellColor};
                          }
                        } else if (conditionName == "equal" && cell.v == conditionValue0) {
                          if (r2 + "_" + c2 in computeMap2) {
                            computeMap2[r2 + "_" + c2]["textColor"] = textColor;
                            computeMap2[r2 + "_" + c2]["cellColor"] = cellColor;
                          } else {
                            computeMap2[r2 + "_" + c2] = {"textColor": textColor, "cellColor": cellColor};
                          }
                        } else if (conditionName == "textContains" && cell.v.toString().indexOf(conditionValue0) != -1) {
                          if (r2 + "_" + c2 in computeMap2) {
                            computeMap2[r2 + "_" + c2]["textColor"] = textColor;
                            computeMap2[r2 + "_" + c2]["cellColor"] = cellColor;
                          } else {
                            computeMap2[r2 + "_" + c2] = {"textColor": textColor, "cellColor": cellColor};
                          }
                        }
                      }
                    }
                  } else if (conditionName == "betweenness") {
                    let vBig, vSmall;
                    if (conditionValue0 > conditionValue1) {
                      vBig = conditionValue0;
                      vSmall = conditionValue1;
                    } else {
                      vBig = conditionValue1;
                      vSmall = conditionValue0;
                    }
                    for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                      for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                        if (d[r2] == null || d[r2][c2] == null) {
                          continue;
                        }
                        let cell = d[r2][c2];
                        if (getObjType(cell) != "object" || isRealNull(cell.v)) {
                          continue;
                        }
                        if (cell.v >= vSmall && cell.v <= vBig) {
                          if (r2 + "_" + c2 in computeMap2) {
                            computeMap2[r2 + "_" + c2]["textColor"] = textColor;
                            computeMap2[r2 + "_" + c2]["cellColor"] = cellColor;
                          } else {
                            computeMap2[r2 + "_" + c2] = {"textColor": textColor, "cellColor": cellColor};
                          }
                        }
                      }
                    }
                  } else if (conditionName == "occurrenceDate") {
                    let dBig, dSmall;
                    if (conditionValue0.toString().indexOf("-") == -1) {
                      dBig = genarate(conditionValue0)[2];
                      dSmall = genarate(conditionValue0)[2];
                    } else {
                      let str = conditionValue0.toString().split("-");
                      dBig = genarate(str[1].trim())[2];
                      dSmall = genarate(str[0].trim())[2];
                    }
                    for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                      for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                        if (d[r2] == null || d[r2][c2] == null) {
                          continue;
                        }
                        if (d[r2][c2].ct != null && d[r2][c2].ct.t == "d") {
                          let cellVal = getcellvalue(r2, c2, d);
                          if (cellVal >= dSmall && cellVal <= dBig) {
                            if (r2 + "_" + c2 in computeMap2) {
                              computeMap2[r2 + "_" + c2]["textColor"] = textColor;
                              computeMap2[r2 + "_" + c2]["cellColor"] = cellColor;
                            } else {
                              computeMap2[r2 + "_" + c2] = {"textColor": textColor, "cellColor": cellColor};
                            }
                          }
                        }
                      }
                    }
                  } else if (conditionName == "duplicateValue") {
                    let dmap = {};
                    for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                      for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                        let item2 = getcellvalue(r2, c2, d);
                        if (!(item2 in dmap)) {
                          dmap[item2] = [];
                        }
                        dmap[item2].push({"r": r2, "c": c2});
                      }
                    }
                    if (conditionValue0 == "0") {
                      for (let x in dmap) {
                        if (x != "null" && x != "undefined" && dmap[x].length > 1) {
                          for (let j = 0; j < dmap[x].length; j++) {
                            if (dmap[x][j].r + "_" + dmap[x][j].c in computeMap2) {
                              computeMap2[dmap[x][j].r + "_" + dmap[x][j].c]["textColor"] = textColor;
                              computeMap2[dmap[x][j].r + "_" + dmap[x][j].c]["cellColor"] = cellColor;
                            } else {
                              computeMap2[dmap[x][j].r + "_" + dmap[x][j].c] = {"textColor": textColor, "cellColor": cellColor};
                            }
                          }
                        }
                      }
                    }
                    if (conditionValue0 == "1") {
                      for (let x in dmap) {
                        if (x != "null" && x != "undefined" && dmap[x].length == 1) {
                          if (dmap[x][0].r + "_" + dmap[x][0].c in computeMap2) {
                            computeMap2[dmap[x][0].r + "_" + dmap[x][0].c]["textColor"] = textColor;
                            computeMap2[dmap[x][0].r + "_" + dmap[x][0].c]["cellColor"] = cellColor;
                          } else {
                            computeMap2[dmap[x][0].r + "_" + dmap[x][0].c] = {"textColor": textColor, "cellColor": cellColor};
                          }
                        }
                      }
                    }
                  } else if (conditionName == "top10" || conditionName == "top10%" || conditionName == "last10" || conditionName == "last10%" || conditionName == "AboveAverage" || conditionName == "SubAverage") {
                    let dArr = [];
                    for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                      for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                        if (d[r2] == null || d[r2][c2] == null) {
                          continue;
                        }
                        if (d[r2][c2].ct != null && d[r2][c2].ct.t == "n") {
                          dArr.push(getcellvalue(r2, c2, d));
                        }
                      }
                    }
                    if (conditionName == "top10" || conditionName == "top10%" || conditionName == "last10" || conditionName == "last10%") {
                      for (let j = 0; j < dArr.length; j++) {
                        for (let k = 0; k < dArr.length - 1 - j; k++) {
                          if (dArr[k] < dArr[k + 1]) {
                            let temp = dArr[k];
                            dArr[k] = dArr[k + 1];
                            dArr[k + 1] = temp;
                          }
                        }
                      }
                      let cArr;
                      if (conditionName == "top10") {
                        cArr = dArr.slice(0, conditionValue0);
                      } else if (conditionName == "top10%") {
                        cArr = dArr.slice(0, Math.floor(conditionValue0 * dArr.length / 100));
                      } else if (conditionName == "last10") {
                        cArr = dArr.slice(dArr.length - conditionValue0, dArr.length);
                      } else if (conditionName == "last10%") {
                        cArr = dArr.slice(dArr.length - Math.floor(conditionValue0 * dArr.length / 100), dArr.length);
                      }
                      for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                        for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                          if (d[r2] == null || d[r2][c2] == null) {
                            continue;
                          }
                          let cellVal = getcellvalue(r2, c2, d);
                          if (cArr.indexOf(cellVal) != -1) {
                            if (r2 + "_" + c2 in computeMap2) {
                              computeMap2[r2 + "_" + c2]["textColor"] = textColor;
                              computeMap2[r2 + "_" + c2]["cellColor"] = cellColor;
                            } else {
                              computeMap2[r2 + "_" + c2] = {"textColor": textColor, "cellColor": cellColor};
                            }
                          }
                        }
                      }
                    } else if (conditionName == "AboveAverage" || conditionName == "SubAverage") {
                      let sum = 0;
                      for (let j = 0; j < dArr.length; j++) {
                        sum += dArr[j];
                      }
                      let averageNum = sum / dArr.length;
                      if (conditionName == "AboveAverage") {
                        for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                          for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                            if (d[r2] == null || d[r2][c2] == null) {
                              continue;
                            }
                            let cellVal = getcellvalue(r2, c2, d);
                            if (cellVal > averageNum) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["textColor"] = textColor;
                                computeMap2[r2 + "_" + c2]["cellColor"] = cellColor;
                              } else {
                                computeMap2[r2 + "_" + c2] = {"textColor": textColor, "cellColor": cellColor};
                              }
                            }
                          }
                        }
                      } else if (conditionName == "SubAverage") {
                        for (let r2 = cellrange[s].row[0]; r2 <= cellrange[s].row[1]; r2++) {
                          for (let c2 = cellrange[s].column[0]; c2 <= cellrange[s].column[1]; c2++) {
                            if (d[r2] == null || d[r2][c2] == null) {
                              continue;
                            }
                            let cellVal = getcellvalue(r2, c2, d);
                            if (cellVal < averageNum) {
                              if (r2 + "_" + c2 in computeMap2) {
                                computeMap2[r2 + "_" + c2]["textColor"] = textColor;
                                computeMap2[r2 + "_" + c2]["cellColor"] = cellColor;
                              } else {
                                computeMap2[r2 + "_" + c2] = {"textColor": textColor, "cellColor": cellColor};
                              }
                            }
                          }
                        }
                      }
                    }
                  } else if (conditionName == "formula") {
                    let str = cellrange[s].row[0], edr = cellrange[s].row[1], stc = cellrange[s].column[0], edc = cellrange[s].column[1];
                    let formulaTxt = conditionValue0;
                    if (conditionValue0.toString().slice(0, 1) != "=") {
                      formulaTxt = "=" + conditionValue0;
                    }
                    for (let r2 = str; r2 <= edr; r2++) {
                      for (let c2 = stc; c2 <= edc; c2++) {
                        let func = formulaTxt;
                        let offsetRow = r2 - str;
                        let offsetCol = c2 - stc;
                        if (offsetRow > 0) {
                          func = "=" + formula_default.functionCopy(func, "down", offsetRow);
                        }
                        if (offsetCol > 0) {
                          func = "=" + formula_default.functionCopy(func, "right", offsetCol);
                        }
                        let funcV = formula_default.execfunction(func);
                        let v = funcV[1];
                        if (typeof v != "boolean") {
                          v = !!Number(v);
                        }
                        if (!v) {
                          continue;
                        }
                        if (r2 + "_" + c2 in computeMap2) {
                          computeMap2[r2 + "_" + c2]["textColor"] = textColor;
                          computeMap2[r2 + "_" + c2]["cellColor"] = cellColor;
                        } else {
                          computeMap2[r2 + "_" + c2] = {"textColor": textColor, "cellColor": cellColor};
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          return computeMap2;
        },
        updateItem: function(type, cellrange, format) {
          if (!checkProtectionFormatCells(store_default.currentSheetIndex)) {
            return;
          }
          let _this = this;
          let index2 = getSheetIndex(store_default.currentSheetIndex);
          let fileH = $.extend(true, [], store_default.luckysheetfile);
          let historyRules = _this.getHistoryRules(fileH);
          let ruleArr2;
          if (type == "delSheet") {
            ruleArr2 = [];
          } else {
            let rule = {
              "type": type,
              "cellrange": cellrange,
              "format": format
            };
            ruleArr2 = store_default.luckysheetfile[index2]["luckysheet_conditionformat_save"] == null ? [] : store_default.luckysheetfile[index2]["luckysheet_conditionformat_save"];
            ruleArr2.push(rule);
          }
          store_default.luckysheetfile[index2]["luckysheet_conditionformat_save"] = ruleArr2;
          let fileC = $.extend(true, [], store_default.luckysheetfile);
          let currentRules = _this.getCurrentRules(fileC);
          _this.ref(historyRules, currentRules);
          if (server_default.allowUpdate) {
            server_default.saveParam("all", store_default.currentSheetIndex, ruleArr2, {"k": "luckysheet_conditionformat_save"});
          }
        },
        getHistoryRules: function(fileH) {
          let historyRules = [];
          for (let h = 0; h < fileH.length; h++) {
            historyRules.push({"sheetIndex": fileH[h]["index"], "luckysheet_conditionformat_save": fileH[h]["luckysheet_conditionformat_save"]});
          }
          return historyRules;
        },
        getCurrentRules: function(fileC) {
          let currentRules = [];
          for (let c2 = 0; c2 < fileC.length; c2++) {
            currentRules.push({"sheetIndex": fileC[c2]["index"], "luckysheet_conditionformat_save": fileC[c2]["luckysheet_conditionformat_save"]});
          }
          return currentRules;
        },
        ref: function(historyRules, currentRules) {
          if (store_default.clearjfundo) {
            store_default.jfundo.length = 0;
            let redo2 = {};
            redo2["type"] = "updateCF";
            redo2["data"] = {"historyRules": historyRules, "currentRules": currentRules};
            store_default.jfredo.push(redo2);
          }
          setTimeout(function() {
            luckysheetrefreshgrid();
          }, 1);
        }
      };
      conditionformat_default = conditionformat;
    }
  });

  // src/controllers/selection.js
  var selection, selection_default;
  var init_selection = __esm({
    "src/controllers/selection.js"() {
      init_select();
      init_menuButton();
      init_conditionformat();
      init_protection();
      init_editor();
      init_tooltip();
      init_formula();
      init_border();
      init_getdata();
      init_getRowlen();
      init_validate();
      init_refresh();
      init_format();
      init_get();
      init_util();
      init_store();
      init_locale();
      init_imageCtrl();
      selection = {
        clearcopy: function(e) {
          let clipboardData = window.clipboardData;
          if (!clipboardData) {
            if (!!e) {
              clipboardData = e.originalEvent.clipboardData;
            }
          }
          let cpdata = " ";
          store_default.luckysheet_selection_range = [];
          selectionCopyShow();
          if (!clipboardData) {
            let textarea = $("#luckysheet-copy-content").css("visibility", "hidden");
            textarea.val(cpdata);
            textarea.focus();
            textarea.select();
            setTimeout(function() {
              textarea.blur().css("visibility", "visible");
            }, 10);
          } else {
            clipboardData.setData("Text", cpdata);
            return false;
          }
        },
        getHtmlBorderStyle: function(type, color) {
          let style = "";
          let borderType = {
            "0": "none",
            "1": "Thin",
            "2": "Hair",
            "3": "Dotted",
            "4": "Dashed",
            "5": "DashDot",
            "6": "DashDotDot",
            "7": "Double",
            "8": "Medium",
            "9": "MediumDashed",
            "10": "MediumDashDot",
            "11": "MediumDashDotDot",
            "12": "SlantedDashDot",
            "13": "Thick"
          };
          type = borderType[type.toString()];
          if (type.indexOf("Medium") > -1) {
            style += "1pt ";
          } else if (type == "Thick") {
            style += "1.5pt ";
          } else {
            style += "0.5pt ";
          }
          if (type == "Hair") {
            style += "double ";
          } else if (type.indexOf("DashDotDot") > -1) {
            style += "dotted ";
          } else if (type.indexOf("DashDot") > -1) {
            style += "dashed ";
          } else if (type.indexOf("Dotted") > -1) {
            style += "dotted ";
          } else if (type.indexOf("Dashed") > -1) {
            style += "dashed ";
          } else {
            style += "solid ";
          }
          return style + color + ";";
        },
        copy: function(e) {
          let clipboardData = window.clipboardData;
          if (!clipboardData) {
            clipboardData = e.originalEvent.clipboardData;
          }
          store_default.luckysheet_selection_range = [];
          let rowIndexArr = [], colIndexArr = [];
          let copyRange = [], RowlChange = false, HasMC = false;
          for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
            let range2 = store_default.luckysheet_select_save[s];
            let r1 = range2.row[0], r2 = range2.row[1];
            let c1 = range2.column[0], c2 = range2.column[1];
            for (let copyR = r1; copyR <= r2; copyR++) {
              if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][copyR] != null) {
                continue;
              }
              if (!rowIndexArr.includes(copyR)) {
                rowIndexArr.push(copyR);
              }
              if (store_default.config["rowlen"] != null && copyR in store_default.config["rowlen"]) {
                RowlChange = true;
              }
              for (let copyC = c1; copyC <= c2; copyC++) {
                if (store_default.config["colhidden"] != null && store_default.config["colhidden"][copyC] != null) {
                  continue;
                }
                if (!colIndexArr.includes(copyC)) {
                  colIndexArr.push(copyC);
                }
                let cell = store_default.flowdata[copyR][copyC];
                if (getObjType(cell) == "object" && "mc" in cell && cell.mc.rs != null) {
                  HasMC = true;
                }
              }
            }
            store_default.luckysheet_selection_range.push({"row": range2.row, "column": range2.column});
            copyRange.push({"row": range2.row, "column": range2.column});
          }
          selectionCopyShow();
          store_default.luckysheet_copy_save = {
            "dataSheetIndex": store_default.currentSheetIndex,
            "copyRange": copyRange,
            "RowlChange": RowlChange,
            "HasMC": HasMC
          };
          let _this = this;
          let borderInfoCompute;
          if (store_default.config["borderInfo"] && store_default.config["borderInfo"].length > 0) {
            borderInfoCompute = getBorderInfoCompute();
          }
          let cpdata = "", d = editor_default.deepCopyFlowData(store_default.flowdata);
          let colgroup = "";
          for (let i2 = 0; i2 < rowIndexArr.length; i2++) {
            let r2 = rowIndexArr[i2];
            if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][r2] != null) {
              continue;
            }
            if (store_default.config == null || store_default.config["rowlen"] == null || store_default.config["rowlen"][r2.toString()] == null) {
              cpdata += '<tr height="19">';
            } else {
              cpdata += `<tr height="${store_default.config["rowlen"][r2.toString()]}">`;
            }
            for (let j = 0; j < colIndexArr.length; j++) {
              let c2 = colIndexArr[j];
              if (r2 == rowIndexArr[0]) {
                if (store_default.config == null || store_default.config["columnlen"] == null || store_default.config["columnlen"][c2.toString()] == null) {
                  colgroup += '<col width="72px"></col>';
                } else {
                  colgroup += '<col width="' + store_default.config["columnlen"][c2.toString()] + 'px"></col>';
                }
              }
              if (store_default.config["colhidden"] != null && store_default.config["colhidden"][c2] != null) {
                continue;
              }
              let column = '<td ${span} style="${style}">';
              if (d[r2] != null && d[r2][c2] != null) {
                let style = "", span = "";
                let reg = /^(w|W)((0?)|(0\.0+))$/;
                let c_value;
                if (d[r2][c2].ct != null && d[r2][c2].ct.fa != null && d[r2][c2].ct.fa.match(reg)) {
                  c_value = getcellvalue(r2, c2, d);
                } else {
                  c_value = getcellvalue(r2, c2, d, "m");
                }
                style += menuButton_default.getStyleByCell(d, r2, c2);
                if (getObjType(d[r2][c2]) == "object" && "mc" in d[r2][c2]) {
                  if ("rs" in d[r2][c2]["mc"]) {
                    span = 'rowspan="' + d[r2][c2]["mc"].rs + '" colspan="' + d[r2][c2]["mc"].cs + '"';
                    if (borderInfoCompute && borderInfoCompute[r2 + "_" + c2]) {
                      let bl_obj = {"color": {}, "style": {}}, br_obj = {"color": {}, "style": {}}, bt_obj = {"color": {}, "style": {}}, bb_obj = {"color": {}, "style": {}};
                      for (let bd_r = r2; bd_r < r2 + d[r2][c2]["mc"].rs; bd_r++) {
                        for (let bd_c = c2; bd_c < c2 + d[r2][c2]["mc"].cs; bd_c++) {
                          if (bd_r == r2 && borderInfoCompute[bd_r + "_" + bd_c] && borderInfoCompute[bd_r + "_" + bd_c].t) {
                            let linetype = borderInfoCompute[bd_r + "_" + bd_c].t.style;
                            let bcolor = borderInfoCompute[bd_r + "_" + bd_c].t.color;
                            if (bt_obj["style"][linetype] == null) {
                              bt_obj["style"][linetype] = 1;
                            } else {
                              bt_obj["style"][linetype] = bt_obj["style"][linetype] + 1;
                            }
                            if (bt_obj["color"][bcolor] == null) {
                              bt_obj["color"][bcolor] = 1;
                            } else {
                              bt_obj["color"][bcolor] = bt_obj["color"][bcolor] + 1;
                            }
                          }
                          if (bd_r == r2 + d[r2][c2]["mc"].rs - 1 && borderInfoCompute[bd_r + "_" + bd_c] && borderInfoCompute[bd_r + "_" + bd_c].b) {
                            let linetype = borderInfoCompute[bd_r + "_" + bd_c].b.style;
                            let bcolor = borderInfoCompute[bd_r + "_" + bd_c].b.color;
                            if (bb_obj["style"][linetype] == null) {
                              bb_obj["style"][linetype] = 1;
                            } else {
                              bb_obj["style"][linetype] = bb_obj["style"][linetype] + 1;
                            }
                            if (bb_obj["color"][bcolor] == null) {
                              bb_obj["color"][bcolor] = 1;
                            } else {
                              bb_obj["color"][bcolor] = bb_obj["color"][bcolor] + 1;
                            }
                          }
                          if (bd_c == c2 && borderInfoCompute[bd_r + "_" + bd_c] && borderInfoCompute[bd_r + "_" + bd_c].l) {
                            let linetype = borderInfoCompute[r2 + "_" + c2].l.style;
                            let bcolor = borderInfoCompute[bd_r + "_" + bd_c].l.color;
                            if (bl_obj["style"][linetype] == null) {
                              bl_obj["style"][linetype] = 1;
                            } else {
                              bl_obj["style"][linetype] = bl_obj["style"][linetype] + 1;
                            }
                            if (bl_obj["color"][bcolor] == null) {
                              bl_obj["color"][bcolor] = 1;
                            } else {
                              bl_obj["color"][bcolor] = bl_obj["color"][bcolor] + 1;
                            }
                          }
                          if (bd_c == c2 + d[r2][c2]["mc"].cs - 1 && borderInfoCompute[bd_r + "_" + bd_c] && borderInfoCompute[bd_r + "_" + bd_c].r) {
                            let linetype = borderInfoCompute[bd_r + "_" + bd_c].r.style;
                            let bcolor = borderInfoCompute[bd_r + "_" + bd_c].r.color;
                            if (br_obj["style"][linetype] == null) {
                              br_obj["style"][linetype] = 1;
                            } else {
                              br_obj["style"][linetype] = br_obj["style"][linetype] + 1;
                            }
                            if (br_obj["color"][bcolor] == null) {
                              br_obj["color"][bcolor] = 1;
                            } else {
                              br_obj["color"][bcolor] = br_obj["color"][bcolor] + 1;
                            }
                          }
                        }
                      }
                      let rowlen = d[r2][c2]["mc"].rs, collen = d[r2][c2]["mc"].cs;
                      if (JSON.stringify(bl_obj).length > 23) {
                        let bl_color = null, bl_style = null;
                        for (let x in bl_obj.color) {
                          if (bl_obj.color[x] >= rowlen / 2) {
                            bl_color = x;
                          }
                        }
                        for (let x in bl_obj.style) {
                          if (bl_obj.style[x] >= rowlen / 2) {
                            bl_style = x;
                          }
                        }
                        if (bl_color != null && bl_style != null) {
                          style += "border-left:" + _this.getHtmlBorderStyle(bl_style, bl_color);
                        }
                      }
                      if (JSON.stringify(br_obj).length > 23) {
                        let br_color = null, br_style = null;
                        for (let x in br_obj.color) {
                          if (br_obj.color[x] >= rowlen / 2) {
                            br_color = x;
                          }
                        }
                        for (let x in br_obj.style) {
                          if (br_obj.style[x] >= rowlen / 2) {
                            br_style = x;
                          }
                        }
                        if (br_color != null && br_style != null) {
                          style += "border-right:" + _this.getHtmlBorderStyle(br_style, br_color);
                        }
                      }
                      if (JSON.stringify(bt_obj).length > 23) {
                        let bt_color = null, bt_style = null;
                        for (let x in bt_obj.color) {
                          if (bt_obj.color[x] >= collen / 2) {
                            bt_color = x;
                          }
                        }
                        for (let x in bt_obj.style) {
                          if (bt_obj.style[x] >= collen / 2) {
                            bt_style = x;
                          }
                        }
                        if (bt_color != null && bt_style != null) {
                          style += "border-top:" + _this.getHtmlBorderStyle(bt_style, bt_color);
                        }
                      }
                      if (JSON.stringify(bb_obj).length > 23) {
                        let bb_color = null, bb_style = null;
                        for (let x in bb_obj.color) {
                          if (bb_obj.color[x] >= collen / 2) {
                            bb_color = x;
                          }
                        }
                        for (let x in bb_obj.style) {
                          if (bb_obj.style[x] >= collen / 2) {
                            bb_style = x;
                          }
                        }
                        if (bb_color != null && bb_style != null) {
                          style += "border-bottom:" + _this.getHtmlBorderStyle(bb_style, bb_color);
                        }
                      }
                    }
                  } else {
                    continue;
                  }
                } else {
                  if (borderInfoCompute && borderInfoCompute[r2 + "_" + c2]) {
                    if (borderInfoCompute[r2 + "_" + c2].l) {
                      let linetype = borderInfoCompute[r2 + "_" + c2].l.style;
                      let bcolor = borderInfoCompute[r2 + "_" + c2].l.color;
                      style += "border-left:" + _this.getHtmlBorderStyle(linetype, bcolor);
                    }
                    if (borderInfoCompute[r2 + "_" + c2].r) {
                      let linetype = borderInfoCompute[r2 + "_" + c2].r.style;
                      let bcolor = borderInfoCompute[r2 + "_" + c2].r.color;
                      style += "border-right:" + _this.getHtmlBorderStyle(linetype, bcolor);
                    }
                    if (borderInfoCompute[r2 + "_" + c2].b) {
                      let linetype = borderInfoCompute[r2 + "_" + c2].b.style;
                      let bcolor = borderInfoCompute[r2 + "_" + c2].b.color;
                      style += "border-bottom:" + _this.getHtmlBorderStyle(linetype, bcolor);
                    }
                    if (borderInfoCompute[r2 + "_" + c2].t) {
                      let linetype = borderInfoCompute[r2 + "_" + c2].t.style;
                      let bcolor = borderInfoCompute[r2 + "_" + c2].t.color;
                      style += "border-top:" + _this.getHtmlBorderStyle(linetype, bcolor);
                    }
                  }
                }
                column = replaceHtml(column, {"style": style, "span": span});
                if (c_value == null) {
                  c_value = getcellvalue(r2, c2, d);
                }
                if (c_value == null && d[r2][c2] && d[r2][c2].ct && d[r2][c2].ct.t == "inlineStr") {
                  c_value = d[r2][c2].ct.s.map((val) => {
                    const brDom = $('<br style="mso-data-placement:same-cell;">');
                    const splitValue = val.v.split("\r\n");
                    return splitValue.map((item2) => {
                      if (!item2) {
                        return "";
                      }
                      const font = $("<font></font>");
                      val.fs && font.css("font-size", `${val.fs}pt`);
                      val.bl && font.css("font-weight", "bold");
                      val.it && font.css("font-style", "italic");
                      val.un && font.css("text-decoration", "underline");
                      val.fc && font.css("color", val.fc);
                      if (val.cl) {
                        font.append(`<s>${item2}</s>`);
                      } else {
                        font.text(item2);
                      }
                      return font[0].outerHTML;
                    }).join(brDom[0].outerHTML);
                  }).join("");
                }
                if (c_value == null) {
                  c_value = "";
                }
                c_value = formula_default.ltGtSignDeal(c_value);
                column += c_value;
              } else {
                let style = "";
                if (borderInfoCompute && borderInfoCompute[r2 + "_" + c2]) {
                  if (borderInfoCompute[r2 + "_" + c2].l) {
                    let linetype = borderInfoCompute[r2 + "_" + c2].l.style;
                    let bcolor = borderInfoCompute[r2 + "_" + c2].l.color;
                    style += "border-left:" + _this.getHtmlBorderStyle(linetype, bcolor);
                  }
                  if (borderInfoCompute[r2 + "_" + c2].r) {
                    let linetype = borderInfoCompute[r2 + "_" + c2].r.style;
                    let bcolor = borderInfoCompute[r2 + "_" + c2].r.color;
                    style += "border-right:" + _this.getHtmlBorderStyle(linetype, bcolor);
                  }
                  if (borderInfoCompute[r2 + "_" + c2].b) {
                    let linetype = borderInfoCompute[r2 + "_" + c2].b.style;
                    let bcolor = borderInfoCompute[r2 + "_" + c2].b.color;
                    style += "border-bottom:" + _this.getHtmlBorderStyle(linetype, bcolor);
                  }
                  if (borderInfoCompute[r2 + "_" + c2].t) {
                    let linetype = borderInfoCompute[r2 + "_" + c2].t.style;
                    let bcolor = borderInfoCompute[r2 + "_" + c2].t.color;
                    style += "border-top:" + _this.getHtmlBorderStyle(linetype, bcolor);
                  }
                }
                column += "";
                column = replaceHtml(column, {"style": style, "span": ""});
                column += "";
              }
              column += "</td>";
              cpdata += column;
            }
            cpdata += "</tr>";
          }
          cpdata = `<table data-type="luckysheet_copy_action_table"><colgroup>${colgroup}</colgroup>` + cpdata + "</table>";
          store_default.iscopyself = true;
          if (!clipboardData) {
            let textarea = $("#luckysheet-copy-content");
            textarea.html(cpdata);
            textarea.focus();
            textarea.select();
            document.execCommand("selectAll");
            document.execCommand("Copy");
            setTimeout(function() {
              $("#luckysheet-copy-content").blur();
            }, 10);
          } else {
            clipboardData.setData("Text", cpdata);
            return false;
          }
        },
        copybyformat: function(e, txt) {
          let clipboardData = window.clipboardData;
          if (!clipboardData) {
            clipboardData = e.originalEvent && e.originalEvent.clipboardData;
          }
          store_default.luckysheet_selection_range = [{"row": store_default.luckysheet_select_save[0].row, "column": store_default.luckysheet_select_save[0].column}];
          selectionCopyShow();
          let cpdata = txt;
          store_default.iscopyself = true;
          if (!clipboardData) {
            let textarea = $("#luckysheet-copy-content");
            textarea.text(cpdata);
            textarea.focus();
            textarea.select();
            document.execCommand("selectAll");
            document.execCommand("Copy");
            setTimeout(function() {
              textarea.blur();
            }, 10);
          } else {
            clipboardData.setData("Text", cpdata);
            return false;
          }
        },
        isPasteAction: false,
        paste: function(e, triggerType) {
          let _this = this;
          if (store_default.allowEdit === false) {
            return;
          }
          const _locale = locale_default();
          const local_drag = _locale.drag;
          let textarea = $("#luckysheet-copy-content");
          textarea.focus();
          textarea.select();
          setTimeout(function() {
            let data = textarea.html();
            if (data.indexOf("luckysheet_copy_action_table") > -1 && store_default.luckysheet_copy_save["copyRange"] != null && store_default.luckysheet_copy_save["copyRange"].length > 0) {
              if (store_default.luckysheet_paste_iscut) {
                store_default.luckysheet_paste_iscut = false;
                _this.pasteHandlerOfCutPaste(store_default.luckysheet_copy_save);
                _this.clearcopy(e);
              } else {
                _this.pasteHandlerOfCopyPaste(store_default.luckysheet_copy_save);
              }
            } else if (data.indexOf("luckysheet_copy_action_image") > -1) {
              imageCtrl_default.pasteImgItem();
            } else if (triggerType != "btn") {
              _this.pasteHandler(data);
            } else {
              if (isEditMode()) {
                alert(local_drag.pasteMustKeybordAlert);
              } else {
                tooltip_default.info(local_drag.pasteMustKeybordAlertHTMLTitle, local_drag.pasteMustKeybordAlertHTML);
              }
            }
          }, 10);
        },
        pasteHandler: function(data, borderInfo) {
          if (!checkProtectionLockedRangeList(store_default.luckysheet_select_save, store_default.currentSheetIndex)) {
            return;
          }
          if (store_default.allowEdit === false) {
            return;
          }
          const _locale = locale_default();
          const locale_paste = _locale.paste;
          if (store_default.luckysheet_select_save.length > 1) {
            if (isEditMode()) {
              alert(locale_paste.errorNotAllowMulti);
            } else {
              tooltip_default.info(`<i class="fa fa-exclamation-triangle"></i>${locale_paste.warning}`, locale_paste.errorNotAllowMulti);
            }
          }
          if (typeof data == "object") {
            if (data.length == 0) {
              return;
            }
            ;
            let cfg = $.extend(true, {}, store_default.config);
            if (cfg["merge"] == null) {
              cfg["merge"] = {};
            }
            if (JSON.stringify(borderInfo).length > 2 && cfg["borderInfo"] == null) {
              cfg["borderInfo"] = [];
            }
            let copyh = data.length, copyc = data[0].length;
            let minh = store_default.luckysheet_select_save[0].row[0], maxh = minh + copyh - 1;
            let minc = store_default.luckysheet_select_save[0].column[0], maxc = minc + copyc - 1;
            let has_PartMC = false;
            if (cfg["merge"] != null) {
              has_PartMC = hasPartMC(cfg, minh, maxh, minc, maxc);
            }
            if (has_PartMC) {
              if (isEditMode()) {
                alert(locale_paste.errorNotAllowMerged);
              } else {
                tooltip_default.info(`<i class="fa fa-exclamation-triangle"></i>${locale_paste.warning}`, locale_paste.errorNotAllowMerged);
              }
              return;
            }
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let rowMaxLength = d.length;
            let cellMaxLength = d[0].length;
            let addr = maxh - rowMaxLength + 1, addc = maxc - cellMaxLength + 1;
            if (addr > 0 || addc > 0) {
              d = datagridgrowth([].concat(d), addr, addc, true);
            }
            if (cfg["rowlen"] == null) {
              cfg["rowlen"] = {};
            }
            let RowlChange = false;
            let offsetMC = {};
            for (let h = minh; h <= maxh; h++) {
              let x = [].concat(d[h]);
              let currentRowLen = store_default.defaultrowlen;
              if (cfg["rowlen"][h] != null) {
                currentRowLen = cfg["rowlen"][h];
              }
              for (let c2 = minc; c2 <= maxc; c2++) {
                if (getObjType(x[c2]) == "object" && "mc" in x[c2]) {
                  if ("rs" in x[c2].mc) {
                    delete cfg["merge"][x[c2]["mc"].r + "_" + x[c2]["mc"].c];
                  }
                  delete x[c2].mc;
                }
                let value = null;
                if (data[h - minh] != null && data[h - minh][c2 - minc] != null) {
                  value = data[h - minh][c2 - minc];
                }
                x[c2] = $.extend(true, {}, value);
                if (value != null && "mc" in x[c2]) {
                  if (x[c2]["mc"].rs != null) {
                    x[c2]["mc"].r = h;
                    x[c2]["mc"].c = c2;
                    cfg["merge"][x[c2]["mc"].r + "_" + x[c2]["mc"].c] = x[c2]["mc"];
                    offsetMC[value["mc"].r + "_" + value["mc"].c] = [x[c2]["mc"].r, x[c2]["mc"].c];
                  } else {
                    x[c2] = {"mc": {r: offsetMC[value["mc"].r + "_" + value["mc"].c][0], c: offsetMC[value["mc"].r + "_" + value["mc"].c][1]}};
                  }
                }
                if (borderInfo[h - minh + "_" + (c2 - minc)]) {
                  let bd_obj = {
                    "rangeType": "cell",
                    "value": {
                      "row_index": h,
                      "col_index": c2,
                      "l": borderInfo[h - minh + "_" + (c2 - minc)].l,
                      "r": borderInfo[h - minh + "_" + (c2 - minc)].r,
                      "t": borderInfo[h - minh + "_" + (c2 - minc)].t,
                      "b": borderInfo[h - minh + "_" + (c2 - minc)].b
                    }
                  };
                  cfg["borderInfo"].push(bd_obj);
                }
                let fontset = luckysheetfontformat(x[c2]);
                let oneLineTextHeight = menuButton_default.getTextSize("\u7530", fontset)[1];
                if (oneLineTextHeight > currentRowLen) {
                  currentRowLen = oneLineTextHeight;
                  RowlChange = true;
                }
              }
              d[h] = x;
              if (currentRowLen != store_default.defaultrowlen) {
                cfg["rowlen"][h] = currentRowLen;
              }
            }
            store_default.luckysheet_select_save = [{"row": [minh, maxh], "column": [minc, maxc]}];
            if (addr > 0 || addc > 0 || RowlChange) {
              let allParam = {
                "cfg": cfg,
                "RowlChange": true
              };
              jfrefreshgrid(d, store_default.luckysheet_select_save, allParam);
            } else {
              let allParam = {
                "cfg": cfg
              };
              jfrefreshgrid(d, store_default.luckysheet_select_save, allParam);
              selectHightlightShow();
            }
          } else {
            data = data.replace(/\r/g, "");
            let dataChe = [];
            let che = data.split("\n"), colchelen = che[0].split("	").length;
            for (let i2 = 0; i2 < che.length; i2++) {
              if (che[i2].split("	").length < colchelen) {
                continue;
              }
              dataChe.push(che[i2].split("	"));
            }
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
            let curR = last["row"] == null ? 0 : last["row"][0];
            let curC = last["column"] == null ? 0 : last["column"][0];
            let rlen = dataChe.length, clen = dataChe[0].length;
            let has_PartMC = false;
            if (store_default.config["merge"] != null) {
              has_PartMC = hasPartMC(store_default.config, curR, curR + rlen - 1, curC, curC + clen - 1);
            }
            if (has_PartMC) {
              if (isEditMode()) {
                alert(locale_paste.errorNotAllowMerged);
              } else {
                tooltip_default.info(`<i class="fa fa-exclamation-triangle"></i>${locale_paste.warning}`, locale_paste.errorNotAllowMerged);
              }
              return;
            }
            let addr = curR + rlen - d.length, addc = curC + clen - d[0].length;
            if (addr > 0 || addc > 0) {
              d = datagridgrowth([].concat(d), addr, addc, true);
            }
            for (let r2 = 0; r2 < rlen; r2++) {
              let x = [].concat(d[r2 + curR]);
              for (let c2 = 0; c2 < clen; c2++) {
                let originCell = x[c2 + curC];
                let value = dataChe[r2][c2];
                if (isRealNum(value)) {
                  if (originCell && originCell.ct && originCell.ct.fa === "@") {
                    value = String(value);
                  } else {
                    value = parseFloat(value);
                  }
                }
                if (originCell instanceof Object) {
                  originCell.v = value;
                  if (originCell.ct != null && originCell.ct.fa != null) {
                    originCell.m = update(originCell["ct"]["fa"], value);
                  } else {
                    originCell.m = value;
                  }
                  if (originCell.f != null && originCell.f.length > 0) {
                    originCell.f = "";
                    formula_default.delFunctionGroup(r2 + curR, c2 + curC, store_default.currentSheetIndex);
                  }
                } else {
                  let cell = {};
                  let mask = genarate(value);
                  cell.v = mask[2];
                  cell.ct = mask[1];
                  cell.m = mask[0];
                  x[c2 + curC] = cell;
                }
              }
              d[r2 + curR] = x;
            }
            last["row"] = [curR, curR + rlen - 1];
            last["column"] = [curC, curC + clen - 1];
            if (addr > 0 || addc > 0) {
              let allParam = {
                "RowlChange": true
              };
              jfrefreshgrid(d, store_default.luckysheet_select_save, allParam);
            } else {
              jfrefreshgrid(d, store_default.luckysheet_select_save);
              selectHightlightShow();
            }
          }
        },
        pasteHandlerOfCutPaste: function(copyRange) {
          if (!checkProtectionLockedRangeList(store_default.luckysheet_select_save, store_default.currentSheetIndex)) {
            return;
          }
          if (store_default.allowEdit === false) {
            return;
          }
          const _locale = locale_default();
          const locale_paste = _locale.paste;
          let cfg = $.extend(true, {}, store_default.config);
          if (cfg["merge"] == null) {
            cfg["merge"] = {};
          }
          let copyHasMC = copyRange["HasMC"];
          let copyRowlChange = copyRange["RowlChange"];
          let copySheetIndex = copyRange["dataSheetIndex"];
          let c_r1 = copyRange["copyRange"][0].row[0], c_r2 = copyRange["copyRange"][0].row[1], c_c1 = copyRange["copyRange"][0].column[0], c_c2 = copyRange["copyRange"][0].column[1];
          let copyData = $.extend(true, [], getdatabyselection({"row": [c_r1, c_r2], "column": [c_c1, c_c2]}, copySheetIndex));
          let copyh = copyData.length, copyc = copyData[0].length;
          let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
          let minh = last["row_focus"], maxh = minh + copyh - 1;
          let minc = last["column_focus"], maxc = minc + copyc - 1;
          let has_PartMC = false;
          if (cfg["merge"] != null) {
            has_PartMC = hasPartMC(cfg, minh, maxh, minc, maxc);
          }
          if (has_PartMC) {
            if (isEditMode()) {
              alert(locale_paste.errorNotAllowMerged);
            } else {
              tooltip_default.info(`<i class="fa fa-exclamation-triangle"></i>${locale_paste.warning}`, locale_paste.errorNotAllowMerged);
            }
            return;
          }
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          let rowMaxLength = d.length;
          let cellMaxLength = d[0].length;
          let addr = copyh + minh - rowMaxLength, addc = copyc + minc - cellMaxLength;
          if (addr > 0 || addc > 0) {
            d = datagridgrowth([].concat(d), addr, addc, true);
          }
          let borderInfoCompute = getBorderInfoCompute(copySheetIndex);
          let c_dataVerification = $.extend(true, {}, store_default.luckysheetfile[getSheetIndex(copySheetIndex)]["dataVerification"]);
          let dataVerification = $.extend(true, {}, store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["dataVerification"]);
          if (store_default.currentSheetIndex == copySheetIndex) {
            for (let i2 = c_r1; i2 <= c_r2; i2++) {
              for (let j = c_c1; j <= c_c2; j++) {
                let cell = d[i2][j];
                if (getObjType(cell) == "object" && "mc" in cell) {
                  if ("rs" in cell["mc"]) {
                    delete cfg["merge"][cell["mc"].r + "_" + cell["mc"].c];
                  }
                  delete cell["mc"];
                }
                d[i2][j] = null;
                delete dataVerification[i2 + "_" + j];
              }
            }
            if (cfg["borderInfo"] && cfg["borderInfo"].length > 0) {
              let source_borderInfo = [];
              for (let i2 = 0; i2 < cfg["borderInfo"].length; i2++) {
                let bd_rangeType = cfg["borderInfo"][i2].rangeType;
                if (bd_rangeType == "range") {
                  let bd_range = cfg["borderInfo"][i2].range;
                  let bd_emptyRange = [];
                  for (let j = 0; j < bd_range.length; j++) {
                    bd_emptyRange = bd_emptyRange.concat(conditionformat_default.CFSplitRange(bd_range[j], {"row": [c_r1, c_r2], "column": [c_c1, c_c2]}, {"row": [minh, maxh], "column": [minc, maxc]}, "restPart"));
                  }
                  cfg["borderInfo"][i2].range = bd_emptyRange;
                  source_borderInfo.push(cfg["borderInfo"][i2]);
                } else if (bd_rangeType == "cell") {
                  let bd_r = cfg["borderInfo"][i2].value.row_index;
                  let bd_c = cfg["borderInfo"][i2].value.col_index;
                  if (!(bd_r >= c_r1 && bd_r <= c_r2 && bd_c >= c_c1 && bd_c <= c_c2)) {
                    source_borderInfo.push(cfg["borderInfo"][i2]);
                  }
                }
              }
              cfg["borderInfo"] = source_borderInfo;
            }
          }
          let offsetMC = {};
          for (let h = minh; h <= maxh; h++) {
            let x = [].concat(d[h]);
            for (let c2 = minc; c2 <= maxc; c2++) {
              if (borderInfoCompute[c_r1 + h - minh + "_" + (c_c1 + c2 - minc)]) {
                let bd_obj = {
                  "rangeType": "cell",
                  "value": {
                    "row_index": h,
                    "col_index": c2,
                    "l": borderInfoCompute[c_r1 + h - minh + "_" + (c_c1 + c2 - minc)].l,
                    "r": borderInfoCompute[c_r1 + h - minh + "_" + (c_c1 + c2 - minc)].r,
                    "t": borderInfoCompute[c_r1 + h - minh + "_" + (c_c1 + c2 - minc)].t,
                    "b": borderInfoCompute[c_r1 + h - minh + "_" + (c_c1 + c2 - minc)].b
                  }
                };
                if (cfg["borderInfo"] == null) {
                  cfg["borderInfo"] = [];
                }
                cfg["borderInfo"].push(bd_obj);
              } else if (borderInfoCompute[h + "_" + c2]) {
                let bd_obj = {
                  "rangeType": "cell",
                  "value": {
                    "row_index": h,
                    "col_index": c2,
                    "l": null,
                    "r": null,
                    "t": null,
                    "b": null
                  }
                };
                if (cfg["borderInfo"] == null) {
                  cfg["borderInfo"] = [];
                }
                cfg["borderInfo"].push(bd_obj);
              }
              if (c_dataVerification[c_r1 + h - minh + "_" + (c_c1 + c2 - minc)]) {
                dataVerification[h + "_" + c2] = c_dataVerification[c_r1 + h - minh + "_" + (c_c1 + c2 - minc)];
              }
              if (getObjType(x[c2]) == "object" && "mc" in x[c2]) {
                if ("rs" in x[c2].mc) {
                  delete cfg["merge"][x[c2]["mc"].r + "_" + x[c2]["mc"].c];
                }
                delete x[c2].mc;
              }
              let value = null;
              if (copyData[h - minh] != null && copyData[h - minh][c2 - minc] != null) {
                value = copyData[h - minh][c2 - minc];
              }
              x[c2] = $.extend(true, {}, value);
              if (value != null && copyHasMC && "mc" in x[c2]) {
                if (x[c2]["mc"].rs != null) {
                  x[c2]["mc"].r = h;
                  x[c2]["mc"].c = c2;
                  cfg["merge"][x[c2]["mc"].r + "_" + x[c2]["mc"].c] = x[c2]["mc"];
                  offsetMC[value["mc"].r + "_" + value["mc"].c] = [x[c2]["mc"].r, x[c2]["mc"].c];
                } else {
                  x[c2] = {"mc": {r: offsetMC[value["mc"].r + "_" + value["mc"].c][0], c: offsetMC[value["mc"].r + "_" + value["mc"].c][1]}};
                }
              }
            }
            d[h] = x;
          }
          last["row"] = [minh, maxh];
          last["column"] = [minc, maxc];
          if (copyRowlChange) {
            if (store_default.currentSheetIndex != copySheetIndex) {
              cfg = rowlenByRange(d, minh, maxh, cfg);
            } else {
              cfg = rowlenByRange(d, c_r1, c_r2, cfg);
              cfg = rowlenByRange(d, minh, maxh, cfg);
            }
          }
          let source, target;
          if (store_default.currentSheetIndex != copySheetIndex) {
            let sourceData = $.extend(true, [], store_default.luckysheetfile[getSheetIndex(copySheetIndex)]["data"]);
            let sourceConfig = $.extend(true, {}, store_default.luckysheetfile[getSheetIndex(copySheetIndex)]["config"]);
            let sourceCurData = $.extend(true, [], sourceData);
            let sourceCurConfig = $.extend(true, {}, sourceConfig);
            if (sourceCurConfig["merge"] == null) {
              sourceCurConfig["merge"] = {};
            }
            for (let source_r = c_r1; source_r <= c_r2; source_r++) {
              for (let source_c = c_c1; source_c <= c_c2; source_c++) {
                let cell = sourceCurData[source_r][source_c];
                if (getObjType(cell) == "object" && "mc" in cell) {
                  if ("rs" in cell["mc"]) {
                    delete sourceCurConfig["merge"][cell["mc"].r + "_" + cell["mc"].c];
                  }
                  delete cell["mc"];
                }
                sourceCurData[source_r][source_c] = null;
              }
            }
            if (copyRowlChange) {
              sourceCurConfig = rowlenByRange(sourceCurData, c_r1, c_r2, sourceCurConfig);
            }
            if (sourceCurConfig["borderInfo"] && sourceCurConfig["borderInfo"].length > 0) {
              let source_borderInfo = [];
              for (let i2 = 0; i2 < sourceCurConfig["borderInfo"].length; i2++) {
                let bd_rangeType = sourceCurConfig["borderInfo"][i2].rangeType;
                if (bd_rangeType == "range") {
                  let bd_range = sourceCurConfig["borderInfo"][i2].range;
                  let bd_emptyRange = [];
                  for (let j = 0; j < bd_range.length; j++) {
                    bd_emptyRange = bd_emptyRange.concat(conditionformat_default.CFSplitRange(bd_range[j], {"row": [c_r1, c_r2], "column": [c_c1, c_c2]}, {"row": [minh, maxh], "column": [minc, maxc]}, "restPart"));
                  }
                  sourceCurConfig["borderInfo"][i2].range = bd_emptyRange;
                  source_borderInfo.push(sourceCurConfig["borderInfo"][i2]);
                } else if (bd_rangeType == "cell") {
                  let bd_r = sourceCurConfig["borderInfo"][i2].value.row_index;
                  let bd_c = sourceCurConfig["borderInfo"][i2].value.col_index;
                  if (!(bd_r >= c_r1 && bd_r <= c_r2 && bd_c >= c_c1 && bd_c <= c_c2)) {
                    source_borderInfo.push(sourceCurConfig["borderInfo"][i2]);
                  }
                }
              }
              sourceCurConfig["borderInfo"] = source_borderInfo;
            }
            let source_cdformat = $.extend(true, [], store_default.luckysheetfile[getSheetIndex(copySheetIndex)]["luckysheet_conditionformat_save"]);
            let source_curCdformat = $.extend(true, [], source_cdformat);
            let ruleArr2 = [];
            if (source_curCdformat != null && source_curCdformat.length > 0) {
              for (let i2 = 0; i2 < source_curCdformat.length; i2++) {
                let source_curCdformat_cellrange = source_curCdformat[i2].cellrange;
                let emptyRange = [];
                let emptyRange2 = [];
                for (let j = 0; j < source_curCdformat_cellrange.length; j++) {
                  let range2 = conditionformat_default.CFSplitRange(source_curCdformat_cellrange[j], {"row": [c_r1, c_r2], "column": [c_c1, c_c2]}, {"row": [minh, maxh], "column": [minc, maxc]}, "restPart");
                  emptyRange = emptyRange.concat(range2);
                  let range22 = conditionformat_default.CFSplitRange(source_curCdformat_cellrange[j], {"row": [c_r1, c_r2], "column": [c_c1, c_c2]}, {"row": [minh, maxh], "column": [minc, maxc]}, "operatePart");
                  if (range22.length > 0) {
                    emptyRange2 = emptyRange2.concat(range22);
                  }
                }
                source_curCdformat[i2].cellrange = emptyRange;
                if (emptyRange2.length > 0) {
                  let ruleObj = $.extend(true, {}, source_curCdformat[i2]);
                  ruleObj.cellrange = emptyRange2;
                  ruleArr2.push(ruleObj);
                }
              }
            }
            let target_cdformat = $.extend(true, [], store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"]);
            let target_curCdformat = $.extend(true, [], target_cdformat);
            if (ruleArr2.length > 0) {
              target_curCdformat = target_curCdformat.concat(ruleArr2);
            }
            for (let i2 = c_r1; i2 <= c_r2; i2++) {
              for (let j = c_c1; j <= c_c2; j++) {
                delete c_dataVerification[i2 + "_" + j];
              }
            }
            source = {
              "sheetIndex": copySheetIndex,
              "data": sourceData,
              "curData": sourceCurData,
              "config": sourceConfig,
              "curConfig": sourceCurConfig,
              "cdformat": source_cdformat,
              "curCdformat": source_curCdformat,
              "dataVerification": $.extend(true, {}, store_default.luckysheetfile[getSheetIndex(copySheetIndex)]["dataVerification"]),
              "curDataVerification": c_dataVerification,
              "range": {
                "row": [c_r1, c_r2],
                "column": [c_c1, c_c2]
              }
            };
            target = {
              "sheetIndex": store_default.currentSheetIndex,
              "data": store_default.flowdata,
              "curData": d,
              "config": $.extend(true, {}, store_default.config),
              "curConfig": cfg,
              "cdformat": target_cdformat,
              "curCdformat": target_curCdformat,
              "dataVerification": $.extend(true, {}, store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["dataVerification"]),
              "curDataVerification": dataVerification,
              "range": {
                "row": [minh, maxh],
                "column": [minc, maxc]
              }
            };
          } else {
            let cdformat = $.extend(true, [], store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"]);
            let curCdformat = $.extend(true, [], cdformat);
            if (curCdformat != null && curCdformat.length > 0) {
              for (let i2 = 0; i2 < curCdformat.length; i2++) {
                let cellrange = curCdformat[i2].cellrange;
                let emptyRange = [];
                for (let j = 0; j < cellrange.length; j++) {
                  let range2 = conditionformat_default.CFSplitRange(cellrange[j], {"row": [c_r1, c_r2], "column": [c_c1, c_c2]}, {"row": [minh, maxh], "column": [minc, maxc]}, "allPart");
                  emptyRange = emptyRange.concat(range2);
                }
                curCdformat[i2].cellrange = emptyRange;
              }
            }
            source = {
              "sheetIndex": store_default.currentSheetIndex,
              "data": store_default.flowdata,
              "curData": d,
              "config": $.extend(true, {}, store_default.config),
              "curConfig": cfg,
              "cdformat": cdformat,
              "curCdformat": curCdformat,
              "dataVerification": $.extend(true, {}, store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["dataVerification"]),
              "curDataVerification": dataVerification,
              "range": {
                "row": [c_r1, c_r2],
                "column": [c_c1, c_c2]
              }
            };
            target = {
              "sheetIndex": store_default.currentSheetIndex,
              "data": store_default.flowdata,
              "curData": d,
              "config": $.extend(true, {}, store_default.config),
              "curConfig": cfg,
              "cdformat": cdformat,
              "curCdformat": curCdformat,
              "dataVerification": $.extend(true, {}, store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["dataVerification"]),
              "curDataVerification": dataVerification,
              "range": {
                "row": [minh, maxh],
                "column": [minc, maxc]
              }
            };
          }
          if (addr > 0 || addc > 0) {
            jfrefreshgrid_pastcut(source, target, true);
          } else {
            jfrefreshgrid_pastcut(source, target, copyRowlChange);
          }
        },
        pasteHandlerOfCopyPaste: function(copyRange) {
          if (!checkProtectionLockedRangeList(store_default.luckysheet_select_save, store_default.currentSheetIndex)) {
            return;
          }
          const _locale = locale_default();
          const locale_paste = _locale.paste;
          let cfg = $.extend(true, {}, store_default.config);
          if (cfg["merge"] == null) {
            cfg["merge"] = {};
          }
          let copyHasMC = copyRange["HasMC"];
          let copyRowlChange = copyRange["RowlChange"];
          let copySheetIndex = copyRange["dataSheetIndex"];
          let c_r1 = copyRange["copyRange"][0].row[0], c_r2 = copyRange["copyRange"][0].row[1], c_c1 = copyRange["copyRange"][0].column[0], c_c2 = copyRange["copyRange"][0].column[1];
          let arr = [], isSameRow = false;
          for (let i2 = 0; i2 < copyRange["copyRange"].length; i2++) {
            let arrData = getdatabyselection({"row": copyRange["copyRange"][i2].row, "column": copyRange["copyRange"][i2].column}, copySheetIndex);
            if (copyRange["copyRange"].length > 1) {
              if (c_r1 == copyRange["copyRange"][1].row[0] && c_r2 == copyRange["copyRange"][1].row[1]) {
                arrData = arrData[0].map(function(col, a) {
                  return arrData.map(function(row) {
                    return row[a];
                  });
                });
                arr = arr.concat(arrData);
                isSameRow = true;
              } else if (c_c1 == copyRange["copyRange"][1].column[0] && c_c2 == copyRange["copyRange"][1].column[1]) {
                arr = arr.concat(arrData);
              }
            } else {
              arr = arrData;
            }
          }
          if (isSameRow) {
            arr = arr[0].map(function(col, b) {
              return arr.map(function(row) {
                return row[b];
              });
            });
          }
          let copyData = $.extend(true, [], arr);
          if (copyRange["copyRange"].length > 1) {
            for (let i2 = 0; i2 < copyData.length; i2++) {
              for (let j = 0; j < copyData[i2].length; j++) {
                if (copyData[i2][j] != null && copyData[i2][j].f != null) {
                  delete copyData[i2][j].f;
                  delete copyData[i2][j].spl;
                }
              }
            }
          }
          let copyh = copyData.length, copyc = copyData[0].length;
          let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
          let minh = last["row"][0], maxh = last["row"][1];
          let minc = last["column"][0], maxc = last["column"][1];
          let mh = (maxh - minh + 1) % copyh;
          let mc = (maxc - minc + 1) % copyc;
          if (mh != 0 || mc != 0) {
            maxh = minh + copyh - 1;
            maxc = minc + copyc - 1;
          }
          let has_PartMC = false;
          if (cfg["merge"] != null) {
            has_PartMC = hasPartMC(cfg, minh, maxh, minc, maxc);
          }
          if (has_PartMC) {
            if (isEditMode()) {
              alert(locale_paste.errorNotAllowMerged);
            } else {
              tooltip_default.info(`<i class="fa fa-exclamation-triangle"></i>${locale_paste.warning}`, locale_paste.errorNotAllowMerged);
            }
            return;
          }
          let timesH = (maxh - minh + 1) / copyh;
          let timesC = (maxc - minc + 1) / copyc;
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          let rowMaxLength = d.length;
          let cellMaxLength = d[0].length;
          let addr = copyh + minh - rowMaxLength, addc = copyc + minc - cellMaxLength;
          if (addr > 0 || addc > 0) {
            d = datagridgrowth([].concat(d), addr, addc, true);
          }
          let borderInfoCompute = getBorderInfoCompute(copySheetIndex);
          let c_dataVerification = $.extend(true, {}, store_default.luckysheetfile[getSheetIndex(copySheetIndex)].dataVerification);
          let dataVerification = null;
          let mth = 0, mtc = 0, maxcellCahe = 0, maxrowCache = 0;
          for (let th = 1; th <= timesH; th++) {
            for (let tc = 1; tc <= timesC; tc++) {
              mth = minh + (th - 1) * copyh;
              mtc = minc + (tc - 1) * copyc;
              maxrowCache = minh + th * copyh;
              maxcellCahe = minc + tc * copyc;
              let offsetRow = mth - c_r1;
              let offsetCol = mtc - c_c1;
              let offsetMC = {};
              for (let h = mth; h < maxrowCache; h++) {
                let x = [].concat(d[h]);
                for (let c2 = mtc; c2 < maxcellCahe; c2++) {
                  if (borderInfoCompute[c_r1 + h - mth + "_" + (c_c1 + c2 - mtc)]) {
                    let bd_obj = {
                      "rangeType": "cell",
                      "value": {
                        "row_index": h,
                        "col_index": c2,
                        "l": borderInfoCompute[c_r1 + h - mth + "_" + (c_c1 + c2 - mtc)].l,
                        "r": borderInfoCompute[c_r1 + h - mth + "_" + (c_c1 + c2 - mtc)].r,
                        "t": borderInfoCompute[c_r1 + h - mth + "_" + (c_c1 + c2 - mtc)].t,
                        "b": borderInfoCompute[c_r1 + h - mth + "_" + (c_c1 + c2 - mtc)].b
                      }
                    };
                    if (cfg["borderInfo"] == null) {
                      cfg["borderInfo"] = [];
                    }
                    cfg["borderInfo"].push(bd_obj);
                  } else if (borderInfoCompute[h + "_" + c2]) {
                    let bd_obj = {
                      "rangeType": "cell",
                      "value": {
                        "row_index": h,
                        "col_index": c2,
                        "l": null,
                        "r": null,
                        "t": null,
                        "b": null
                      }
                    };
                    if (cfg["borderInfo"] == null) {
                      cfg["borderInfo"] = [];
                    }
                    cfg["borderInfo"].push(bd_obj);
                  }
                  if (c_dataVerification[c_r1 + h - mth + "_" + (c_c1 + c2 - mtc)]) {
                    if (dataVerification == null) {
                      dataVerification = $.extend(true, {}, store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].dataVerification);
                    }
                    dataVerification[h + "_" + c2] = c_dataVerification[c_r1 + h - mth + "_" + (c_c1 + c2 - mtc)];
                  }
                  if (getObjType(x[c2]) == "object" && "mc" in x[c2]) {
                    if ("rs" in x[c2].mc) {
                      delete cfg["merge"][x[c2]["mc"].r + "_" + x[c2]["mc"].c];
                    }
                    delete x[c2].mc;
                  }
                  let value = null;
                  if (copyData[h - mth] != null && copyData[h - mth][c2 - mtc] != null) {
                    value = $.extend(true, {}, copyData[h - mth][c2 - mtc]);
                  }
                  if (value != null && value.f != null) {
                    let func = value.f;
                    if (offsetRow > 0) {
                      func = "=" + formula_default.functionCopy(func, "down", offsetRow);
                    }
                    if (offsetRow < 0) {
                      func = "=" + formula_default.functionCopy(func, "up", Math.abs(offsetRow));
                    }
                    if (offsetCol > 0) {
                      func = "=" + formula_default.functionCopy(func, "right", offsetCol);
                    }
                    if (offsetCol < 0) {
                      func = "=" + formula_default.functionCopy(func, "left", Math.abs(offsetCol));
                    }
                    let funcV = formula_default.execfunction(func, h, c2, void 0, true);
                    if (value.spl != null) {
                      value.f = funcV[2];
                      value.v = funcV[1];
                      value.spl = funcV[3].data;
                    } else {
                      value.f = funcV[2];
                      value.v = funcV[1];
                      if (value.ct != null && value.ct["fa"] != null) {
                        value.m = update(value.ct["fa"], funcV[1]);
                      }
                    }
                  }
                  x[c2] = $.extend(true, {}, value);
                  if (value != null && copyHasMC && "mc" in x[c2]) {
                    if (x[c2]["mc"].rs != null) {
                      x[c2]["mc"].r = h;
                      x[c2]["mc"].c = c2;
                      cfg["merge"][x[c2]["mc"].r + "_" + x[c2]["mc"].c] = x[c2]["mc"];
                      offsetMC[value["mc"].r + "_" + value["mc"].c] = [x[c2]["mc"].r, x[c2]["mc"].c];
                    } else {
                      x[c2] = {"mc": {r: offsetMC[value["mc"].r + "_" + value["mc"].c][0], c: offsetMC[value["mc"].r + "_" + value["mc"].c][1]}};
                    }
                  }
                }
                d[h] = x;
              }
            }
          }
          let cdformat = null;
          if (copyRange["copyRange"].length == 1) {
            let c_file = store_default.luckysheetfile[getSheetIndex(copySheetIndex)];
            let a_file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
            let ruleArr_cf = $.extend(true, [], c_file["luckysheet_conditionformat_save"]);
            if (ruleArr_cf != null && ruleArr_cf.length > 0) {
              cdformat = $.extend(true, [], a_file["luckysheet_conditionformat_save"]);
              for (let i2 = 0; i2 < ruleArr_cf.length; i2++) {
                let cf_range = ruleArr_cf[i2].cellrange;
                let emptyRange = [];
                for (let th = 1; th <= timesH; th++) {
                  for (let tc = 1; tc <= timesC; tc++) {
                    mth = minh + (th - 1) * copyh;
                    mtc = minc + (tc - 1) * copyc;
                    maxrowCache = minh + th * copyh;
                    maxcellCahe = minc + tc * copyc;
                    for (let j = 0; j < cf_range.length; j++) {
                      let range2 = conditionformat_default.CFSplitRange(cf_range[j], {"row": [c_r1, c_r2], "column": [c_c1, c_c2]}, {"row": [mth, maxrowCache - 1], "column": [mtc, maxcellCahe - 1]}, "operatePart");
                      if (range2.length > 0) {
                        emptyRange = emptyRange.concat(range2);
                      }
                    }
                  }
                }
                if (emptyRange.length > 0) {
                  ruleArr_cf[i2].cellrange = emptyRange;
                  cdformat.push(ruleArr_cf[i2]);
                }
              }
            }
          }
          last["row"] = [minh, maxh];
          last["column"] = [minc, maxc];
          if (copyRowlChange || addr > 0 || addc > 0) {
            cfg = rowlenByRange(d, minh, maxh, cfg);
            let allParam = {
              "cfg": cfg,
              "RowlChange": true,
              "cdformat": cdformat,
              "dataVerification": dataVerification
            };
            jfrefreshgrid(d, store_default.luckysheet_select_save, allParam);
          } else {
            let allParam = {
              "cfg": cfg,
              "cdformat": cdformat,
              "dataVerification": dataVerification
            };
            jfrefreshgrid(d, store_default.luckysheet_select_save, allParam);
            selectHightlightShow();
          }
        },
        pasteHandlerOfPaintModel: function(copyRange) {
          if (!checkProtectionLockedRangeList(store_default.luckysheet_select_save, store_default.currentSheetIndex)) {
            return;
          }
          const _locale = locale_default();
          const locale_paste = _locale.paste;
          let cfg = $.extend(true, {}, store_default.config);
          if (cfg["merge"] == null) {
            cfg["merge"] = {};
          }
          let copyHasMC = copyRange["HasMC"];
          let copyRowlChange = copyRange["RowlChange"];
          let copySheetIndex = copyRange["dataSheetIndex"];
          let c_r1 = copyRange["copyRange"][0].row[0], c_r2 = copyRange["copyRange"][0].row[1], c_c1 = copyRange["copyRange"][0].column[0], c_c2 = copyRange["copyRange"][0].column[1];
          let copyData = $.extend(true, [], getdatabyselection({"row": [c_r1, c_r2], "column": [c_c1, c_c2]}, copySheetIndex));
          let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
          let minh = last["row"][0], maxh = last["row"][1];
          let minc = last["column"][0], maxc = last["column"][1];
          let copyh = copyData.length, copyc = copyData[0].length;
          if (minh == maxh && minc == maxc) {
            let has_PartMC = false;
            if (cfg["merge"] != null) {
              has_PartMC = hasPartMC(cfg, minh, minh + copyh - 1, minc, minc + copyc - 1);
            }
            if (has_PartMC) {
              if (isEditMode()) {
                alert(locale_paste.errorNotAllowMerged);
              } else {
                tooltip_default.info(`<i class="fa fa-exclamation-triangle"></i>${locale_paste.warning}`, locale_paste.errorNotAllowMerged);
              }
              return;
            }
            maxh = minh + copyh - 1;
            maxc = minc + copyc - 1;
          }
          let timesH = Math.ceil((maxh - minh + 1) / copyh);
          let timesC = Math.ceil((maxc - minc + 1) / copyc);
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          let cellMaxLength = d[0].length;
          let rowMaxLength = d.length;
          let borderInfoCompute = getBorderInfoCompute(copySheetIndex);
          let c_dataVerification = $.extend(true, {}, store_default.luckysheetfile[getSheetIndex(copySheetIndex)].dataVerification);
          let dataVerification = null;
          let mth = 0, mtc = 0, maxcellCahe = 0, maxrowCache = 0;
          for (let th = 1; th <= timesH; th++) {
            for (let tc = 1; tc <= timesC; tc++) {
              mth = minh + (th - 1) * copyh;
              mtc = minc + (tc - 1) * copyc;
              maxrowCache = minh + th * copyh > rowMaxLength ? rowMaxLength : minh + th * copyh;
              if (maxrowCache > maxh + 1) {
                maxrowCache = maxh + 1;
              }
              maxcellCahe = minc + tc * copyc > cellMaxLength ? cellMaxLength : minc + tc * copyc;
              if (maxcellCahe > maxc + 1) {
                maxcellCahe = maxc + 1;
              }
              let offsetMC = {};
              for (let h = mth; h < maxrowCache; h++) {
                let x = [].concat(d[h]);
                for (let c2 = mtc; c2 < maxcellCahe; c2++) {
                  if (borderInfoCompute[c_r1 + h - mth + "_" + (c_c1 + c2 - mtc)]) {
                    let bd_obj = {
                      "rangeType": "cell",
                      "value": {
                        "row_index": h,
                        "col_index": c2,
                        "l": borderInfoCompute[c_r1 + h - mth + "_" + (c_c1 + c2 - mtc)].l,
                        "r": borderInfoCompute[c_r1 + h - mth + "_" + (c_c1 + c2 - mtc)].r,
                        "t": borderInfoCompute[c_r1 + h - mth + "_" + (c_c1 + c2 - mtc)].t,
                        "b": borderInfoCompute[c_r1 + h - mth + "_" + (c_c1 + c2 - mtc)].b
                      }
                    };
                    if (cfg["borderInfo"] == null) {
                      cfg["borderInfo"] = [];
                    }
                    cfg["borderInfo"].push(bd_obj);
                  } else if (borderInfoCompute[h + "_" + c2]) {
                    let bd_obj = {
                      "rangeType": "cell",
                      "value": {
                        "row_index": h,
                        "col_index": c2,
                        "l": null,
                        "r": null,
                        "t": null,
                        "b": null
                      }
                    };
                    if (cfg["borderInfo"] == null) {
                      cfg["borderInfo"] = [];
                    }
                    cfg["borderInfo"].push(bd_obj);
                  }
                  if (c_dataVerification[c_r1 + h - mth + "_" + (c_c1 + c2 - mtc)]) {
                    if (dataVerification == null) {
                      dataVerification = $.extend(true, {}, store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].dataVerification);
                    }
                    dataVerification[h + "_" + c2] = c_dataVerification[c_r1 + h - mth + "_" + (c_c1 + c2 - mtc)];
                  }
                  if (getObjType(x[c2]) == "object" && "mc" in x[c2]) {
                    if ("rs" in x[c2].mc) {
                      delete cfg["merge"][x[c2]["mc"].r + "_" + x[c2]["mc"].c];
                    }
                    delete x[c2].mc;
                  }
                  let value = null;
                  if (copyData[h - mth] != null && copyData[h - mth][c2 - mtc] != null) {
                    value = copyData[h - mth][c2 - mtc];
                  }
                  if (value != null) {
                    delete value["v"];
                    delete value["m"];
                    delete value["f"];
                    delete value["spl"];
                    if (value.ct && value.ct.t == "inlineStr") {
                      delete value.ct;
                    }
                    if (getObjType(x[c2]) == "object") {
                      if (x[c2].ct && x[c2].ct.t === "inlineStr") {
                        delete value["ct"];
                      } else {
                        let format = ["bg", "fc", "ct", "ht", "vt", "bl", "it", "cl", "un", "fs", "ff", "tb"];
                        format.forEach((item2) => {
                          Reflect.deleteProperty(x[c2], item2);
                        });
                      }
                    } else {
                      x[c2] = {"v": x[c2]};
                    }
                    x[c2] = $.extend(true, x[c2], value);
                    if (x[c2].ct && x[c2].ct.t === "inlineStr") {
                      x[c2].ct.s.forEach((item2) => item2 = $.extend(true, item2, value));
                    }
                    if (copyHasMC && "mc" in x[c2]) {
                      if (x[c2]["mc"].rs != null) {
                        x[c2]["mc"].r = h;
                        if (x[c2]["mc"].rs + h >= maxrowCache) {
                          x[c2]["mc"].rs = maxrowCache - h;
                        }
                        x[c2]["mc"].c = c2;
                        if (x[c2]["mc"].cs + c2 >= maxcellCahe) {
                          x[c2]["mc"].cs = maxcellCahe - c2;
                        }
                        cfg["merge"][x[c2]["mc"].r + "_" + x[c2]["mc"].c] = x[c2]["mc"];
                        offsetMC[value["mc"].r + "_" + value["mc"].c] = [x[c2]["mc"].r, x[c2]["mc"].c];
                      } else {
                        x[c2] = {"mc": {r: offsetMC[value["mc"].r + "_" + value["mc"].c][0], c: offsetMC[value["mc"].r + "_" + value["mc"].c][1]}};
                      }
                    }
                    if (x[c2].v != null) {
                      if (value["ct"] != null && value["ct"]["fa"] != null) {
                        let mask = update(value["ct"]["fa"], x[c2].v);
                        x[c2].m = mask;
                      }
                    }
                  }
                }
                d[h] = x;
              }
            }
          }
          let cdformat = null;
          let ruleArr2 = $.extend(true, [], store_default.luckysheetfile[getSheetIndex(copySheetIndex)]["luckysheet_conditionformat_save"]);
          if (ruleArr2 != null && ruleArr2.length > 0) {
            cdformat = $.extend(true, [], store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"]);
            for (let i2 = 0; i2 < ruleArr2.length; i2++) {
              let cdformat_cellrange = ruleArr2[i2].cellrange;
              let emptyRange = [];
              for (let j = 0; j < cdformat_cellrange.length; j++) {
                let range2 = conditionformat_default.CFSplitRange(cdformat_cellrange[j], {"row": [c_r1, c_r2], "column": [c_c1, c_c2]}, {"row": [minh, maxh], "column": [minc, maxc]}, "operatePart");
                if (range2.length > 0) {
                  emptyRange = emptyRange.concat(range2);
                }
              }
              if (emptyRange.length > 0) {
                ruleArr2[i2].cellrange = [{"row": [minh, maxh], "column": [minc, maxc]}];
                cdformat.push(ruleArr2[i2]);
              }
            }
          }
          last["row"] = [minh, maxh];
          last["column"] = [minc, maxc];
          if (copyRowlChange) {
            cfg = rowlenByRange(d, minh, maxh, cfg);
            let allParam = {
              "cfg": cfg,
              "RowlChange": true,
              "cdformat": cdformat,
              "dataVerification": dataVerification
            };
            jfrefreshgrid(d, store_default.luckysheet_select_save, allParam);
          } else {
            if (maxh >= d.length) {
              maxh = d.length - 1;
            }
            cfg = rowlenByRange(d, minh, maxh, cfg);
            let allParam = {
              "cfg": cfg,
              "RowlChange": true,
              "cdformat": cdformat,
              "dataVerification": dataVerification
            };
            jfrefreshgrid(d, store_default.luckysheet_select_save, allParam);
            selectHightlightShow();
          }
        },
        matchcopy: function(data1, data2) {
          let data1cache = [], data2cache = [], data1len, data2len;
          if (typeof data1 == "object") {
            data1cache = data1;
          } else {
            data1cache = data1.split("\n");
            for (let i2 = 0; i2 < data1cache.length; i2++) {
              data1cache[i2] = data1cache[i2].split("	");
            }
          }
          data1len = data1cache.length;
          if (typeof data2 == "object") {
            data2cache = data2;
          } else {
            data2cache = data2.split("\n");
            for (let i2 = 0; i2 < data2cache.length; i2++) {
              data2cache[i2] = data2cache[i2].split("	");
            }
          }
          data2len = data2cache.length;
          if (data1len != data2len) {
            return false;
          }
          for (let r1 = 0; r1 < data1len; r1++) {
            if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][r1] != null) {
              continue;
            }
            for (let r2 = 0; r2 < data2len; r2++) {
              if (data1cache[r1].length != data2cache[r2].length) {
                return false;
              }
            }
          }
          for (let r2 = 0; r2 < data1len; r2++) {
            if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][r2] != null) {
              continue;
            }
            for (let c2 = 0; c2 < data1cache[0].length; c2++) {
              if (getcellvalue(r2, c2, data1cache) != getcellvalue(r2, c2, data2cache)) {
                return false;
              }
            }
          }
          return true;
        }
      };
      selection_default = selection;
    }
  });

  // src/global/cleargridelement.js
  function cleargridelement(event2) {
    $("#luckysheet-cols-h-hover").hide();
    $("#luckysheet-rightclick-menu").hide();
    $("#luckysheet-cell-selected-boxs .luckysheet-cell-selected").hide();
    $("#luckysheet-cols-h-selected .luckysheet-cols-h-selected").hide();
    $("#luckysheet-rows-h-selected .luckysheet-rows-h-selected").hide();
    $("#luckysheet-cell-selected-focus").hide();
    $("#luckysheet-rows-h-hover").hide();
    $("#luckysheet-selection-copy .luckysheet-selection-copy").hide();
    $("#luckysheet-cols-menu-btn").hide();
    $("#luckysheet-row-count-show, #luckysheet-column-count-show").hide();
    if (!event2) {
      selection_default.clearcopy(event2);
    }
    if ($("#luckysheet-dropCell-icon").is(":visible")) {
      if (event2) {
        $("#luckysheet-dropCell-icon").remove();
      }
    }
    if (menuButton_default.luckysheetPaintModelOn && !event2) {
      menuButton_default.cancelPaintModel();
    }
  }
  var init_cleargridelement = __esm({
    "src/global/cleargridelement.js"() {
      init_selection();
      init_menuButton();
    }
  });

  // src/global/createdom.js
  function luckysheetcreatedom(colwidth, rowheight, data, menu, title) {
    let gh = gridHTML();
    gh = replaceHtml(gh, {"logotitle": title});
    gh = replaceHtml(gh, {"menu": menuToolBar()});
    let flowHTML = flow;
    if (store_default.config == null) {
      store_default.config = {};
    }
    rhchInit(rowheight, colwidth);
    const _locale = locale_default();
    const locale_info = _locale.info;
    let addControll = '<button id="luckysheet-bottom-add-row" class="btn btn-default">' + locale_info.add + '</button><input id="luckysheet-bottom-add-row-input" type="text" class="luckysheet-datavisual-config-input luckysheet-mousedown-cancel" placeholder="' + (luckysheetConfigsetting_default.addRowCount || 100) + '"><span style="font-size: 14px;">' + locale_info.row + '</span><span style="font-size: 14px;color: #9c9c9c;">(' + locale_info.addLast + ")</span>";
    let backControll = ' <button id="luckysheet-bottom-bottom-top" class="btn btn-default" style="">' + locale_info.backTop + "</button>";
    let pageInfo = replaceHtml(locale_info.pageInfo, {
      total: luckysheetConfigsetting_default.total ? luckysheetConfigsetting_default.total : "",
      totalPage: luckysheetConfigsetting_default.pageInfo.totalPage ? luckysheetConfigsetting_default.pageInfo.totalPage : "",
      currentPage: luckysheetConfigsetting_default.pageInfo.currentPage ? luckysheetConfigsetting_default.pageInfo.currentPage : ""
    });
    let pageControll = ' <span id="luckysheet-bottom-page-info" style="font-size: 14px;color: #f34141;">' + pageInfo + '</span> <button id="luckysheet-bottom-page-next" class="btn btn-danger" style="">\u4E0B\u4E00\u9875</button>';
    let pageControll2 = ' <span id="luckysheet-bottom-page-info" style="font-size: 14px;color: #f34141;">' + pageInfo + "</span>";
    let bottomControll = "";
    if (luckysheetConfigsetting_default.enableAddRow) {
      bottomControll += addControll;
    }
    if (luckysheetConfigsetting_default.enablePage) {
      if (parseInt(luckysheetConfigsetting_default.pageInfo.totalPage) == 1) {
        bottomControll += pageControll2;
      } else {
        bottomControll += pageControll;
      }
    }
    if (luckysheetConfigsetting_default.enableAddBackTop) {
      bottomControll += backControll;
    }
    let flowstr = replaceHtml('<div id="luckysheetcoltable_0" class="luckysheet-cell-flow-col"> <div id ="luckysheet-sheettable_0" class="luckysheet-cell-sheettable" style="height:${height}px;width:${width}px;"></div><div id="luckysheet-bottom-controll-row" class="luckysheet-bottom-controll-row"> ' + bottomControll + " </div> </div>", {"height": store_default.rh_height, "width": store_default.ch_width - 1});
    let colsheader = replaceHtml(columnHeaderHTML, {"width": store_default.ch_width, "index": 0, "column": ""});
    flowHTML = replaceHtml(flowHTML, {"width": store_default.ch_width, "flow": flowstr, "index": 0});
    gh = replaceHtml(gh, {"flow": flowHTML, "rowHeader": "<div style='height:" + store_default.rh_height + "px' id='luckysheetrowHeader_0' class='luckysheetsheetchange'></div>", "columnHeader": colsheader, "functionButton": luckysheetConfigsetting_default.functionButton});
    $("#" + store_default.container).append(gh);
    $("#luckysheet-scrollbar-x div").width(store_default.ch_width);
    $("#luckysheet-scrollbar-y div").height(store_default.rh_height + store_default.columnHeaderHeight - store_default.cellMainSrollBarSize - 3);
    $("body").append(maskHTML);
    $("body").append(colsmenuHTML);
    $("body").append(rightclickHTML());
    $("body").append(inputHTML);
    $("body").append(replaceHtml(filtermenuHTML(), {"menuid": "filter"}));
    $("body").append(replaceHtml(filtersubmenuHTML(), {"menuid": "filter"}));
    $("body").append(sheetconfigHTML());
    $("#luckysheet-rows-h").width(store_default.rowHeaderWidth - 1.5);
    $("#luckysheet-cols-h-c").height(store_default.columnHeaderHeight - 1.5);
    $("#luckysheet-left-top").css({width: store_default.rowHeaderWidth - 1.5, height: store_default.columnHeaderHeight - 1.5});
    $("#luckysheet_info_detail_input").val(luckysheetConfigsetting_default.title);
  }
  var init_createdom = __esm({
    "src/global/createdom.js"() {
      init_constant();
      init_luckysheetConfigsetting();
      init_postil();
      init_getdata();
      init_editor();
      init_rhchInit();
      init_util();
      init_store();
      init_locale();
    }
  });

  // src/utils/chartUtil.js
  function generateRandomKey(prefix) {
    if (prefix == null) {
      prefix = "chart";
    }
    var userAgent = window.navigator.userAgent.replace(/[^a-zA-Z0-9]/g, "").split("");
    var mid = "";
    for (var i2 = 0; i2 < 12; i2++) {
      mid += userAgent[Math.round(Math.random() * (userAgent.length - 1))];
    }
    var time = new Date().getTime();
    return prefix + "_" + mid + "_" + time;
  }
  function replaceHtml2(temp, dataarry) {
    return temp.replace(/\$\{([\w]+)\}/g, function(s1, s2) {
      var s = dataarry[s2];
      if (typeof s != "undefined") {
        return s;
      } else {
        return s1;
      }
    });
  }
  var init_chartUtil = __esm({
    "src/utils/chartUtil.js"() {
    }
  });

  // src/global/func_methods.js
  var import_dayjs5, error2, func_methods, func_methods_default;
  var init_func_methods = __esm({
    "src/global/func_methods.js"() {
      init_util();
      init_validate();
      init_format();
      init_formula();
      import_dayjs5 = __toModule(require_dayjs_min());
      error2 = {
        v: "#VALUE!",
        n: "#NAME?",
        na: "#N/A",
        r: "#REF!",
        d: "#DIV/0!",
        nm: "#NUM!",
        nl: "#NULL!",
        sp: "#SPILL!"
      };
      func_methods = {
        getCellDataArr: function(rangeObj, nullCellType, isNeglectNullCell) {
          let dataArr = [];
          if (rangeObj.data == null) {
            if (!isNeglectNullCell) {
              if (nullCellType === "number") {
                dataArr.push(0);
              } else if (nullCellType === "text") {
                dataArr.push("");
              }
            }
          } else {
            if (getObjType(rangeObj.data) === "array") {
              for (let i2 = 0; i2 < rangeObj.data.length; i2++) {
                for (let j = 0; j < rangeObj.data[i2].length; j++) {
                  let cell = rangeObj.data[i2][j];
                  let value = cell;
                  if (getObjType(cell) === "object") {
                    value = cell.v;
                  }
                  if (value == null) {
                    if (!isNeglectNullCell) {
                      if (nullCellType === "number") {
                        value = 0;
                      } else if (nullCellType === "text") {
                        value = "";
                      }
                      dataArr.push(value);
                    }
                  } else {
                    dataArr.push(value);
                  }
                }
              }
            } else {
              if (isRealNull(rangeObj.data.v)) {
                if (!isNeglectNullCell) {
                  if (nullCellType == "number") {
                    dataArr.push(0);
                  } else if (nullCellType == "text") {
                    dataArr.push("");
                  }
                }
              } else {
                dataArr.push(rangeObj.data.v);
              }
            }
          }
          return dataArr;
        },
        getCellDataDyadicArr: function(rangeObj, nullCellType) {
          let dataArr = [];
          if (rangeObj.data == null) {
            let rowArr = [];
            if (nullCellType == "number") {
              rowArr.push(0);
            } else if (nullCellType == "text") {
              rowArr.push("");
            }
            dataArr.push(rowArr);
          } else {
            if (getObjType(rangeObj.data) == "array") {
              for (let i2 = 0; i2 < rangeObj.data.length; i2++) {
                let rowArr = [];
                for (let j = 0; j < rangeObj.data[i2].length; j++) {
                  let cell = rangeObj.data[i2][j];
                  let value = cell;
                  if (getObjType(cell) === "object") {
                    value = cell.v;
                  }
                  if (value == null) {
                    if (nullCellType === "number") {
                      value = 0;
                    } else if (nullCellType === "text") {
                      value = "";
                    }
                  }
                  rowArr.push(value);
                }
                dataArr.push(rowArr);
              }
            } else {
              let rowArr = [];
              let value = rangeObj.data.v;
              if (isRealNull(value)) {
                if (nullCellType == "number") {
                  value = 0;
                } else if (nullCellType == "text") {
                  value = "";
                }
              }
              rowArr.push(value);
              dataArr.push(rowArr);
            }
          }
          return dataArr;
        },
        getDataArr: function(arr, isNeglectNaN) {
          let dataArr = [];
          if (isNeglectNaN == null) {
            isNeglectNaN = false;
          }
          if (getObjType(arr[0]) == "array") {
            for (let i2 = 0; i2 < arr.length; i2++) {
              for (let j = 0; j < arr[i2].length; j++) {
                if (isNeglectNaN && !isRealNum(arr[i2][j])) {
                  continue;
                }
                dataArr.push(arr[i2][j]);
              }
            }
          } else {
            for (let i2 = 0; i2 < arr.length; i2++) {
              if (isNeglectNaN && !isRealNum(arr[i2])) {
                continue;
              }
              dataArr.push(arr[i2]);
            }
          }
          return dataArr;
        },
        getDataDyadicArr: function(arr) {
          let dataArr = [];
          if (getObjType(arr[0]) == "array") {
            for (let i2 = 0; i2 < arr.length; i2++) {
              let rowArr = [];
              for (let j = 0; j < arr[i2].length; j++) {
                rowArr.push(arr[i2][j]);
              }
              dataArr.push(rowArr);
            }
          } else {
            let rowArr = [];
            for (let i2 = 0; i2 < arr.length; i2++) {
              rowArr.push(arr[i2]);
            }
            dataArr.push(rowArr);
          }
          return dataArr;
        },
        isDyadicArr: function(arr) {
          let isDyadic = true;
          if (arr.length > 1) {
            let collen = arr[0].length;
            for (let i2 = 1; i2 < arr.length; i2++) {
              if (arr[i2].length != collen) {
                isDyadic = false;
                break;
              }
            }
          }
          return isDyadic;
        },
        getFirstValue: function(data, nullCellType) {
          let _this = this;
          if (nullCellType == null) {
            nullCellType = "number";
          }
          let value;
          if (getObjType(data) == "array") {
            if (getObjType(data[0]) == "array") {
              if (!_this.isDyadicArr(data)) {
                return error2.v;
              }
              value = data[0][0];
            } else {
              value = data[0];
            }
          } else if (getObjType(data) == "object" && data.startCell != null) {
            if (data.data == null) {
              if (nullCellType == "number") {
                value = 0;
              } else if (nullCellType == "text") {
                value = "";
              }
            } else {
              let cell_r = window.luckysheetCurrentRow;
              let cell_c = window.luckysheetCurrentColumn;
              if (data.rowl == 1 && data.coll == 1) {
                value = data.data;
                if (value == null || isRealNull(value.v)) {
                  if (nullCellType == "number") {
                    value = 0;
                  } else if (nullCellType == "text") {
                    value = "";
                  }
                } else {
                  value = value.v;
                }
              } else {
                if (data.data[0][0].mc != null && data.data[0][0].mc.rs == data.rowl && data.data[0][0].mc.cs == data.coll) {
                  value = data.data[0][0];
                  if (value == null || isRealNull(value.v)) {
                    if (nullCellType == "number") {
                      value = 0;
                    } else if (nullCellType == "text") {
                      value = "";
                    }
                  } else {
                    value = value.v;
                  }
                } else if (data.rowl == 1 || data.coll == 1) {
                  let cellrange = formula_default.getcellrange(data.startCell);
                  let str = cellrange.row[0], edr = str + data.rowl - 1, stc = cellrange.column[0], edc = stc + data.coll - 1;
                  if (data.rowl == 1) {
                    if (cell_c < stc || cell_c > edc) {
                      return error2.v;
                    }
                    value = data.data[0][cell_c - stc];
                  } else if (data.coll == 1) {
                    if (cell_r < str || cell_r > edr) {
                      return error2.v;
                    }
                    value = data.data[cell_r - str][0];
                  }
                  if (value == null || isRealNull(value.v) || value.mc != null) {
                    if (nullCellType == "number") {
                      value = 0;
                    } else if (nullCellType == "text") {
                      value = "";
                    }
                  } else {
                    value = value.v;
                  }
                } else {
                  return error2.v;
                }
              }
            }
          } else {
            value = data;
          }
          return value;
        },
        getCellBoolen: function(data) {
          let _this = this;
          let cumulative = _this.getFirstValue(data);
          if (valueIsError(cumulative)) {
            return cumulative;
          }
          if (getObjType(cumulative) == "boolean") {
          } else if (getObjType(cumulative) == "string" && (cumulative.toLowerCase() == "true" || cumulative.toLowerCase() == "false")) {
            if (cumulative.toLowerCase() == "true") {
              cumulative = true;
            } else if (cumulative.toLowerCase() == "false") {
              cumulative = false;
            }
          } else if (isRealNum(cumulative)) {
            cumulative = parseFloat(cumulative);
            cumulative = cumulative == 0 ? false : true;
          } else {
            return error2.v;
          }
          return cumulative;
        },
        getCellDate: function(data) {
          let _this = this;
          let date_text;
          if (getObjType(data) == "array") {
            if (getObjType(data[0]) == "array") {
              if (!_this.isDyadicArr(data)) {
                return error2.v;
              }
              date_text = data[0][0];
            } else {
              date_text = data[0];
            }
          } else if (getObjType(data) == "object" && data.startCell != null) {
            if (data.data == null || getObjType(data.data) == "array" || isRealNull(data.data.v)) {
              return error2.v;
            }
            date_text = data.data.v;
            if (data.data.ct != null && data.data.ct.t == "d") {
              date_text = update("YYYY-MM-DD h:mm:ss", date_text);
            }
          } else {
            date_text = data;
          }
          return date_text;
        },
        getCellrangeDate: function(data) {
          let _this = this;
          let date = [];
          if (getObjType(data) == "array") {
            if (getObjType(data[0]) == "array" && !_this.isDyadicArr(data)) {
              return error2.v;
            }
            date = date.concat(_this.getDataArr(data, false));
          } else if (getObjType(data) == "object" && data.startCell != null) {
            if (data.data == null) {
              date.push(0);
            } else {
              if (getObjType(data.data) == "array") {
                for (let i2 = 0; i2 < data.data.length; i2++) {
                  for (let j = 0; j < data.data[i2].length; j++) {
                    if (data.data[i2][j] != null && !isRealNull(data.data[i2][j].v)) {
                      let value = data.data[i2][j].v;
                      if (data.data[i2][j].ct != null && data.data[i2][j].ct.t == "d") {
                        value = update("YYYY-MM-DD h:mm:ss", value);
                      }
                      date.push(value);
                    } else {
                      date.push(0);
                    }
                  }
                }
              } else {
                let value = data.data.v;
                if (data.data.ct != null && data.data.ct.t == "d") {
                  value = update("YYYY-MM-DD h:mm:ss", value);
                }
                date.push(value);
              }
            }
          } else {
            date.push(data);
          }
          return date;
        },
        getRegExpStr: function(str) {
          return str.replace("~*", "\\*").replace("~?", "\\?").replace(".", "\\.").replace("*", ".*").replace("?", ".");
        },
        factorial: function(num) {
          if (num == 0 || num == 1) {
            return 1;
          } else {
            return num * this.factorial(num - 1);
          }
        },
        factorialDouble: function(num) {
          if (num <= 0) {
            return 1;
          } else {
            return num * this.factorialDouble(num - 2);
          }
        },
        variance: function(num_arr) {
          let sum = 0, count = 0;
          for (let i2 = 0; i2 < num_arr.length; i2++) {
            let number = num_arr[i2];
            sum += number;
            count++;
          }
          let avg = sum / count;
          let sum_variance = 0;
          for (let j = 0; j < num_arr.length; j++) {
            let number = num_arr[j];
            sum_variance += (number - avg) * (number - avg);
          }
          return sum_variance / count;
        },
        variance_s: function(num_arr) {
          let sum = 0, count = 0;
          for (let i2 = 0; i2 < num_arr.length; i2++) {
            let number = num_arr[i2];
            sum += number;
            count++;
          }
          let avg = sum / count;
          let sum_variance = 0;
          for (let j = 0; j < num_arr.length; j++) {
            let number = num_arr[j];
            sum_variance += (number - avg) * (number - avg);
          }
          return sum_variance / (count - 1);
        },
        standardDeviation: function(num_arr) {
          let sum = 0, count = 0;
          for (let i2 = 0; i2 < num_arr.length; i2++) {
            let number = num_arr[i2];
            sum += number;
            count++;
          }
          let avg = sum / count;
          let sum_variance = 0;
          for (let j = 0; j < num_arr.length; j++) {
            let number = num_arr[j];
            sum_variance += (number - avg) * (number - avg);
          }
          return Math.sqrt(sum_variance / count);
        },
        standardDeviation_s: function(num_arr) {
          let sum = 0, count = 0;
          for (let i2 = 0; i2 < num_arr.length; i2++) {
            let number = num_arr[i2];
            sum += number;
            count++;
          }
          let avg = sum / count;
          let sum_variance = 0;
          for (let j = 0; j < num_arr.length; j++) {
            let number = num_arr[j];
            sum_variance += (number - avg) * (number - avg);
          }
          return Math.sqrt(sum_variance / (count - 1));
        },
        isLeapYear: function(year) {
          return new Date(year, 1, 29).getMonth() === 1;
        },
        feb29Between: function(date1, date2) {
          let _this = this;
          let year1 = (0, import_dayjs5.default)(date1).year();
          let mar1year1 = (0, import_dayjs5.default)().set({"year": year1, "month": 2, "date": 1});
          if (_this.isLeapYear(year1) && (0, import_dayjs5.default)(date1) < (0, import_dayjs5.default)(mar1year1) && (0, import_dayjs5.default)(date2) >= (0, import_dayjs5.default)(mar1year1)) {
            return true;
          }
          let year2 = (0, import_dayjs5.default)(date2).year();
          let mar1year2 = (0, import_dayjs5.default)().set({"year": year2, "month": 2, "date": 1});
          return _this.isLeapYear(year2) && (0, import_dayjs5.default)(date2) >= (0, import_dayjs5.default)(mar1year2) && (0, import_dayjs5.default)(date1) < (0, import_dayjs5.default)(mar1year2);
        },
        findResultIndex: function(database, criterias) {
          let matches = {};
          for (let i2 = 1; i2 < database[0].length; ++i2) {
            matches[i2] = true;
          }
          let maxCriteriaLength = criterias[0].length;
          for (i = 1; i < criterias.length; ++i) {
            if (criterias[i].length > maxCriteriaLength) {
              maxCriteriaLength = criterias[i].length;
            }
          }
          for (let k = 1; k < database.length; ++k) {
            for (let l = 1; l < database[k].length; ++l) {
              let currentCriteriaResult = false;
              let hasMatchingCriteria = false;
              for (let j = 0; j < criterias.length; ++j) {
                let criteria = criterias[j];
                if (criteria.length < maxCriteriaLength) {
                  continue;
                }
                let criteriaField = criteria[0];
                if (database[k][0] !== criteriaField) {
                  continue;
                }
                hasMatchingCriteria = true;
                for (let p = 1; p < criteria.length; ++p) {
                  currentCriteriaResult = currentCriteriaResult || new Function("return " + database[k][l] + criteria[p])();
                }
              }
              if (hasMatchingCriteria) {
                matches[l] = matches[l] && currentCriteriaResult;
              }
            }
          }
          let result = [];
          for (let n = 0; n < database[0].length; ++n) {
            if (matches[n]) {
              result.push(n - 1);
            }
          }
          return result;
        },
        findField: function(database, title) {
          let index2 = null;
          for (let i2 = 0; i2 < database.length; i2++) {
            if (database[i2][0] == title) {
              index2 = i2;
              break;
            }
          }
          if (index2 == null) {
            return error2.v;
          }
          return index2;
        },
        rest: function(array, idx) {
          idx = idx || 1;
          if (!array || typeof array.slice !== "function") {
            return array;
          }
          return array.slice(idx);
        },
        compact: function(array) {
          if (!array) {
            return array;
          }
          let result = [];
          for (let i2 = 0; i2 < array.length; ++i2) {
            if (!array[i2]) {
              continue;
            }
            result.push(array[i2]);
          }
          return result;
        }
      };
      func_methods_default = func_methods;
    }
  });

  // src/function/matrix_methods.js
  function inverse(els) {
    var M = matrix.sylvester_matrix.create(els);
    return M.inverse().elements;
  }
  var matrix, init;
  var init_matrix_methods = __esm({
    "src/function/matrix_methods.js"() {
      matrix = {};
      init = function init2(matrix2) {
        var sylvester_matrix = function() {
        };
        sylvester_matrix.precision = 1e-6;
        sylvester_matrix.create = function(elements) {
          var M = new sylvester_matrix();
          return M.setElements(elements);
        };
        var $M = sylvester_matrix.create;
        sylvester_matrix.I = function(n) {
          var els = [], i2 = n, j;
          while (i2--) {
            j = n;
            els[i2] = [];
            while (j--) {
              els[i2][j] = i2 === j ? 1 : 0;
            }
          }
          return sylvester_matrix.create(els);
        };
        sylvester_matrix.prototype = {
          e: function(i2, j) {
            if (i2 < 1 || i2 > this.elements.length || j < 1 || j > this.elements[0].length) {
              return null;
            }
            return this.elements[i2 - 1][j - 1];
          },
          dimensions: function() {
            var cols = this.elements.length === 0 ? 0 : this.elements[0].length;
            return {rows: this.elements.length, cols};
          },
          rows: function() {
            return this.elements.length;
          },
          cols: function() {
            if (this.elements.length === 0) {
              return 0;
            }
            return this.elements[0].length;
          },
          eql: function(matrix3) {
            var M = matrix3.elements || matrix3;
            if (!M[0] || typeof M[0][0] === "undefined") {
              M = sylvester_matrix.create(M).elements;
            }
            if (this.elements.length === 0 || M.length === 0) {
              return this.elements.length === M.length;
            }
            if (this.elements.length !== M.length) {
              return false;
            }
            if (this.elements[0].length !== M[0].length) {
              return false;
            }
            var i2 = this.elements.length, nj = this.elements[0].length, j;
            while (i2--) {
              j = nj;
              while (j--) {
                if (Math.abs(this.elements[i2][j] - M[i2][j]) > sylvester_matrix.precision) {
                  return false;
                }
              }
            }
            return true;
          },
          dup: function() {
            return sylvester_matrix.create(this.elements);
          },
          map: function(fn, context) {
            if (this.elements.length === 0) {
              return sylvester_matrix.create([]);
            }
            var els = [], i2 = this.elements.length, nj = this.elements[0].length, j;
            while (i2--) {
              j = nj;
              els[i2] = [];
              while (j--) {
                els[i2][j] = fn.call(context, this.elements[i2][j], i2 + 1, j + 1);
              }
            }
            return sylvester_matrix.create(els);
          },
          isSameSizeAs: function(matrix3) {
            var M = matrix3.elements || matrix3;
            if (typeof M[0][0] === "undefined") {
              M = sylvester_matrix.create(M).elements;
            }
            if (this.elements.length === 0) {
              return M.length === 0;
            }
            return this.elements.length === M.length && this.elements[0].length === M[0].length;
          },
          add: function(matrix3) {
            if (this.elements.length === 0)
              return this.map(function(x) {
                return x;
              });
            var M = matrix3.elements || matrix3;
            if (typeof M[0][0] === "undefined") {
              M = sylvester_matrix.create(M).elements;
            }
            if (!this.isSameSizeAs(M)) {
              return null;
            }
            return this.map(function(x, i2, j) {
              return x + M[i2 - 1][j - 1];
            });
          },
          subtract: function(matrix3) {
            if (this.elements.length === 0)
              return this.map(function(x) {
                return x;
              });
            var M = matrix3.elements || matrix3;
            if (typeof M[0][0] === "undefined") {
              M = sylvester_matrix.create(M).elements;
            }
            if (!this.isSameSizeAs(M)) {
              return null;
            }
            return this.map(function(x, i2, j) {
              return x - M[i2 - 1][j - 1];
            });
          },
          canMultiplyFromLeft: function(matrix3) {
            if (this.elements.length === 0) {
              return false;
            }
            var M = matrix3.elements || matrix3;
            if (typeof M[0][0] === "undefined") {
              M = sylvester_matrix.create(M).elements;
            }
            return this.elements[0].length === M.length;
          },
          multiply: function(matrix3) {
            if (this.elements.length === 0) {
              return null;
            }
            if (!matrix3.elements) {
              return this.map(function(x) {
                return x * matrix3;
              });
            }
            var returnVector = matrix3.modulus ? true : false;
            var M = matrix3.elements || matrix3;
            if (typeof M[0][0] === "undefined") {
              M = sylvester_matrix.create(M).elements;
            }
            if (!this.canMultiplyFromLeft(M)) {
              return null;
            }
            var i2 = this.elements.length, nj = M[0].length, j;
            var cols = this.elements[0].length, c2, elements = [], sum;
            while (i2--) {
              j = nj;
              elements[i2] = [];
              while (j--) {
                c2 = cols;
                sum = 0;
                while (c2--) {
                  sum += this.elements[i2][c2] * M[c2][j];
                }
                elements[i2][j] = sum;
              }
            }
            var M = sylvester_matrix.create(elements);
            return returnVector ? M.col(1) : M;
          },
          minor: function(a, b, c2, d) {
            if (this.elements.length === 0) {
              return null;
            }
            var elements = [], ni = c2, i2, nj, j;
            var rows = this.elements.length, cols = this.elements[0].length;
            while (ni--) {
              i2 = c2 - ni - 1;
              elements[i2] = [];
              nj = d;
              while (nj--) {
                j = d - nj - 1;
                elements[i2][j] = this.elements[(a + i2 - 1) % rows][(b + j - 1) % cols];
              }
            }
            return sylvester_matrix.create(elements);
          },
          transpose: function() {
            if (this.elements.length === 0)
              return sylvester_matrix.create([]);
            var rows = this.elements.length, i2, cols = this.elements[0].length, j;
            var elements = [], i2 = cols;
            while (i2--) {
              j = rows;
              elements[i2] = [];
              while (j--) {
                elements[i2][j] = this.elements[j][i2];
              }
            }
            return sylvester_matrix.create(elements);
          },
          isSquare: function() {
            var cols = this.elements.length === 0 ? 0 : this.elements[0].length;
            return this.elements.length === cols;
          },
          max: function() {
            if (this.elements.length === 0) {
              return null;
            }
            var m = 0, i2 = this.elements.length, nj = this.elements[0].length, j;
            while (i2--) {
              j = nj;
              while (j--) {
                if (Math.abs(this.elements[i2][j]) > Math.abs(m)) {
                  m = this.elements[i2][j];
                }
              }
            }
            return m;
          },
          indexOf: function(x) {
            if (this.elements.length === 0) {
              return null;
            }
            var index2 = null, ni = this.elements.length, i2, nj = this.elements[0].length, j;
            for (i2 = 0; i2 < ni; i2++) {
              for (j = 0; j < nj; j++) {
                if (this.elements[i2][j] === x) {
                  return {i: i2 + 1, j: j + 1};
                }
              }
            }
            return null;
          },
          diagonal: function() {
            if (!this.isSquare) {
              return null;
            }
            var els = [], n = this.elements.length;
            for (var i2 = 0; i2 < n; i2++) {
              els.push(this.elements[i2][i2]);
            }
            return sylvester_matrix.create(els);
          },
          toRightTriangular: function() {
            if (this.elements.length === 0)
              return sylvester_matrix.create([]);
            var M = this.dup(), els;
            var n = this.elements.length, i2, j, np = this.elements[0].length, p;
            for (i2 = 0; i2 < n; i2++) {
              if (M.elements[i2][i2] === 0) {
                for (j = i2 + 1; j < n; j++) {
                  if (M.elements[j][i2] !== 0) {
                    els = [];
                    for (p = 0; p < np; p++) {
                      els.push(M.elements[i2][p] + M.elements[j][p]);
                    }
                    M.elements[i2] = els;
                    break;
                  }
                }
              }
              if (M.elements[i2][i2] !== 0) {
                for (j = i2 + 1; j < n; j++) {
                  var multiplier = M.elements[j][i2] / M.elements[i2][i2];
                  els = [];
                  for (p = 0; p < np; p++) {
                    els.push(p <= i2 ? 0 : M.elements[j][p] - M.elements[i2][p] * multiplier);
                  }
                  M.elements[j] = els;
                }
              }
            }
            return M;
          },
          determinant: function() {
            if (this.elements.length === 0) {
              return 1;
            }
            if (!this.isSquare()) {
              return null;
            }
            var M = this.toRightTriangular();
            var det = M.elements[0][0], n = M.elements.length;
            for (var i2 = 1; i2 < n; i2++) {
              det = det * M.elements[i2][i2];
            }
            return det;
          },
          isSingular: function() {
            return this.isSquare() && this.determinant() === 0;
          },
          trace: function() {
            if (this.elements.length === 0) {
              return 0;
            }
            if (!this.isSquare()) {
              return null;
            }
            var tr = this.elements[0][0], n = this.elements.length;
            for (var i2 = 1; i2 < n; i2++) {
              tr += this.elements[i2][i2];
            }
            return tr;
          },
          rank: function() {
            if (this.elements.length === 0) {
              return 0;
            }
            var M = this.toRightTriangular(), rank = 0;
            var i2 = this.elements.length, nj = this.elements[0].length, j;
            while (i2--) {
              j = nj;
              while (j--) {
                if (Math.abs(M.elements[i2][j]) > sylvester_matrix.precision) {
                  rank++;
                  break;
                }
              }
            }
            return rank;
          },
          augment: function(matrix3) {
            if (this.elements.length === 0) {
              return this.dup();
            }
            var M = matrix3.elements || matrix3;
            if (typeof M[0][0] === "undefined") {
              M = sylvester_matrix.create(M).elements;
            }
            var T = this.dup(), cols = T.elements[0].length;
            var i2 = T.elements.length, nj = M[0].length, j;
            if (i2 !== M.length) {
              return null;
            }
            while (i2--) {
              j = nj;
              while (j--) {
                T.elements[i2][cols + j] = M[i2][j];
              }
            }
            return T;
          },
          inverse: function() {
            if (this.elements.length === 0) {
              return null;
            }
            if (!this.isSquare() || this.isSingular()) {
              return null;
            }
            var n = this.elements.length, i2 = n, j;
            var M = this.augment(sylvester_matrix.I(n)).toRightTriangular();
            var np = M.elements[0].length, p, els, divisor;
            var inverse_elements = [], new_element;
            while (i2--) {
              els = [];
              inverse_elements[i2] = [];
              divisor = M.elements[i2][i2];
              for (p = 0; p < np; p++) {
                new_element = M.elements[i2][p] / divisor;
                els.push(new_element);
                if (p >= n) {
                  inverse_elements[i2].push(new_element);
                }
              }
              M.elements[i2] = els;
              j = i2;
              while (j--) {
                els = [];
                for (p = 0; p < np; p++) {
                  els.push(M.elements[j][p] - M.elements[i2][p] * M.elements[j][i2]);
                }
                M.elements[j] = els;
              }
            }
            return sylvester_matrix.create(inverse_elements);
          },
          round: function() {
            return this.map(function(x) {
              return Math.round(x);
            });
          },
          snapTo: function(x) {
            return this.map(function(p) {
              return Math.abs(p - x) <= sylvester_matrix.precision ? x : p;
            });
          },
          setElements: function(els) {
            var i2, j, elements = els.elements || els;
            if (elements[0] && typeof elements[0][0] !== "undefined") {
              i2 = elements.length;
              this.elements = [];
              while (i2--) {
                j = elements[i2].length;
                this.elements[i2] = [];
                while (j--) {
                  this.elements[i2][j] = elements[i2][j];
                }
              }
              return this;
            }
            var n = elements.length;
            this.elements = [];
            for (i2 = 0; i2 < n; i2++) {
              this.elements.push([elements[i2]]);
            }
            return this;
          }
        };
        matrix2.sylvester_matrix = sylvester_matrix;
      };
      init(matrix);
    }
  });

  // src/function/func.js
  function luckysheet_compareWith() {
    let sp = arguments[1];
    let data_fp = arguments[0];
    let fp;
    if (getObjType(data_fp) == "object" && data_fp.startCell != null) {
      if (sp == "&") {
        fp = func_methods_default.getCellDataDyadicArr(data_fp, "text");
      } else {
        fp = func_methods_default.getCellDataDyadicArr(data_fp, "number");
      }
      if (fp.length == 1 && fp[0].length == 1) {
        fp = fp[0][0];
      }
    } else {
      fp = data_fp;
    }
    let data_tp = arguments[2];
    let tp;
    if (getObjType(data_tp) == "object" && data_tp.startCell != null) {
      if (sp == "&") {
        tp = func_methods_default.getCellDataDyadicArr(data_tp, "text");
      } else {
        tp = func_methods_default.getCellDataDyadicArr(data_tp, "number");
      }
      if (tp.length == 1 && tp[0].length == 1) {
        tp = tp[0][0];
      }
    } else {
      tp = data_tp;
    }
    if (valueIsError(fp)) {
      return fp;
    }
    if (valueIsError(tp)) {
      return tp;
    }
    if (getObjType(fp) == "array" && getObjType(fp[0]) == "array" && !func_methods_default.isDyadicArr(fp)) {
      return error.v;
    }
    if (getObjType(tp) == "array" && getObjType(tp[0]) == "array" && !func_methods_default.isDyadicArr(tp)) {
      return error.v;
    }
    if (sp == "<>") {
      sp = "!=";
    }
    if (sp == "=") {
      sp = "==";
    }
    if (fp == null && tp == null) {
      return "#INVERSE!";
    } else if (fp == "#INVERSE!") {
      fp = 0;
      if (sp == "-") {
        sp = "+";
      } else if (sp == "+") {
        sp = "-";
      }
    } else if (sp == "-" && fp == null) {
      fp = 0;
    } else if (sp == "/" && (tp == 0 || tp == null)) {
      return error.d;
    }
    function booleanOperation(a, operator, b) {
      if (isRealNum(a)) {
        a = parseFloat(a);
      }
      if (isRealNum(b)) {
        b = parseFloat(b);
      }
      if (operator == "==") {
        if (a == b) {
          return true;
        } else {
          return false;
        }
      } else if (operator == "!=") {
        if (a != b) {
          return true;
        } else {
          return false;
        }
      } else if (operator == ">=") {
        if (a >= b) {
          return true;
        } else {
          return false;
        }
      } else if (operator == "<=") {
        if (a <= b) {
          return true;
        } else {
          return false;
        }
      } else if (operator == ">") {
        if (a > b) {
          return true;
        } else {
          return false;
        }
      } else if (operator == "<") {
        if (a < b) {
          return true;
        } else {
          return false;
        }
      }
    }
    function booleanToNum(v) {
      if (v == null) {
        return v;
      }
      if (v.toString().toLowerCase() == "true") {
        return 1;
      }
      if (v.toString().toLowerCase() == "false") {
        return 0;
      }
      return v;
    }
    if (sp == "*") {
      if (getObjType(fp) == "array" && getObjType(tp) == "array") {
        let result = [];
        if (getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array") {
          if (fp.length == tp.length && fp[0].length == tp[0].length) {
            for (let m = 0; m < fp.length; m++) {
              let rowArr = [];
              for (let n = 0; n < fp[m].length; n++) {
                fp[m][n] = booleanToNum(fp[m][n]);
                tp[m][n] = booleanToNum(tp[m][n]);
                let value;
                if (isRealNum(fp[m][n]) && isRealNum(tp[m][n])) {
                  value = luckysheet_calcADPMM(fp[m][n], sp, tp[m][n]);
                } else {
                  value = error.v;
                }
                rowArr.push(value);
              }
              result.push(rowArr);
            }
          } else if (fp[0].length == tp.length) {
            let rowlen = fp.length;
            let collen = tp[0].length;
            for (let m = 0; m < rowlen; m++) {
              let rowArr = [];
              for (let n = 0; n < collen; n++) {
                let value = 0;
                for (let p = 0; p < fp[0].length; p++) {
                  fp[m][p] = booleanToNum(fp[m][p]);
                  tp[p][n] = booleanToNum(tp[p][n]);
                  if (isRealNum(fp[m][p]) && isRealNum(tp[p][n])) {
                    value += luckysheet_calcADPMM(fp[m][p], sp, tp[p][n]);
                  } else {
                    value += error.v;
                  }
                }
                if (value.toString() == "NaN") {
                  value = error.v;
                }
                rowArr.push(value);
              }
              result.push(rowArr);
            }
          } else if (fp.length == tp[0].length) {
            let rowlen = tp.length;
            let collen = fp[0].length;
            for (let m = 0; m < rowlen; m++) {
              let rowArr = [];
              for (let n = 0; n < collen; n++) {
                let value = 0;
                for (let p = 0; p < tp[0].length; p++) {
                  fp[p][n] = booleanToNum(fp[p][n]);
                  tp[m][p] = booleanToNum(tp[m][p]);
                  if (isRealNum(tp[m][p]) && isRealNum(fp[p][n])) {
                    value += luckysheet_calcADPMM(fp[p][n], sp, tp[m][p]);
                  } else {
                    value += error.v;
                  }
                }
                if (value.toString() == "NaN") {
                  value = error.v;
                }
                rowArr.push(value);
              }
              result.push(rowArr);
            }
          } else {
            return error.na;
          }
        } else if (getObjType(fp[0]) == "array") {
          if (fp[0].length == tp.length) {
            for (let m = 0; m < fp.length; m++) {
              let rowArr = [];
              for (let n = 0; n < fp[m].length; n++) {
                fp[m][n] = booleanToNum(fp[m][n]);
                tp[n] = booleanToNum(tp[n]);
                let value;
                if (isRealNum(fp[m][n]) && isRealNum(tp[n])) {
                  value = luckysheet_calcADPMM(fp[m][n], sp, tp[n]);
                } else {
                  value = error.v;
                }
                rowArr.push(value);
              }
              result.push(rowArr);
            }
          } else if (fp[0].length == 1) {
            let rowlen = fp.length;
            let collen = tp.length;
            for (let m = 0; m < rowlen; m++) {
              let rowArr = [];
              for (let n = 0; n < collen; n++) {
                fp[m][0] = booleanToNum(fp[m][0]);
                tp[n] = booleanToNum(tp[n]);
                let value;
                if (isRealNum(fp[m][0]) && isRealNum(tp[n])) {
                  value = luckysheet_calcADPMM(fp[m][0], sp, tp[n]);
                } else {
                  value = error.v;
                }
                rowArr.push(value);
              }
              result.push(rowArr);
            }
          } else {
            return error.na;
          }
        } else if (getObjType(tp[0]) == "array") {
          if (tp[0].length == fp.length) {
            for (let m = 0; m < tp.length; m++) {
              let rowArr = [];
              for (let n = 0; n < tp[m].length; n++) {
                fp[n] = booleanToNum(fp[n]);
                tp[m][n] = booleanToNum(tp[m][n]);
                let value;
                if (isRealNum(fp[n]) && isRealNum(tp[m][n])) {
                  value = luckysheet_calcADPMM(fp[n], sp, tp[m][n]);
                } else {
                  value = error.v;
                }
                rowArr.push(value);
              }
              result.push(rowArr);
            }
          } else if (tp[0].length == 1) {
            let rowlen = tp.length;
            let collen = fp.length;
            for (let m = 0; m < rowlen; m++) {
              let rowArr = [];
              for (let n = 0; n < collen; n++) {
                fp[n] = booleanToNum(fp[n]);
                tp[m][0] = booleanToNum(tp[m][0]);
                let value;
                if (isRealNum(fp[n]) && isRealNum(tp[m][0])) {
                  value = luckysheet_calcADPMM(fp[n], sp, tp[m][0]);
                } else {
                  value = error.v;
                }
                rowArr.push(value);
              }
              result.push(rowArr);
            }
          } else {
            return error.na;
          }
        } else {
          if (fp.length != tp.length) {
            return error.na;
          }
          for (let n = 0; n < fp.length; n++) {
            fp[n] = booleanToNum(fp[n]);
            tp[n] = booleanToNum(tp[n]);
            let value;
            if (isRealNum(fp[n]) && isRealNum(tp[n])) {
              value = luckysheet_calcADPMM(fp[n], sp, tp[n]);
            } else {
              value = error.v;
            }
            result.push(value);
          }
        }
        return result;
      } else if (getObjType(fp) == "array") {
        tp = booleanToNum(tp);
        let result = [];
        if (getObjType(fp[0]) == "array") {
          for (let m = 0; m < fp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < fp[m].length; n++) {
              fp[m][n] = booleanToNum(fp[m][n]);
              let value;
              if (isRealNum(fp[m][n]) && isRealNum(tp)) {
                value = luckysheet_calcADPMM(fp[m][n], sp, tp);
              } else {
                value = error.v;
              }
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else {
          for (let n = 0; n < fp.length; n++) {
            fp[n] = booleanToNum(fp[n]);
            let value;
            if (isRealNum(fp[n]) && isRealNum(tp)) {
              value = luckysheet_calcADPMM(fp[n], sp, tp);
            } else {
              value = error.v;
            }
            result.push(value);
          }
        }
        return result;
      } else if (getObjType(tp) == "array") {
        fp = booleanToNum(fp);
        let result = [];
        if (getObjType(tp[0]) == "array") {
          for (let m = 0; m < tp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < tp[m].length; n++) {
              tp[m][n] = booleanToNum(tp[m][n]);
              let value;
              if (isRealNum(fp) && isRealNum(tp[m][n])) {
                value = luckysheet_calcADPMM(fp, sp, tp[m][n]);
              } else {
                value = error.v;
              }
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else {
          for (let n = 0; n < tp.length; n++) {
            tp[n] = booleanToNum(tp[n]);
            let value;
            if (isRealNum(fp) && isRealNum(tp[n])) {
              value = luckysheet_calcADPMM(fp, sp, tp[n]);
            } else {
              value = error.v;
            }
            result.push(value);
          }
        }
        return result;
      } else {
        fp = booleanToNum(fp);
        tp = booleanToNum(tp);
        let result;
        if (isRealNum(fp) && isRealNum(tp)) {
          result = luckysheet_calcADPMM(fp, sp, tp);
        } else {
          result = error.v;
        }
        return result;
      }
    } else if (sp == "/") {
      if (getObjType(fp) == "array" && getObjType(tp) == "array") {
        let result = [];
        if (getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array") {
          if (fp.length == tp.length && fp[0].length == tp[0].length) {
            for (let m = 0; m < fp.length; m++) {
              let rowArr = [];
              for (let n = 0; n < fp[m].length; n++) {
                fp[m][n] = booleanToNum(fp[m][n]);
                tp[m][n] = booleanToNum(tp[m][n]);
                let value;
                if (isRealNum(fp[m][n]) && isRealNum(tp[m][n])) {
                  if (parseFloat(tp[m][n]) == 0) {
                    value = error.d;
                  } else {
                    value = luckysheet_calcADPMM(fp[m][n], sp, tp[m][n]);
                  }
                } else {
                  value = error.v;
                }
                rowArr.push(value);
              }
              result.push(rowArr);
            }
          } else if (fp[0].length == tp.length) {
            let tp_inverse = inverse(tp);
            let rowlen = fp.length;
            let collen = tp_inverse[0].length;
            for (let m = 0; m < rowlen; m++) {
              let rowArr = [];
              for (let n = 0; n < collen; n++) {
                let value = 0;
                for (let p = 0; p < fp[0].length; p++) {
                  fp[m][p] = booleanToNum(fp[m][p]);
                  tp_inverse[p][n] = booleanToNum(tp_inverse[p][n]);
                  if (isRealNum(fp[m][p]) && isRealNum(tp_inverse[p][n])) {
                    value += luckysheet_calcADPMM(fp[m][p], "*", tp_inverse[p][n]);
                  } else {
                    value += error.v;
                  }
                }
                if (value.toString() == "NaN") {
                  value = error.v;
                }
                rowArr.push(value);
              }
              result.push(rowArr);
            }
          } else {
            return error.na;
          }
        } else if (getObjType(fp[0]) == "array") {
          if (fp[0].length == tp.length) {
            for (let m = 0; m < fp.length; m++) {
              let rowArr = [];
              for (let n = 0; n < fp[m].length; n++) {
                fp[m][n] = booleanToNum(fp[m][n]);
                tp[n] = booleanToNum(tp[n]);
                let value;
                if (isRealNum(fp[m][n]) && isRealNum(tp[n])) {
                  if (parseFloat(tp[n]) == 0) {
                    value = error.d;
                  } else {
                    value = luckysheet_calcADPMM(fp[m][n], sp, tp[n]);
                  }
                } else {
                  value = error.v;
                }
                rowArr.push(value);
              }
              result.push(rowArr);
            }
          } else if (fp[0].length == 1) {
            let rowlen = fp.length;
            let collen = tp.length;
            for (let m = 0; m < rowlen; m++) {
              let rowArr = [];
              for (let n = 0; n < collen; n++) {
                fp[m][0] = booleanToNum(fp[m][0]);
                tp[n] = booleanToNum(tp[n]);
                let value;
                if (isRealNum(fp[m][0]) && isRealNum(tp[n])) {
                  if (parseFloat(tp[n]) == 0) {
                    value = error.d;
                  } else {
                    value = luckysheet_calcADPMM(fp[m][0], sp, tp[n]);
                  }
                } else {
                  value = error.v;
                }
                rowArr.push(value);
              }
              result.push(rowArr);
            }
          } else {
            return error.na;
          }
        } else if (getObjType(tp[0]) == "array") {
          if (tp[0].length == fp.length) {
            for (let m = 0; m < tp.length; m++) {
              let rowArr = [];
              for (let n = 0; n < tp[m].length; n++) {
                fp[n] = booleanToNum(fp[n]);
                tp[m][n] = booleanToNum(tp[m][n]);
                let value;
                if (isRealNum(fp[n]) && isRealNum(tp[m][n])) {
                  if (parseFloat(tp[m][n]) == 0) {
                    value = error.d;
                  } else {
                    value = luckysheet_calcADPMM(fp[n], sp, tp[m][n]);
                  }
                } else {
                  value = error.v;
                }
                rowArr.push(value);
              }
              result.push(rowArr);
            }
          } else if (tp[0].length == 1) {
            let rowlen = tp.length;
            let collen = fp.length;
            for (let m = 0; m < rowlen; m++) {
              let rowArr = [];
              for (let n = 0; n < collen; n++) {
                fp[n] = booleanToNum(fp[n]);
                tp[m][0] = booleanToNum(tp[m][0]);
                let value;
                if (isRealNum(fp[n]) && isRealNum(tp[m][0])) {
                  if (parseFloat(tp[m][0]) == 0) {
                    value = error.d;
                  } else {
                    value = luckysheet_calcADPMM(fp[n], sp, tp[m][0]);
                  }
                } else {
                  value = error.v;
                }
                rowArr.push(value);
              }
              result.push(rowArr);
            }
          } else {
            return error.na;
          }
        } else {
          if (fp.length != tp.length) {
            return error.na;
          }
          for (let n = 0; n < fp.length; n++) {
            fp[n] = booleanToNum(fp[n]);
            tp[n] = booleanToNum(tp[n]);
            let value;
            if (isRealNum(fp[n]) && isRealNum(tp[n])) {
              if (parseFloat(tp[n]) == 0) {
                value = error.d;
              } else {
                value = luckysheet_calcADPMM(fp[n], sp, tp[n]);
              }
            } else {
              value = error.v;
            }
            result.push(value);
          }
        }
        return result;
      } else if (getObjType(fp) == "array") {
        tp = booleanToNum(tp);
        let result = [];
        if (getObjType(fp[0]) == "array") {
          for (let m = 0; m < fp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < fp[m].length; n++) {
              fp[m][n] = booleanToNum(fp[m][n]);
              let value;
              if (isRealNum(fp[m][n]) && isRealNum(tp)) {
                if (parseFloat(tp) == 0) {
                  value = error.d;
                } else {
                  value = luckysheet_calcADPMM(fp[m][n], sp, tp);
                }
              } else {
                value = error.v;
              }
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else {
          for (let n = 0; n < fp.length; n++) {
            fp[n] = booleanToNum(fp[n]);
            let value;
            if (isRealNum(fp[n]) && isRealNum(tp)) {
              if (parseFloat(tp) == 0) {
                value = error.d;
              } else {
                value = luckysheet_calcADPMM(fp[n], sp, tp);
              }
            } else {
              value = error.v;
            }
            result.push(value);
          }
        }
        return result;
      } else if (getObjType(tp) == "array") {
        fp = booleanToNum(fp);
        let result = [];
        if (getObjType(tp[0]) == "array") {
          for (let m = 0; m < tp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < tp[m].length; n++) {
              tp[m][n] = booleanToNum(tp[m][n]);
              let value;
              if (isRealNum(fp) && isRealNum(tp[m][n])) {
                if (parseFloat(tp[m][n]) == 0) {
                  value = error.d;
                } else {
                  value = luckysheet_calcADPMM(fp, sp, tp[m][n]);
                }
              } else {
                value = error.v;
              }
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else {
          for (let n = 0; n < tp.length; n++) {
            tp[n] = booleanToNum(tp[n]);
            let value;
            if (isRealNum(fp) && isRealNum(tp[n])) {
              if (parseFloat(tp[n]) == 0) {
                value = error.d;
              } else {
                value = luckysheet_calcADPMM(fp, sp, tp[n]);
              }
            } else {
              value = error.v;
            }
            result.push(value);
          }
        }
        return result;
      } else {
        fp = booleanToNum(fp);
        tp = booleanToNum(tp);
        let result;
        if (isRealNum(fp) && isRealNum(tp)) {
          if (parseFloat(tp) == 0) {
            result = error.d;
          } else {
            result = luckysheet_calcADPMM(fp, sp, tp);
          }
        } else {
          result = error.v;
        }
        return result;
      }
    } else if (sp == "+" || sp == "-" || sp == "%") {
      if (getObjType(fp) == "array" && getObjType(tp) == "array") {
        let result = [];
        if (getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array") {
          if (fp.length != tp.length && fp[0].length != tp[0].length) {
            return error.na;
          }
          for (let m = 0; m < fp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < fp[m].length; n++) {
              fp[m][n] = booleanToNum(fp[m][n]);
              tp[m][n] = booleanToNum(tp[m][n]);
              let value;
              if (isRealNum(fp[m][n]) && isRealNum(tp[m][n])) {
                if (sp == "%" && parseFloat(tp[m][n]) == 0) {
                  value = error.d;
                } else {
                  value = luckysheet_calcADPMM(fp[m][n], sp, tp[m][n]);
                }
              } else {
                value = error.v;
              }
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else if (getObjType(fp[0]) == "array") {
          if (fp[0].length != tp.length) {
            return error.na;
          }
          for (let m = 0; m < fp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < fp[m].length; n++) {
              fp[m][n] = booleanToNum(fp[m][n]);
              tp[n] = booleanToNum(tp[n]);
              let value;
              if (isRealNum(fp[m][n]) && isRealNum(tp[n])) {
                if (sp == "%" && parseFloat(tp[n]) == 0) {
                  value = error.d;
                } else {
                  value = luckysheet_calcADPMM(fp[m][n], sp, tp[n]);
                }
              } else {
                value = error.v;
              }
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else if (getObjType(tp[0]) == "array") {
          if (tp[0].length != fp.length) {
            return error.na;
          }
          for (let m = 0; m < tp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < tp[m].length; n++) {
              fp[n] = booleanToNum(fp[n]);
              tp[m][n] = booleanToNum(tp[m][n]);
              let value;
              if (isRealNum(fp[n]) && isRealNum(tp[m][n])) {
                if (sp == "%" && parseFloat(tp[m][n]) == 0) {
                  value = error.d;
                } else {
                  value = luckysheet_calcADPMM(fp[n], sp, tp[m][n]);
                }
              } else {
                value = error.v;
              }
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else {
          if (fp.length != tp.length) {
            return error.na;
          }
          for (let n = 0; n < fp.length; n++) {
            fp[n] = booleanToNum(fp[n]);
            tp[n] = booleanToNum(tp[n]);
            let value;
            if (isRealNum(fp[n]) && isRealNum(tp[n])) {
              if (sp == "%" && parseFloat(tp[n]) == 0) {
                value = error.d;
              } else {
                value = luckysheet_calcADPMM(fp[n], sp, tp[n]);
              }
            } else {
              value = error.v;
            }
            result.push(value);
          }
        }
        return result;
      } else if (getObjType(fp) == "array") {
        tp = booleanToNum(tp);
        let result = [];
        if (getObjType(fp[0]) == "array") {
          for (let m = 0; m < fp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < fp[m].length; n++) {
              fp[m][n] = booleanToNum(fp[m][n]);
              let value;
              if (isRealNum(fp[m][n]) && isRealNum(tp)) {
                if (sp == "%" && parseFloat(tp) == 0) {
                  value = error.d;
                } else {
                  value = luckysheet_calcADPMM(fp[m][n], sp, tp);
                }
              } else {
                value = error.v;
              }
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else {
          for (let n = 0; n < fp.length; n++) {
            fp[n] = booleanToNum(fp[n]);
            let value;
            if (isRealNum(fp[n]) && isRealNum(tp)) {
              if (sp == "%" && parseFloat(tp) == 0) {
                value = error.d;
              } else {
                value = luckysheet_calcADPMM(fp[n], sp, tp);
              }
            } else {
              value = error.v;
            }
            result.push(value);
          }
        }
        return result;
      } else if (getObjType(tp) == "array") {
        fp = booleanToNum(fp);
        let result = [];
        if (getObjType(tp[0]) == "array") {
          for (let m = 0; m < tp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < tp[m].length; n++) {
              tp[m][n] = booleanToNum(tp[m][n]);
              let value;
              if (isRealNum(fp) && isRealNum(tp[m][n])) {
                if (sp == "%" && parseFloat(tp[m][n]) == 0) {
                  value = error.d;
                } else {
                  value = luckysheet_calcADPMM(fp, sp, tp[m][n]);
                }
              } else {
                value = error.v;
              }
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else {
          for (let n = 0; n < tp.length; n++) {
            tp[n] = booleanToNum(tp[n]);
            let value;
            if (isRealNum(fp) && isRealNum(tp[n])) {
              if (sp == "%" && parseFloat(tp[n]) == 0) {
                value = error.d;
              } else {
                value = luckysheet_calcADPMM(fp, sp, tp[n]);
              }
            } else {
              value = error.v;
            }
            result.push(value);
          }
        }
        return result;
      } else {
        fp = booleanToNum(fp);
        tp = booleanToNum(tp);
        let result;
        if (isRealNum(fp) && isRealNum(tp)) {
          if (sp == "%" && parseFloat(tp) == 0) {
            result = error.d;
          } else {
            result = luckysheet_calcADPMM(fp, sp, tp);
          }
        } else {
          result = error.v;
        }
        return result;
      }
    } else if (sp == "==" || sp == "!=" || sp == ">=" || sp == "<=" || sp == ">" || sp == "<") {
      if (getObjType(fp) == "array" && getObjType(tp) == "array") {
        let result = [];
        if (getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array") {
          if (fp.length != tp.length && fp[0].length != tp[0].length) {
            return error.na;
          }
          for (let m = 0; m < fp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < fp[m].length; n++) {
              let value = booleanOperation(fp[m][n], sp, tp[m][n]);
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else if (getObjType(fp[0]) == "array") {
          if (fp[0].length != tp.length) {
            return error.na;
          }
          for (let m = 0; m < fp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < fp[m].length; n++) {
              let value = booleanOperation(fp[m][n], sp, tp[n]);
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else if (getObjType(tp[0]) == "array") {
          if (tp[0].length != fp.length) {
            return error.na;
          }
          for (let m = 0; m < tp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < tp[m].length; n++) {
              let value = booleanOperation(fp[n], sp, tp[m][n]);
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else {
          if (fp.length != tp.length) {
            return error.na;
          }
          for (let n = 0; n < fp.length; n++) {
            let value = booleanOperation(fp[n], sp, tp[n]);
            result.push(value);
          }
        }
        return result;
      } else if (getObjType(fp) == "array") {
        let result = [];
        if (getObjType(fp[0]) == "array") {
          for (let m = 0; m < fp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < fp[m].length; n++) {
              let value = booleanOperation(fp[m][n], sp, tp);
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else {
          for (let n = 0; n < fp.length; n++) {
            let value = booleanOperation(fp[n], sp, tp);
            result.push(value);
          }
        }
        return result;
      } else if (getObjType(tp) == "array") {
        let result = [];
        if (getObjType(tp[0]) == "array") {
          for (let m = 0; m < tp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < tp[m].length; n++) {
              let value = booleanOperation(fp, sp, tp[m][n]);
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else {
          for (let n = 0; n < tp.length; n++) {
            let value = booleanOperation(fp, sp, tp[n]);
            result.push(value);
          }
        }
        return result;
      } else {
        return booleanOperation(fp, sp, tp);
      }
    } else if (sp == "&") {
      if (getObjType(fp) == "array" && getObjType(tp) == "array") {
        let result = [];
        if (getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array") {
          if (fp.length != tp.length && fp[0].length != tp[0].length) {
            return error.na;
          }
          for (let m = 0; m < fp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < fp[m].length; n++) {
              rowArr.push(fp[m][n] + "" + tp[m][n]);
            }
            result.push(rowArr);
          }
        } else if (getObjType(fp[0]) == "array") {
          if (fp[0].length != tp.length) {
            return error.na;
          }
          for (let m = 0; m < fp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < fp[m].length; n++) {
              rowArr.push(fp[m][n] + "" + tp[n]);
            }
            result.push(rowArr);
          }
        } else if (getObjType(tp[0]) == "array") {
          if (tp[0].length != fp.length) {
            return error.na;
          }
          for (let m = 0; m < tp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < tp[m].length; n++) {
              rowArr.push(fp[n] + "" + tp[m][n]);
            }
            result.push(rowArr);
          }
        } else {
          if (fp.length != tp.length) {
            return error.na;
          }
          for (let n = 0; n < fp.length; n++) {
            result.push(fp[n] + "" + tp[n]);
          }
        }
        return result;
      } else if (getObjType(fp) == "array") {
        let result = [];
        if (getObjType(fp[0]) == "array") {
          for (let m = 0; m < fp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < fp[m].length; n++) {
              rowArr.push(fp[m][n] + "" + tp);
            }
            result.push(rowArr);
          }
        } else {
          for (let n = 0; n < fp.length; n++) {
            result.push(fp[n] + "" + tp);
          }
        }
        return result;
      } else if (getObjType(tp) == "array") {
        let result = [];
        if (getObjType(tp[0]) == "array") {
          for (let m = 0; m < tp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < tp[m].length; n++) {
              rowArr.push(fp + "" + tp[m][n]);
            }
            result.push(rowArr);
          }
        } else {
          for (let n = 0; n < tp.length; n++) {
            result.push(fp + "" + tp[n]);
          }
        }
        return result;
      } else {
        return fp + "" + tp;
      }
    } else if (sp == "^") {
      if (getObjType(fp) == "array" && getObjType(tp) == "array") {
        let result = [];
        if (getObjType(fp[0]) == "array" && getObjType(tp[0]) == "array") {
          if (fp.length != tp.length && fp[0].length != tp[0].length) {
            return error.na;
          }
          for (let m = 0; m < fp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < fp[m].length; n++) {
              fp[m][n] = booleanToNum(fp[m][n]);
              tp[m][n] = booleanToNum(tp[m][n]);
              let value;
              if (isRealNum(fp[m][n]) && isRealNum(tp[m][n])) {
                value = Math.pow(parseFloat(fp[m][n]), parseFloat(tp[m][n]));
              } else {
                value = error.v;
              }
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else if (getObjType(fp[0]) == "array") {
          if (fp[0].length != tp.length) {
            return error.na;
          }
          for (let m = 0; m < fp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < fp[m].length; n++) {
              fp[m][n] = booleanToNum(fp[m][n]);
              tp[n] = booleanToNum(tp[n]);
              let value;
              if (isRealNum(fp[m][n]) && isRealNum(tp[n])) {
                value = Math.pow(parseFloat(fp[m][n]), parseFloat(tp[n]));
              } else {
                value = error.v;
              }
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else if (getObjType(tp[0]) == "array") {
          if (tp[0].length != fp.length) {
            return error.na;
          }
          for (let m = 0; m < tp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < tp[m].length; n++) {
              fp[n] = booleanToNum(fp[n]);
              tp[m][n] = booleanToNum(tp[m][n]);
              let value;
              if (isRealNum(fp[n]) && isRealNum(tp[m][n])) {
                value = Math.pow(parseFloat(fp[n]), parseFloat(tp[m][n]));
              } else {
                value = error.v;
              }
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else {
          if (fp.length != tp.length) {
            return error.na;
          }
          for (let n = 0; n < fp.length; n++) {
            fp[n] = booleanToNum(fp[n]);
            tp[n] = booleanToNum(tp[n]);
            let value;
            if (isRealNum(fp[n]) && isRealNum(tp[n])) {
              value = Math.pow(parseFloat(fp[n]), parseFloat(tp[n]));
            } else {
              value = error.v;
            }
            result.push(value);
          }
        }
        return result;
      } else if (getObjType(fp) == "array") {
        tp = booleanToNum(tp);
        let result = [];
        if (getObjType(fp[0]) == "array") {
          for (let m = 0; m < fp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < fp[m].length; n++) {
              fp[m][n] = booleanToNum(fp[m][n]);
              let value;
              if (isRealNum(fp[m][n]) && isRealNum(tp)) {
                value = Math.pow(parseFloat(fp[m][n]), parseFloat(tp));
              } else {
                value = error.v;
              }
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else {
          for (let n = 0; n < fp.length; n++) {
            fp[n] = booleanToNum(fp[n]);
            let value;
            if (isRealNum(fp[n]) && isRealNum(tp)) {
              value = Math.pow(parseFloat(fp[n]), parseFloat(tp));
            } else {
              value = error.v;
            }
            result.push(value);
          }
        }
        return result;
      } else if (getObjType(tp) == "array") {
        fp = booleanToNum(fp);
        let result = [];
        if (getObjType(tp[0]) == "array") {
          for (let m = 0; m < tp.length; m++) {
            let rowArr = [];
            for (let n = 0; n < tp[m].length; n++) {
              tp[m][n] = booleanToNum(tp[m][n]);
              let value;
              if (isRealNum(fp) && isRealNum(tp[m][n])) {
                value = Math.pow(parseFloat(fp), parseFloat(tp[m][n]));
              } else {
                value = error.v;
              }
              rowArr.push(value);
            }
            result.push(rowArr);
          }
        } else {
          for (let n = 0; n < tp.length; n++) {
            tp[n] = booleanToNum(tp[n]);
            let value;
            if (isRealNum(fp) && isRealNum(tp[n])) {
              value = Math.pow(parseFloat(fp), parseFloat(tp[n]));
            } else {
              value = error.v;
            }
            result.push(value);
          }
        }
        return result;
      } else {
        fp = booleanToNum(fp);
        tp = booleanToNum(tp);
        let result;
        if (isRealNum(fp) && isRealNum(tp)) {
          result = Math.pow(parseFloat(fp), parseFloat(tp));
        } else {
          result = error.v;
        }
        return result;
      }
    }
  }
  function luckysheet_getarraydata() {
    let fp = arguments[0];
    fp = fp.replace("{", "").replace("}", "").replace(/\"/g, "");
    let arr = [];
    if (fp.indexOf(";") > -1) {
      arr = fp.split(";");
      for (let i2 = 0; i2 < arr.length; i2++) {
        arr[i2] = arr[i2].split(",");
      }
    } else {
      arr = fp.split(",");
    }
    return arr;
  }
  function luckysheet_calcADPMM(fp, sp, tp) {
    let value;
    if (sp == "+") {
      value = (0, import_numeral4.default)(fp).add(tp).value();
    } else if (sp == "-") {
      value = (0, import_numeral4.default)(fp).subtract(tp).value();
    } else if (sp == "%") {
      value = new Function("return " + parseFloat(fp) + sp + "(" + parseFloat(tp) + ")")();
    } else if (sp == "/") {
      value = (0, import_numeral4.default)(fp).divide(tp).value();
    } else if (sp == "*") {
      value = (0, import_numeral4.default)(fp).multiply(tp).value();
    }
    return value;
  }
  function luckysheet_getcelldata(txt) {
    if (window.luckysheet_getcelldata_cache == null) {
      window.luckysheet_getcelldata_cache = {};
    }
    if (txt in window.luckysheet_getcelldata_cache) {
      return window.luckysheet_getcelldata_cache[txt];
    }
    let luckysheetfile = getluckysheetfile();
    let val = txt.split("!");
    let sheettxt = "", rangetxt = "", sheetIndex = -1, sheetdata = null;
    if (val.length > 1) {
      sheettxt = val[0].replace(/''/g, "'");
      rangetxt = val[1];
      if (sheettxt.substr(0, 1) == "'" && sheettxt.substr(sheettxt.length - 1, 1) == "'") {
        sheettxt = sheettxt.substring(1, sheettxt.length - 1);
      }
      for (let i2 in luckysheetfile) {
        if (sheettxt == luckysheetfile[i2].name) {
          sheetIndex = luckysheetfile[i2].index;
          sheetdata = luckysheetfile[i2].data;
          break;
        }
      }
      if (sheetIndex == -1) {
        sheetIndex = 0;
      }
    } else {
      let index2 = getSheetIndex(store_default.calculateSheetIndex);
      sheettxt = luckysheetfile[index2].name;
      sheetIndex = luckysheetfile[index2].index;
      sheetdata = luckysheetfile[index2].data;
      rangetxt = val[0];
    }
    if (rangetxt.indexOf(":") == -1) {
      let row = parseInt(rangetxt.replace(/[^0-9]/g, "")) - 1;
      let col = ABCatNum(rangetxt.replace(/[^A-Za-z]/g, ""));
      if (!isNaN(row) && !isNaN(col)) {
        let ret = getdatabyselectionD(sheetdata, {
          "row": [row, row],
          "column": [col, col]
        })[0][0];
        if (formula_default.execFunctionGlobalData != null) {
          let ef = formula_default.execFunctionGlobalData[row + "_" + col + "_" + sheetIndex];
          if (ef != null) {
            ret = ef;
          }
        }
        let rowl = 1;
        let coll = 1;
        let retAll = {
          "sheetName": sheettxt,
          "startCell": rangetxt,
          "rowl": rowl,
          "coll": coll,
          "data": ret
        };
        window.luckysheet_getcelldata_cache[txt] = retAll;
        return retAll;
      } else {
        return [];
      }
    } else {
      rangetxt = rangetxt.split(":");
      let row = [], col = [];
      row[0] = parseInt(rangetxt[0].replace(/[^0-9]/g, "")) - 1;
      row[1] = parseInt(rangetxt[1].replace(/[^0-9]/g, "")) - 1;
      if (isNaN(row[0])) {
        row[0] = 0;
      }
      if (isNaN(row[1])) {
        row[1] = sheetdata.length - 1;
      }
      if (row[0] > row[1]) {
        tooltip_default.info("\u9009\u62E9\u5931\u8D25", "\u8F93\u5165\u8303\u56F4\u9519\u8BEF\uFF01");
        return [];
      }
      col[0] = ABCatNum(rangetxt[0].replace(/[^A-Za-z]/g, ""));
      col[1] = ABCatNum(rangetxt[1].replace(/[^A-Za-z]/g, ""));
      if (isNaN(col[0])) {
        col[0] = 0;
      }
      if (isNaN(col[1])) {
        col[1] = sheetdata[0].length - 1;
      }
      if (col[0] > col[1]) {
        tooltip_default.info("\u9009\u62E9\u5931\u8D25", "\u8F93\u5165\u8303\u56F4\u9519\u8BEF\uFF01");
        return [];
      }
      let ret = getdatabyselectionD(sheetdata, {
        "row": row,
        "column": col
      });
      if (formula_default.execFunctionGlobalData != null) {
        for (let r2 = row[0]; r2 <= row[1]; r2++) {
          for (let c2 = col[0]; c2 <= col[1]; c2++) {
            let ef = formula_default.execFunctionGlobalData[r2 + "_" + c2 + "_" + sheetIndex];
            if (ef != null) {
              ret[r2 - row[0]][c2 - col[0]] = ef;
            }
          }
        }
      }
      let rowl = row[1] - row[0] + 1;
      let coll = col[1] - col[0] + 1;
      let retAll = {
        "sheetName": sheettxt,
        "startCell": rangetxt[0],
        "rowl": rowl,
        "coll": coll,
        "data": ret
      };
      window.luckysheet_getcelldata_cache[txt] = retAll;
      return retAll;
    }
  }
  function luckysheet_parseData(value) {
    if (typeof value === "object") {
      if (value == null) {
        return "";
      } else if (Array.isArray(value)) {
        let v = genarate(value[0]);
        return v[2];
      } else {
        if (Array.isArray(value.data)) {
          return error.v;
        } else {
          if (value.data.v === void 0) {
            return "";
          } else {
            return value.data.v;
          }
        }
      }
    } else if (!formula_default.isCompareOperator(value).flag) {
      let v = genarate(value);
      return v[2];
    } else if (typeof value === "string" || typeof value === "number") {
      return value;
    }
    return error.v;
  }
  function luckysheet_getValue() {
    let args = arguments[0];
    for (let i2 = 0; i2 < args.length; i2++) {
      let value = args[i2];
      if (typeof value === "object") {
        if (value == null) {
          value = "";
        } else if (Array.isArray(value)) {
          let v = genarate(value[0]);
          value = v[2];
        } else {
          if (Array.isArray(value.data)) {
            value = value.data;
          } else {
            if (value.data.v === void 0) {
              value = "";
            } else {
              value = value.data.v;
            }
          }
        }
      } else if (!formula_default.isCompareOperator(value).flag) {
        let v = genarate(value);
        value = v[2];
      }
      args[i2] = value;
    }
  }
  function luckysheet_indirect_check() {
    let cellTxt = arguments[0];
    if (cellTxt == null || cellTxt.length == 0) {
      return null;
    }
    return cellTxt;
  }
  function luckysheet_indirect_check_return(txt) {
    return txt;
  }
  function luckysheet_offset_check() {
    if (!(getObjType(arguments[0]) == "object" && arguments[0].startCell != null)) {
      return formula_default.error.v;
    }
    var reference = arguments[0].startCell;
    var rows = func_methods_default.getFirstValue(arguments[1]);
    if (valueIsError(rows)) {
      return rows;
    }
    if (!isRealNum(rows)) {
      return formula_default.error.v;
    }
    rows = parseInt(rows);
    var cols = func_methods_default.getFirstValue(arguments[2]);
    if (valueIsError(cols)) {
      return cols;
    }
    if (!isRealNum(cols)) {
      return formula_default.error.v;
    }
    cols = parseInt(cols);
    var height = arguments[0].rowl;
    if (arguments.length >= 4) {
      height = func_methods_default.getFirstValue(arguments[3]);
      if (valueIsError(height)) {
        return height;
      }
      if (!isRealNum(height)) {
        return formula_default.error.v;
      }
      height = parseInt(height);
    }
    var width = arguments[0].coll;
    if (arguments.length == 5) {
      width = func_methods_default.getFirstValue(arguments[4]);
      if (valueIsError(width)) {
        return width;
      }
      if (!isRealNum(width)) {
        return formula_default.error.v;
      }
      width = parseInt(width);
    }
    if (height < 1 || width < 1) {
      return formula_default.error.r;
    }
    var cellrange = formula_default.getcellrange(reference);
    var cellRow0 = cellrange["row"][0];
    var cellCol0 = cellrange["column"][0];
    cellRow0 += rows;
    cellCol0 += cols;
    var cellRow1 = cellRow0 + height - 1;
    var cellCol1 = cellCol0 + width - 1;
    if (cellRow0 < 0 || cellRow1 >= store_default.flowdata.length || cellCol0 < 0 || cellCol1 >= store_default.flowdata[0].length) {
      return formula_default.error.r;
    }
    return getRangetxt(store_default.calculateSheetIndex, {
      row: [cellRow0, cellRow1],
      column: [cellCol0, cellCol1]
    });
  }
  function luckysheet_getSpecialReference(isCellFirst, param1, param2) {
    let functionRange, rangeTxt;
    if (isCellFirst) {
      rangeTxt = param1;
      functionRange = param2;
    } else {
      functionRange = param1;
      rangeTxt = param2;
    }
    if (functionRange.startCell.indexOf(":") > -1 || rangeTxt.indexOf(":") > -1) {
      return error.v;
    }
    if (isCellFirst) {
      return luckysheet_getcelldata(rangeTxt + ":" + functionRange.startCell);
    } else {
      let rangeT = rangeTxt, sheetName = "";
      if (rangeTxt.indexOf("!") > -1) {
        let rangetxtArr = rangeTxt.split("!");
        sheetName = rangetxtArr[0] + "!";
        rangeT = rangetxtArr[1];
      }
      return luckysheet_getcelldata(sheetName + functionRange.startCell + ":" + rangeT);
    }
  }
  var import_numeral4;
  var init_func = __esm({
    "src/function/func.js"() {
      init_func_methods();
      init_formula();
      init_tooltip();
      init_validate();
      init_getdata();
      init_format();
      init_matrix_methods();
      init_get();
      init_util();
      init_store();
      import_numeral4 = __toModule(require_numeral());
    }
  });

  // src/expendPlugins/chart/plugin.js
  function chart(data, isDemo2) {
    loadLinks(dependLinks);
    seriesLoadScripts(dependScripts, null, function() {
      const store = new Vuex.Store();
      console.info("chartmix::", chartmix.default);
      Vue.use(chartmix.default, {store});
      let outDom = document.getElementsByTagName("body")[0];
      chartmix.default.initChart(outDom, store_default.lang);
      $(".chartSetting").css({
        top: "1px",
        bottom: "1px",
        position: "absolute",
        right: "0px",
        width: "350px",
        background: "#fff",
        border: "1px solid #E5E5E5",
        "z-index": 1004,
        "box-shadow": "0px 2px 4px rgba(0,0,0,0.2)",
        "-webkit-box-shadow": "0px 2px 4px rgba(0,0,0,0.2)",
        "-moz-box-shadow": "0px 2px 4px rgba(0,0,0,0.2)",
        "-moz-user-select": "none",
        "-khtml-user-select": "none",
        "-webkit-user-select": "none",
        "-ms-user-select": "none",
        "user-select": "none",
        "padding-left": "30px",
        display: "none"
      });
      store_default.createChart = chartmix.default.createChart;
      store_default.highlightChart = chartmix.default.highlightChart;
      store_default.deleteChart = chartmix.default.deleteChart;
      store_default.resizeChart = chartmix.default.resizeChart;
      store_default.changeChartRange = chartmix.default.changeChartRange;
      store_default.changeChartCellData = chartmix.default.changeChartCellData;
      store_default.getChartJson = chartmix.default.getChartJson;
      store_default.chart_selection = chart_selection();
      store_default.chartparam.jfrefreshchartall = jfrefreshchartall;
      store_default.chartparam.changeChartCellData = chartmix.default.changeChartCellData;
      store_default.chartparam.renderChart = chartmix.default.renderChart;
      store_default.chartparam.getChartJson = chartmix.default.getChartJson;
      store_default.chartparam.insertToStore = chartmix.default.insertToStore;
      for (let i2 = 0; i2 < data.length; i2++) {
        renderCharts(data[i2].chart, isDemo2);
      }
      for (let i2 = 0; i2 < data.length; i2++) {
        if (data[i2].status == "1") {
          renderChartShow(data[i2].index);
        }
      }
      arrayRemoveItem(store_default.asyncLoad, "chart");
    });
  }
  function renderCharts(chartLists, isDemo2) {
    if (chartLists == void 0) {
      return;
    }
    for (let i2 = 0; i2 < chartLists.length; i2++) {
      let chart2 = chartLists[i2];
      if (isDemo2) {
        store_default.chartparam.insertToStore({chart_id: chart2.chart_id, chartOptions: chart2.chartOptions});
      }
      let chart_id = chart2.chart_id;
      let chart_id_c = chart_id + "_c";
      let modelChartShowHTML = '<div id="${id}"class="luckysheet-modal-dialog luckysheet-modal-dialog-chart ${addclass}"tabindex="0"role="dialog"aria-labelledby=":41e"dir="ltr"><div class="luckysheet-modal-dialog-resize"><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-lt"data-type="lt"></div><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-mt"data-type="mt"></div><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-lm"data-type="lm"></div><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-rm"data-type="rm"></div><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-rt"data-type="rt"></div><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-lb"data-type="lb"></div><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-mb"data-type="mb"></div><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-rb"data-type="rb"></div></div><div class="luckysheet-modal-dialog-controll"><span class="luckysheet-modal-controll-btn luckysheet-modal-controll-update"role="button"tabindex="0"aria-label="\u4FEE\u6539\u56FE\u8868"title="\u4FEE\u6539\u56FE\u8868"><i class="fa fa-pencil"aria-hidden="true"></i></span><span class="luckysheet-modal-controll-btn luckysheet-modal-controll-max"role="butluckysheet_chartIns_indexton"tabindex="0"aria-label="\u6700\u5927\u5316"title="\u6700\u5927\u5316"><i class="fa fa-window-maximize"aria-hidden="true"></i></span><span class="luckysheet-modal-controll-btn luckysheet-modal-controll-del"role="button"tabindex="0"aria-label="\u5220\u9664"title="\u5220\u9664"><i class="fa fa-trash"aria-hidden="true"></i></span></div><div class="luckysheet-modal-dialog-content">${content}</div></div>';
      let $t = $(replaceHtml2(modelChartShowHTML, {
        id: chart_id_c,
        addclass: "luckysheet-data-visualization-chart",
        title: "\u56FE\u8868\u751F\u6210",
        content: ""
      })).appendTo($(".luckysheet-cell-main"));
      setChartMoveableEffect($t);
      $(`#${chart_id_c}`).children(".luckysheet-modal-dialog-content")[0].id = chart_id;
      let container2 = document.getElementById(chart_id_c);
      let chart_json;
      chart_json = store_default.chartparam.getChartJson(chart2.chart_id);
      store_default.chartparam.renderChart({chart_id: chart2.chart_id, chartOptions: chart_json});
      store_default.currentChart = chart_json;
      showNeedRangeShow(chart_id);
      $(`#${chart_id}_c .luckysheet-modal-controll-del`).click(function(e) {
        delChart(chart_id);
      });
      $(`#${chart_id}_c .luckysheet-modal-controll-update`).click(function(e) {
        showChartSettingComponent();
      });
      $t.children(".luckysheet-modal-dialog-content").mousedown(function(e) {
        if (!store_default.chartparam.luckysheetCurrentChartMaxState) {
          showNeedRangeShow(chart_id);
        }
        e.stopPropagation();
      });
      $t.mousedown(function(e) {
        if (!store_default.chartparam.luckysheetCurrentChartMaxState) {
          showNeedRangeShow(chart_id);
          setluckysheet_scroll_status(true);
          if (!$(e.target).is(".luckysheet-modal-dialog-controll") && !$(e.target).is(".luckysheet-modal-controll-btn") && !$(e.target).is("i")) {
            store_default.chartparam.luckysheetCurrentChartMoveTimeout = setTimeout(function() {
              store_default.chartparam.luckysheetCurrentChartMove = true;
            }, 100);
          }
          var toffset = store_default.chartparam.luckysheetCurrentChartMoveObj.offset();
          var tpsition = store_default.chartparam.luckysheetCurrentChartMoveObj.position();
          store_default.chartparam.luckysheetCurrentChartMoveXy = [
            e.pageX - toffset.left,
            e.pageY - toffset.top,
            tpsition.left,
            tpsition.top,
            $("#luckysheet-scrollbar-x").scrollLeft(),
            $("#luckysheet-scrollbar-y").scrollTop()
          ];
          store_default.chartparam.luckysheetCurrentChartMoveWinH = $("#luckysheet-cell-main")[0].scrollHeight;
          store_default.chartparam.luckysheetCurrentChartMoveWinW = $("#luckysheet-cell-main")[0].scrollWidth;
          if (!$(e.target).hasClass("luckysheet-mousedown-cancel") && $(e.target).filter("[class*='sp-palette']").length == 0 && $(e.target).filter("[class*='sp-thumb']").length == 0 && $(e.target).filter("[class*='sp-']").length == 0) {
            $("#luckysheet-rightclick-menu").hide();
            $("#luckysheet-cols-h-hover").hide();
            $("#luckysheet-cols-menu-btn").hide();
            $("#luckysheet-rightclick-menu").hide();
            $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu, #luckysheet-user-menu").hide();
            $("body > .luckysheet-filter-menu, body > .luckysheet-filter-submenu, body > .luckysheet-cols-menu").hide();
          }
          e.stopPropagation();
        }
      }).find(".luckysheet-modal-dialog-resize-item").mousedown(function(e) {
        if (store_default.chartparam.luckysheetCurrentChartActive) {
          store_default.chartparam.luckysheetCurrentChartResize = $(this).data("type");
          var mouse = mouseposition(e.pageX, e.pageY), scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft(), scrollTop = $("#luckysheet-scrollbar-y").scrollTop();
          var x = mouse[0] + scrollLeft;
          var y = mouse[1] + scrollTop;
          var position = store_default.chartparam.luckysheetCurrentChartResizeObj.position();
          store_default.chartparam.luckysheetCurrentChartResizeXy = [
            x,
            y,
            $t.width(),
            $t.height(),
            position.left + scrollLeft,
            position.top + scrollTop,
            scrollLeft,
            scrollTop
          ];
          store_default.chartparam.luckysheetCurrentChartResizeWinH = $("#luckysheet-cell-main")[0].scrollHeight;
          store_default.chartparam.luckysheetCurrentChartResizeWinW = $("#luckysheet-cell-main")[0].scrollWidth;
          store_default.chartparam.luckysheetCurrentChart = chart_id;
          e.stopPropagation();
        }
      });
      let width = chart2.width;
      let height = chart2.height;
      let left = chart2.left;
      let top = chart2.top;
      container2.style.width = width + "px";
      container2.style.height = height + "px";
      container2.style.position = "absolute";
      container2.style.background = "#fff";
      container2.style.left = left + "px";
      container2.style.top = top + "px";
      container2.style.zIndex = store_default.zIndex ? store_default.zIndex : 15;
      store_default.zIndex++;
    }
  }
  function jfrefreshchartall(flowdata1, r_st, r_ed, c_st, c_ed) {
    let chart2 = store_default.currentChart;
    if (!chart2) {
      return;
    }
    if (chart2.rangeArray.length == 1) {
      var row = chart2.rangeArray[0].row;
      var column = chart2.rangeArray[0].column;
      if (r_st > row[1] || r_ed < row[0] || c_st > column[1] || c_ed < column[0]) {
        return;
      }
      var luckysheetgetcellrange = formula_default.getcellrange(chart2.rangeTxt);
      var sheetIndex = luckysheetgetcellrange.sheetIndex == -1 ? 0 : luckysheetgetcellrange.sheetIndex;
      var selection2 = {
        row: luckysheetgetcellrange.row,
        column: luckysheetgetcellrange.column,
        dataSheetIndex: sheetIndex
      };
      var getcelldata = luckysheet_getcelldata(chart2.rangeTxt);
      if (typeof getcelldata === "object" && getcelldata.length != 0 && getcelldata.data.length != null) {
        var chartData = getcelldata.data;
        store_default.chartparam.changeChartCellData(chart2.chart_id, chartData);
      }
    }
  }
  function chart_selection() {
    return {
      create: function() {
        var chart_json = store_default.currentChart;
        if (chart_json.rangeArray.length > 1) {
          return;
        }
        $("#luckysheet-chart-rangeShow").empty();
        $("#luckysheet-cell-selected-boxs").hide();
        $("#luckysheet-cell-selected-focus").hide();
        $("#luckysheet-rows-h-selected").empty();
        $("#luckysheet-cols-h-selected").empty();
        $("#luckysheet-row-count-show").hide();
        $("#luckysheet-column-count-show").hide();
        var st_r = chart_json.rangeArray[0].row[0];
        var st_c = chart_json.rangeArray[0].column[0];
        var rangeSplitArray = chart_json.rangeSplitArray;
        var rangeRowCheck = chart_json.rangeRowCheck;
        if (rangeRowCheck.exits) {
          var chart_rowtitle_html = getRangeShowHtml("rowtitle", rangeSplitArray.rowtitle.row[0] + st_r, rangeSplitArray.rowtitle.row[1] + st_r, rangeSplitArray.rowtitle.column[0] + st_c, rangeSplitArray.rowtitle.column[1] + st_c);
        } else {
          var chart_rowtitle_html = "";
        }
        var rangeColCheck = chart_json.rangeColCheck;
        if (rangeColCheck.exits) {
          var chart_coltitle_html = getRangeShowHtml("coltitle", rangeSplitArray.coltitle.row[0] + st_r, rangeSplitArray.coltitle.row[1] + st_r, rangeSplitArray.coltitle.column[0] + st_c, rangeSplitArray.coltitle.column[1] + st_c);
        } else {
          var chart_coltitle_html = "";
        }
        var chart_content_html = getRangeShowHtml("content", rangeSplitArray.content.row[0] + st_r, rangeSplitArray.content.row[1] + st_r, rangeSplitArray.content.column[0] + st_c, rangeSplitArray.content.column[1] + st_c);
        $("#luckysheet-chart-rangeShow").append(chart_rowtitle_html + chart_coltitle_html + chart_content_html);
        function getRangeShowHtml(type, r1, r2, c1, c2) {
          var visibledatarow = getvisibledatarow();
          var visibledatacolumn = getvisibledatacolumn();
          var row = visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : visibledatarow[r1 - 1];
          var col = visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : visibledatacolumn[c1 - 1];
          if (type == "rowtitle") {
            var color = "#C65151";
          }
          if (type == "coltitle") {
            var color = "#9667C0";
          }
          if (type == "content") {
            var color = "#4970D1";
          }
          var html = '<div id="luckysheet-chart-rangeShow-' + type + '" style="left: ' + col_pre + "px;width: " + (col - col_pre - 1) + "px;top: " + row_pre + "px;height: " + (row - row_pre - 1) + 'px;border: none;margin: 0;position: absolute;z-index: 14;"><div class="luckysheet-chart-rangeShow-move" data-type="top" style="height: 2px;border-top: 2px solid #fff;border-bottom: 2px solid #fff;background: ' + color + ';position: absolute;left: 0;right: 0;top: -2px;z-index: 18;opacity: 0.9;cursor: move;"></div><div class="luckysheet-chart-rangeShow-move" data-type="right" style="width: 2px;border-left: 2px solid #fff;border-right: 2px solid #fff;background: ' + color + ';position: absolute;top: 0;bottom: 0;right: -2px;z-index: 18;opacity: 0.9;cursor: move;"></div><div class="luckysheet-chart-rangeShow-move" data-type="bottom" style="height: 2px;border-top: 2px solid #fff;border-bottom: 2px solid #fff;background: ' + color + ';position: absolute;left: 0;right: 0;bottom: -2px;z-index: 18;opacity: 0.9;cursor: move;"></div><div class="luckysheet-chart-rangeShow-move" data-type="left" style="width: 2px;border-left: 2px solid #fff;border-right: 2px solid #fff;background: ' + color + ';position: absolute;top: 0;bottom: 0;left: -2px;z-index: 18;opacity: 0.9;cursor: move;"></div><div style="border: 2px solid #85c0fc;background: ' + color + ';position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 15;opacity: 0.1;"></div><div class="luckysheet-chart-rangeShow-resize" data-type="lt" style="width: 6px;height: 6px;border: 1px solid #fff;background: ' + color + ';position: absolute;left: -3px;top: -3px;z-index: 19;cursor: se-resize;"></div><div class="luckysheet-chart-rangeShow-resize" data-type="rt" style="width: 6px;height: 6px;border: 1px solid #fff;background: ' + color + ';position: absolute;right: -3px;top: -3px;z-index: 19;cursor: ne-resize;"></div><div class="luckysheet-chart-rangeShow-resize" data-type="lb" style="width: 6px;height: 6px;border: 1px solid #fff;background: ' + color + ';position: absolute;left: -3px;bottom: -3px;z-index: 19;cursor: ne-resize;"></div><div class="luckysheet-chart-rangeShow-resize" data-type="rb" style="width: 6px;height: 6px;border: 1px solid #fff;background: ' + color + ';position: absolute;right: -3px;bottom: -3px;z-index: 19;cursor: se-resize;"></div></div>';
          return html;
        }
      },
      rangeMove: false,
      rangeMovexy: null,
      rangeMoveIndex: null,
      rangeMoveObj: null,
      rangeMoveDraging: function(event2, sheetBarHeight, statisticBarHeight) {
        var chart_json = store_default.currentChart;
        var st_r = chart_json.rangeArray[0].row[0];
        var st_c = chart_json.rangeArray[0].column[0];
        var rangeRowCheck = chart_json.rangeRowCheck;
        var rangeColCheck = chart_json.rangeColCheck;
        var rangeSplitArray = chart_json.rangeSplitArray;
        var mouse = mouseposition(event2.pageX, event2.pageY);
        var scrollLeft = $("#luckysheet-cell-main").scrollLeft();
        var scrollTop = $("#luckysheet-cell-main").scrollTop();
        var x = mouse[0] + scrollLeft;
        var y = mouse[1] + scrollTop;
        var winH = $(window).height() + scrollTop - sheetBarHeight - statisticBarHeight, winW = $(window).width() + scrollLeft;
        var rowLocation2 = _rowLocation(y), row_index = rowLocation2[2];
        var colLocation2 = _colLocation(x), col_index = colLocation2[2];
        var visibledatarow = getvisibledatarow();
        var visibledatacolumn = getvisibledatacolumn();
        var $id = store_default.chart_selection.rangeMoveObj.attr("id");
        if ($id == "luckysheet-chart-rangeShow-content") {
          var row_s = store_default.chart_selection.rangeMoveIndex[0] - store_default.chart_selection.rangeMovexy[0] + row_index;
          if (rangeRowCheck.exits) {
            if (row_s < st_r + rangeRowCheck.range[1] + 1 || y < 0) {
              row_s = st_r + rangeRowCheck.range[1] + 1;
            }
          } else {
            if (row_s < 0 || y < 0) {
              row_s = 0;
            }
          }
          var row_e = rangeSplitArray.content.row[1] - rangeSplitArray.content.row[0] + row_s;
          if (row_e >= visibledatarow.length - 1 || y > winH) {
            row_s = visibledatarow.length - 1 - rangeSplitArray.content.row[1] + rangeSplitArray.content.row[0];
            row_e = visibledatarow.length - 1;
          }
          var col_s = store_default.chart_selection.rangeMoveIndex[1] - store_default.chart_selection.rangeMovexy[1] + col_index;
          if (rangeColCheck.exits) {
            if (col_s < st_c + rangeColCheck.range[1] + 1 || x < 0) {
              col_s = st_c + rangeColCheck.range[1] + 1;
            }
          } else {
            if (col_s < 0 || x < 0) {
              col_s = 0;
            }
          }
          var col_e = rangeSplitArray.content.column[1] - rangeSplitArray.content.column[0] + col_s;
          if (col_e >= visibledatacolumn.length - 1 || x > winW) {
            col_s = visibledatacolumn.length - 1 - rangeSplitArray.content.column[1] + rangeSplitArray.content.column[0];
            col_e = visibledatacolumn.length - 1;
          }
          if (rangeRowCheck.exits && rangeColCheck.exits) {
            chart_json.rangeArray = [{row: [st_r, row_e], column: [st_c, col_e]}];
            chart_json.rangeSplitArray.range = {
              row: [st_r, row_e],
              column: [st_c, col_e]
            };
            chart_json.rangeSplitArray.content = {
              row: [row_s - st_r, row_e - st_r],
              column: [col_s - st_c, col_e - st_c]
            };
            chart_json.rangeSplitArray.rowtitle = {
              row: chart_json.rangeSplitArray.rowtitle.row,
              column: [col_s - st_c, col_e - st_c]
            };
            chart_json.rangeSplitArray.coltitle = {
              row: [row_s - st_r, row_e - st_r],
              column: chart_json.rangeSplitArray.coltitle.column
            };
          } else if (rangeRowCheck.exits) {
            chart_json.rangeArray = [{row: [st_r, row_e], column: [col_s, col_e]}];
            chart_json.rangeSplitArray.range = {
              row: [st_r, row_e],
              column: [col_s, col_e]
            };
            chart_json.rangeSplitArray.content = {
              row: [row_s - st_r, row_e - st_r],
              column: chart_json.rangeSplitArray.content.column
            };
          } else if (rangeColCheck.exits) {
            chart_json.rangeArray = [{row: [row_s, row_e], column: [st_c, col_e]}];
            chart_json.rangeSplitArray.range = {
              row: [row_s, row_e],
              column: [st_c, col_e]
            };
            chart_json.rangeSplitArray.content = {
              row: chart_json.rangeSplitArray.content.row,
              column: [col_s - st_c, col_e - st_c]
            };
          } else {
            chart_json.rangeArray = [
              {row: [row_s, row_e], column: [col_s, col_e]}
            ];
            chart_json.rangeSplitArray.range = {
              row: [row_s, row_e],
              column: [col_s, col_e]
            };
          }
        } else if ($id == "luckysheet-chart-rangeShow-rowtitle") {
          var col_s = store_default.chart_selection.rangeMoveIndex[1] - store_default.chart_selection.rangeMovexy[1] + col_index;
          if (rangeColCheck.exits) {
            if (col_s < st_c + rangeColCheck.range[1] + 1 || x < 0) {
              col_s = st_c + rangeColCheck.range[1] + 1;
            }
          } else {
            if (col_s < 0 || x < 0) {
              col_s = 0;
            }
          }
          var col_e = rangeSplitArray.rowtitle.column[1] - rangeSplitArray.rowtitle.column[0] + col_s;
          if (col_e >= visibledatacolumn.length - 1 || x > winW) {
            col_s = visibledatacolumn.length - 1 - rangeSplitArray.rowtitle.column[1] + rangeSplitArray.rowtitle.column[0];
            col_e = visibledatacolumn.length - 1;
          }
          if (rangeColCheck.exits) {
            chart_json.rangeArray = [
              {row: chart_json.rangeArray[0].row, column: [st_c, col_e]}
            ];
            chart_json.rangeSplitArray.range = {
              row: chart_json.rangeArray[0].row,
              column: [st_c, col_e]
            };
            chart_json.rangeSplitArray.rowtitle = {
              row: chart_json.rangeSplitArray.rowtitle.row,
              column: [col_s - st_c, col_e - st_c]
            };
            chart_json.rangeSplitArray.content = {
              row: chart_json.rangeSplitArray.content.row,
              column: [col_s - st_c, col_e - st_c]
            };
          } else {
            chart_json.rangeArray = [
              {row: chart_json.rangeArray[0].row, column: [col_s, col_e]}
            ];
            chart_json.rangeSplitArray.range = {
              row: chart_json.rangeArray[0].row,
              column: [col_s, col_e]
            };
          }
        } else if ($id == "luckysheet-chart-rangeShow-coltitle") {
          var row_s = store_default.chart_selection.rangeMoveIndex[0] - store_default.chart_selection.rangeMovexy[0] + row_index;
          if (rangeRowCheck.exits) {
            if (row_s < st_r + rangeRowCheck.range[1] + 1 || y < 0) {
              row_s = st_r + rangeRowCheck.range[1] + 1;
            }
          } else {
            if (row_s < 0 || y < 0) {
              row_s = 0;
            }
          }
          var row_e = rangeSplitArray.coltitle.row[1] - rangeSplitArray.coltitle.row[0] + row_s;
          if (row_e >= visibledatarow.length - 1 || y > winH) {
            row_s = visibledatarow.length - 1 - rangeSplitArray.coltitle.row[1] + rangeSplitArray.coltitle.row[0];
            row_e = visibledatarow.length - 1;
          }
          if (rangeRowCheck.exits) {
            chart_json.rangeArray = [
              {row: [st_r, row_e], column: chart_json.rangeArray[0].column}
            ];
            chart_json.rangeSplitArray.range = {
              row: [st_r, row_e],
              column: chart_json.rangeArray[0].column
            };
            chart_json.rangeSplitArray.coltitle = {
              row: [row_s - st_r, row_e - st_r],
              column: chart_json.rangeSplitArray.coltitle.column
            };
            chart_json.rangeSplitArray.content = {
              row: [row_s - st_r, row_e - st_r],
              column: chart_json.rangeSplitArray.content.column
            };
          } else {
            chart_json.rangeArray = [
              {row: [row_s, row_e], column: chart_json.rangeArray[0].column}
            ];
            chart_json.rangeSplitArray.range = {
              row: [row_s, row_e],
              column: chart_json.rangeArray[0].column
            };
          }
        }
        store_default.chart_selection.create();
      },
      rangeMoveDragged: function() {
        store_default.chart_selection.rangeMove = false;
        var updateJson = store_default.currentChart;
        updateJson.rangeTxt = getRangetxt(store_default.currentSheetIndex, updateJson.rangeArray[0], store_default.currentSheetIndex);
        updateJson.chartData = getdatabyselection(updateJson.rangeArray[0], store_default.currentSheetIndex);
        store_default.changeChartRange(updateJson.chart_id, updateJson.chartData, updateJson.rangeArray, updateJson.rangeTxt);
      },
      rangeResize: false,
      rangeResizexy: null,
      rangeResizeIndex: null,
      rangeResizeObj: null,
      rangeResizeDraging: function(event2, sheetBarHeight, statisticBarHeight) {
        var chart_json = store_default.currentChart;
        var st_r = chart_json.rangeArray[0].row[0];
        var st_c = chart_json.rangeArray[0].column[0];
        var rangeRowCheck = chart_json.rangeRowCheck;
        var rangeColCheck = chart_json.rangeColCheck;
        var rangeSplitArray = chart_json.rangeSplitArray;
        var mouse = mouseposition(event2.pageX, event2.pageY);
        var scrollLeft = $("#luckysheet-cell-main").scrollLeft();
        var scrollTop = $("#luckysheet-cell-main").scrollTop();
        var x = mouse[0] + scrollLeft;
        var y = mouse[1] + scrollTop;
        var winH = $(window).height() + scrollTop - sheetBarHeight - statisticBarHeight, winW = $(window).width() + scrollLeft;
        var rowLocation2 = _rowLocation(y), row_index = rowLocation2[2];
        var colLocation2 = _colLocation(x), col_index = colLocation2[2];
        var visibledatarow = getvisibledatarow();
        var visibledatacolumn = getvisibledatacolumn();
        var $id = store_default.chart_selection.rangeResizeObj.attr("id");
        if ($id == "luckysheet-chart-rangeShow-content") {
          var r1, r2, c1, c2;
          if (store_default.chart_selection.rangeResize == "lt") {
            r1 = store_default.chart_selection.rangeResizeIndex.row[0];
            c1 = store_default.chart_selection.rangeResizeIndex.column[0];
            r2 = store_default.chart_selection.rangeResizeIndex.row[1];
            c2 = store_default.chart_selection.rangeResizeIndex.column[1];
          } else if (store_default.chart_selection.rangeResize == "lb") {
            r1 = store_default.chart_selection.rangeResizeIndex.row[1];
            c1 = store_default.chart_selection.rangeResizeIndex.column[0];
            r2 = store_default.chart_selection.rangeResizeIndex.row[0];
            c2 = store_default.chart_selection.rangeResizeIndex.column[1];
          } else if (store_default.chart_selection.rangeResize == "rt") {
            r1 = store_default.chart_selection.rangeResizeIndex.row[0];
            c1 = store_default.chart_selection.rangeResizeIndex.column[1];
            r2 = store_default.chart_selection.rangeResizeIndex.row[1];
            c2 = store_default.chart_selection.rangeResizeIndex.column[0];
          } else if (store_default.chart_selection.rangeResize == "rb") {
            r1 = store_default.chart_selection.rangeResizeIndex.row[1];
            c1 = store_default.chart_selection.rangeResizeIndex.column[1];
            r2 = store_default.chart_selection.rangeResizeIndex.row[0];
            c2 = store_default.chart_selection.rangeResizeIndex.column[0];
          }
          if (rangeRowCheck.exits) {
            var row_s = r1 - store_default.chart_selection.rangeResizexy[0] + row_index;
            if (row_s < st_r + rangeRowCheck.range[1] + 1 || y < 0) {
              row_s = st_r + rangeRowCheck.range[1] + 1;
            } else if (row_s >= visibledatarow.length - 1 || y > winH) {
              row_s = visibledatarow.length - 1;
            }
          } else {
            var row_s = st_r - store_default.chart_selection.rangeResizexy[0] + row_index;
            if (row_s < 0 || y < 0) {
              row_s = 0;
            } else if (row_s >= visibledatarow.length - 1 || y > winH) {
              row_s = visibledatarow.length - 1;
            }
          }
          if (rangeColCheck.exits) {
            var col_s = c1 - store_default.chart_selection.rangeResizexy[1] + col_index;
            if (col_s < st_c + rangeColCheck.range[1] + 1 || x < 0) {
              col_s = st_c + rangeColCheck.range[1] + 1;
            } else if (col_s >= visibledatacolumn.length - 1 || x > winW) {
              col_s = visibledatacolumn.length - 1;
            }
          } else {
            var col_s = st_c - store_default.chart_selection.rangeResizexy[1] + col_index;
            if (col_s < 0 || x < 0) {
              col_s = 0;
            } else if (col_s >= visibledatacolumn.length - 1 || x > winW) {
              col_s = visibledatacolumn.length - 1;
            }
          }
          var obj_r1, obj_r2, obj_c1, obj_c2;
          if (row_s > r2) {
            obj_r1 = r2;
            obj_r2 = row_s;
          } else {
            obj_r1 = row_s;
            obj_r2 = r2;
          }
          if (col_s > c2) {
            obj_c1 = c2;
            obj_c2 = col_s;
          } else {
            obj_c1 = col_s;
            obj_c2 = c2;
          }
          if (!rangeRowCheck.exits && !rangeColCheck.exits) {
            chart_json.rangeArray = [
              {row: [obj_r1, obj_r2], column: [obj_c1, obj_c2]}
            ];
            chart_json.rangeSplitArray.range = {
              row: [obj_r1, obj_r2],
              column: [obj_c1, obj_c2]
            };
          } else {
            chart_json.rangeArray = [
              {row: [st_r, obj_r2], column: [st_c, obj_c2]}
            ];
            chart_json.rangeSplitArray.range = {
              row: [st_r, obj_r2],
              column: [st_c, obj_c2]
            };
            chart_json.rangeSplitArray.content = {
              row: [obj_r1 - st_r, obj_r2 - st_r],
              column: [obj_c1 - st_c, obj_c2 - st_c]
            };
            if (rangeRowCheck.exits) {
              chart_json.rangeSplitArray.rowtitle = {
                row: chart_json.rangeSplitArray.rowtitle.row,
                column: [obj_c1 - st_c, obj_c2 - st_c]
              };
            }
            if (rangeColCheck.exits) {
              chart_json.rangeSplitArray.coltitle = {
                row: [obj_r1 - st_r, obj_r2 - st_r],
                column: chart_json.rangeSplitArray.coltitle.column
              };
            }
          }
        } else if ($id == "luckysheet-chart-rangeShow-rowtitle") {
          var c1, c2;
          if (store_default.chart_selection.rangeResize == "lt" || store_default.chart_selection.rangeResize == "lb") {
            c1 = store_default.chart_selection.rangeResizeIndex.column[0];
            c2 = store_default.chart_selection.rangeResizeIndex.column[1];
          } else if (store_default.chart_selection.rangeResize == "rt" || store_default.chart_selection.rangeResize == "rb") {
            c1 = store_default.chart_selection.rangeResizeIndex.column[1];
            c2 = store_default.chart_selection.rangeResizeIndex.column[0];
          }
          if (rangeColCheck.exits) {
            var col_s = c1 - store_default.chart_selection.rangeResizexy[1] + col_index;
            if (col_s < st_c + rangeColCheck.range[1] + 1 || x < 0) {
              col_s = st_c + rangeColCheck.range[1] + 1;
            } else if (col_s >= visibledatacolumn.length - 1 || x > winW) {
              col_s = visibledatacolumn.length - 1;
            }
          } else {
            var col_s = st_c - store_default.chart_selection.rangeResizexy[1] + col_index;
            if (col_s < 0 || x < 0) {
              col_s = 0;
            } else if (col_s >= visibledatacolumn.length - 1 || x > winW) {
              col_s = visibledatacolumn.length - 1;
            }
          }
          var obj_c1, obj_c2;
          if (col_s > c2) {
            obj_c1 = c2;
            obj_c2 = col_s;
          } else {
            obj_c1 = col_s;
            obj_c2 = c2;
          }
          if (!rangeColCheck.exits) {
            chart_json.rangeArray = [
              {row: chart_json.rangeArray[0].row, column: [obj_c1, obj_c2]}
            ];
            chart_json.rangeSplitArray.range = {
              row: chart_json.rangeArray[0].row,
              column: [obj_c1, obj_c2]
            };
          } else {
            chart_json.rangeArray = [
              {row: chart_json.rangeArray[0].row, column: [st_c, obj_c2]}
            ];
            chart_json.rangeSplitArray.range = {
              row: chart_json.rangeArray[0].row,
              column: [st_c, obj_c2]
            };
            chart_json.rangeSplitArray.rowtitle = {
              row: chart_json.rangeSplitArray.rowtitle.row,
              column: [obj_c1 - st_c, obj_c2 - st_c]
            };
            chart_json.rangeSplitArray.content = {
              row: chart_json.rangeSplitArray.content.row,
              column: [obj_c1 - st_c, obj_c2 - st_c]
            };
          }
        } else if ($id == "luckysheet-chart-rangeShow-coltitle") {
          var r1, r2;
          if (store_default.chart_selection.rangeResize == "lt" || store_default.chart_selection.rangeResize == "rt") {
            r1 = store_default.chart_selection.rangeResizeIndex.row[0];
            r2 = store_default.chart_selection.rangeResizeIndex.row[1];
          } else if (store_default.chart_selection.rangeResize == "lb" || store_default.chart_selection.rangeResize == "rb") {
            r1 = store_default.chart_selection.rangeResizeIndex.row[1];
            r2 = store_default.chart_selection.rangeResizeIndex.row[0];
          }
          if (rangeRowCheck.exits) {
            var row_s = r1 - store_default.chart_selection.rangeResizexy[0] + row_index;
            if (row_s < st_r + rangeRowCheck.range[1] + 1 || y < 0) {
              row_s = st_r + rangeRowCheck.range[1] + 1;
            } else if (row_s >= visibledatarow.length - 1 || y > winH) {
              row_s = visibledatarow.length - 1;
            }
          } else {
            var row_s = st_r - store_default.chart_selection.rangeResizexy[0] + row_index;
            if (row_s < 0 || y < 0) {
              row_s = 0;
            } else if (row_s >= visibledatarow.length - 1 || y > winH) {
              row_s = visibledatarow.length - 1;
            }
          }
          var obj_r1, obj_r2;
          if (row_s > r2) {
            obj_r1 = r2;
            obj_r2 = row_s;
          } else {
            obj_r1 = row_s;
            obj_r2 = r2;
          }
          if (!rangeRowCheck.exits) {
            chart_json.rangeArray = [
              {row: [obj_r1, obj_r2], column: chart_json.rangeArray[0].column}
            ];
            chart_json.rangeSplitArray.range = {
              row: [obj_r1, obj_r2],
              column: chart_json.rangeArray[0].column
            };
          } else {
            chart_json.rangeArray = [
              {row: [st_r, obj_r2], column: chart_json.rangeArray[0].column}
            ];
            chart_json.rangeSplitArray.range = {
              row: [st_r, obj_r2],
              column: chart_json.rangeArray[0].column
            };
            chart_json.rangeSplitArray.coltitle = {
              row: [obj_r1 - st_r, obj_r2 - st_r],
              column: chart_json.rangeSplitArray.coltitle.column
            };
            chart_json.rangeSplitArray.content = {
              row: [obj_r1 - st_r, obj_r2 - st_r],
              column: chart_json.rangeSplitArray.content.column
            };
          }
        }
        store_default.chart_selection.create();
      },
      rangeResizeDragged: function() {
        store_default.chart_selection.rangeResize = null;
        var updateJson = store_default.currentChart;
        updateJson.rangeTxt = getRangetxt(store_default.currentSheetIndex, updateJson.rangeArray[0], store_default.currentSheetIndex);
        updateJson.chartData = getdatabyselection(updateJson.rangeArray[0], store_default.currentSheetIndex);
        store_default.changeChartRange(updateJson.chart_id, updateJson.chartData, updateJson.rangeArray, updateJson.rangeTxt);
      }
    };
  }
  function createLuckyChart(width, height, left, top) {
    var jfgird_select_save = luckysheet.getluckysheet_select_save();
    if (jfgird_select_save.length == 1 && jfgird_select_save[0].row[0] == jfgird_select_save[0].row[1] && jfgird_select_save[0].column[0] == jfgird_select_save[0].column[1]) {
      luckysheetMoveHighlightRange2("right", "rangeOfSelect");
      luckysheetMoveHighlightRange2("down", "rangeOfSelect");
      jfgird_select_save = luckysheet.getluckysheet_select_save();
    }
    var shiftpositon_row = -1;
    var row_ed = jfgird_select_save[0]["row"][1] - jfgird_select_save[0]["row"][0];
    for (var r2 = jfgird_select_save[0]["row"][0]; r2 <= jfgird_select_save[0]["row"][1]; r2++) {
      for (var c2 = jfgird_select_save[0]["column"][0]; c2 <= jfgird_select_save[0]["column"][1]; c2++) {
        var value = getcellvalue(r2, c2, luckysheet.flowdata());
        if (value != null && value.toString().length > 0) {
          shiftpositon_row = r2;
          break;
        }
      }
      if (shiftpositon_row !== -1) {
        break;
      }
    }
    if (shiftpositon_row == -1) {
      shiftpositon_row = 0;
    }
    jfgird_select_save[0]["row"] = [shiftpositon_row, shiftpositon_row];
    jfgird_select_save[0].row_focus = shiftpositon_row;
    luckysheet.setluckysheet_select_save(jfgird_select_save);
    store_default.luckysheet_shiftpositon = $.extend(true, {}, jfgird_select_save[0]);
    luckysheetMoveEndCell("down", "range", false, row_ed);
    jfgird_select_save = luckysheet.getluckysheet_select_save();
    var shiftpositon_col = -1;
    var column_ed = jfgird_select_save[0]["column"][1] - jfgird_select_save[0]["column"][0];
    for (var c2 = jfgird_select_save[0]["column"][0]; c2 <= jfgird_select_save[0]["column"][1]; c2++) {
      for (var r2 = jfgird_select_save[0]["row"][0]; r2 <= jfgird_select_save[0]["row"][1]; r2++) {
        var value = getcellvalue(r2, c2, luckysheet.flowdata());
        if (value != null && value.toString().length > 0) {
          shiftpositon_col = c2;
          break;
        }
      }
      if (shiftpositon_col !== -1) {
        break;
      }
    }
    if (shiftpositon_col == -1) {
      shiftpositon_col = 0;
    }
    jfgird_select_save[0]["column"] = [shiftpositon_col, shiftpositon_col];
    jfgird_select_save[0].column_focus = shiftpositon_col;
    luckysheet.setluckysheet_select_save(jfgird_select_save);
    store_default.luckysheet_shiftpositon = $.extend(true, {}, jfgird_select_save[0]);
    luckysheetMoveEndCell("right", "range", false, column_ed);
    jfgird_select_save = luckysheet.getluckysheet_select_save();
    var rangeArray = $.extend(true, [], jfgird_select_save);
    var rangeTxt = getRangetxt(store_default.currentSheetIndex, rangeArray[0], store_default.currentSheetIndex);
    let chartData = getdatabyselection();
    console.dir(chartData);
    let chart_id = generateRandomKey("chart");
    let chart_id_c = chart_id + "_c";
    let modelChartShowHTML = '<div id="${id}"class="luckysheet-modal-dialog luckysheet-modal-dialog-chart ${addclass}"tabindex="0"role="dialog"aria-labelledby=":41e"dir="ltr"><div class="luckysheet-modal-dialog-resize"><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-lt"data-type="lt"></div><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-mt"data-type="mt"></div><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-lm"data-type="lm"></div><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-rm"data-type="rm"></div><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-rt"data-type="rt"></div><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-lb"data-type="lb"></div><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-mb"data-type="mb"></div><div class="luckysheet-modal-dialog-resize-item luckysheet-modal-dialog-resize-item-rb"data-type="rb"></div></div><div class="luckysheet-modal-dialog-controll"><span class="luckysheet-modal-controll-btn luckysheet-modal-controll-update"role="button"tabindex="0"aria-label="\u4FEE\u6539\u56FE\u8868"title="\u4FEE\u6539\u56FE\u8868"><i class="fa fa-pencil"aria-hidden="true"></i></span><span class="luckysheet-modal-controll-btn luckysheet-modal-controll-max"role="butluckysheet_chartIns_indexton"tabindex="0"aria-label="\u6700\u5927\u5316"title="\u6700\u5927\u5316"><i class="fa fa-window-maximize"aria-hidden="true"></i></span><span class="luckysheet-modal-controll-btn luckysheet-modal-controll-del"role="button"tabindex="0"aria-label="\u5220\u9664"title="\u5220\u9664"><i class="fa fa-trash"aria-hidden="true"></i></span></div><div class="luckysheet-modal-dialog-content">${content}</div></div>';
    let $t = $(replaceHtml2(modelChartShowHTML, {
      id: chart_id_c,
      addclass: "luckysheet-data-visualization-chart",
      title: "\u56FE\u8868\u751F\u6210",
      content: ""
    })).appendTo($(".luckysheet-cell-main"));
    let container2 = document.getElementById(chart_id_c);
    let {render, chart_json} = store_default.createChart($(`#${chart_id_c}`).children(".luckysheet-modal-dialog-content")[0], chartData, chart_id, rangeArray, rangeTxt);
    console.dir(JSON.stringify(chart_json));
    width = width ? width : 400;
    height = height ? height : 250;
    left = left ? left : 0;
    top = top ? top : 0;
    container2.style.width = width + "px";
    container2.style.height = height + "px";
    container2.style.position = "absolute";
    container2.style.background = "#fff";
    container2.style.left = left + "px";
    container2.style.top = top + "px";
    render.style.width = "100%";
    render.style.height = "100%";
    container2.style.zIndex = store_default.zIndex ? store_default.zIndex : 15;
    store_default.zIndex++;
    let sheetFile = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
    if (!sheetFile.chart) {
      sheetFile.chart = [];
    }
    sheetFile.chart.push({
      chart_id,
      width,
      height,
      left,
      top,
      sheetIndex: sheetFile.index
    });
    showNeedRangeShow(chart_id);
    $(`#${chart_id}_c .luckysheet-modal-controll-del`).click(function(e) {
      delChart(chart_id);
    });
    setChartMoveableEffect($t);
    $(`#${chart_id}_c .luckysheet-modal-controll-update`).click(function(e) {
      showChartSettingComponent();
    });
    $t.children(".luckysheet-modal-dialog-content").mousedown(function(e) {
      if (!store_default.chartparam.luckysheetCurrentChartMaxState) {
        showNeedRangeShow(chart_id);
      }
      e.stopPropagation();
    });
    $t.mousedown(function(e) {
      if (!store_default.chartparam.luckysheetCurrentChartMaxState) {
        showNeedRangeShow(chart_id);
        setluckysheet_scroll_status(true);
        if (!$(e.target).is(".luckysheet-modal-dialog-controll") && !$(e.target).is(".luckysheet-modal-controll-btn") && !$(e.target).is("i")) {
          store_default.chartparam.luckysheetCurrentChartMoveTimeout = setTimeout(function() {
            store_default.chartparam.luckysheetCurrentChartMove = true;
          }, 100);
        }
        var toffset = store_default.chartparam.luckysheetCurrentChartMoveObj.offset();
        var tpsition = store_default.chartparam.luckysheetCurrentChartMoveObj.position();
        store_default.chartparam.luckysheetCurrentChartMoveXy = [
          e.pageX - toffset.left,
          e.pageY - toffset.top,
          tpsition.left,
          tpsition.top,
          $("#luckysheet-scrollbar-x").scrollLeft(),
          $("#luckysheet-scrollbar-y").scrollTop()
        ];
        store_default.chartparam.luckysheetCurrentChartMoveWinH = $("#luckysheet-cell-main")[0].scrollHeight;
        store_default.chartparam.luckysheetCurrentChartMoveWinW = $("#luckysheet-cell-main")[0].scrollWidth;
        if (!$(e.target).hasClass("luckysheet-mousedown-cancel") && $(e.target).filter("[class*='sp-palette']").length == 0 && $(e.target).filter("[class*='sp-thumb']").length == 0 && $(e.target).filter("[class*='sp-']").length == 0) {
          $("#luckysheet-rightclick-menu").hide();
          $("#luckysheet-cols-h-hover").hide();
          $("#luckysheet-cols-menu-btn").hide();
          $("#luckysheet-rightclick-menu").hide();
          $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu, #luckysheet-user-menu").hide();
          $("body > .luckysheet-filter-menu, body > .luckysheet-filter-submenu, body > .luckysheet-cols-menu").hide();
        }
        e.stopPropagation();
      }
    }).find(".luckysheet-modal-dialog-resize-item").mousedown(function(e) {
      if (store_default.chartparam.luckysheetCurrentChartActive) {
        store_default.chartparam.luckysheetCurrentChartResize = $(this).data("type");
        var mouse = mouseposition(e.pageX, e.pageY), scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft(), scrollTop = $("#luckysheet-scrollbar-y").scrollTop();
        var x = mouse[0] + scrollLeft;
        var y = mouse[1] + scrollTop;
        var position = store_default.chartparam.luckysheetCurrentChartResizeObj.position();
        store_default.chartparam.luckysheetCurrentChartResizeXy = [
          x,
          y,
          $t.width(),
          $t.height(),
          position.left + scrollLeft,
          position.top + scrollTop,
          scrollLeft,
          scrollTop
        ];
        store_default.chartparam.luckysheetCurrentChartResizeWinH = $("#luckysheet-cell-main")[0].scrollHeight;
        store_default.chartparam.luckysheetCurrentChartResizeWinW = $("#luckysheet-cell-main")[0].scrollWidth;
        store_default.chartparam.luckysheetCurrentChart = chart_id;
        e.stopPropagation();
      }
    });
  }
  function setChartMoveableEffect($container) {
    $container.find(".luckysheet-modal-dialog-content").hover(function() {
      $container.removeClass("chart-moveable");
    }, function() {
      $container.addClass("chart-moveable");
    });
    $container.hover(function() {
      $container.addClass("chart-moveable");
    }, function() {
      $container.removeClass("chart-moveable");
    });
  }
  function delChart(chart_id) {
    $(`.luckysheet-cell-main #${chart_id}_c`).remove();
    hideAllNeedRangeShow();
    let sheetFile = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
    let index2 = sheetFile.chart.findIndex((item2) => item2.chart_id == chart_id);
    sheetFile.chart.splice(index2, 1);
    store_default.deleteChart(chart_id);
  }
  function showNeedRangeShow(chart_id) {
    let chartLists = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].chart;
    for (let chartId in chartLists) {
      chartLists[chartId].needRangeShow = false;
      if (chartLists[chartId].chart_id == chart_id) {
        chartLists[chartId].needRangeShow = true;
        store_default.currentChart = store_default.getChartJson(chart_id);
      }
    }
    selectRangeBorderShow(chart_id);
  }
  function hideAllNeedRangeShow() {
    let chartLists = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].chart;
    for (let chartId in chartLists) {
      chartLists[chartId].needRangeShow = false;
    }
    selectRangeBorderHide();
  }
  function selectRangeBorderShow(chart_id) {
    let $t = $("#" + chart_id + "_c");
    store_default.chart_selection.create();
    store_default.chartparam.luckysheetCurrentChartActive = true;
    store_default.chartparam.luckysheetCurrentChartMoveObj = $t;
    store_default.chartparam.luckysheetCurrentChartResizeObj = $t;
    store_default.chartparam.luckysheetCurrentChart = chart_id;
    $("#luckysheet-cell-main").find(".luckysheet-modal-dialog-chart .luckysheet-modal-dialog-resize").hide();
    $("#luckysheet-cell-main").find(".luckysheet-modal-dialog-chart .luckysheet-modal-dialog-controll").hide();
    $t.css("z-index", store_default.chartparam.luckysheetCurrentChartZIndexRank++);
    $t.find(".luckysheet-modal-dialog-resize").show();
    $t.find(".luckysheet-modal-dialog-controll").show();
    if (($(".chartSetting").is(":visible") || store_default.chartparam.luckysheet_chart_redo_click) && chart_id != store_default.chartparam.luckysheetCurrentChart) {
      $("body .luckysheet-cols-menu").hide();
    }
    store_default.currentChart = store_default.highlightChart(chart_id);
  }
  function selectRangeBorderHide(settingShow) {
    $("#luckysheet-cell-main .luckysheet-modal-dialog-chart .luckysheet-modal-dialog-resize, #luckysheet-cell-main .luckysheet-modal-dialog-chart .luckysheet-modal-dialog-controll").hide();
    $("#luckysheet-cell-main").find(".luckysheet-datavisual-selection-set div").remove();
    store_default.chartparam.luckysheetCurrentChartActive = false;
    $("#luckysheet-chart-rangeShow").empty();
    if (!settingShow && $(".chartSetting").is(":visible") && !isEditMode()) {
      hideChartSettingComponent();
    }
  }
  function showChartSettingComponent(refresh2, chart_id) {
    if (!$(".chartSetting").is(":visible")) {
      $(".chartSetting").show();
      $("#luckysheet-cell-main").find(".luckysheet-datavisual-selection-set div").show();
      store_default.chartparam.luckysheetCurrentChartActive = true;
      setTimeout(function() {
        luckysheetsizeauto();
      }, 0);
    }
  }
  function hideChartSettingComponent(refresh2) {
    if ($(".chartSetting").is(":visible")) {
      $(".chartSetting").hide();
      $("#luckysheet-cell-main .luckysheet-modal-dialog-chart .luckysheet-modal-dialog-resize, #luckysheet-cell-main .luckysheet-modal-dialog-chart .luckysheet-modal-dialog-controll").hide();
      $("#luckysheet-cell-main").find(".luckysheet-datavisual-selection-set div").remove();
      store_default.chartparam.luckysheetCurrentChartActive = false;
      if (!isEditMode() && !refresh2) {
        setTimeout(function() {
          luckysheetsizeauto();
        }, 0);
      }
    }
  }
  function renderChartShow(index2) {
    selectRangeBorderHide("true");
    const luckysheetfile = store_default.luckysheetfile;
    luckysheetfile.forEach((file) => {
      if (file.index == index2) {
        const chartLists = file.chart || [];
        chartLists.forEach((chart2) => {
          chart2.isShow = true;
          $("#" + chart2.chart_id + "_c").show();
          store_default.resizeChart(chart2.chart_id);
          if (chart2.needRangeShow == true) {
            store_default.currentChart = store_default.getChartJson(chart2.chart_id);
            selectRangeBorderShow(chart2.chart_id);
          }
        });
      } else {
        const chartLists = file.chart || [];
        chartLists.forEach((chart2) => {
          chart2.isShow = false;
          $("#" + chart2.chart_id + "_c").hide();
        });
      }
    });
  }
  var _rowLocation, _colLocation, dependScripts, dependLinks;
  var init_plugin = __esm({
    "src/expendPlugins/chart/plugin.js"() {
      init_util();
      init_chartUtil();
      init_getdata();
      init_store();
      init_formula();
      init_func();
      init_get();
      init_location();
      init_set();
      init_sheetMove();
      init_validate();
      init_resize();
      _rowLocation = rowLocation;
      _colLocation = colLocation;
      dependScripts = [
        "https://cdn.jsdelivr.net/npm/vue@2.6.11",
        "https://unpkg.com/vuex@3.4.0",
        "https://cdn.bootcdn.net/ajax/libs/element-ui/2.13.2/index.js",
        "https://cdn.bootcdn.net/ajax/libs/echarts/4.8.0/echarts.min.js",
        "expendPlugins/chart/chartmix.umd.min.js"
      ];
      dependLinks = [
        "https://cdn.bootcdn.net/ajax/libs/element-ui/2.13.2/theme-chalk/index.css",
        "expendPlugins/chart/chartmix.css"
      ];
    }
  });

  // src/controllers/zoom.js
  function zoomChange(ratio) {
    if (store_default.flowdata == null || store_default.flowdata.length == 0) {
      return;
    }
    clearTimeout(luckysheetZoomTimeout);
    luckysheetZoomTimeout = setTimeout(() => {
      if (store_default.clearjfundo) {
        store_default.jfredo.push({
          "type": "zoomChange",
          "zoomRatio": store_default.zoomRatio,
          "curZoomRatio": ratio,
          "sheetIndex": store_default.currentSheetIndex
        });
      }
      currentWheelZoom = null;
      store_default.zoomRatio = ratio;
      let currentSheet = sheetmanage_default.getSheetByIndex();
      postil_default.buildAllPs(currentSheet.data);
      imageCtrl_default.images = currentSheet.images;
      imageCtrl_default.allImagesShow();
      imageCtrl_default.init();
      if (currentSheet.config == null) {
        currentSheet.config = {};
      }
      if (currentSheet.config.sheetViewZoom == null) {
        currentSheet.config.sheetViewZoom = {};
      }
      let type = currentSheet.config.curentsheetView;
      if (type == null) {
        type = "viewNormal";
      }
      currentSheet.config.sheetViewZoom[type + "ZoomScale"] = ratio;
      server_default.saveParam("all", store_default.currentSheetIndex, store_default.zoomRatio, {"k": "zoomRatio"});
      server_default.saveParam("cg", store_default.currentSheetIndex, currentSheet.config["sheetViewZoom"], {"k": "sheetViewZoom"});
      zoomRefreshView();
    }, 100);
  }
  function zoomRefreshView() {
    jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
    changeSheetContainerSize();
  }
  function zoomInitial() {
    const ZOOM_WHEEL_STEP = 0.02;
    const ZOOM_STEP = 0.1;
    const MAX_ZOOM_RATIO = 4;
    const MIN_ZOOM_RATIO = 0.1;
    $("#luckysheet-zoom-minus").click(function() {
      let currentRatio;
      if (store_default.zoomRatio == null) {
        currentRatio = store_default.zoomRatio = 1;
      } else {
        currentRatio = Math.ceil(store_default.zoomRatio * 10) / 10;
      }
      currentRatio = currentRatio - ZOOM_STEP;
      if (currentRatio == store_default.zoomRatio) {
        currentRatio = currentRatio - ZOOM_STEP;
      }
      if (currentRatio <= MIN_ZOOM_RATIO) {
        currentRatio = MIN_ZOOM_RATIO;
      }
      zoomChange(currentRatio);
      zoomNumberDomBind(currentRatio);
    });
    $("#luckysheet-zoom-plus").click(function() {
      let currentRatio;
      if (store_default.zoomRatio == null) {
        currentRatio = store_default.zoomRatio = 1;
      } else {
        currentRatio = Math.floor(store_default.zoomRatio * 10) / 10;
      }
      currentRatio = currentRatio + ZOOM_STEP;
      if (currentRatio == store_default.zoomRatio) {
        currentRatio = currentRatio + ZOOM_STEP;
      }
      if (currentRatio >= MAX_ZOOM_RATIO) {
        currentRatio = MAX_ZOOM_RATIO;
      }
      zoomChange(currentRatio);
      zoomNumberDomBind(currentRatio);
    });
    $("#luckysheet-zoom-slider").mousedown(function(e) {
      let xoffset = $(this).offset().left, pageX = e.pageX;
      let currentRatio = positionToRatio(pageX - xoffset);
      zoomChange(currentRatio);
      zoomNumberDomBind(currentRatio);
    });
    $("#luckysheet-zoom-cursor").mousedown(function(e) {
      let curentX = e.pageX, cursorLeft = parseFloat($("#luckysheet-zoom-cursor").css("left"));
      $("#luckysheet-zoom-cursor").css("transition", "none");
      $(document).off("mousemove.zoomCursor").on("mousemove.zoomCursor", function(event2) {
        let moveX = event2.pageX;
        let offsetX = moveX - curentX;
        let pos = cursorLeft + offsetX;
        let currentRatio = positionToRatio(pos);
        if (currentRatio > MAX_ZOOM_RATIO) {
          currentRatio = MAX_ZOOM_RATIO;
          pos = 100;
        }
        if (currentRatio < MIN_ZOOM_RATIO) {
          currentRatio = MIN_ZOOM_RATIO;
          pos = 0;
        }
        zoomChange(currentRatio);
        let r2 = Math.round(currentRatio * 100) + "%";
        $("#luckysheet-zoom-ratioText").html(r2);
        $("#luckysheet-zoom-cursor").css("left", pos - 4);
      });
      $(document).off("mouseup.zoomCursor").on("mouseup.zoomCursor", function(event2) {
        $(document).off(".zoomCursor");
        $("#luckysheet-zoom-cursor").css("transition", "all 0.3s");
      });
      e.stopPropagation();
    }).click(function(e) {
      e.stopPropagation();
    });
    $("#luckysheet-zoom-ratioText").click(function() {
      zoomChange(1);
      zoomNumberDomBind(1);
    });
    zoomNumberDomBind(store_default.zoomRatio);
    currentWheelZoom = null;
    document.addEventListener("wheel", function(ev) {
      if (!ev.ctrlKey || !ev.deltaY) {
        return;
      }
      if (currentWheelZoom === null) {
        currentWheelZoom = store_default.zoomRatio || 1;
      }
      currentWheelZoom += ev.deltaY < 0 ? ZOOM_WHEEL_STEP : -ZOOM_WHEEL_STEP;
      if (currentWheelZoom >= MAX_ZOOM_RATIO) {
        currentWheelZoom = MAX_ZOOM_RATIO;
      } else if (currentWheelZoom < MIN_ZOOM_RATIO) {
        currentWheelZoom = MIN_ZOOM_RATIO;
      }
      zoomChange(currentWheelZoom);
      zoomNumberDomBind(currentWheelZoom);
      ev.preventDefault();
      ev.stopPropagation();
    }, {capture: true, passive: false});
    document.addEventListener("keydown", function(ev) {
      if (!ev.ctrlKey) {
        return;
      }
      let handled = false;
      let zoom = store_default.zoomRatio || 1;
      if (ev.key === "-" || ev.which === 189) {
        zoom -= ZOOM_STEP;
        handled = true;
      } else if (ev.key === "+" || ev.which === 187) {
        zoom += ZOOM_STEP;
        handled = true;
      } else if (ev.key === "0" || ev.which === 48) {
        zoom = 1;
        handled = true;
      }
      if (handled) {
        ev.preventDefault();
        if (zoom >= MAX_ZOOM_RATIO) {
          zoom = MAX_ZOOM_RATIO;
        } else if (zoom < MIN_ZOOM_RATIO) {
          zoom = MIN_ZOOM_RATIO;
        }
        zoomChange(zoom);
        zoomNumberDomBind(zoom);
      }
    }, {capture: true});
  }
  function positionToRatio(pos) {
    let ratio = 1;
    if (pos < 50) {
      ratio = Math.round((pos * 1.8 / 100 + 0.1) * 100) / 100;
    } else if (pos > 50) {
      ratio = Math.round(((pos - 50) * 6 / 100 + 1) * 100) / 100;
    }
    return ratio;
  }
  function zoomSlierDomBind(ratio) {
    let domPos = 50;
    if (ratio < 1) {
      domPos = Math.round((ratio - 0.1) * 100 / 0.18) / 10;
    } else if (ratio > 1) {
      domPos = Math.round((ratio - 1) * 100 / 0.6) / 10 + 50;
    }
    $("#luckysheet-zoom-cursor").css("left", domPos - 4);
  }
  function zoomNumberDomBind(ratio) {
    let r2 = Math.round(ratio * 100) + "%";
    $("#luckysheet-zoom-ratioText").html(r2);
    zoomSlierDomBind(ratio);
  }
  var luckysheetZoomTimeout, currentWheelZoom;
  var init_zoom = __esm({
    "src/controllers/zoom.js"() {
      init_store();
      init_locale();
      init_util();
      init_sheetmanage();
      init_resize();
      init_refresh();
      init_server();
      init_postil();
      init_imageCtrl();
      luckysheetZoomTimeout = null;
      currentWheelZoom = null;
    }
  });

  // src/controllers/sheetmanage.js
  var sheetmanage, sheetmanage_default;
  var init_sheetmanage = __esm({
    "src/controllers/sheetmanage.js"() {
      init_validate();
      init_cleargridelement();
      init_getdata();
      init_setdata();
      init_createdom();
      init_tooltip();
      init_formula();
      init_refresh();
      init_rhchInit();
      init_editor();
      init_extend();
      init_validate();
      init_util();
      init_constant();
      init_server();
      init_luckysheetConfigsetting();
      init_pivotTable();
      init_resize();
      init_postil();
      init_imageCtrl();
      init_dataVerificationCtrl();
      init_hyperlinkCtrl();
      init_freezen();
      init_filter();
      init_select();
      init_store();
      init_locale();
      init_plugin();
      init_resize();
      init_zoom();
      init_menuButton();
      init_method();
      sheetmanage = {
        generateRandomSheetIndex: function(prefix) {
          if (prefix == null) {
            prefix = "Sheet";
          }
          let userAgent = window.navigator.userAgent.replace(/[^a-zA-Z0-9]/g, "").split("");
          let mid = "";
          for (let i2 = 0; i2 < 12; i2++) {
            mid += userAgent[Math.round(Math.random() * (userAgent.length - 1))];
          }
          let time = new Date().getTime();
          return prefix + "_" + mid + "_" + time;
        },
        generateRandomSheetName: function(file, isPivotTable) {
          let index2 = file.length;
          const locale_pivotTable = locale_default().pivotTable;
          const title = locale_pivotTable.title;
          for (let i2 = 0; i2 < file.length; i2++) {
            if (file[i2].name.indexOf("Sheet") > -1 || file[i2].name.indexOf(title) > -1) {
              let suffix = parseFloat(file[i2].name.replace("Sheet", "").replace(title, ""));
              if (suffix != "NaN" && Math.ceil(suffix) > index2) {
                index2 = Math.ceil(suffix);
              }
            }
          }
          if (isPivotTable) {
            return title + (index2 + 1);
          } else {
            return "Sheet" + (index2 + 1);
          }
        },
        generateCopySheetName: function(file, name2) {
          let _locale = locale_default();
          let locale_info = _locale.info;
          let copyWord = "(" + locale_info.copy;
          const copy_i = name2.toString().indexOf(copyWord);
          if (~copy_i) {
            name2 = name2.toString().substring(0, copy_i);
          }
          let index2 = "";
          let nameCopy = name2 + copyWord;
          const sheetNames = [];
          for (let i2 = 0; i2 < file.length; i2++) {
            let fileName = file[i2].name.toString();
            sheetNames.push(fileName);
            let st_i = fileName.indexOf(nameCopy);
            if (st_i === 0) {
              index2 = index2 || 2;
              let ed_i = fileName.indexOf(")", st_i + nameCopy.length);
              let num = fileName.substring(st_i + nameCopy.length, ed_i);
              if (isRealNum(num)) {
                if (parseInt(num) >= index2) {
                  index2 = parseInt(num) + 1;
                }
              }
            }
          }
          let sheetCopyName;
          do {
            let postfix = copyWord + index2 + ")";
            const lengthLimit = 31 - postfix.length;
            sheetCopyName = name2;
            if (sheetCopyName.length > lengthLimit) {
              sheetCopyName = sheetCopyName.slice(0, lengthLimit - 1) + "\u2026";
            }
            sheetCopyName = sheetCopyName + postfix;
          } while (~sheetNames.indexOf(sheetCopyName) && (index2 = (index2 || 1) + 1));
          return sheetCopyName;
        },
        getSheetByIndex: function(index2) {
          let _this = this;
          if (index2 == null) {
            index2 = store_default.currentSheetIndex;
          }
          let i2 = _this.getSheetIndex(index2);
          return store_default.luckysheetfile[i2];
        },
        getSheetByName: function(name2) {
          let _this = this;
          if (name2 == null) {
            return null;
          }
          for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
            let file = store_default.luckysheetfile[i2];
            if (file.name == name2) {
              return file;
            }
          }
          return null;
        },
        getCurSheetnoset: function() {
          let curindex = 0;
          for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
            if (store_default.luckysheetfile[i2].status == 1) {
              curindex = store_default.luckysheetfile[i2].index;
              break;
            }
          }
          return curindex;
        },
        getCurSheet: function() {
          if (store_default.luckysheetfile.length) {
            let hasActive = false, indexs = [];
            store_default.luckysheetfile.forEach((item2) => {
              if (typeof item2.index === "undefined") {
                item2.index = this.generateRandomSheetIndex();
              }
              if (indexs.includes(item2.index)) {
                item2.index = this.generateRandomSheetIndex();
              } else {
                indexs.push(item2.index);
              }
              if (typeof item2.status === "undefined") {
                item2.status = 0;
              }
              if (item2.status == 1) {
                if (hasActive) {
                  item2.status = 0;
                } else {
                  hasActive = true;
                }
              }
            });
            if (!hasActive) {
              store_default.luckysheetfile[0].status = 1;
            }
          }
          store_default.currentSheetIndex = store_default.luckysheetfile[0].index;
          for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
            if (store_default.luckysheetfile[i2].status == 1) {
              store_default.currentSheetIndex = store_default.luckysheetfile[i2].index;
              break;
            }
          }
          return store_default.currentSheetIndex;
        },
        addNewSheet: function(e, isPivotTable) {
          if (isEditMode() || store_default.allowEdit === false) {
            return;
          }
          if (!method_default.createHookFunction("sheetCreateBefore")) {
            return;
          }
          let _this = this;
          let order = store_default.luckysheetfile.length;
          let index2 = _this.generateRandomSheetIndex();
          let sheetname = _this.generateRandomSheetName(store_default.luckysheetfile, isPivotTable);
          $("#luckysheet-sheet-container-c").append(replaceHtml(sheetHTML, {"index": index2, "active": "", "name": sheetname, "style": "", "colorset": ""}));
          let sheetconfig = {
            "name": sheetname,
            "color": "",
            "status": "0",
            "order": order,
            "index": index2,
            "celldata": [],
            "row": store_default.defaultrowNum,
            "column": store_default.defaultcolumnNum,
            "config": {},
            "pivotTable": null,
            "isPivotTable": !!isPivotTable
          };
          store_default.luckysheetfile.push(sheetconfig);
          $("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active");
          $("#luckysheet-sheets-item" + index2).addClass("luckysheet-sheets-item-active");
          $("#luckysheet-cell-main").append('<div id="luckysheet-datavisual-selection-set-' + index2 + '" class="luckysheet-datavisual-selection-set"></div>');
          cleargridelement(e);
          server_default.saveParam("sha", null, $.extend(true, {}, sheetconfig));
          if (store_default.clearjfundo) {
            store_default.jfundo.length = 0;
            let redo2 = {};
            redo2["type"] = "addSheet";
            redo2["sheetconfig"] = $.extend(true, {}, sheetconfig);
            redo2["index"] = index2;
            redo2["currentSheetIndex"] = store_default.currentSheetIndex;
            store_default.jfredo.push(redo2);
          }
          _this.changeSheetExec(index2, isPivotTable, true);
        },
        setSheetHide: function(index2, isDelete) {
          let _this = this;
          let currentIdx = _this.getSheetIndex(index2);
          if (!isDelete && !method_default.createHookFunction("sheetHideBefore", {sheet: store_default.luckysheetfile[currentIdx]})) {
            return;
          }
          store_default.luckysheetfile[currentIdx].hide = 1;
          let luckysheetcurrentSheetitem2 = $("#luckysheet-sheets-item" + index2);
          luckysheetcurrentSheetitem2.hide();
          $("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active");
          let indicator;
          if (luckysheetConfigsetting_default.showsheetbarConfig.sheet) {
            indicator = luckysheetcurrentSheetitem2.nextAll(":visible");
            if (luckysheetcurrentSheetitem2.nextAll(":visible").length > 0) {
              indicator = indicator.eq(0).data("index");
            } else {
              indicator = luckysheetcurrentSheetitem2.prevAll(":visible").eq(0).data("index");
            }
          } else {
            let nextActiveIdx, showSheetIdxs = [];
            store_default.luckysheetfile.forEach((ele, index3) => {
              if (ele.hide !== 1)
                showSheetIdxs.push(index3);
            });
            let len = showSheetIdxs.length;
            if (len === 1) {
              nextActiveIdx = showSheetIdxs[0];
            } else {
              nextActiveIdx = showSheetIdxs[len - 1] > currentIdx ? showSheetIdxs.find((e) => e > currentIdx) : showSheetIdxs[len - 1];
            }
            indicator = store_default.luckysheetfile[nextActiveIdx].index;
          }
          $("#luckysheet-sheets-item" + indicator).addClass("luckysheet-sheets-item-active");
          _this.changeSheetExec(indicator);
          _this.locationSheet();
          server_default.saveParam("sh", luckysheetcurrentSheetitem2.data("index"), 1, {"op": "hide", "cur": indicator});
          if (!isDelete) {
            method_default.createHookFunction("sheetHideAfter", {sheet: store_default.luckysheetfile[currentIdx]});
          }
        },
        setSheetShow: function(index2) {
          let _this = this;
          const file = store_default.luckysheetfile[_this.getSheetIndex(index2)];
          if (!method_default.createHookFunction("sheetShowBefore", {sheet: file})) {
            return;
          }
          file.hide = 0;
          _this.changeSheetExec(index2);
          server_default.saveParam("sh", index2, 0, {"op": "show", "cur": null});
          method_default.createHookFunction("sheetShowAfter", {sheet: file});
        },
        sheetMaxIndex: 0,
        ordersheet: function(property) {
          return function(a, b) {
            let value1 = a[property];
            let value2 = b[property];
            return value1 - value2;
          };
        },
        getCurrentOrder: function() {
          let orders = {};
          $("#luckysheet-sheet-area div.luckysheet-sheets-item").each(function(a) {
            let index2 = $(this).data("index");
            for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
              if (store_default.luckysheetfile[i2].index == index2) {
                orders[index2.toString()] = a;
                break;
              }
            }
          });
          return orders;
        },
        reOrderAllSheet: function() {
          let orders = {};
          $("#luckysheet-sheet-area div.luckysheet-sheets-item").each(function(a) {
            let index2 = $(this).data("index");
            for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
              if (store_default.luckysheetfile[i2].index == index2) {
                store_default.luckysheetfile[i2].order = a;
                orders[index2.toString()] = a;
                break;
              }
            }
          });
          server_default.saveParam("shr", null, orders);
          store_default.luckysheetfile.sort((x, y) => {
            let order_x = x.order;
            let order_y = y.order;
            if (order_x != null && order_y != null) {
              return order_x - order_y;
            } else if (order_x != null) {
              return -1;
            } else if (order_y != null) {
              return 1;
            } else {
              return 1;
            }
          });
        },
        createSheet: function() {
          let _this = this;
          let btn = [];
          store_default.luckysheetfile.sort(_this.ordersheet("order"));
          for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
            let display = "";
            let sheetIndex = store_default.luckysheetfile[i2].index;
            let colorset = "";
            if (store_default.luckysheetfile[i2].color != null) {
              colorset = '<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + store_default.luckysheetfile[i2].color + ';"></div>';
            }
            if (store_default.currentSheetIndex == sheetIndex) {
              btn.push(replaceHtml(sheetHTML, {"index": sheetIndex, "active": "luckysheet-sheets-item-active", "name": store_default.luckysheetfile[i2].name, "style": "", "colorset": colorset}));
            } else {
              if (store_default.luckysheetfile[i2].hide == 1) {
                btn.push(replaceHtml(sheetHTML, {"index": sheetIndex, "active": "", "name": store_default.luckysheetfile[i2].name, "style": "display:none;", "colorset": colorset}));
              } else {
                btn.push(replaceHtml(sheetHTML, {"index": sheetIndex, "active": "", "name": store_default.luckysheetfile[i2].name, "style": "", "colorset": colorset}));
              }
              display = "style='display:none;'";
            }
            $("#luckysheet-cell-main").append("<div " + display + ' id="luckysheet-datavisual-selection-set-' + sheetIndex + '" class="luckysheet-datavisual-selection-set"></div>');
          }
          $("#luckysheet-sheet-container-c").append(btn.join(""));
          _this.locationSheet();
        },
        locationSheet: function() {
          let $c = $("#luckysheet-sheet-container-c"), winW = $("#" + store_default.container).width();
          let $cursheet = $("#luckysheet-sheet-container-c > div.luckysheet-sheets-item-active").eq(0);
          let scrollLeftpx = 0;
          let c_width = 0;
          $("#luckysheet-sheet-container-c > div.luckysheet-sheets-item:visible").each(function() {
            if ($(this).hasClass("luckysheet-sheets-item-active")) {
              scrollLeftpx = c_width;
            }
            c_width += $(this).outerWidth();
          });
          setTimeout(function() {
            $c.scrollLeft(scrollLeftpx - 10);
            if (luckysheetConfigsetting_default.showsheetbarConfig.sheet) {
              if (c_width >= winW * 0.7) {
                $("#luckysheet-sheet-area .luckysheet-sheets-scroll").css("display", "inline-block");
                $("#luckysheet-sheet-container .docs-sheet-fade-left").show();
              } else {
                $("#luckysheet-sheet-area .luckysheet-sheets-scroll").css("display", "none");
                $("#luckysheet-sheet-container .docs-sheet-fade-left").hide();
              }
            }
          }, 1);
        },
        copySheet: function(copyindex, e) {
          if (isEditMode() || store_default.allowEdit === false) {
            return;
          }
          let _this = this;
          let order = store_default.luckysheetfile.length;
          let index2 = _this.generateRandomSheetIndex();
          let copyarrindex = _this.getSheetIndex(copyindex);
          let copyjson = $.extend(true, {}, store_default.luckysheetfile[copyarrindex]);
          copyjson.order = order;
          copyjson.index = index2;
          copyjson.name = _this.generateCopySheetName(store_default.luckysheetfile, copyjson.name);
          if (!method_default.createHookFunction("sheetCopyBefore", {
            targetSheet: store_default.luckysheetfile[copyarrindex],
            copySheet: copyjson
          })) {
            return;
          }
          let colorset = "";
          if (copyjson.color != null) {
            colorset = '<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + copyjson.color + ';"></div>';
          }
          let copyobject = $("#luckysheet-sheets-item" + copyindex);
          $("#luckysheet-sheet-container-c").append(replaceHtml(sheetHTML, {"index": copyjson.index, "active": "", "name": copyjson.name, "order": copyjson.order, "style": "", "colorset": colorset}));
          $("#luckysheet-sheets-item" + copyjson.index).insertAfter(copyobject);
          store_default.luckysheetfile.splice(copyarrindex + 1, 0, copyjson);
          $("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active");
          $("#luckysheet-sheets-item" + index2).addClass("luckysheet-sheets-item-active");
          $("#luckysheet-cell-main").append('<div id="luckysheet-datavisual-selection-set-' + index2 + '" class="luckysheet-datavisual-selection-set"></div>');
          cleargridelement(e);
          server_default.saveParam("shc", index2, {"copyindex": copyindex, "name": copyjson.name});
          _this.changeSheetExec(index2, void 0, void 0, true);
          _this.reOrderAllSheet();
          if (store_default.clearjfundo) {
            store_default.jfredo.push({
              "type": "copySheet",
              "copyindex": copyindex,
              "index": copyjson.index,
              "sheetIndex": copyjson.index
            });
          } else if (store_default.jfredo.length > 0) {
            let jfredostr = store_default.jfredo[store_default.jfredo.length - 1];
            if (jfredostr.type == "copySheet") {
              jfredostr.index = copyjson.index;
              jfredostr.sheetIndex = copyjson.index;
            }
          }
        },
        hasSheet: function(index2) {
          if (index2 == null) {
            return false;
          }
          index2 = this.getSheetIndex(index2);
          if (index2 == null) {
            return false;
          } else {
            return true;
          }
        },
        createSheetbydata: function(data, isrenew, isBefore = true) {
          let _this = this;
          let colorset = "";
          if (data.color != null) {
            colorset = '<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + data.color + ';"></div>';
          }
          $("#luckysheet-sheet-container-c").append(replaceHtml(sheetHTML, {"index": data.index, "active": "", "name": data.name, "order": data.order, "style": "", "colorset": colorset}));
          if (isBefore) {
            let previndex = data.order;
            if (previndex >= store_default.luckysheetfile.length) {
              previndex = store_default.luckysheetfile.length - 1;
              $("#luckysheet-sheets-item" + data.index).insertAfter($("#luckysheet-sheets-item" + store_default.luckysheetfile[previndex].index));
            } else {
              $("#luckysheet-sheets-item" + data.index).insertBefore($("#luckysheet-sheets-item" + store_default.luckysheetfile[previndex].index));
            }
          }
          store_default.luckysheetfile.push(data);
          $("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active");
          $("#luckysheet-sheets-item" + data.index).addClass("luckysheet-sheets-item-active");
          $("#luckysheet-cell-main").append('<div id="luckysheet-datavisual-selection-set-' + data.index + '" class="luckysheet-datavisual-selection-set"></div>');
          cleargridelement();
          if (isrenew != null) {
            server_default.saveParam("shre", null, {"reIndex": data.index});
            data.hide = 0;
            server_default.saveParam("sh", data.index, 0, {"op": "show", "cur": null});
          } else {
            server_default.saveParam("sha", null, data);
          }
          _this.changeSheetExec(data.index, data.isPivotTable, true);
          _this.reOrderAllSheet();
        },
        deleteSheet: function(index2) {
          let _this = this;
          if (store_default.allowEdit === false) {
            return;
          }
          let arrIndex = _this.getSheetIndex(index2);
          const file = store_default.luckysheetfile[arrIndex];
          if (!method_default.createHookFunction("sheetDeleteBefore", {sheet: file})) {
            return;
          }
          _this.setSheetHide(index2, true);
          $("#luckysheet-sheets-item" + index2).remove();
          $("#luckysheet-datavisual-selection-set-" + index2).remove();
          let removedsheet = store_default.luckysheetfile.splice(arrIndex, 1);
          _this.reOrderAllSheet();
          server_default.saveParam("shd", null, {"deleIndex": index2});
          if (store_default.clearjfundo) {
            removedsheet[0].type = "deleteSheet";
            store_default.jfredo.push(removedsheet[0]);
          }
          method_default.createHookFunction("sheetDeleteAfter", {sheet: file});
        },
        nulldata: null,
        getGridData: function(d) {
          let ret = [];
          for (let r2 = 0; r2 < d.length; r2++) {
            for (let c2 = 0; c2 < d[0].length; c2++) {
              if (d[r2][c2] == null) {
                continue;
              }
              ret.push({r: r2, c: c2, v: d[r2][c2]});
            }
          }
          return ret;
        },
        buildGridData: function(file) {
          let row = file.row == null ? store_default.defaultrowNum : file.row, column = file.column == null ? store_default.defaultcolumnNum : file.column, data = file.data && file.data.length > 0 ? file.data : datagridgrowth([], row, column), celldata = file.celldata;
          if (file.data && file.data.length > 0) {
            for (let i2 = 0; i2 < data.length; i2++) {
              for (let j = 0; j < data[0].length; j++) {
                setcellvalue(i2, j, data, data[i2][j]);
              }
            }
          } else {
            if (celldata && celldata.length > 0) {
              for (let i2 = 0; i2 < celldata.length; i2++) {
                let item2 = celldata[i2];
                let r2 = item2.r;
                let c2 = item2.c;
                let v = item2.v;
                if (r2 >= data.length) {
                  data = datagridgrowth(data, r2 - data.length + 1, 0);
                }
                if (c2 >= data[0].length) {
                  data = datagridgrowth(data, 0, c2 - data[0].length + 1);
                }
                setcellvalue(r2, c2, data, v);
              }
            }
          }
          luckysheetConfigsetting_default.autoFormatw = false;
          luckysheetConfigsetting_default.accuracy = void 0;
          return data;
        },
        cutGridData: function(d) {
          let rowindex = 0;
          for (let r2 = d.length - 1; r2 >= 0; r2--) {
            let isnull = true;
            for (let c2 = 0; c2 < d[0].length; c2++) {
              let value = getcellvalue(r2, c2);
              if (value != null && $.trim(value).length > 0) {
                isnull = false;
                break;
              }
            }
            if (!isnull) {
              break;
            } else {
              rowindex = r2;
            }
          }
          return d.slice(0, rowindex);
        },
        addGridData: function(celldata, row, column) {
          let data = datagridgrowth([], row, column);
          if (celldata != null) {
            for (let i2 = 0; i2 < celldata.length; i2++) {
              let item2 = celldata[i2];
              let r2 = item2.r;
              let c2 = item2.c;
              let v = item2.v;
              if (r2 >= data.length) {
                data = datagridgrowth(data, r2 - data.length + 1, 0);
              }
              if (c2 >= data[0].length) {
                data = datagridgrowth(data, 0, c2 - data[0].length + 1);
              }
              setcellvalue(r2, c2, data, v);
            }
          }
          return data;
        },
        sheetParamRestore: function(file, data) {
          store_default.luckysheet_select_save = file["luckysheet_select_save"];
          if (store_default.luckysheet_select_save == null || store_default.luckysheet_select_save.length == 0) {
            if (data[0] != null && data[0][0] != null && data[0][0].mc != null) {
              store_default.luckysheet_select_save = [{
                "row": [0, data[0][0].mc.rs - 1],
                "column": [0, data[0][0].mc.cs - 1]
              }];
            } else {
              store_default.luckysheet_select_save = [{
                "row": [0, 0],
                "column": [0, 0]
              }];
            }
          }
          store_default.luckysheet_selection_range = file["luckysheet_selection_range"] == null ? [] : file["luckysheet_selection_range"];
          store_default.config = file["config"] == null ? {} : file["config"];
          store_default.zoomRatio = file["zoomRatio"] == null ? 1 : file["zoomRatio"];
          if (file["defaultRowHeight"] != null) {
            store_default.defaultrowlen = parseFloat(file["defaultRowHeight"]);
          } else {
            store_default.defaultrowlen = luckysheetConfigsetting_default["defaultRowHeight"];
          }
          if (file["defaultColWidth"] != null) {
            store_default.defaultcollen = parseFloat(file["defaultColWidth"]);
          } else {
            store_default.defaultcollen = luckysheetConfigsetting_default["defaultColWidth"];
          }
          if (file["showGridLines"] != null) {
            let showGridLines2 = file["showGridLines"];
            if (showGridLines2 == 0 || showGridLines2 == false) {
              store_default.showGridLines = false;
            } else {
              store_default.showGridLines = true;
            }
          } else {
            store_default.showGridLines = true;
          }
        },
        initialjfFile: function(menu, title) {
          let _this = this;
          _this.getCurSheet();
          let file = store_default.luckysheetfile[_this.getSheetIndex(store_default.currentSheetIndex)];
          _this.nulldata = datagridgrowth([], store_default.defaultrowNum, store_default.defaultcolumnNum);
          let data = _this.buildGridData(file);
          let select_save = [];
          file.jfgird_select_save = file.jfgird_select_save || [];
          file.jfgird_select_save.forEach((item2) => select_save.push({"row": item2.row, "column": item2.column}));
          file.luckysheet_select_save = select_save;
          this.sheetParamRestore(file, data);
          let r2 = store_default.luckysheet_select_save[0].row[1], c2 = store_default.luckysheet_select_save[0].column[1];
          if (store_default.luckysheet_select_save.length > 1) {
            for (let i2 = 0; i2 < store_default.luckysheet_select_save.length; i2++) {
              if (store_default.luckysheet_select_save[i2].row[1] > r2) {
                r2 = store_default.luckysheet_select_save[i2].row[1];
              }
              if (store_default.luckysheet_select_save[i2].column[1] > c2) {
                c2 = store_default.luckysheet_select_save[i2].column[1];
              }
            }
          }
          menuButton_default.fontInitial(store_default.fontList);
          file.data = data;
          let rowheight = data.length;
          if (r2 > rowheight - 1) {
            rowheight = r2 + 1;
          }
          let colwidth = data[0].length;
          if (c2 > colwidth - 1) {
            colwidth = c2 + 1;
          }
          if (typeof luckysheetConfigsetting_default.beforeCreateDom == "function") {
            luckysheetConfigsetting_default.beforeCreateDom(luckysheet);
          }
          if (typeof luckysheetConfigsetting_default.workbookCreateBefore == "function") {
            luckysheetConfigsetting_default.workbookCreateBefore(luckysheet);
          }
          luckysheetcreatedom(colwidth, rowheight, data, menu, title);
          setTimeout(function() {
            tooltip_default.createHoverTip("#luckysheet_info_detail", ".luckysheet_info_detail_back, .luckysheet_info_detail_input, .luckysheet_info_detail_update");
            tooltip_default.createHoverTip("#luckysheet-wa-editor", ".luckysheet-toolbar-menu-button, .luckysheet-toolbar-button, .luckysheet-toolbar-combo-button");
            store_default.luckysheetTableContentHW = [
              $("#luckysheet-cell-main").width() + store_default.rowHeaderWidth - store_default.cellMainSrollBarSize,
              $("#luckysheet-cell-main").height() + store_default.columnHeaderHeight - store_default.cellMainSrollBarSize
            ];
            $("#luckysheetTableContent, #luckysheetTableContentF").attr({
              width: Math.ceil(store_default.luckysheetTableContentHW[0] * store_default.devicePixelRatio),
              height: Math.ceil(store_default.luckysheetTableContentHW[1] * store_default.devicePixelRatio)
            }).css({
              width: store_default.luckysheetTableContentHW[0],
              height: store_default.luckysheetTableContentHW[1]
            }).get(0).getContext("2d");
            let locale_info = locale_default().info;
            let key = server_default.gridKey;
            let cahce_key = key + "__qkcache";
            let ini = function() {
              file["load"] = "1";
              _this.createSheet();
              let execF = function() {
                _this.mergeCalculation(file["index"]);
                _this.setSheetParam(false);
                _this.storeSheetParam();
                _this.restoreselect();
                _this.CacheNotLoadControll = [];
                _this.restoreCache();
                formula_default.execFunctionGroupForce(luckysheetConfigsetting_default.forceCalculation);
                _this.restoreSheetAll(store_default.currentSheetIndex);
                $("#luckysheet_info_detail_save").html(locale_info.detailSave);
                if (!!file.isPivotTable) {
                  store_default.luckysheetcurrentisPivotTable = true;
                } else {
                  store_default.luckysheetcurrentisPivotTable = false;
                  $("#luckysheet-modal-dialog-slider-pivot").hide();
                }
                menuToolBarWidth();
                luckysheetsizeauto();
                if (file["scrollLeft"] != null && file["scrollLeft"] > 0) {
                  $("#luckysheet-scrollbar-x").scrollLeft(file["scrollLeft"]);
                } else {
                  $("#luckysheet-scrollbar-x").scrollLeft(0);
                }
                if (file["scrollTop"] != null && file["scrollTop"] > 0) {
                  $("#luckysheet-scrollbar-y").scrollTop(file["scrollTop"]);
                } else {
                  $("#luckysheet-scrollbar-y").scrollTop(0);
                }
                arrayRemoveItem(store_default.asyncLoad, "core");
                if (luckysheetConfigsetting_default.pointEdit) {
                  setTimeout(function() {
                    store_default.loadingObj.close();
                  }, 0);
                } else {
                  setTimeout(function() {
                    store_default.loadingObj.close();
                  }, 500);
                }
              };
              let loadSheetUrl = server_default.loadSheetUrl;
              if (loadSheetUrl == "") {
                _this.loadOtherFile(file);
                execF();
              } else {
                let sheetindexset = _this.checkLoadSheetIndex(file);
                let sheetindex = [];
                for (let i2 = 0; i2 < sheetindexset.length; i2++) {
                  let item2 = sheetindexset[i2];
                  if (item2 == file["index"]) {
                    continue;
                  }
                  sheetindex.push(item2);
                }
                if (sheetindex.length === 0) {
                  execF();
                  return;
                }
                $.post(loadSheetUrl, {"gridKey": server_default.gridKey, "index": sheetindex.join(",")}, function(d) {
                  let dataset = new Function("return " + d)();
                  for (let item2 in dataset) {
                    if (item2 == file["index"]) {
                      continue;
                    }
                    let otherfile = store_default.luckysheetfile[_this.getSheetIndex(item2)];
                    if (otherfile["load"] == null || otherfile["load"] == "0") {
                      otherfile.celldata = dataset[item2.toString()];
                      otherfile["data"] = _this.buildGridData(otherfile);
                      otherfile["load"] = "1";
                    }
                  }
                  execF();
                });
              }
            };
            try {
              localforage.getItem(cahce_key).then(function(readValue) {
                if (readValue != null) {
                  _this.CacheNotLoadControll = readValue;
                }
                server_default.clearcachelocaldata(function() {
                  ini();
                });
              });
            } catch (e) {
              ini();
              console.log("\u7F13\u5B58\u64CD\u4F5C\u5931\u8D25");
            }
          }, 1);
        },
        storeSheetParam: function() {
          let index2 = this.getSheetIndex(store_default.currentSheetIndex);
          let file = store_default.luckysheetfile[index2];
          file["config"] = store_default.config;
          file["visibledatarow"] = store_default.visibledatarow;
          file["visibledatacolumn"] = store_default.visibledatacolumn;
          file["ch_width"] = store_default.ch_width;
          file["rh_height"] = store_default.rh_height;
          file["luckysheet_select_save"] = $.extend(true, [], store_default.luckysheet_select_save);
          file["luckysheet_selection_range"] = $.extend(true, [], store_default.luckysheet_selection_range);
          if ($("#luckysheet-scrollbar-x")[0].scrollWidth > $("#luckysheet-scrollbar-x")[0].offsetWidth) {
            file["scrollLeft"] = $("#luckysheet-scrollbar-x").scrollLeft();
          }
          if ($("#luckysheet-scrollbar-y")[0].scrollHeight > $("#luckysheet-scrollbar-y")[0].offsetHeight) {
            file["scrollTop"] = $("#luckysheet-scrollbar-y").scrollTop();
          }
          file["zoomRatio"] = store_default.zoomRatio;
        },
        setSheetParam: function(isload = true) {
          let index2 = this.getSheetIndex(store_default.currentSheetIndex);
          let file = store_default.luckysheetfile[index2];
          store_default.flowdata = file["data"];
          editor_default.webWorkerFlowDataCache(store_default.flowdata);
          formula_default.execFunctionGlobalData = null;
          window.luckysheet_getcelldata_cache = null;
          this.sheetParamRestore(file, store_default.flowdata);
          if (file["freezen"] == null) {
            freezen_default.freezenhorizontaldata = null;
            freezen_default.freezenverticaldata = null;
          } else {
            freezen_default.freezenhorizontaldata = file["freezen"].horizontal == null ? null : file["freezen"].horizontal.freezenhorizontaldata;
            freezen_default.freezenverticaldata = file["freezen"].vertical == null ? null : file["freezen"].vertical.freezenverticaldata;
          }
          if (isload) {
            rhchInit(store_default.flowdata.length, store_default.flowdata[0].length);
          }
          postil_default.buildAllPs(store_default.flowdata);
          imageCtrl_default.currentImgId = null;
          imageCtrl_default.images = file.images;
          imageCtrl_default.allImagesShow();
          imageCtrl_default.init();
          dataVerificationCtrl_default.dataVerification = file.dataVerification;
          dataVerificationCtrl_default.init();
          hyperlinkCtrl_default.hyperlink = file.hyperlink;
          hyperlinkCtrl_default.init();
          createFilterOptions(file["filter_select"], file["filter"]);
        },
        restoreselect: function() {
          let index2 = this.getSheetIndex(store_default.currentSheetIndex);
          let file = store_default.luckysheetfile[index2];
          selectHightlightShow(true);
          selectionCopyShow();
          if (file["scrollLeft"] != null && file["scrollLeft"] > 0) {
            $("#luckysheet-scrollbar-x").scrollLeft(file["scrollLeft"]);
          } else {
            $("#luckysheet-scrollbar-x").scrollLeft(0);
          }
          if (file["scrollTop"] != null && file["scrollTop"] > 0) {
            $("#luckysheet-scrollbar-y").scrollTop(file["scrollTop"]);
          } else {
            $("#luckysheet-scrollbar-y").scrollTop(0);
          }
        },
        storeSheetParamALL: function() {
          let _this = this;
          _this.storeSheetParam();
          let index2 = _this.getSheetIndex(store_default.currentSheetIndex);
          store_default.luckysheetfile[index2]["data"] = store_default.flowdata;
          store_default.luckysheetfile[index2]["config"] = $.extend(true, {}, store_default.config);
        },
        mergeCalculationSheet: {},
        mergeCalculation: function(index2) {
          let file = store_default.luckysheetfile[this.getSheetIndex(index2)];
          let config = file.config, data = file.data;
          if (config == null) {
            return;
          }
          let mergeConfig = config.merge;
          if (mergeConfig == null || index2 in this.mergeCalculationSheet || file["autoCalculationMerge"] === false) {
            return;
          }
          this.mergeCalculationSheet[index2] = 1;
          for (let x in mergeConfig) {
            let r2 = parseInt(x.substr(0, x.indexOf("_")));
            let c2 = parseInt(x.substr(x.indexOf("_") + 1));
            let mcInfo = mergeConfig[x];
            if (data[r2][c2] == null) {
              data[r2][c2] = {};
            }
            data[r2][c2]["mc"] = {
              r: r2,
              c: c2,
              rs: mcInfo.rs,
              cs: mcInfo.cs
            };
            for (let ir = r2; ir < r2 + mcInfo.rs; ir++) {
              for (let ic = c2; ic < c2 + mcInfo.cs; ic++) {
                if (ir == r2 && ic == c2) {
                  continue;
                }
                if (data[ir][ic] == null) {
                  data[ir][ic] = {};
                }
                data[ir][ic]["mc"] = {
                  r: r2,
                  c: c2
                };
              }
            }
          }
        },
        loadOtherFile: function(file) {
          let _this = this;
          for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
            let otherfile = store_default.luckysheetfile[i2];
            if (otherfile.index == file.index) {
              continue;
            }
            if (otherfile["load"] == null || otherfile["load"] == "0") {
              otherfile["data"] = _this.buildGridData(otherfile);
              otherfile["load"] = "1";
            }
          }
        },
        changeSheet: function(index2, isPivotInitial2, isNewSheet, isCopySheet) {
          if (isEditMode()) {
            return;
          }
          let _this = this;
          if (index2 == store_default.currentSheetIndex) {
            return;
          }
          if (server_default.allowUpdate) {
            $("#luckysheet-cell-main #luckysheet-multipleRange-show").empty();
            server_default.multipleIndex = 0;
          }
          let file = store_default.luckysheetfile[_this.getSheetIndex(index2)];
          if (isNewSheet) {
            method_default.createHookFunction("sheetCreateAfter", {sheet: file});
          }
          if (isCopySheet) {
            method_default.createHookFunction("sheetCopyAfter", {sheet: file});
          }
          method_default.createHookFunction("sheetActivate", index2, isPivotInitial2, isNewSheet);
          $("#luckysheet-filter-selected-sheet" + store_default.currentSheetIndex + ", #luckysheet-filter-options-sheet" + store_default.currentSheetIndex).hide();
          $("#luckysheet-filter-selected-sheet" + index2 + ", #luckysheet-filter-options-sheet" + index2).show();
          _this.storeSheetParamALL();
          _this.setCurSheet(index2);
          if (!!file.isPivotTable) {
            store_default.luckysheetcurrentisPivotTable = true;
            if (!isPivotInitial2) {
              pivotTable_default.changePivotTable(index2);
            }
          } else {
            store_default.luckysheetcurrentisPivotTable = false;
            $("#luckysheet-modal-dialog-slider-pivot").hide();
            luckysheetsizeauto(false);
          }
          let load = file["load"];
          if (load != null) {
            let data = _this.buildGridData(file);
            file.data = data;
            _this.mergeCalculation(index2);
            _this.setSheetParam(true);
            _this.showSheet();
            setTimeout(function() {
              formula_default.execFunctionGroup();
              luckysheetrefreshgrid();
              server_default.saveParam("shs", null, store_default.currentSheetIndex);
            }, 1);
          } else {
            let loadSheetUrl = server_default.loadSheetUrl;
            if (loadSheetUrl == "" || store_default.luckysheetcurrentisPivotTable || !!isNewSheet) {
              let data = _this.buildGridData(file);
              file["data"] = data;
              file["load"] = "1";
              _this.mergeCalculation(index2);
              _this.setSheetParam();
              _this.showSheet();
              setTimeout(function() {
                _this.restoreCache();
                formula_default.execFunctionGroupForce(luckysheetConfigsetting_default.forceCalculation);
                _this.restoreSheetAll(store_default.currentSheetIndex);
                luckysheetrefreshgrid();
              }, 1);
              server_default.saveParam("shs", null, store_default.currentSheetIndex);
            } else {
              $("#luckysheet-grid-window-1").append(luckysheetlodingHTML());
              let sheetindex = _this.checkLoadSheetIndex(file);
              $.post(loadSheetUrl, {"gridKey": server_default.gridKey, "index": sheetindex.join(",")}, function(d) {
                let dataset = new Function("return " + d)();
                file.celldata = dataset[index2.toString()];
                let data = _this.buildGridData(file);
                setTimeout(function() {
                  store_default.loadingObj.close();
                }, 500);
                for (let item2 in dataset) {
                  if (item2 == index2) {
                    continue;
                  }
                  let otherfile = store_default.luckysheetfile[_this.getSheetIndex(item2)];
                  if (otherfile["load"] == null || otherfile["load"] == "0") {
                    otherfile.celldata = dataset[item2.toString()];
                    otherfile["data"] = _this.buildGridData(otherfile);
                    otherfile["load"] = "1";
                  }
                }
                file["data"] = data;
                file["load"] = "1";
                _this.mergeCalculation(index2);
                _this.setSheetParam();
                _this.showSheet();
                setTimeout(function() {
                  _this.restoreCache();
                  formula_default.execFunctionGroupForce(luckysheetConfigsetting_default.forceCalculation);
                  _this.restoreSheetAll(store_default.currentSheetIndex);
                  luckysheetrefreshgrid();
                }, 1);
                server_default.saveParam("shs", null, store_default.currentSheetIndex);
              });
            }
          }
          $("#luckysheet-cell-main .luckysheet-datavisual-selection-set").hide();
          $("#luckysheet-datavisual-selection-set-" + index2).show();
          renderChartShow(index2);
          freezen_default.initialFreezen(index2);
          _this.restoreselect();
        },
        checkLoadSheetIndexToDataIndex: {},
        checkLoadSheetIndex: function(file) {
          let calchain = formula_default.getAllFunctionGroup();
          let chart2 = file.chart;
          let pivotTable2 = file.pivotTable;
          let ret = [], cache = {};
          if (file.index in this.checkLoadSheetIndexToDataIndex) {
            return [];
          }
          ret.push(file.index);
          cache[file.index.toString()] = 1;
          this.checkLoadSheetIndexToDataIndex[file.index] = 1;
          if (calchain != null) {
            let dataIndexList = {};
            for (let i2 = 0; i2 < calchain.length; i2++) {
              let f = calchain[i2];
              let dataindex = f.index;
              let formulaTxt = getcellFormula(f.r, f.c, dataindex);
              if (formulaTxt == null) {
                let file2 = store_default.luckysheetfile[this.getSheetIndex(dataindex)];
                file2.data = this.buildGridData(file2);
                formulaTxt = getcellFormula(f.r, f.c, dataindex);
                if (formulaTxt == null) {
                  continue;
                }
              }
              if (formulaTxt.indexOf("!") == -1) {
                formula_default.addToSheetIndexList(formulaTxt, dataindex);
              } else if (formula_default.formulaContainSheetList != null && formula_default.formulaContainSheetList[formulaTxt] != null) {
                for (let dataSheetIndex in formula_default.formulaContainSheetList[formulaTxt]) {
                  dataIndexList[dataSheetIndex] = 1;
                }
              } else {
                formula_default.functionParser(formulaTxt, (str) => {
                  formula_default.addToCellList(formulaTxt, str);
                  if (str.indexOf("!") > -1) {
                    let name2 = str.substr(0, str.indexOf("!"));
                    let sheet = this.getSheetByName(name2);
                    if (sheet != null) {
                      let dataSheetIndex = sheet.index;
                      dataIndexList[dataSheetIndex] = 1;
                      formula_default.addToSheetIndexList(formulaTxt, dataSheetIndex);
                    }
                  }
                });
                if (formula_default.formulaContainSheetList[formulaTxt] == null) {
                  formula_default.addToSheetIndexList(formulaTxt, dataindex);
                }
              }
              if (dataindex == null) {
                continue;
              }
            }
            for (let index2 in dataIndexList) {
              let dataindex = index2;
              if (cache[dataindex.toString()] == null) {
                ret.push(dataindex);
                cache[dataindex.toString()] = 1;
                this.checkLoadSheetIndexToDataIndex[dataindex] = 1;
              }
            }
          }
          if (chart2 != null) {
            for (let i2 = 0; i2 < chart2.length; i2++) {
              let cc = chart2[i2];
              let dataindex = cc.dataSheetIndex;
              if (dataindex == null) {
                continue;
              }
              if (cache[dataindex.toString()] == null) {
                ret.push(dataindex);
                cache[dataindex.toString()] = 1;
              }
            }
          }
          if (pivotTable2 != null) {
            let dataindex = pivotTable2.pivotDataSheetIndex;
            if (dataindex != null && cache[dataindex.toString()] == null) {
              ret.push(dataindex);
              cache[dataindex.toString()] = 1;
            }
          }
          return ret;
        },
        showSheet: function() {
          $("#luckysheet-cell-flow_0").css({"width": store_default.ch_width, "top": "-1px"});
          $("#luckysheet-sheettable_0").css({"width": store_default.ch_width - 1, "height": store_default.rh_height});
          $("#luckysheetrowHeader_0").css("height", store_default.rh_height);
          $("#luckysheet-cols-h-cells_0").css("width", store_default.ch_width);
          $("#luckysheet-scrollbar-x div").width(store_default.ch_width);
          $("#luckysheet-scrollbar-y div").height(store_default.rh_height + store_default.columnHeaderHeight - store_default.cellMainSrollBarSize - 3);
          let index2 = this.getSheetIndex(store_default.currentSheetIndex);
          let file = store_default.luckysheetfile[index2];
          store_default.scrollRefreshSwitch = false;
          if (file["scrollLeft"] != null && file["scrollLeft"] > 0) {
            $("#luckysheet-scrollbar-x").scrollLeft(file["scrollLeft"] * store_default.zoomRatio);
          } else {
            $("#luckysheet-scrollbar-x").scrollLeft(0);
          }
          if (file["scrollTop"] != null && file["scrollTop"] > 0) {
            $("#luckysheet-scrollbar-y").scrollTop(file["scrollTop"] * store_default.zoomRatio);
          } else {
            $("#luckysheet-scrollbar-y").scrollTop(0);
          }
          setTimeout(() => {
            store_default.scrollRefreshSwitch = true;
          }, 0);
          zoomNumberDomBind(store_default.zoomRatio);
        },
        setCurSheet: function(index2) {
          for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
            if (store_default.luckysheetfile[i2]["index"] == index2) {
              store_default.luckysheetfile[i2].status = 1;
            } else {
              store_default.luckysheetfile[i2].status = 0;
            }
          }
          store_default.currentSheetIndex = index2;
        },
        getSheetIndex: function(index2) {
          for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
            if (store_default.luckysheetfile[i2]["index"] == index2) {
              return i2;
            }
          }
          return null;
        },
        changeSheetExec: function(index2, isPivotInitial2, isNewSheet, isCopySheet) {
          let $sheet = $("#luckysheet-sheets-item" + index2);
          window.luckysheet_getcelldata_cache = null;
          $("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active");
          $sheet.addClass("luckysheet-sheets-item-active").show();
          cleargridelement();
          this.changeSheet(index2, isPivotInitial2, isNewSheet, isCopySheet);
          $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
          if (formula_default.rangestart) {
            formula_default.createRangeHightlight();
          }
          this.sheetBarShowAndHide(index2);
        },
        sheetArrowShowAndHide() {
          const $wrap = $("#luckysheet-sheet-container-c");
          if (!$wrap.length)
            return;
          var sw = $wrap[0].scrollWidth;
          var w = Math.ceil($wrap.width());
          if (sw > w) {
            if (luckysheetConfigsetting_default.showsheetbarConfig.sheet) {
              $("#luckysheet-sheet-area .luckysheet-sheets-scroll").css("display", "inline-block");
              $("#luckysheet-sheet-container .docs-sheet-fade-left").show();
            }
          } else {
            $("#luckysheet-sheet-area .luckysheet-sheets-scroll").css("display", "none");
            $("#luckysheet-sheet-container .docs-sheet-fade-left").hide();
          }
        },
        sheetBarShowAndHide(index2) {
          let $c = $("#luckysheet-sheet-container-c");
          if (index2 != null) {
            let $sheet = $("#luckysheet-sheets-item" + index2);
            $c.scrollLeft($sheet.offset().left);
          }
          let c_width = $c.width(), c_srollwidth = $c[0].scrollWidth, scrollLeft = $c.scrollLeft();
          if (scrollLeft <= 0) {
            $("#luckysheet-sheet-container .docs-sheet-fade-left").hide();
          } else {
            $("#luckysheet-sheet-container .docs-sheet-fade-left").show();
          }
          if (c_width + scrollLeft >= c_srollwidth) {
            $("#luckysheet-sheet-container .docs-sheet-fade-right").hide();
          } else {
            $("#luckysheet-sheet-container .docs-sheet-fade-right").show();
          }
        },
        delChart: function(chart_id, sheetIndex) {
          let index2 = this.getSheetIndex(sheetIndex);
          let file = store_default.luckysheetfile[index2];
          if (file.chart == null) {
            file.chart = [];
          } else {
            for (let i2 = 0; i2 < file.chart.length; i2++) {
              if (file.chart[i2].chart_id == chart_id) {
                store_default.luckysheetfile[index2].chart.splice(i2, 1);
                break;
              }
            }
          }
        },
        saveChart: function(json2) {
          let index2 = this.getSheetIndex(json2.sheetIndex);
          let file = store_default.luckysheetfile[index2];
          if (file.chart == null) {
            file.chart = [];
            file.chart.push(json2);
          } else {
            for (let i2 = 0; i2 < file.chart.length; i2++) {
              if (file.chart[i2].chart_id == json2.chart_id) {
                let old = $.extend(true, {}, file.chart[i2]);
                file.chart[i2] = $.extend(true, {}, old, json2);
                return;
              }
            }
            file.chart.push(json2);
          }
        },
        getChart: function(sheetIndex, chart_id) {
          let index2 = this.getSheetIndex(sheetIndex);
          let file = store_default.luckysheetfile[index2];
          if (file.chart == null) {
            return null;
          } else {
            for (let i2 = 0; i2 < file.chart.length; i2++) {
              if (file.chart[i2].chart_id == chart_id) {
                return file.chart[i2];
              }
            }
            return null;
          }
        },
        getRangetxt: function(sheetIndex, range2, currentIndex) {
          let sheettxt = "";
          if (currentIndex == null) {
            currentIndex = store_default.currentSheetIndex;
          }
          if (sheetIndex != currentIndex) {
            sheettxt = store_default.luckysheetfile[this.getSheetIndex(sheetIndex)].name + "!";
          }
          let row0 = range2["row"][0], row1 = range2["row"][1];
          let column0 = range2["column"][0], column1 = range2["column"][1];
          if (row0 == null && row1 == null) {
            return sheettxt + chatatABC(column0) + ":" + chatatABC(column1);
          } else if (column0 == null && column1 == null) {
            return sheettxt + (row0 + 1) + ":" + (row1 + 1);
          } else {
            if (column0 == column1 && row0 == row1) {
              return sheettxt + chatatABC(column0) + (row0 + 1);
            } else {
              return sheettxt + chatatABC(column0) + (row0 + 1) + ":" + chatatABC(column1) + (row1 + 1);
            }
          }
        },
        getSheetName: function(sheetIndex) {
          if (sheetIndex == null) {
            sheetIndex = store_default.currentSheetIndex;
          }
          return store_default.luckysheetfile[this.getSheetIndex(sheetIndex)].name;
        },
        getSheetMerge: function() {
          if (store_default.config.merge == null) {
            return null;
          }
          return store_default.config.merge;
        },
        getSheetData: function(sheetIndex) {
          if (sheetIndex == null) {
            sheetIndex = store_default.currentSheetIndex;
          }
          return store_default.luckysheetfile[this.getSheetIndex(sheetIndex)].data;
        },
        getSheetConfig: function(sheetIndex) {
          let _this = this;
          if (sheetIndex == null) {
            sheetIndex = store_default.currentSheetIndex;
          }
          let config = store_default.luckysheetfile[_this.getSheetIndex(sheetIndex)].config;
          if (config == null) {
            store_default.luckysheetfile[_this.getSheetIndex(sheetIndex)].config = {};
          }
          return store_default.luckysheetfile[_this.getSheetIndex(sheetIndex)].config;
        },
        restoreFilter: function(sheetIndex) {
          let index2 = this.getSheetIndex(sheetIndex);
          let file = store_default.luckysheetfile[index2];
          if (getObjType(file.filter_select) == "string") {
            file.filter_select = JSON.parse(file.filter_select);
          }
          if (file.filter_select == null || file.filter_select.row == null || file.filter_select.column == null) {
            return;
          }
          createFilterOptions(file.filter_select);
          if (getObjType(file.filter) != "object") {
            if (file.filter != null && getObjType(file.filter) == "string") {
              file.filter = JSON.parse(file.filter);
            }
          }
          let rowhidden = {};
          if (file.config != null && file.config.rowhidden != null) {
            rowhidden = file.config.rowhidden;
          }
          $("#luckysheet-filter-options-sheet" + sheetIndex + " .luckysheet-filter-options").each(function(i2) {
            if (file.filter == null) {
              return false;
            }
            let $top = $(this);
            let item2 = file.filter[i2];
            if (item2 == null) {
              return true;
            }
            if (getObjType(item2) != "object") {
              item2 = JSON.parse(item2);
            }
            labelFilterOptionState($top, item2.optionstate, item2.rowhidden, item2.caljs, false, item2.st_r, item2.ed_r, item2.cindex, item2.st_c, item2.ed_c);
            rowhidden = $.extend(true, rowhidden, item2.rowhidden);
          });
          if (file.config == null) {
            file.config = {};
          }
          file.config["rowhidden"] = rowhidden;
          store_default.config = file.config;
          jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length, false);
        },
        restorePivot: function(sheetIndex) {
          let index2 = this.getSheetIndex(sheetIndex);
          let file = store_default.luckysheetfile[index2];
          if (!file.isPivotTable) {
            return;
          }
          pivotTable_default.getCellData(sheetIndex);
          pivotTable_default.initialPivotManage(true);
          pivotTable_default.refreshPivotTable(false);
        },
        restoreSheetAll: function(sheetIndex) {
          let _this = this;
          _this.restorePivot(sheetIndex);
          _this.restoreFilter(sheetIndex);
          _this.restoreFreezen(sheetIndex);
        },
        restoreFreezen: function(sheetIndex) {
          freezen_default.initialFreezen(sheetIndex);
        },
        restoreCache: function() {
          let _this = this;
          let data = _this.CacheNotLoadControll;
          _this.CacheNotLoadControll = [];
          if (data.length == 0) {
            return;
          }
          for (let i2 = 0; i2 < data.length; i2++) {
            let item2 = data[i2];
            _this.execCache(item2);
          }
        },
        CacheNotLoadControll: [],
        execCache: function(item2) {
          let _this = this;
          let type = item2.t;
          let index2 = item2.i;
          let value = item2.v;
          let file = store_default.luckysheetfile[_this.getSheetIndex(index2)];
          if (type == "sha") {
            store_default.luckysheetfile.push(value);
          } else if (type == "shc") {
            let copyjson = $.extend(true, {}, store_default.luckysheetfile[_this.getSheetIndex(value.copyindex)]);
            copyjson.index = index2;
            store_default.luckysheetfile.push(copyjson);
          } else if (type == "shd") {
            store_default.luckysheetfile.splice(value.deleIndex, 1);
          } else if (type == "shr") {
            for (let pos in value) {
              store_default.luckysheetfile[_this.getSheetIndex(pos)].order = value[pos];
            }
          }
          if ((file == null || file.load != "1") && !(type in {"sha": 0, "shc": 0, "shd": 0, "shr": 0})) {
            _this.CacheNotLoadControll.push(item2);
            return;
          }
          if (type == "v") {
            let r2 = item2.r, c2 = item2.c, v = item2.v;
            let data = _this.getSheetData(index2);
            file.data[r2][c2] = v;
          } else if (type == "fc") {
            let op = item2.op, pos = item2.pos;
            if (getObjType(value) != "object") {
              value = new Function("return " + value)();
            }
            let r2 = value.r, c2 = value.c;
            if (op == "del") {
              formula_default.delFunctionGroup(r2, c2, index2);
            } else {
              formula_default.insertUpdateFunctionGroup(r2, c2, index2);
            }
          } else if (type == "cg") {
            let v = value, k = item2.k;
            let config1 = _this.getSheetConfig(index2);
            if (!(k in config1)) {
              config1[k] = {};
            }
            for (let key in v) {
              config1[k][key] = v[key];
            }
            store_default.config = config1;
          } else if (type == "f") {
            let v = value, op = item2.op, pos = item2.pos;
            let filter = file.filter;
            if (filter == null) {
              filter = {};
            }
            if (op == "upOrAdd") {
              filter[pos] = v;
            } else if (op == "del") {
              delete filter[pos];
            }
          } else if (type == "fsc") {
            file.filter = null;
            file.filter_select = null;
          } else if (type == "fsr") {
            let v = value;
            file.filter = v.filter;
            file.filter_select = v.filter_select;
          } else if (type == "sh") {
            let op = item2.op, cur = item2.cur, v = value;
            if (op == "hide") {
              file.status = 0;
              store_default.luckysheetfile[_this.getSheetIndex(cur)].status = 1;
            } else if (op == "show") {
              for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
                store_default.luckysheetfile[i2].status = 0;
              }
              file.status = 1;
            }
          } else if (type == "all") {
            let k = item2.k, s = item2.s;
            if (s && getObjType(value) != "object") {
              file[k] = JSON.stringify(value);
            } else {
              file[k] = value;
            }
          } else if (type == "c") {
            let op = item2.op, cid = item2.cid;
            if (op == "add") {
              file.chart.push(value);
            } else if (op == "xy" || op == "wh" || op == "update") {
              for (let i2 = 0; i2 < file.chart.length; i2++) {
                if (file.chart[i2].chart_id == cid) {
                  for (let item3 in file.chart[i2]) {
                    for (let vitem in value) {
                      if (item3 == vitem) {
                        file.chart[i2][item3] = value[vitem];
                      }
                    }
                  }
                  return;
                }
              }
            } else if (op == "del") {
              for (let i2 = 0; i2 < file.chart.length; i2++) {
                if (file.chart[i2].chart_id == cid) {
                  file.chart.splice(i2, 1);
                  return;
                }
              }
            }
          } else if (type == "drc") {
            let rc = item2.rc, index3 = value.index, len = value.len;
            let celldata = file.celldata;
            if (rc == "r") {
              for (let i2 = 0; celldata.length == 0; i2++) {
                let cell = celldata[i2];
                if (cell.r >= index3 && cell.r < index3 + len) {
                  delete celldata[i2];
                } else if (cell.r >= index3 + len) {
                  cell.r -= len;
                }
              }
              file.row -= len;
            } else {
              for (let i2 = 0; celldata.length == 0; i2++) {
                let cell = celldata[i2];
                if (cell.c >= index3 && cell.c < index3 + len) {
                  delete celldata[i2];
                } else if (cell.c >= index3 + len) {
                  cell.c -= len;
                }
              }
              file.column -= len;
            }
            let ret = [];
            for (let i2 = 0; i2 < celldata.length; i2++) {
              if (celldata[i2] != null) {
                ret.push(celldata[i2]);
              }
            }
            file.celldata = ret;
            let mtype, mst, med;
            if (rc == "r") {
              mtype = "row";
            } else {
              mtype = "column";
            }
            mst = index3;
            med = index3 + len - 1;
            luckysheetdeletetable(mtype, mst, med, true);
          } else if (type == "arc") {
            let rc = item2.rc, index3 = value.index, len = value.len;
            let celldata = file.celldata;
            if (rc == "r") {
              for (let i2 = 0; i2 < celldata.length; i2++) {
                let cell = celldata[i2];
                if (cell.r > index3) {
                  cell.r += len;
                }
              }
              file.row += len;
            } else {
              for (let i2 = 0; i2 < celldata.length; i2++) {
                let cell = celldata[i2];
                if (cell.c > index3) {
                  cell.c += len;
                }
              }
              file.column += len;
            }
            let mtype;
            if (rc == "r") {
              mtype = "row";
            } else {
              mtype = "column";
            }
            luckysheetextendtable(mtype, index3, len, true);
          } else if (type == "na") {
            server_default.saveParam("na", null, value);
          } else if (type == "thumb") {
            setTimeout(function() {
              _this.imageRequest();
            }, 2e3);
          }
        }
      };
      sheetmanage_default = sheetmanage;
    }
  });

  // src/global/formula.js
  var luckysheetformula, formula_default;
  var init_formula = __esm({
    "src/global/formula.js"() {
      init_util();
      init_get();
      init_set();
      init_constant();
      init_sheetmanage();
      init_menuButton();
      init_server();
      init_freezen();
      init_protection();
      init_dataVerificationCtrl();
      init_select();
      init_validate();
      init_datecontroll();
      init_getRowlen();
      init_getdata();
      init_setdata();
      init_format();
      init_editor();
      init_tooltip();
      init_location();
      init_cursorPos();
      init_refresh();
      init_inlineString();
      init_func();
      init_store();
      init_locale();
      init_json();
      init_method();
      luckysheetformula = {
        error: {
          v: "#VALUE!",
          n: "#NAME?",
          na: "#N/A",
          r: "#REF!",
          d: "#DIV/0!",
          nm: "#NUM!",
          nl: "#NULL!",
          sp: "#SPILL!"
        },
        errorInfo: function(err) {
          return err;
        },
        errorParamCheck: function(thisp, data, i2) {
          let type, require2;
          let _locale = locale_default();
          let locale_formulaMore = _locale.formulaMore;
          if (i2 < thisp.length) {
            type = thisp[i2].type;
            require2 = thisp[i2].require;
          } else {
            type = thisp[thisp.length - 1].type;
            require2 = thisp[thisp.length - 1].require;
          }
          if (require2 == "o" && (data == null || data == "")) {
            return [true, locale_formulaMore.tipSuccessText];
          }
          if (type.indexOf("all") > -1) {
            return [true, locale_formulaMore.tipSuccessText];
          } else {
            if (type.indexOf("range") > -1 && (getObjType(data) == "object" || getObjType(data) == "array")) {
              return [true, locale_formulaMore.tipSuccessText];
            }
            if (type.indexOf("number") > -1 && (isRealNum(data) || getObjType(data) == "boolean")) {
              return [true, locale_formulaMore.tipSuccessText];
            }
            if (type.indexOf("string") > -1 && getObjType(data) == "string") {
              return [true, locale_formulaMore.tipSuccessText];
            }
            if (type.indexOf("date") > -1 && isdatetime(data)) {
              return [true, locale_formulaMore.tipSuccessText];
            }
            return [false, locale_formulaMore.tipParamErrorText];
          }
        },
        getPureValueByData: function(data) {
          if (data.length == 0) {
            return [];
          }
          let output = [];
          if (getObjType(data) == "array") {
            if (getObjType(data[0]) == "array") {
              for (let r2 = 0; r2 < data.length; r2++) {
                let row = [];
                for (let c2 = 0; c2 < data[0].length; c2++) {
                  let cell = data[r2][c2];
                  if (getObjType(cell) == "object") {
                    row.push(cell.v);
                  } else {
                    row.push(cell);
                  }
                }
                output.push(row);
              }
            } else {
              for (let i2 = 0; i2 < data.length; i2++) {
                let cell = data[i2];
                if (getObjType(cell) == "object") {
                  output.push(cell.v);
                } else {
                  output.push(cell);
                }
              }
            }
          } else {
            let cell = data;
            if (getObjType(cell) == "object") {
              output.push(cell.v);
            } else {
              output.push(cell);
            }
          }
          return output;
        },
        readCellDataToOneArray: function(rangeValue) {
          let _this = this;
          if (rangeValue == null) {
            return [];
          }
          if (getObjType(rangeValue) != "object") {
            return [rangeValue];
          }
          let dataformat = [];
          let data = [];
          if (rangeValue != null && rangeValue.data != null) {
            data = rangeValue.data;
          } else if (rangeValue != null && !isRealNull(rangeValue.v)) {
            return [rangeValue.v];
          } else {
            return [];
          }
          if (getObjType(data) == "array") {
            data = _this.getPureValueByData(data);
          } else if (getObjType(data) == "object") {
            data = data.v;
            return [data];
          } else {
            if (/\{.*?\}/.test(data)) {
              data = data.replace(/\{/g, "[").replace(/\}/g, "]");
            }
            data = new Function("return " + data)();
          }
          if (getObjType(data[0]) == "array") {
            for (let i2 = 0; i2 < data.length; i2++) {
              dataformat = dataformat.concat(data[i2]);
            }
          } else {
            dataformat = data;
          }
          return dataformat;
        },
        getValueByFuncData: function(value, arg) {
          if (value == null) {
            return null;
          }
          let _this = this;
          if (getObjType(value) == "array") {
            if (arg == "avg") {
              return luckysheet_function.AVERAGE.f.apply(luckysheet_function.AVERAGE, value);
            } else if (arg == "sum") {
              return luckysheet_function.SUM.f.apply(luckysheet_function.SUM, value);
            } else {
              if (getObjType(value[0]) == "object") {
                return luckysheet.mask.getValueByFormat(value[0]);
              } else {
                return value[0];
              }
            }
          } else if (getObjType(value) == "object") {
            return luckysheet.mask.getValueByFormat(value);
          } else {
            return value;
          }
        },
        sparklinesColorMap: function(args, len) {
          let _this = this;
          let colorLists = null;
          if (len == null) {
            len = 5;
          }
          let index2 = 0;
          if (args.length > len) {
            for (let i2 = len; i2 < args.length; i2++) {
              let colorMap = args[i2];
              let colorListArray = _this.readCellDataToOneArray(colorMap);
              for (let a = 0; a < colorListArray.length; a++) {
                let ca = colorListArray[a];
                if (ca.indexOf(":") > -1) {
                  if (!colorLists) {
                    colorLists = {};
                  }
                  let calist = ca.split(":");
                  if (calist.length == 2) {
                    colorLists[calist[0]] = calist[1];
                  } else if (calist.length > 1) {
                    colorLists[calist[0] + ":" + calist[1]] = calist[2];
                  }
                } else {
                  if (!colorLists) {
                    colorLists = [];
                  }
                  colorLists.push(ca);
                }
              }
              index2++;
            }
          }
          return colorLists;
        },
        colorList: ["#2ec7c9", "#fc5c5c", "#5ab1ef", "#ffb980", "#d87a80", "#8d98b3", "#e5cf0d", "#97b552", "#95706d", "#dc69aa", "#07a2a4", "#9a7fd1", "#588dd5", "#f5994e", "#c05050", "#59678c", "#c9ab00", "#7eb00a", "#6f5553", "#c14089"],
        classlist: {
          "province": {
            11: "\u5317\u4EAC",
            12: "\u5929\u6D25",
            13: "\u6CB3\u5317",
            14: "\u5C71\u897F",
            15: "\u5185\u8499\u53E4",
            21: "\u8FBD\u5B81",
            22: "\u5409\u6797",
            23: "\u9ED1\u9F99\u6C5F",
            31: "\u4E0A\u6D77",
            32: "\u6C5F\u82CF",
            33: "\u6D59\u6C5F",
            34: "\u5B89\u5FBD",
            35: "\u798F\u5EFA",
            36: "\u6C5F\u897F",
            37: "\u5C71\u4E1C",
            41: "\u6CB3\u5357",
            42: "\u6E56\u5317",
            43: "\u6E56\u5357",
            44: "\u5E7F\u4E1C",
            45: "\u5E7F\u897F",
            46: "\u6D77\u5357",
            50: "\u91CD\u5E86",
            51: "\u56DB\u5DDD",
            52: "\u8D35\u5DDE",
            53: "\u4E91\u5357",
            54: "\u897F\u85CF",
            61: "\u9655\u897F",
            62: "\u7518\u8083",
            63: "\u9752\u6D77",
            64: "\u5B81\u590F",
            65: "\u65B0\u7586",
            71: "\u53F0\u6E7E",
            81: "\u9999\u6E2F",
            82: "\u6FB3\u95E8",
            91: "\u56FD\u5916"
          }
        },
        oldvalue: null,
        dontupdate: function() {
          let _this = this;
          store_default.luckysheetCellUpdate.length = 0;
          $("#luckysheet-functionbox-cell, #luckysheet-rich-text-editor").html(_this.oldvalue);
          _this.cancelNormalSelected();
          if (_this.rangetosheet != store_default.currentSheetIndex) {
            sheetmanage_default.changeSheetExec(_this.rangetosheet);
          }
        },
        xssDeal: function(str) {
          if (typeof str !== "string")
            return str;
          return str.replace(/<script>/g, "&lt;script&gt;").replace(/<\/script>/, "&lt;/script&gt;");
        },
        ltGtSignDeal: function(str) {
          if (typeof str !== "string")
            return str;
          if (str.substr(0, 5) === "<span" || str.startsWith("=")) {
            return str;
          }
          return str.replace(/</g, "&lt;").replace(/>/g, "&gt;");
        },
        fucntionboxshow: function(r2, c2) {
          if (!checkProtectionCellHidden(r2, c2, store_default.currentSheetIndex)) {
            $("#luckysheet-functionbox-cell").html("");
            return;
          }
          let _this = this;
          let d = store_default.flowdata;
          let value = "";
          if (d[r2] != null && d[r2][c2] != null) {
            let cell = $.extend(true, {}, d[r2][c2]);
            if (isInlineStringCell(cell)) {
              value = getInlineStringNoStyle(r2, c2);
            } else if (cell.f != null) {
              value = getcellvalue(r2, c2, d, "f");
            } else {
              value = valueShowEs(r2, c2, d);
            }
          }
          value = this.xssDeal(value);
          _this.oldvalue = value;
          $("#luckysheet-functionbox-cell").html(value);
        },
        cellOffset: function(range2, rows, cols, height, width) {
          let startCell = range2.startCell;
          let rowl = range2.rowl;
          let coll = range2.coll;
          let startCellRow = parseInt(startCell.replace(/[^0-9]/g, ""));
          let startCellCol = ABCatNum(startCell.replace(/[^A-Za-z]/g, ""));
          let row = [], col = [], offsetRange;
          row[0] = startCellRow + rows;
          col[0] = startCellCol + cols;
          row[1] = row[0] + height - 1;
          col[1] = col[0] + width - 1;
          col[0] = chatatABC(col[0]);
          col[1] = chatatABC(col[1]);
          let cellF = col[0] + row[0];
          let cellL = col[1] + row[1];
          if (cellF == cellL) {
            offsetRange = range2.sheetName + "!" + cellF;
          } else {
            offsetRange = range2.sheetName + "!" + cellF + ":" + cellL;
          }
          return offsetRange;
        },
        parseDatetoNum: function(date) {
          let _this = this;
          if (typeof date == "object" && typeof date.v == "number") {
            date = date.v;
          } else if (isdatatype(date) == "num") {
            date = parseFloat(date);
          } else if (isdatatype(date) == "date") {
            date = genarate(date)[2];
          } else {
            return _this.error.v;
          }
          return date;
        },
        getRangeArray: function(range2) {
          let rangeNow = [];
          let fmt = "General";
          if (range2.length == 1) {
            for (let c2 = 0; c2 < range2[0].length; c2++) {
              if (range2[0][c2] != null && range2[0][c2].v) {
                rangeNow.push(range2[0][c2].v);
                let f = range2[0][c2].ct.fa;
                fmt = fmt == "General" ? f : fmt;
              } else {
                rangeNow.push(null);
              }
            }
          } else if (range2[0].length == 1) {
            for (let r2 = 0; r2 < range2.length; r2++) {
              if (range2[r2][0] != null && range2[r2][0].v) {
                rangeNow.push(range2[r2][0].v);
                let f = range2[r2][0].ct.fa;
                fmt = fmt == "General" ? f : fmt;
              } else {
                rangeNow.push(null);
              }
            }
          } else {
            for (let r2 = 0; r2 < range2.length; r2++) {
              for (let c2 = 0; c2 < range2[r2].length; c2++) {
                if (range2[r2][c2] != null && range2[r2][c2].v) {
                  rangeNow.push(range2[r2][c2].v);
                  let f = range2[r2][c2].ct.fa;
                  fmt = fmt == "General" ? f : fmt;
                } else {
                  rangeNow.push(null);
                }
              }
            }
          }
          range2 = rangeNow;
          return [range2, fmt];
        },
        getRangeArrayTwo: function(range2) {
          let data = $.extend(true, [], range2);
          if (data.length == 1) {
            for (let c2 = 0; c2 < data[0].length; c2++) {
              if (data[0][c2] instanceof Object) {
                if (data[0][c2] != null && data[0][c2] instanceof Object && !!data[0][c2].m) {
                  data[0][c2] = data[0][c2].m;
                } else {
                  if (data[0][c2] != null && data[0][c2] instanceof Object && !!data[0][c2].v) {
                    data[0][c2] = data[0][c2].v;
                  } else {
                    data[0][c2] = null;
                  }
                }
              }
            }
          } else if (data[0].length == 1) {
            for (let r2 = 0; r2 < data.length; r2++) {
              if (data[r2][0] instanceof Object) {
                if (data[r2][0] != null && data[r2][0] instanceof Object && !!data[r2][0].m) {
                  data[r2][0] = data[r2][0].m;
                } else {
                  if (data[r2][0] != null && data[r2][0] instanceof Object && !!data[r2][0].v) {
                    data[r2][0] = data[r2][0].v;
                  } else {
                    data[r2][0] = null;
                  }
                }
              }
            }
          } else {
            for (let r2 = 0; r2 < data.length; r2++) {
              for (let c2 = 0; c2 < data[r2].length; c2++) {
                if (data[r2][c2] instanceof Object) {
                  if (data[r2][c2] != null && data[r2][c2] instanceof Object && !!data[r2][c2].m) {
                    data[r2][c2] = data[r2][c2].m;
                  } else {
                    if (data[r2][c2] != null && data[r2][c2] instanceof Object && !!data[r2][c2].v) {
                      data[r2][c2] = data[r2][c2].v;
                    } else {
                      data[r2][c2] = null;
                    }
                  }
                }
              }
            }
          }
          return data;
        },
        isWildcard: function(a, b) {
          let _this = this;
          a = a.toString();
          b = b.toString();
          if (_this.isCompareOperator(b).flag) {
            b = _this.isCompareOperator(b).num;
          }
          let str = "";
          for (let i2 = 0; i2 < b.length; i2++) {
            let v = b.charAt(i2);
            if (v == "*") {
              str += ".*";
            } else if (v == "?") {
              str += ".";
            } else if (v == "~") {
              if (b.charAt(i2 + 1) == "*") {
                str += "\\*";
                i2++;
              } else if (b.charAt(i2 + 1) == "?") {
                str += "\\?";
                i2++;
              } else {
                str += "~";
              }
            } else {
              str += v;
            }
          }
          let reg = new RegExp("^" + str + "$", "g");
          return !!a.match(reg);
        },
        isCompareOperator: function(str) {
          str = str.toString();
          let ope = "";
          let num = "";
          let strOne = str.substr(0, 1);
          let strTwo = str.substr(1, 1);
          let flag = false;
          let ret;
          if (strOne == ">") {
            if (strTwo == "=") {
              ope = str.substr(0, 2);
              num = str.substr(2);
              flag = true;
            } else if (strTwo != "=") {
              ope = str.substr(0, 1);
              num = str.substr(1);
              flag = true;
            }
          } else if (strOne == "<") {
            if (strTwo == "=" || strTwo == ">") {
              ope = str.substr(0, 2);
              num = str.substr(2);
              flag = true;
            } else if (strTwo != "=" && strTwo != ">") {
              ope = str.substr(0, 1);
              num = str.substr(1);
              flag = true;
            }
          } else if (strOne == "=" && strTwo != "=") {
            ope = str.substr(0, 1);
            num = str.substr(1);
            flag = true;
          }
          ret = {"flag": flag, "ope": ope, "num": num};
          return ret;
        },
        acompareb: function(a, b) {
          let _this = this;
          let flag = false;
          if (isRealNum(b)) {
            flag = luckysheet_compareWith(a, "==", b);
          } else if (typeof b == "string") {
            if (b.indexOf("*") != -1 || b.indexOf("?") != -1) {
              return _this.isWildcard(a, b);
            } else if (_this.isCompareOperator(b).flag) {
              let ope = _this.isCompareOperator(b).ope;
              let num = _this.isCompareOperator(b).num;
              flag = luckysheet_compareWith(a, ope, num);
            } else {
              flag = luckysheet_compareWith(a, "==", b);
            }
          }
          return flag;
        },
        compareParams: function(fp, sp, sym) {
          let flag = false;
          let classNameA = toString.call(fp), classNameB = toString.call(sp);
          if (sym == ">" && fp > sp) {
            flag = true;
          } else if (sym == ">=" && fp >= sp) {
            flag = true;
          } else if (sym == "<" && fp < sp) {
            flag = true;
          } else if (sym == "<=" && fp <= sp) {
            flag = true;
          } else if (sym == "=" && fp == sp) {
            flag = true;
          } else if (sym == "<>" && fp != sp) {
            flag = true;
          }
          if (classNameA == "[object Object]" && classNameB == "[object Object]") {
            let propsA = Object.getOwnPropertyNames(fp), propsB = Object.getOwnPropertyNames(sp);
            if (propsA.length != propsB.length) {
              return false;
            }
            for (let i2 = 0; i2 < propsA.length; i2++) {
              let propName = propsA[i2];
              if (fp[propName] !== sp[propName]) {
                return false;
              }
            }
            return true;
          }
          if (classNameA == "[object Array]" && classNameB == "[object Array]") {
            if (fp.toString() == sp.toString()) {
              return true;
            }
            return false;
          }
          return flag;
        },
        parseDecimal: function(num) {
          num = parseFloat(num);
          let d = parseInt(num, 10);
          if (d == 0) {
            return num;
          }
          num = num % d;
          return num;
        },
        getcellrange: function(txt, formulaIndex) {
          if (txt == null || txt.length == 0) {
            return;
          }
          let sheettxt = "", rangetxt = "", sheetIndex = null, sheetdata = null;
          let luckysheetfile = getluckysheetfile();
          if (txt.indexOf("!") > -1) {
            if (txt in this.cellTextToIndexList) {
              return this.cellTextToIndexList[txt];
            }
            let val = txt.split("!");
            sheettxt = val[0];
            rangetxt = val[1];
            sheettxt = sheettxt.replace(/\\'/g, "'").replace(/''/g, "'");
            if (sheettxt.substr(0, 1) == "'" && sheettxt.substr(sheettxt.length - 1, 1) == "'") {
              sheettxt = sheettxt.substring(1, sheettxt.length - 1);
            }
            for (let i2 in luckysheetfile) {
              if (sheettxt == luckysheetfile[i2].name) {
                sheetIndex = luckysheetfile[i2].index;
                sheetdata = luckysheetfile[i2].data;
                break;
              }
            }
          } else {
            let i2 = formulaIndex;
            if (i2 == null) {
              i2 = store_default.currentSheetIndex;
            }
            if (txt + "_" + i2 in this.cellTextToIndexList) {
              return this.cellTextToIndexList[txt + "_" + i2];
            }
            let index2 = getSheetIndex(i2);
            sheettxt = luckysheetfile[index2].name;
            sheetIndex = luckysheetfile[index2].index;
            sheetdata = store_default.flowdata;
            rangetxt = txt;
          }
          if (rangetxt.indexOf(":") == -1) {
            let row = parseInt(rangetxt.replace(/[^0-9]/g, "")) - 1;
            let col = ABCatNum(rangetxt.replace(/[^A-Za-z]/g, ""));
            if (!isNaN(row) && !isNaN(col)) {
              let item2 = {
                "row": [row, row],
                "column": [col, col],
                "sheetIndex": sheetIndex
              };
              this.addToCellIndexList(txt, item2);
              return item2;
            } else {
              return null;
            }
          } else {
            rangetxt = rangetxt.split(":");
            let row = [], col = [];
            row[0] = parseInt(rangetxt[0].replace(/[^0-9]/g, "")) - 1;
            row[1] = parseInt(rangetxt[1].replace(/[^0-9]/g, "")) - 1;
            if (isNaN(row[0])) {
              row[0] = 0;
            }
            if (isNaN(row[1])) {
              row[1] = sheetdata.length - 1;
            }
            if (row[0] > row[1]) {
              return null;
            }
            col[0] = ABCatNum(rangetxt[0].replace(/[^A-Za-z]/g, ""));
            col[1] = ABCatNum(rangetxt[1].replace(/[^A-Za-z]/g, ""));
            if (isNaN(col[0])) {
              col[0] = 0;
            }
            if (isNaN(col[1])) {
              col[1] = sheetdata[0].length - 1;
            }
            if (col[0] > col[1]) {
              return null;
            }
            let item2 = {
              "row": row,
              "column": col,
              "sheetIndex": sheetIndex
            };
            this.addToCellIndexList(txt, item2);
            return item2;
          }
        },
        rangeHightlightHTML: '<div id="luckysheet-formula-functionrange-highlight-${id}" rangeindex="${id}"  class="luckysheet-selection-highlight luckysheet-formula-functionrange-highlight"><div data-type="top" class="luckysheet-selection-copy-top luckysheet-copy"></div><div data-type="right" class="luckysheet-selection-copy-right luckysheet-copy"></div><div data-type="bottom" class="luckysheet-selection-copy-bottom luckysheet-copy"></div><div data-type="left" class="luckysheet-selection-copy-left luckysheet-copy"></div><div class="luckysheet-selection-copy-hc"></div><div data-type="lt" class="luckysheet-selection-highlight-topleft luckysheet-highlight"></div><div data-type="rt" class="luckysheet-selection-highlight-topright luckysheet-highlight"></div><div data-type="lb" class="luckysheet-selection-highlight-bottomleft luckysheet-highlight"></div><div data-type="rb" class="luckysheet-selection-highlight-bottomright luckysheet-highlight"></div></div>',
        createRangeHightlight: function() {
          let _this = this;
          let $span = $("#luckysheet-rich-text-editor").find("span.luckysheet-formula-functionrange-cell");
          $("#luckysheet-formula-functionrange .luckysheet-formula-functionrange-highlight").remove();
          $span.each(function() {
            let rangeindex = $(this).attr("rangeindex"), range2 = $(this).text();
            $("#luckysheet-formula-functionrange").append(replaceHtml(_this.rangeHightlightHTML, {
              "id": rangeindex
            }));
            let cellrange = _this.getcellrange(range2);
            let rangeid = "luckysheet-formula-functionrange-highlight-" + rangeindex;
            if (cellrange == null) {
            } else if (cellrange.sheetIndex == store_default.currentSheetIndex || cellrange.sheetIndex == -1 && _this.rangetosheet == store_default.currentSheetIndex) {
              $("#" + rangeid).data("range", cellrange).find(".luckysheet-copy").css({"background": luckyColor[rangeindex]}).end().find(".luckysheet-highlight").css({"background": luckyColor[rangeindex]}).end().find(".luckysheet-selection-copy-hc").css({"background": luckyColor[rangeindex]});
              seletedHighlistByindex(rangeid, cellrange.row[0], cellrange.row[1], cellrange.column[0], cellrange.column[1]);
            }
          });
          $("#luckysheet-formula-functionrange .luckysheet-formula-functionrange-highlight").show();
        },
        searchHTML: '<div id="luckysheet-formula-search-c" class="luckysheet-formula-search-c"></div>',
        helpHTML: '<div id="luckysheet-formula-help-c" class="luckysheet-formula-help-c"> <div class="luckysheet-formula-help-close" title="${helpClose}"><i class="fa fa-times" aria-hidden="true"></i></div> <div class="luckysheet-formula-help-collapse" title="${helpCollapse}"><i class="fa fa-angle-up" aria-hidden="true"></i></div> <div class="luckysheet-formula-help-title"><div class="luckysheet-formula-help-title-formula"> <span class="luckysheet-arguments-help-function-name">SUM</span> <span class="luckysheet-arguments-paren">(</span> <span class="luckysheet-arguments-parameter-holder"> <span class="luckysheet-arguments-help-parameter luckysheet-arguments-help-parameter-active" dir="auto">A2:A100</span>, <span class="luckysheet-arguments-help-parameter" dir="auto">101</span> </span> <span class="luckysheet-arguments-paren">)</span> </div></div> <div class="luckysheet-formula-help-content"> <div class="luckysheet-formula-help-content-example"> <div class="luckysheet-arguments-help-section-title">${helpExample}</div> <div class="luckysheet-arguments-help-formula"> <span class="luckysheet-arguments-help-function-name">SUM</span> <span class="luckysheet-arguments-paren">(</span> <span class="luckysheet-arguments-parameter-holder"> <span class="luckysheet-arguments-help-parameter luckysheet-arguments-help-parameter-active" dir="auto">A2:A100</span>, <span class="luckysheet-arguments-help-parameter" dir="auto">101</span> </span> <span class="luckysheet-arguments-paren">)</span> </div> </div> <div class="luckysheet-formula-help-content-detail"> <div class="luckysheet-arguments-help-section"> <div class="luckysheet-arguments-help-section-title luckysheet-arguments-help-parameter-name">${helpAbstract}</div> <span class="luckysheet-arguments-help-parameter-content">${helpAbstract}</span> </div> </div> <div class="luckysheet-formula-help-content-param"> ${param} </div> </div> <div class="luckysheet-formula-help-foot"></div></div>',
        getrangeseleciton: function() {
          let currSelection = window.getSelection();
          let anchor = $(currSelection.anchorNode);
          let anchorOffset = currSelection.anchorOffset;
          if (anchor.parent().is("span") && anchorOffset != 0) {
            let txt = $.trim(anchor.text()), lasttxt = "";
            if (txt.length == 0 && anchor.parent().prev().length > 0) {
              let ahr = anchor.parent().prev();
              txt = $.trim(ahr.text());
              lasttxt = txt.substr(txt.length - 1, 1);
              return ahr;
            } else {
              lasttxt = txt.substr(anchorOffset - 1, 1);
              return anchor.parent();
            }
          } else if (anchor.is("#luckysheet-rich-text-editor") || anchor.is("#luckysheet-functionbox-cell")) {
            let txt = $.trim(anchor.find("span").last().text());
            if (txt.length == 0 && anchor.find("span").length > 1) {
              let ahr = anchor.find("span");
              txt = $.trim(ahr.eq(ahr.length - 2).text());
              return ahr;
            } else {
              return anchor.find("span").last();
            }
          } else if (anchor.parent().is("#luckysheet-rich-text-editor") || anchor.parent().is("#luckysheet-functionbox-cell") || anchorOffset == 0) {
            if (anchorOffset == 0) {
              anchor = anchor.parent();
            }
            if (anchor.prev().length > 0) {
              let txt = $.trim(anchor.prev().text());
              let lasttxt = txt.substr(txt.length - 1, 1);
              return anchor.prev();
            }
          }
          return null;
        },
        searchFunctionPosition: function($menu, $editor, x, y, isparam) {
          let winH = $(window).height(), winW = $(window).width();
          let menuW = $menu.outerWidth(), menuH = $menu.outerHeight();
          if (isparam == null) {
            isparam = false;
          }
          let left = x;
          if (x + menuW > winW) {
            left = x - menuW + $editor.outerWidth();
          } else {
            left = x;
          }
          let top = y;
          if (y + menuH > winH) {
            top = y - menuH;
          } else {
            top = y + $editor.outerHeight();
            if (!isparam) {
              $menu.html($menu.find(".luckysheet-formula-search-item").get().reverse());
            }
          }
          if (top < 0) {
            top = 0;
          }
          if (left < 0) {
            left = 0;
          }
          $menu.css({
            "top": top,
            "left": left
          }).show();
        },
        searchFunctionCell: null,
        searchFunction: function($editer) {
          let _this = this;
          let functionlist2 = store_default.functionlist;
          let $cell = _this.getrangeseleciton();
          _this.searchFunctionCell = $cell;
          if ($cell == null || $editer == null) {
            return;
          }
          let inputContent = $editer.text();
          let searchtxt = $cell.text().toUpperCase();
          let reg = /^[a-zA-Z]|[a-zA-Z_]+$/;
          if (!reg.test(searchtxt) || inputContent.substr(0, 1) != "=") {
            return;
          }
          let result = {
            "f": [],
            "s": [],
            "t": []
          }, result_i = 0;
          for (let i2 = 0; i2 < functionlist2.length; i2++) {
            let item2 = functionlist2[i2], n = item2.n;
            if (n == searchtxt) {
              result.f.unshift(item2);
              result_i++;
            } else if (n.substr(0, searchtxt.length) == searchtxt) {
              result.s.unshift(item2);
              result_i++;
            } else if (n.indexOf(searchtxt) > -1) {
              result.t.unshift(item2);
              result_i++;
            }
            if (result_i >= 10) {
              break;
            }
          }
          let list = result.t.concat(result.s.concat(result.f));
          if (list.length <= 0) {
            return;
          }
          let listHTML = _this.searchFunctionHTML(list);
          $("#luckysheet-formula-search-c").html(listHTML).show();
          $("#luckysheet-formula-help-c").hide();
          let $c = $editer.parent(), offset = $c.offset();
          _this.searchFunctionPosition($("#luckysheet-formula-search-c"), $c, offset.left, offset.top);
        },
        searchFunctionEnter: function($obj) {
          let _this = this;
          let functxt = $obj.data("func");
          _this.searchFunctionCell.text(functxt).after('<span dir="auto" class="luckysheet-formula-text-color">(</span>');
          _this.setCaretPosition(_this.searchFunctionCell.next().get(0), 0, 1);
          $("#luckysheet-formula-search-c").hide();
          _this.helpFunctionExe(_this.searchFunctionCell.closest("div"), _this.searchFunctionCell.next());
        },
        searchFunctionHTML: function(list) {
          let _this = this;
          if ($("#luckysheet-formula-search-c").length == 0) {
            $("body").append(_this.searchHTML);
            $("#luckysheet-formula-search-c").on("mouseover", ".luckysheet-formula-search-item", function() {
              $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").removeClass("luckysheet-formula-search-item-active");
              $(this).addClass("luckysheet-formula-search-item-active");
            }).on("mouseout", ".luckysheet-formula-search-item", function() {
            }).on("click", ".luckysheet-formula-search-item", function() {
              if (_this.searchFunctionCell == null) {
                return;
              }
              _this.searchFunctionEnter($(this));
            });
          }
          let itemHTML = '<div data-func="${n}" class="luckysheet-formula-search-item ${class}"><div class="luckysheet-formula-search-func">${n}</div><div class="luckysheet-formula-search-detail">${a}</div></div>';
          let retHTML = "";
          for (let i2 = 0; i2 < list.length; i2++) {
            let item2 = list[i2];
            if (i2 == list.length - 1) {
              retHTML += replaceHtml(itemHTML, {
                "class": "luckysheet-formula-search-item-active",
                "n": item2.n,
                "a": item2.a
              });
            } else {
              retHTML += replaceHtml(itemHTML, {
                "class": "",
                "n": item2.n,
                "a": item2.a
              });
            }
          }
          return retHTML;
        },
        functionlistPosition: {},
        helpFunction: function($editer, funcname, paramIndex) {
          let _this = this;
          let functionlist2 = store_default.functionlist;
          let $func = functionlist2[_this.functionlistPosition[$.trim(funcname).toUpperCase()]];
          if ($func == null) {
            return;
          }
          let _locale = locale_default();
          let locale_formulaMore = _locale.formulaMore;
          $("#luckysheet-formula-help-c .luckysheet-arguments-help-function-name").html($func.n);
          $("#luckysheet-formula-help-c .luckysheet-arguments-help-parameter-content").html($func.d);
          let helpformula = '<span class="luckysheet-arguments-help-function-name">${name}</span> <span class="luckysheet-arguments-paren">(</span> <span class="luckysheet-arguments-parameter-holder"> ${param} </span> <span class="luckysheet-arguments-paren">)</span>';
          let helpformulaItem = '<span class="luckysheet-arguments-help-parameter" dir="auto">${param}</span>';
          let helpformulaArg = '<div class="luckysheet-arguments-help-section"><div class="luckysheet-arguments-help-section-title">${param}</div><span class="luckysheet-arguments-help-parameter-content">${content}</span></div>';
          let fht = "", ahf = "", fhcp = "";
          for (let i2 = 0; i2 < $func.p.length; i2++) {
            let paramitem = $func.p[i2];
            let name2 = paramitem.name, nameli = paramitem.name;
            if (paramitem.repeat == "y") {
              name2 += ", ...";
              nameli += '<span class="luckysheet-arguments-help-argument-info">...-' + locale_formulaMore.allowRepeatText + "</span>";
            }
            if (paramitem.require == "o") {
              name2 = "[" + name2 + "]";
              nameli += '<span class="luckysheet-arguments-help-argument-info">-[' + locale_formulaMore.allowOptionText + "]</span>";
            }
            fht += '<span class="luckysheet-arguments-help-parameter" dir="auto">' + name2 + "</span>, ";
            ahf += '<span class="luckysheet-arguments-help-parameter" dir="auto">' + paramitem.example + "</span>, ";
            fhcp += replaceHtml(helpformulaArg, {
              "param": nameli,
              "content": paramitem.detail
            });
          }
          fht = fht.substr(0, fht.length - 2);
          ahf = ahf.substr(0, ahf.length - 2);
          $("#luckysheet-formula-help-c .luckysheet-formula-help-title .luckysheet-arguments-parameter-holder").html(fht);
          $("#luckysheet-formula-help-c .luckysheet-arguments-help-formula .luckysheet-arguments-parameter-holder").html(ahf);
          $("#luckysheet-formula-help-c .luckysheet-formula-help-content-param").html(fhcp);
          if (paramIndex == null) {
            $("#luckysheet-formula-help-c .luckysheet-formula-help-title-formula .luckysheet-arguments-help-function-name").css("font-weight", "bold");
          } else {
            $("#luckysheet-formula-help-c .luckysheet-formula-help-title-formula .luckysheet-arguments-help-function-name").css("font-weight", "normal");
            let index2 = paramIndex >= $func.p.length ? $func.p.length - 1 : paramIndex;
            $("#luckysheet-formula-help-c .luckysheet-formula-help-title .luckysheet-arguments-parameter-holder .luckysheet-arguments-help-parameter").removeClass("luckysheet-arguments-help-parameter-active");
            $("#luckysheet-formula-help-c .luckysheet-formula-help-title .luckysheet-arguments-parameter-holder .luckysheet-arguments-help-parameter").eq(index2).addClass("luckysheet-arguments-help-parameter-active");
            $("#luckysheet-formula-help-c .luckysheet-arguments-help-formula .luckysheet-arguments-parameter-holder .luckysheet-arguments-help-parameter").removeClass("luckysheet-arguments-help-parameter-active");
            $("#luckysheet-formula-help-c .luckysheet-arguments-help-formula .luckysheet-arguments-parameter-holder .luckysheet-arguments-help-parameter").eq(index2).addClass("luckysheet-arguments-help-parameter-active");
            $("#luckysheet-formula-help-c .luckysheet-formula-help-content-param .luckysheet-arguments-help-section").removeClass("luckysheet-arguments-help-parameter-active");
            $("#luckysheet-formula-help-c .luckysheet-formula-help-content-param .luckysheet-arguments-help-section").eq(index2).addClass("luckysheet-arguments-help-parameter-active");
          }
          let $c = $editer.parent(), offset = $c.offset();
          _this.searchFunctionPosition($("#luckysheet-formula-help-c"), $c, offset.left, offset.top, true);
        },
        helpFunctionExe: function($editer, currSelection) {
          let _this = this;
          let functionlist2 = store_default.functionlist;
          let _locale = locale_default();
          let locale_formulaMore = _locale.formulaMore;
          if ($("#luckysheet-formula-help-c").length == 0) {
            $("body").after(replaceHtml(_this.helpHTML, {
              helpClose: locale_formulaMore.helpClose,
              helpCollapse: locale_formulaMore.helpCollapse,
              helpExample: locale_formulaMore.helpExample,
              helpAbstract: locale_formulaMore.helpAbstract
            }));
            $("#luckysheet-formula-help-c .luckysheet-formula-help-close").click(function() {
              $("#luckysheet-formula-help-c").hide();
            });
            $("#luckysheet-formula-help-c .luckysheet-formula-help-collapse").click(function() {
              let $content = $("#luckysheet-formula-help-c .luckysheet-formula-help-content");
              $content.slideToggle(100, function() {
                let $c = _this.rangeResizeTo.parent(), offset = $c.offset();
                _this.searchFunctionPosition($("#luckysheet-formula-help-c"), $c, offset.left, offset.top, true);
              });
              if ($content.is(":hidden")) {
                $(this).html('<i class="fa fa-angle-up" aria-hidden="true"></i>');
              } else {
                $(this).html('<i class="fa fa-angle-down" aria-hidden="true"></i>');
              }
            });
            for (let i3 = 0; i3 < functionlist2.length; i3++) {
              _this.functionlistPosition[functionlist2[i3].n] = i3;
            }
          }
          if (!currSelection) {
            return;
          }
          let $prev = currSelection, funcLen = $editer.length, $span = $editer.find("span"), currentIndex = currSelection.index(), i2 = currentIndex;
          if ($prev == null) {
            return;
          }
          let funcName = null, paramindex = null;
          if ($span.eq(i2).is(".luckysheet-formula-text-func")) {
            funcName = $span.eq(i2).text();
          } else {
            let $cur = null, exceptIndex = [-1, -1];
            while (--i2 > 0) {
              $cur = $span.eq(i2);
              if ($cur.is(".luckysheet-formula-text-func") || $.trim($cur.text()).toUpperCase() in _this.functionlistPosition) {
                funcName = $cur.text();
                paramindex = null;
                let endstate = true;
                for (let a = i2; a <= currentIndex; a++) {
                  if (!paramindex) {
                    paramindex = 0;
                  }
                  if (a >= exceptIndex[0] && a <= exceptIndex[1]) {
                    continue;
                  }
                  $cur = $span.eq(a);
                  if ($cur.is(".luckysheet-formula-text-rpar")) {
                    exceptIndex = [i2, a];
                    funcName = null;
                    endstate = false;
                    break;
                  }
                  if ($cur.is(".luckysheet-formula-text-comma")) {
                    paramindex++;
                  }
                }
                if (endstate) {
                  break;
                }
              }
            }
          }
          if (funcName == null) {
            return;
          }
          _this.helpFunction($editer, funcName, paramindex);
        },
        rangeHightlightselected: function($editer, kcode) {
          let _this = this;
          let currSelection = _this.getrangeseleciton();
          $("#luckysheet-formula-search-c, #luckysheet-formula-help-c").hide();
          $("#luckysheet-formula-functionrange .luckysheet-formula-functionrange-highlight .luckysheet-selection-copy-hc").css("opacity", "0.03");
          $("#luckysheet-formula-search-c, #luckysheet-formula-help-c").hide();
          _this.helpFunctionExe($editer, currSelection);
          if ($(currSelection).closest(".luckysheet-formula-functionrange-cell").length == 0) {
            _this.searchFunction($editer);
            return;
          }
          let $anchorOffset = $(currSelection).closest(".luckysheet-formula-functionrange-cell");
          let rangeindex = $anchorOffset.attr("rangeindex");
          let rangeid = "luckysheet-formula-functionrange-highlight-" + rangeindex;
          $("#" + rangeid).find(".luckysheet-selection-copy-hc").css({
            "opacity": "0.13"
          });
        },
        updatecell: function(r2, c2, value, isRefresh = true) {
          let _this = this;
          let $input = $("#luckysheet-rich-text-editor");
          let inputText = $input.text(), inputHtml = $input.html();
          if (_this.rangetosheet != null && _this.rangetosheet != store_default.currentSheetIndex) {
            sheetmanage_default.changeSheetExec(_this.rangetosheet);
          }
          if (!checkProtectionLocked(r2, c2, store_default.currentSheetIndex)) {
            return;
          }
          if (dataVerificationCtrl_default.dataVerification != null) {
            let dvItem = dataVerificationCtrl_default.dataVerification[r2 + "_" + c2];
            if (dvItem != null && dvItem.prohibitInput && !dataVerificationCtrl_default.validateCellData(inputText, dvItem)) {
              let failureText = dataVerificationCtrl_default.getFailureText(dvItem);
              tooltip_default.info(failureText, "");
              _this.cancelNormalSelected();
              return;
            }
          }
          let curv = store_default.flowdata[r2][c2];
          const oldValue = JSON.stringify(curv);
          let isPrevInline = isInlineStringCell(curv);
          let isCurInline = inputText.slice(0, 1) != "=" && inputHtml.substr(0, 5) == "<span";
          let isCopyVal = false;
          if (!isCurInline && inputText && inputText.length > 0) {
            let splitArr = inputText.replace(/\r\n/g, "_x000D_").replace(/&#13;&#10;/g, "_x000D_").replace(/\r/g, "_x000D_").replace(/\n/g, "_x000D_").split("_x000D_");
            if (splitArr.length > 1) {
              isCopyVal = true;
              isCurInline = true;
              inputText = splitArr.join("\r\n");
            }
          }
          if (!value && !isCurInline && isPrevInline) {
            delete curv.ct.s;
            curv.ct.t = "g";
            curv.ct.fa = "General";
            value = "";
          } else if (isCurInline) {
            if (getObjType(curv) != "object") {
              curv = {};
            }
            delete curv.f;
            delete curv.v;
            delete curv.m;
            if (curv.ct == null) {
              curv.ct = {};
              curv.ct.fa = "General";
            }
            curv.ct.t = "inlineStr";
            curv.ct.s = convertSpanToShareString($input.find("span"));
            if (isCopyVal) {
              curv.ct.s = [
                {
                  v: inputText
                }
              ];
            }
          }
          value = value || $input.text();
          if (!method_default.createHookFunction("cellUpdateBefore", r2, c2, value, isRefresh)) {
            _this.cancelNormalSelected();
            return;
          }
          if (!isCurInline) {
            if (isRealNull(value) && !isPrevInline) {
              if (curv == null || isRealNull(curv.v) && curv.spl == null && curv.f == null) {
                _this.cancelNormalSelected();
                return;
              }
            } else if (curv != null && curv.qp != 1) {
              if (getObjType(curv) == "object" && (value == curv.f || value == curv.v || value == curv.m)) {
                _this.cancelNormalSelected();
                return;
              } else if (value == curv) {
                _this.cancelNormalSelected();
                return;
              }
            }
            if (getObjType(value) == "string" && value.slice(0, 1) == "=" && value.length > 1) {
            } else if (getObjType(curv) == "object" && curv.ct != null && curv.ct.fa != null && curv.ct.fa != "@" && !isRealNull(value)) {
              delete curv.m;
              if (curv.f != null) {
                delete curv.f;
                delete curv.spl;
              }
            }
          }
          window.luckysheet_getcelldata_cache = null;
          let isRunExecFunction = true;
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          let dynamicArrayItem = null;
          if (getObjType(curv) == "object") {
            if (!isCurInline) {
              if (getObjType(value) == "string" && value.slice(0, 1) == "=" && value.length > 1) {
                let v = _this.execfunction(value, r2, c2, void 0, true);
                isRunExecFunction = false;
                curv = $.extend(true, {}, d[r2][c2]);
                curv.v = v[1];
                curv.f = v[2];
                if (v.length == 4 && v[3].type == "sparklines") {
                  delete curv.m;
                  delete curv.v;
                  let curCalv = v[3].data;
                  if (getObjType(curCalv) == "array" && getObjType(curCalv[0]) != "object") {
                    curv.v = curCalv[0];
                  } else {
                    curv.spl = v[3].data;
                  }
                } else if (v.length == 4 && v[3].type == "dynamicArrayItem") {
                  dynamicArrayItem = v[3].data;
                }
              } else if (getObjType(value) == "object") {
                let valueFunction = value.f;
                if (getObjType(valueFunction) == "string" && valueFunction.slice(0, 1) == "=" && valueFunction.length > 1) {
                  let v = _this.execfunction(valueFunction, r2, c2, void 0, true);
                  isRunExecFunction = false;
                  curv = $.extend(true, {}, d[r2][c2]);
                  curv.v = v[1];
                  curv.f = v[2];
                  if (v.length == 4 && v[3].type == "sparklines") {
                    delete curv.m;
                    delete curv.v;
                    let curCalv = v[3].data;
                    if (getObjType(curCalv) == "array" && getObjType(curCalv[0]) != "object") {
                      curv.v = curCalv[0];
                    } else {
                      curv.spl = v[3].data;
                    }
                  } else if (v.length == 4 && v[3].type == "dynamicArrayItem") {
                    dynamicArrayItem = v[3].data;
                  }
                } else {
                  for (let attr in value) {
                    curv[attr] = value[attr];
                  }
                }
              } else {
                _this.delFunctionGroup(r2, c2);
                _this.execFunctionGroup(r2, c2, value);
                isRunExecFunction = false;
                curv = $.extend(true, {}, d[r2][c2]);
                curv.v = value;
                delete curv.f;
                delete curv.spl;
                if (curv.qp == 1 && ("" + value).substr(0, 1) != "'") {
                  curv.qp = 0;
                  if (curv.ct != null) {
                    curv.ct.fa = "General";
                    curv.ct.t = "n";
                  }
                }
              }
            }
            value = curv;
          } else {
            if (getObjType(value) == "string" && value.slice(0, 1) == "=" && value.length > 1) {
              let v = _this.execfunction(value, r2, c2, void 0, true);
              isRunExecFunction = false;
              value = {
                "v": v[1],
                "f": v[2]
              };
              if (v.length == 4 && v[3].type == "sparklines") {
                let curCalv = v[3].data;
                if (getObjType(curCalv) == "array" && getObjType(curCalv[0]) != "object") {
                  value.v = curCalv[0];
                } else {
                  value.spl = v[3].data;
                }
              } else if (v.length == 4 && v[3].type == "dynamicArrayItem") {
                dynamicArrayItem = v[3].data;
              }
            } else if (getObjType(value) == "object") {
              let valueFunction = value.f;
              if (getObjType(valueFunction) == "string" && valueFunction.slice(0, 1) == "=" && valueFunction.length > 1) {
                let v = _this.execfunction(valueFunction, r2, c2, void 0, true);
                isRunExecFunction = false;
                value.v = v[1];
                value.f = v[2];
                if (v.length == 4 && v[3].type == "sparklines") {
                  let curCalv = v[3].data;
                  if (getObjType(curCalv) == "array" && getObjType(curCalv[0]) != "object") {
                    value.v = curCalv[0];
                  } else {
                    value.spl = v[3].data;
                  }
                } else if (v.length == 4 && v[3].type == "dynamicArrayItem") {
                  dynamicArrayItem = v[3].data;
                }
              } else {
                let v = curv;
                if (value.v == null) {
                  value.v = v;
                }
              }
            } else {
              _this.delFunctionGroup(r2, c2);
              _this.execFunctionGroup(r2, c2, value);
              isRunExecFunction = false;
            }
          }
          setcellvalue(r2, c2, d, value);
          _this.cancelNormalSelected();
          let RowlChange = false;
          let cfg = $.extend(true, {}, getluckysheetfile()[getSheetIndex(store_default.currentSheetIndex)]["config"]);
          if (cfg["rowlen"] == null) {
            cfg["rowlen"] = {};
          }
          if (d[r2][c2].tb == "2" && d[r2][c2].v != null || isInlineStringCell(d[r2][c2]) && typeof d[r2][c2]["mc"] == "undefined") {
            let defaultrowlen = store_default.defaultrowlen;
            let canvas = $("#luckysheetTableContent").get(0).getContext("2d");
            if (cfg["customHeight"] && cfg["customHeight"][r2] == 1) {
            } else {
              let cellWidth = colLocationByIndex(c2)[1] - colLocationByIndex(c2)[0] - 2;
              let textInfo = getCellTextInfo(d[r2][c2], canvas, {
                r: r2,
                c: c2,
                cellWidth
              });
              let currentRowLen = defaultrowlen;
              if (textInfo != null) {
                currentRowLen = textInfo.textHeightAll + 2;
              }
              if (currentRowLen > defaultrowlen) {
                cfg["rowlen"][r2] = currentRowLen;
                RowlChange = true;
              }
            }
          }
          let dynamicArray = null;
          if (!!dynamicArrayItem) {
            dynamicArray = $.extend(true, [], this.insertUpdateDynamicArray(dynamicArrayItem));
          }
          let allParam = {
            "dynamicArray": dynamicArray
          };
          if (RowlChange) {
            allParam = {
              "cfg": cfg,
              "dynamicArray": dynamicArray,
              "RowlChange": RowlChange
            };
          }
          setTimeout(() => {
            method_default.createHookFunction("cellUpdated", r2, c2, JSON.parse(oldValue), store_default.flowdata[r2][c2], isRefresh);
          }, 0);
          if (isRefresh) {
            jfrefreshgrid(d, [{"row": [r2, r2], "column": [c2, c2]}], allParam, isRunExecFunction);
            _this.execFunctionGlobalData = null;
          } else {
            return {
              data: d,
              allParam
            };
          }
        },
        cancelNormalSelected: function() {
          let _this = this;
          _this.canceFunctionrangeSelected();
          $("#luckysheet-formula-functionrange .luckysheet-formula-functionrange-highlight").remove();
          $("#luckysheet-input-box").removeAttr("style");
          $("#luckysheet-input-box-index").hide();
          $("#luckysheet-wa-functionbox-cancel, #luckysheet-wa-functionbox-confirm").removeClass("luckysheet-wa-calculate-active");
          _this.rangestart = false;
          _this.rangedrag_column_start = false;
          _this.rangedrag_row_start = false;
        },
        canceFunctionrangeSelected: function() {
          $("#luckysheet-formula-functionrange-select").hide();
          $("#luckysheet-row-count-show, #luckysheet-column-count-show").hide();
          $("#luckysheet-formula-search-c, #luckysheet-formula-help-c").hide();
        },
        iscellformat: function(txt) {
          let re_abc = /[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][123456789]/;
        },
        iscelldata: function(txt) {
          let val = txt.split("!"), rangetxt;
          if (val.length > 1) {
            rangetxt = val[1];
          } else {
            rangetxt = val[0];
          }
          let reg_cell = /^(([a-zA-Z]+)|([$][a-zA-Z]+))(([0-9]+)|([$][0-9]+))$/g;
          let reg_cellRange = /^(((([a-zA-Z]+)|([$][a-zA-Z]+))(([0-9]+)|([$][0-9]+)))|((([a-zA-Z]+)|([$][a-zA-Z]+))))$/g;
          if (rangetxt.indexOf(":") == -1) {
            let row = parseInt(rangetxt.replace(/[^0-9]/g, "")) - 1;
            let col = ABCatNum(rangetxt.replace(/[^A-Za-z]/g, ""));
            if (!isNaN(row) && !isNaN(col) && rangetxt.toString().match(reg_cell)) {
              return true;
            } else if (!isNaN(row)) {
              return false;
            } else if (!isNaN(col)) {
              return false;
            } else {
              return false;
            }
          } else {
            reg_cellRange = /^(((([a-zA-Z]+)|([$][a-zA-Z]+))(([0-9]+)|([$][0-9]+)))|((([a-zA-Z]+)|([$][a-zA-Z]+)))|((([0-9]+)|([$][0-9]+s))))$/g;
            rangetxt = rangetxt.split(":");
            let row = [], col = [];
            row[0] = parseInt(rangetxt[0].replace(/[^0-9]/g, "")) - 1;
            row[1] = parseInt(rangetxt[1].replace(/[^0-9]/g, "")) - 1;
            if (row[0] > row[1]) {
              return false;
            }
            col[0] = ABCatNum(rangetxt[0].replace(/[^A-Za-z]/g, ""));
            col[1] = ABCatNum(rangetxt[1].replace(/[^A-Za-z]/g, ""));
            if (col[0] > col[1]) {
              return false;
            }
            if (rangetxt[0].toString().match(reg_cellRange) && rangetxt[1].toString().match(reg_cellRange)) {
              return true;
            } else {
              return false;
            }
          }
        },
        operator: "==|!=|<>|<=|>=|=|+|-|>|<|/|*|%|&|^",
        operatorjson: null,
        functionCopy: function(txt, mode, step) {
          let _this = this;
          if (_this.operatorjson == null) {
            let arr = _this.operator.split("|"), op = {};
            for (let i3 = 0; i3 < arr.length; i3++) {
              op[arr[i3].toString()] = 1;
            }
            _this.operatorjson = op;
          }
          if (mode == null) {
            mode = "down";
          }
          if (step == null) {
            step = 1;
          }
          if (txt.substr(0, 1) == "=") {
            txt = txt.substr(1);
          }
          let funcstack = txt.split("");
          let i2 = 0, str = "", function_str = "", ispassby = true;
          let matchConfig = {
            "bracket": 0,
            "comma": 0,
            "squote": 0,
            "dquote": 0
          };
          while (i2 < funcstack.length) {
            let s = funcstack[i2];
            if (s == "(" && matchConfig.dquote == 0) {
              matchConfig.bracket += 1;
              if (str.length > 0) {
                function_str += str + "(";
              } else {
                function_str += "(";
              }
              str = "";
            } else if (s == ")" && matchConfig.dquote == 0) {
              matchConfig.bracket -= 1;
              function_str += _this.functionCopy(str, mode, step) + ")";
              str = "";
            } else if (s == '"' && matchConfig.squote == 0) {
              if (matchConfig.dquote > 0) {
                function_str += str + '"';
                matchConfig.dquote -= 1;
                str = "";
              } else {
                matchConfig.dquote += 1;
                str += '"';
              }
            } else if (s == "," && matchConfig.dquote == 0) {
              function_str += _this.functionCopy(str, mode, step) + ",";
              str = "";
            } else if (s == "&" && matchConfig.dquote == 0) {
              if (str.length > 0) {
                function_str += _this.functionCopy(str, mode, step) + "&";
                str = "";
              } else {
                function_str += "&";
              }
            } else if (s in _this.operatorjson && matchConfig.dquote == 0) {
              let s_next = "";
              if (i2 + 1 < funcstack.length) {
                s_next = funcstack[i2 + 1];
              }
              let p = i2 - 1, s_pre = null;
              if (p >= 0) {
                do {
                  s_pre = funcstack[p--];
                } while (p >= 0 && s_pre == " ");
              }
              if (s + s_next in _this.operatorjson) {
                if (str.length > 0) {
                  function_str += _this.functionCopy(str, mode, step) + s + s_next;
                  str = "";
                } else {
                  function_str += s + s_next;
                }
                i2++;
              } else if (!/[^0-9]/.test(s_next) && s == "-" && (s_pre == "(" || s_pre == null || s_pre == "," || s_pre == " " || s_pre in _this.operatorjson)) {
                str += s;
              } else {
                if (str.length > 0) {
                  function_str += _this.functionCopy(str, mode, step) + s;
                  str = "";
                } else {
                  function_str += s;
                }
              }
            } else {
              str += s;
            }
            if (i2 == funcstack.length - 1) {
              if (_this.iscelldata($.trim(str))) {
                if (mode == "down") {
                  function_str += _this.downparam($.trim(str), step);
                } else if (mode == "up") {
                  function_str += _this.upparam($.trim(str), step);
                } else if (mode == "left") {
                  function_str += _this.leftparam($.trim(str), step);
                } else if (mode == "right") {
                  function_str += _this.rightparam($.trim(str), step);
                }
              } else {
                function_str += $.trim(str);
              }
            }
            i2++;
          }
          return function_str;
        },
        isfreezonFuc: function(txt) {
          let row = txt.replace(/[^0-9]/g, "");
          let col = txt.replace(/[^A-Za-z]/g, "");
          let row$ = txt.substr(txt.indexOf(row) - 1, 1);
          let col$ = txt.substr(txt.indexOf(col) - 1, 1);
          let ret = [false, false];
          if (row$ == "$") {
            ret[0] = true;
          }
          if (col$ == "$") {
            ret[1] = true;
          }
          return ret;
        },
        setfreezonFuceExe: function(rangetxt) {
          let row = parseInt(rangetxt.replace(/[^0-9]/g, ""));
          let col = ABCatNum(rangetxt.replace(/[^A-Za-z]/g, ""));
          let $row = "$", $col = "$";
          if (!isNaN(row) && !isNaN(col)) {
            return $col + chatatABC(col) + $row + row;
          } else if (!isNaN(row)) {
            return $row + row;
          } else if (!isNaN(col)) {
            return $col + chatatABC(col);
          } else {
            return rangetxt;
          }
        },
        setfreezonFuc: function(event2) {
          let _this = this;
          let obj = _this.getrangeseleciton();
          if (!_this.iscelldata(obj.text())) {
            return;
          }
          let txt = obj.text(), pos = window.getSelection().anchorOffset;
          let val = txt.split("!"), rangetxt, prefix = "";
          if (val.length > 1) {
            rangetxt = val[1];
            prefix = val[0] + "!";
          } else {
            rangetxt = val[0];
          }
          let newtxt = "", newpos = "";
          let rangetxtIndex = rangetxt.indexOf(":");
          if (rangetxtIndex == -1) {
            newtxt = prefix + _this.setfreezonFuceExe(rangetxt);
            newpos = newtxt.length;
          } else {
            rangetxt = rangetxt.split(":");
            if (pos > rangetxtIndex) {
              let ret = prefix + rangetxt[0] + ":" + _this.setfreezonFuceExe(rangetxt[1]);
              newtxt = ret;
              newpos = ret.length;
            } else {
              let firsttxt = prefix + _this.setfreezonFuceExe(rangetxt[0]);
              let ret = firsttxt + ":" + rangetxt[1];
              newtxt = ret;
              newpos = firsttxt.length;
            }
          }
          obj.text(prefix + newtxt);
          _this.setCaretPosition(obj.get(0), 0, newpos);
        },
        updateparam: function(orient, txt, step) {
          let _this = this;
          let val = txt.split("!"), rangetxt, prefix = "";
          if (val.length > 1) {
            rangetxt = val[1];
            prefix = val[0] + "!";
          } else {
            rangetxt = val[0];
          }
          if (rangetxt.indexOf(":") == -1) {
            let row = parseInt(rangetxt.replace(/[^0-9]/g, ""));
            let col = ABCatNum(rangetxt.replace(/[^A-Za-z]/g, ""));
            let freezonFuc = _this.isfreezonFuc(rangetxt);
            let $row = freezonFuc[0] ? "$" : "", $col = freezonFuc[1] ? "$" : "";
            if (orient == "u" && !freezonFuc[0]) {
              row -= step;
            } else if (orient == "r" && !freezonFuc[1]) {
              col += step;
            } else if (orient == "l" && !freezonFuc[1]) {
              col -= step;
            } else if (orient == "d" && !freezonFuc[0]) {
              row += step;
            }
            if (row[0] < 0 || col[0] < 0) {
              return _this.error.r;
            }
            if (!isNaN(row) && !isNaN(col)) {
              return prefix + $col + chatatABC(col) + $row + row;
            } else if (!isNaN(row)) {
              return prefix + $row + row;
            } else if (!isNaN(col)) {
              return prefix + $col + chatatABC(col);
            } else {
              return txt;
            }
          } else {
            rangetxt = rangetxt.split(":");
            let row = [], col = [];
            row[0] = parseInt(rangetxt[0].replace(/[^0-9]/g, ""));
            row[1] = parseInt(rangetxt[1].replace(/[^0-9]/g, ""));
            if (row[0] > row[1]) {
              return txt;
            }
            col[0] = ABCatNum(rangetxt[0].replace(/[^A-Za-z]/g, ""));
            col[1] = ABCatNum(rangetxt[1].replace(/[^A-Za-z]/g, ""));
            if (col[0] > col[1]) {
              return txt;
            }
            let freezonFuc0 = _this.isfreezonFuc(rangetxt[0]);
            let freezonFuc1 = _this.isfreezonFuc(rangetxt[1]);
            let $row0 = freezonFuc0[0] ? "$" : "", $col0 = freezonFuc0[1] ? "$" : "";
            let $row1 = freezonFuc1[0] ? "$" : "", $col1 = freezonFuc1[1] ? "$" : "";
            if (orient == "u") {
              if (!freezonFuc0[0]) {
                row[0] -= step;
              }
              if (!freezonFuc1[0]) {
                row[1] -= step;
              }
            } else if (orient == "r") {
              if (!freezonFuc0[1]) {
                col[0] += step;
              }
              if (!freezonFuc1[1]) {
                col[1] += step;
              }
            } else if (orient == "l") {
              if (!freezonFuc0[1]) {
                col[0] -= step;
              }
              if (!freezonFuc1[1]) {
                col[1] -= step;
              }
            } else if (orient == "d") {
              if (!freezonFuc0[0]) {
                row[0] += step;
              }
              if (!freezonFuc1[0]) {
                row[1] += step;
              }
            }
            if (row[0] < 0 || col[0] < 0) {
              return _this.error.r;
            }
            if (isNaN(col[0]) && isNaN(col[1])) {
              return prefix + $row0 + row[0] + ":" + $row1 + row[1];
            } else if (isNaN(row[0]) && isNaN(row[1])) {
              return prefix + $col0 + chatatABC(col[0]) + ":" + $col1 + chatatABC(col[1]);
            } else {
              return prefix + $col0 + chatatABC(col[0]) + $row0 + row[0] + ":" + $col1 + chatatABC(col[1]) + $row1 + row[1];
            }
          }
        },
        downparam: function(txt, step) {
          return this.updateparam("d", txt, step);
        },
        upparam: function(txt, step) {
          return this.updateparam("u", txt, step);
        },
        leftparam: function(txt, step) {
          return this.updateparam("l", txt, step);
        },
        rightparam: function(txt, step) {
          return this.updateparam("r", txt, step);
        },
        functionStrChange: function(txt, type, rc, orient, stindex, step) {
          let _this = this;
          if (_this.operatorjson == null) {
            let arr = _this.operator.split("|"), op = {};
            for (let i3 = 0; i3 < arr.length; i3++) {
              op[arr[i3].toString()] = 1;
            }
            _this.operatorjson = op;
          }
          if (txt.substr(0, 1) == "=") {
            txt = txt.substr(1);
          }
          let funcstack = txt.split("");
          let i2 = 0, str = "", function_str = "", ispassby = true;
          let matchConfig = {
            "bracket": 0,
            "comma": 0,
            "squote": 0,
            "dquote": 0
          };
          while (i2 < funcstack.length) {
            let s = funcstack[i2];
            if (s == "(" && matchConfig.dquote == 0) {
              matchConfig.bracket += 1;
              if (str.length > 0) {
                function_str += str + "(";
              } else {
                function_str += "(";
              }
              str = "";
            } else if (s == ")" && matchConfig.dquote == 0) {
              matchConfig.bracket -= 1;
              function_str += _this.functionStrChange(str, type, rc, orient, stindex, step) + ")";
              str = "";
            } else if (s == '"' && matchConfig.squote == 0) {
              if (matchConfig.dquote > 0) {
                function_str += str + '"';
                matchConfig.dquote -= 1;
                str = "";
              } else {
                matchConfig.dquote += 1;
                str += '"';
              }
            } else if (s == "," && matchConfig.dquote == 0) {
              function_str += _this.functionStrChange(str, type, rc, orient, stindex, step) + ",";
              str = "";
            } else if (s == "&" && matchConfig.dquote == 0) {
              if (str.length > 0) {
                function_str += _this.functionStrChange(str, type, rc, orient, stindex, step) + "&";
                str = "";
              } else {
                function_str += "&";
              }
            } else if (s in _this.operatorjson && matchConfig.dquote == 0) {
              let s_next = "";
              if (i2 + 1 < funcstack.length) {
                s_next = funcstack[i2 + 1];
              }
              let p = i2 - 1, s_pre = null;
              if (p >= 0) {
                do {
                  s_pre = funcstack[p--];
                } while (p >= 0 && s_pre == " ");
              }
              if (s + s_next in _this.operatorjson) {
                if (str.length > 0) {
                  function_str += _this.functionStrChange(str, type, rc, orient, stindex, step) + s + s_next;
                  str = "";
                } else {
                  function_str += s + s_next;
                }
                i2++;
              } else if (!/[^0-9]/.test(s_next) && s == "-" && (s_pre == "(" || s_pre == null || s_pre == "," || s_pre == " " || s_pre in _this.operatorjson)) {
                str += s;
              } else {
                if (str.length > 0) {
                  function_str += _this.functionStrChange(str, type, rc, orient, stindex, step) + s;
                  str = "";
                } else {
                  function_str += s;
                }
              }
            } else {
              str += s;
            }
            if (i2 == funcstack.length - 1) {
              if (_this.iscelldata($.trim(str))) {
                function_str += _this.functionStrChange_range($.trim(str), type, rc, orient, stindex, step);
              } else {
                function_str += $.trim(str);
              }
            }
            i2++;
          }
          return function_str;
        },
        functionStrChange_range: function(txt, type, rc, orient, stindex, step) {
          let _this = this;
          let val = txt.split("!"), rangetxt, prefix = "";
          if (val.length > 1) {
            rangetxt = val[1];
            prefix = val[0] + "!";
          } else {
            rangetxt = val[0];
          }
          let r1, r2, c1, c2;
          let $row0, $row1, $col0, $col1;
          if (rangetxt.indexOf(":") == -1) {
            r1 = r2 = parseInt(rangetxt.replace(/[^0-9]/g, "")) - 1;
            c1 = c2 = ABCatNum(rangetxt.replace(/[^A-Za-z]/g, ""));
            let freezonFuc = _this.isfreezonFuc(rangetxt);
            $row0 = $row1 = freezonFuc[0] ? "$" : "", $col0 = $col1 = freezonFuc[1] ? "$" : "";
          } else {
            rangetxt = rangetxt.split(":");
            r1 = parseInt(rangetxt[0].replace(/[^0-9]/g, "")) - 1;
            r2 = parseInt(rangetxt[1].replace(/[^0-9]/g, "")) - 1;
            if (r1 > r2) {
              return txt;
            }
            c1 = ABCatNum(rangetxt[0].replace(/[^A-Za-z]/g, ""));
            c2 = ABCatNum(rangetxt[1].replace(/[^A-Za-z]/g, ""));
            if (c1 > c2) {
              return txt;
            }
            let freezonFuc0 = _this.isfreezonFuc(rangetxt[0]);
            $row0 = freezonFuc0[0] ? "$" : "";
            $col0 = freezonFuc0[1] ? "$" : "";
            let freezonFuc1 = _this.isfreezonFuc(rangetxt[1]);
            $row1 = freezonFuc1[0] ? "$" : "";
            $col1 = freezonFuc1[1] ? "$" : "";
          }
          if (type == "del") {
            if (rc == "row") {
              if (r1 >= stindex && r2 <= stindex + step - 1) {
                return _this.error.r;
              }
              if (r1 > stindex + step - 1) {
                r1 -= step;
              } else if (r1 >= stindex) {
                r1 = stindex;
              }
              if (r2 > stindex + step - 1) {
                r2 -= step;
              } else if (r2 >= stindex) {
                r2 = stindex - 1;
              }
              if (r1 < 0) {
                r1 = 0;
              }
              if (r2 < r1) {
                r2 = r1;
              }
            } else if (rc == "col") {
              if (c1 >= stindex && c2 <= stindex + step - 1) {
                return _this.error.r;
              }
              if (c1 > stindex + step - 1) {
                c1 -= step;
              } else if (c1 >= stindex) {
                c1 = stindex;
              }
              if (c2 > stindex + step - 1) {
                c2 -= step;
              } else if (c2 >= stindex) {
                c2 = stindex - 1;
              }
              if (c1 < 0) {
                c1 = 0;
              }
              if (c2 < c1) {
                c2 = c1;
              }
            }
            if (r1 == r2 && c1 == c2) {
              if (!isNaN(r1) && !isNaN(c1)) {
                return prefix + $col0 + chatatABC(c1) + $row0 + (r1 + 1);
              } else if (!isNaN(r1)) {
                return prefix + $row0 + (r1 + 1);
              } else if (!isNaN(c1)) {
                return prefix + $col0 + chatatABC(c1);
              } else {
                return txt;
              }
            } else {
              if (isNaN(c1) && isNaN(c2)) {
                return prefix + $row0 + (r1 + 1) + ":" + $row1 + (r2 + 1);
              } else if (isNaN(r1) && isNaN(r2)) {
                return prefix + $col0 + chatatABC(c1) + ":" + $col1 + chatatABC(c2);
              } else {
                return prefix + $col0 + chatatABC(c1) + $row0 + (r1 + 1) + ":" + $col1 + chatatABC(c2) + $row1 + (r2 + 1);
              }
            }
          } else if (type == "add") {
            if (rc == "row") {
              if (orient == "lefttop") {
                if (r1 >= stindex) {
                  r1 += step;
                }
                if (r2 >= stindex) {
                  r2 += step;
                }
              } else if (orient == "rightbottom") {
                if (r1 > stindex) {
                  r1 += step;
                }
                if (r2 > stindex) {
                  r2 += step;
                }
              }
            } else if (rc == "col") {
              if (orient == "lefttop") {
                if (c1 >= stindex) {
                  c1 += step;
                }
                if (c2 >= stindex) {
                  c2 += step;
                }
              } else if (orient == "rightbottom") {
                if (c1 > stindex) {
                  c1 += step;
                }
                if (c2 > stindex) {
                  c2 += step;
                }
              }
            }
            if (r1 == r2 && c1 == c2) {
              if (!isNaN(r1) && !isNaN(c1)) {
                return prefix + $col0 + chatatABC(c1) + $row0 + (r1 + 1);
              } else if (!isNaN(r1)) {
                return prefix + $row0 + (r1 + 1);
              } else if (!isNaN(c1)) {
                return prefix + $col0 + chatatABC(c1);
              } else {
                return txt;
              }
            } else {
              if (isNaN(c1) && isNaN(c2)) {
                return prefix + $row0 + (r1 + 1) + ":" + $row1 + (r2 + 1);
              } else if (isNaN(r1) && isNaN(r2)) {
                return prefix + $col0 + chatatABC(c1) + ":" + $col1 + chatatABC(c2);
              } else {
                return prefix + $col0 + chatatABC(c1) + $row0 + (r1 + 1) + ":" + $col1 + chatatABC(c2) + $row1 + (r2 + 1);
              }
            }
          }
        },
        israngeseleciton: function(istooltip) {
          let _this = this;
          if (_this.operatorjson == null) {
            let arr = _this.operator.split("|"), op = {};
            for (let i2 = 0; i2 < arr.length; i2++) {
              op[arr[i2].toString()] = 1;
            }
            _this.operatorjson = op;
          }
          if (istooltip == null) {
            istooltip = false;
          }
          let currSelection = window.getSelection();
          let anchor = $(currSelection.anchorNode);
          let anchorOffset = currSelection.anchorOffset;
          if (anchor.parent().is("span") && anchorOffset != 0) {
            let txt = $.trim(anchor.text()), lasttxt = "";
            if (txt.length == 0 && anchor.parent().prev().length > 0) {
              let ahr = anchor.parent().prev();
              txt = $.trim(ahr.text());
              lasttxt = txt.substr(txt.length - 1, 1);
              _this.rangeSetValueTo = ahr;
            } else {
              lasttxt = txt.substr(anchorOffset - 1, 1);
              _this.rangeSetValueTo = anchor.parent();
            }
            if (istooltip && (lasttxt == "(" || lasttxt == ",") || !istooltip && (lasttxt == "(" || lasttxt == "," || lasttxt == "=" || lasttxt in _this.operatorjson || lasttxt == "&")) {
              return true;
            }
          } else if (anchor.is("#luckysheet-rich-text-editor") || anchor.is("#luckysheet-functionbox-cell")) {
            let txt = $.trim(anchor.find("span").last().text()), lasttxt;
            _this.rangeSetValueTo = anchor.find("span").last();
            if (txt.length == 0 && anchor.find("span").length > 1) {
              let ahr = anchor.find("span");
              txt = $.trim(ahr.eq(ahr.length - 2).text());
              _this.rangeSetValueTo = ahr;
            }
            lasttxt = txt.substr(txt.length - 1, 1);
            if (istooltip && (lasttxt == "(" || lasttxt == ",") || !istooltip && (lasttxt == "(" || lasttxt == "," || lasttxt == "=" || lasttxt in _this.operatorjson || lasttxt == "&")) {
              return true;
            }
          } else if (anchor.parent().is("#luckysheet-rich-text-editor") || anchor.parent().is("#luckysheet-functionbox-cell") || anchorOffset == 0) {
            if (anchorOffset == 0) {
              anchor = anchor.parent();
            }
            if (anchor.prev().length > 0) {
              let txt = $.trim(anchor.prev().text());
              let lasttxt = txt.substr(txt.length - 1, 1);
              _this.rangeSetValueTo = anchor.prev();
              if (istooltip && (lasttxt == "(" || lasttxt == ",") || !istooltip && (lasttxt == "(" || lasttxt == "," || lasttxt == "=" || lasttxt in _this.operatorjson || lasttxt == "&")) {
                return true;
              }
            }
          }
          return false;
        },
        rangechangeindex: null,
        rangestart: false,
        rangetosheet: null,
        rangeSetValueTo: null,
        func_selectedrange: {},
        rangeSetValue: function(selected, obj) {
          let _this = this;
          let range2 = "", rf = selected["row"][0], cf = selected["column"][0];
          if (store_default.config["merge"] != null && rf + "_" + cf in store_default.config["merge"]) {
            range2 = getRangetxt(store_default.currentSheetIndex, {
              column: [cf, cf],
              row: [rf, rf]
            }, _this.rangetosheet);
          } else {
            range2 = getRangetxt(store_default.currentSheetIndex, selected, _this.rangetosheet);
          }
          let $editor;
          if (_this.rangestart || _this.rangedrag_column_start || _this.rangedrag_row_start) {
            if ($("#luckysheet-search-formula-parm").is(":visible") || $("#luckysheet-search-formula-parm-select").is(":visible")) {
              $editor = $("#luckysheet-rich-text-editor");
              $("#luckysheet-search-formula-parm-select-input").val(range2);
              $("#luckysheet-search-formula-parm .parmBox").eq(_this.data_parm_index).find(".txt input").val(range2);
              let txtdata = luckysheet_getcelldata(range2).data;
              if (txtdata instanceof Array) {
                let txtArr = [];
                for (let i2 = 0; i2 < txtdata.length; i2++) {
                  for (let j = 0; j < txtdata[i2].length; j++) {
                    if (txtdata[i2][j] == null) {
                      txtArr.push(null);
                    } else {
                      txtArr.push(txtdata[i2][j].v);
                    }
                  }
                }
                $("#luckysheet-search-formula-parm .parmBox").eq(_this.data_parm_index).find(".val").text(" = {" + txtArr.join(",") + "}");
              } else {
                $("#luckysheet-search-formula-parm .parmBox").eq(_this.data_parm_index).find(".val").text(" = {" + txtdata.v + "}");
              }
              let isVal = true;
              let parmValArr = [];
              let lvi = -1;
              $("#luckysheet-search-formula-parm .parmBox").each(function(i2, e) {
                let parmtxt = $(e).find(".txt input").val();
                if (parmtxt == "" && $(e).find(".txt input").attr("data_parm_require") == "m") {
                  isVal = false;
                }
                if (parmtxt != "") {
                  lvi = i2;
                }
              });
              let functionHtmlTxt;
              if (lvi == -1) {
                functionHtmlTxt = "=" + $("#luckysheet-search-formula-parm .luckysheet-modal-dialog-title-text").text() + "()";
              } else if (lvi == 0) {
                functionHtmlTxt = "=" + $("#luckysheet-search-formula-parm .luckysheet-modal-dialog-title-text").text() + "(" + $("#luckysheet-search-formula-parm .parmBox").eq(0).find(".txt input").val() + ")";
              } else {
                for (let j = 0; j <= lvi; j++) {
                  parmValArr.push($("#luckysheet-search-formula-parm .parmBox").eq(j).find(".txt input").val());
                }
                functionHtmlTxt = "=" + $("#luckysheet-search-formula-parm .luckysheet-modal-dialog-title-text").text() + "(" + parmValArr.join(",") + ")";
              }
              let function_str = _this.functionHTMLGenerate(functionHtmlTxt);
              $("#luckysheet-rich-text-editor").html(function_str);
              $("#luckysheet-functionbox-cell").html($("#luckysheet-rich-text-editor").html());
              if (isVal) {
                let fp = $.trim(_this.functionParserExe($("#luckysheet-rich-text-editor").text()));
                let result = new Function("return " + fp)();
                $("#luckysheet-search-formula-parm .result span").text(result);
              }
            } else {
              let currSelection = window.getSelection();
              let anchorOffset = currSelection.anchorNode;
              $editor = $(anchorOffset).closest("div");
              let $span = $editor.find("span[rangeindex='" + _this.rangechangeindex + "']").html(range2);
              _this.setCaretPosition($span.get(0), 0, range2.length);
            }
          } else {
            let function_str = '<span class="luckysheet-formula-functionrange-cell" rangeindex="' + _this.functionHTMLIndex + '" dir="auto" style="color:' + luckyColor[_this.functionHTMLIndex] + ';">' + range2 + "</span>";
            let $t = $(function_str).insertAfter(_this.rangeSetValueTo);
            _this.rangechangeindex = _this.functionHTMLIndex;
            $editor = $(_this.rangeSetValueTo).closest("div");
            _this.setCaretPosition($editor.find("span[rangeindex='" + _this.rangechangeindex + "']").get(0), 0, range2.length);
            _this.functionHTMLIndex++;
          }
          if ($editor.attr("id") == "luckysheet-rich-text-editor") {
            $("#luckysheet-functionbox-cell").html($("#luckysheet-rich-text-editor").html());
          } else {
            $("#luckysheet-rich-text-editor").html($("#luckysheet-functionbox-cell").html());
          }
        },
        rangedrag: function(event2) {
          let _this = this;
          let mouse = mouseposition(event2.pageX, event2.pageY);
          let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
          let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
          let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
          let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
          let top = 0, height = 0, rowseleted = [];
          if (_this.func_selectedrange.top > row_pre) {
            top = row_pre;
            height = _this.func_selectedrange.top + _this.func_selectedrange.height - row_pre;
            rowseleted = [row_index, _this.func_selectedrange.row[1]];
          } else if (_this.func_selectedrange.top == row_pre) {
            top = row_pre;
            height = _this.func_selectedrange.top + _this.func_selectedrange.height - row_pre;
            rowseleted = [row_index, _this.func_selectedrange.row[0]];
          } else {
            top = _this.func_selectedrange.top;
            height = row - _this.func_selectedrange.top - 1;
            rowseleted = [_this.func_selectedrange.row[0], row_index];
          }
          let left = 0, width = 0, columnseleted = [];
          if (_this.func_selectedrange.left > col_pre) {
            left = col_pre;
            width = _this.func_selectedrange.left + _this.func_selectedrange.width - col_pre;
            columnseleted = [col_index, _this.func_selectedrange.column[1]];
          } else if (_this.func_selectedrange.left == col_pre) {
            left = col_pre;
            width = _this.func_selectedrange.left + _this.func_selectedrange.width - col_pre;
            columnseleted = [col_index, _this.func_selectedrange.column[0]];
          } else {
            left = _this.func_selectedrange.left;
            width = col - _this.func_selectedrange.left - 1;
            columnseleted = [_this.func_selectedrange.column[0], col_index];
          }
          rowseleted[0] = freezen_default.changeFreezenIndex(rowseleted[0], "h");
          rowseleted[1] = freezen_default.changeFreezenIndex(rowseleted[1], "h");
          columnseleted[0] = freezen_default.changeFreezenIndex(columnseleted[0], "v");
          columnseleted[1] = freezen_default.changeFreezenIndex(columnseleted[1], "v");
          let changeparam = menuButton_default.mergeMoveMain(columnseleted, rowseleted, _this.func_selectedrange, top, height, left, width);
          if (changeparam != null) {
            columnseleted = changeparam[0];
            rowseleted = changeparam[1];
            top = changeparam[2];
            height = changeparam[3];
            left = changeparam[4];
            width = changeparam[5];
          }
          _this.func_selectedrange["row"] = rowseleted;
          _this.func_selectedrange["column"] = columnseleted;
          _this.func_selectedrange["left_move"] = left;
          _this.func_selectedrange["width_move"] = width;
          _this.func_selectedrange["top_move"] = top;
          _this.func_selectedrange["height_move"] = height;
          luckysheet_count_show(left, top, width, height, rowseleted, columnseleted);
          $("#luckysheet-formula-functionrange-select").css({
            "left": left,
            "width": width,
            "top": top,
            "height": height
          }).show();
          if ($("#luckysheet-ifFormulaGenerator-multiRange-dialog").is(":visible")) {
            let range2 = getRangetxt(store_default.currentSheetIndex, {"row": rowseleted, "column": columnseleted}, store_default.currentSheetIndex);
            $("#luckysheet-ifFormulaGenerator-multiRange-dialog input").val(range2);
          } else {
            _this.rangeSetValue({
              "row": rowseleted,
              "column": columnseleted
            });
          }
          freezen_default.scrollFreezen(rowseleted, columnseleted);
        },
        rangedrag_column_start: false,
        rangedrag_row_start: false,
        rangedrag_column: function(event2) {
          let _this = this;
          let mouse = mouseposition(event2.pageX, event2.pageY);
          let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
          let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
          let visibledatarow = store_default.visibledatarow;
          let row_index = visibledatarow.length - 1, row = visibledatarow[row_index], row_pre = 0;
          let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
          let left = 0, width = 0, columnseleted = [];
          if (_this.func_selectedrange.left > col_pre) {
            left = col_pre;
            width = _this.func_selectedrange.left + _this.func_selectedrange.width - col_pre;
            columnseleted = [col_index, _this.func_selectedrange.column[1]];
          } else if (_this.func_selectedrange.left == col_pre) {
            left = col_pre;
            width = _this.func_selectedrange.left + _this.func_selectedrange.width - col_pre;
            columnseleted = [col_index, _this.func_selectedrange.column[0]];
          } else {
            left = _this.func_selectedrange.left;
            width = col - _this.func_selectedrange.left - 1;
            columnseleted = [_this.func_selectedrange.column[0], col_index];
          }
          columnseleted[0] = freezen_default.changeFreezenIndex(columnseleted[0], "v");
          columnseleted[1] = freezen_default.changeFreezenIndex(columnseleted[1], "v");
          let changeparam = menuButton_default.mergeMoveMain(columnseleted, [0, row_index], _this.func_selectedrange, row_pre, row - row_pre - 1, left, width);
          if (changeparam != null) {
            columnseleted = changeparam[0];
            left = changeparam[4];
            width = changeparam[5];
          }
          _this.func_selectedrange["column"] = columnseleted;
          _this.func_selectedrange["left_move"] = left;
          _this.func_selectedrange["width_move"] = width;
          luckysheet_count_show(left, row_pre, width, row - row_pre - 1, [0, row_index], columnseleted);
          _this.rangeSetValue({
            "row": [null, null],
            "column": columnseleted
          });
          $("#luckysheet-formula-functionrange-select").css({
            "left": left,
            "width": width,
            "top": row_pre,
            "height": row - row_pre - 1
          }).show();
          freezen_default.scrollFreezen([0, row_index], columnseleted);
        },
        rangedrag_row: function(event2) {
          let _this = this;
          let mouse = mouseposition(event2.pageX, event2.pageY);
          let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
          let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
          let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
          let visibledatacolumn = store_default.visibledatacolumn;
          let col_index = visibledatacolumn.length - 1, col = visibledatacolumn[col_index], col_pre = 0;
          let top = 0, height = 0, rowseleted = [];
          if (_this.func_selectedrange.top > row_pre) {
            top = row_pre;
            height = _this.func_selectedrange.top + _this.func_selectedrange.height - row_pre;
            rowseleted = [row_index, _this.func_selectedrange.row[1]];
          } else if (_this.func_selectedrange.top == row_pre) {
            top = row_pre;
            height = _this.func_selectedrange.top + _this.func_selectedrange.height - row_pre;
            rowseleted = [row_index, _this.func_selectedrange.row[0]];
          } else {
            top = _this.func_selectedrange.top;
            height = row - _this.func_selectedrange.top - 1;
            rowseleted = [_this.func_selectedrange.row[0], row_index];
          }
          rowseleted[0] = freezen_default.changeFreezenIndex(rowseleted[0], "h");
          rowseleted[1] = freezen_default.changeFreezenIndex(rowseleted[1], "h");
          let changeparam = menuButton_default.mergeMoveMain([0, col_index], rowseleted, _this.func_selectedrange, top, height, col_pre, col - col_pre - 1);
          if (changeparam != null) {
            rowseleted = changeparam[1];
            top = changeparam[2];
            height = changeparam[3];
          }
          _this.func_selectedrange["row"] = rowseleted;
          _this.func_selectedrange["top_move"] = top;
          _this.func_selectedrange["height_move"] = height;
          luckysheet_count_show(col_pre, top, col - col_pre - 1, height, rowseleted, [0, col_index]);
          _this.rangeSetValue({
            "row": rowseleted,
            "column": [null, null]
          });
          $("#luckysheet-formula-functionrange-select").css({
            "left": col_pre,
            "width": col - col_pre - 1,
            "top": top,
            "height": height
          }).show();
          freezen_default.scrollFreezen(rowseleted, [0, col_index]);
        },
        rangedragged: function() {
        },
        rangeResizeObj: null,
        rangeResize: null,
        rangeResizeIndex: null,
        rangeResizexy: null,
        rangeResizeWinH: null,
        rangeResizeWinW: null,
        rangeResizeTo: null,
        rangeResizeDraging: function(event2, luckysheetCurrentChartResizeObj, luckysheetCurrentChartResizeXy, luckysheetCurrentChartResize, luckysheetCurrentChartResizeWinW, luckysheetCurrentChartResizeWinH, ch_width, rh_height) {
          let _this = this;
          let scrollTop = $("#luckysheet-scrollbar-y").scrollTop(), scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft();
          let mouse = mouseposition(event2.pageX, event2.pageY);
          let x = mouse[0] + scrollLeft;
          let y = mouse[1] + scrollTop;
          let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
          let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
          if (x < 0 || y < 0) {
            return false;
          }
          let topchange = row_pre - luckysheetCurrentChartResizeXy[1], leftchange = col_pre - luckysheetCurrentChartResizeXy[0];
          let top = luckysheetCurrentChartResizeXy[5], height = luckysheetCurrentChartResizeXy[3], left = luckysheetCurrentChartResizeXy[4], width = luckysheetCurrentChartResizeXy[2];
          if (luckysheetCurrentChartResize == "lt" || luckysheetCurrentChartResize == "lb") {
            if (luckysheetCurrentChartResizeXy[0] + luckysheetCurrentChartResizeXy[2] < col_pre) {
              return;
            }
            left = col_pre;
            width = luckysheetCurrentChartResizeXy[2] - leftchange;
            if (left > luckysheetCurrentChartResizeXy[2] + luckysheetCurrentChartResizeXy[4] - col + col_pre) {
              left = luckysheetCurrentChartResizeXy[2] + luckysheetCurrentChartResizeXy[4] - col + col_pre;
              width = luckysheetCurrentChartResizeXy[2] - (luckysheetCurrentChartResizeXy[2] + luckysheetCurrentChartResizeXy[4] - col + col_pre - luckysheetCurrentChartResizeXy[0]);
            } else if (left <= 0) {
              left = 0;
              width = luckysheetCurrentChartResizeXy[2] + luckysheetCurrentChartResizeXy[0];
            }
          }
          if (luckysheetCurrentChartResize == "rt" || luckysheetCurrentChartResize == "rb") {
            if (luckysheetCurrentChartResizeXy[6] - luckysheetCurrentChartResizeXy[2] > col) {
              return;
            }
            width = luckysheetCurrentChartResizeXy[2] + col - luckysheetCurrentChartResizeXy[6];
            if (width < col - col_pre - 1) {
              width = col - col_pre - 1;
            } else if (width >= ch_width - left) {
              width = ch_width - left;
            }
          }
          if (luckysheetCurrentChartResize == "lt" || luckysheetCurrentChartResize == "rt") {
            if (luckysheetCurrentChartResizeXy[1] + luckysheetCurrentChartResizeXy[3] < row_pre) {
              return;
            }
            top = row_pre;
            height = luckysheetCurrentChartResizeXy[3] - topchange;
            if (top > luckysheetCurrentChartResizeXy[3] + luckysheetCurrentChartResizeXy[5] - row + row_pre) {
              top = luckysheetCurrentChartResizeXy[3] + luckysheetCurrentChartResizeXy[5] - row + row_pre;
              height = luckysheetCurrentChartResizeXy[3] - (luckysheetCurrentChartResizeXy[3] + luckysheetCurrentChartResizeXy[5] - row + row_pre - luckysheetCurrentChartResizeXy[1]);
            } else if (top <= 0) {
              top = 0;
              height = luckysheetCurrentChartResizeXy[3] + luckysheetCurrentChartResizeXy[1];
            }
          }
          if (luckysheetCurrentChartResize == "lb" || luckysheetCurrentChartResize == "rb") {
            if (luckysheetCurrentChartResizeXy[7] - luckysheetCurrentChartResizeXy[3] > row) {
              return;
            }
            height = luckysheetCurrentChartResizeXy[3] + row - luckysheetCurrentChartResizeXy[7];
            if (height < row - row_pre - 1) {
              height = row - row_pre - 1;
            } else if (height >= rh_height - top) {
              height = rh_height - top;
            }
          }
          let rangeindex = _this.rangeResizeIndex;
          let selected = {
            "top": top,
            "left": left,
            "height": height,
            "width": width
          };
          let range2 = _this.getSelectedFromRange(selected);
          let rangetxt = getRangetxt(store_default.currentSheetIndex, range2, _this.rangetosheet);
          let $span = _this.rangeResizeTo.find("span[rangeindex='" + rangeindex + "']").html(rangetxt);
          luckysheetRangeLast(_this.rangeResizeTo[0]);
          luckysheetCurrentChartResizeObj.css(selected).data("range", range2);
        },
        getSelectedFromRange: function(obj) {
          let row_st = obj.top + 2, row_ed = obj.top + obj.height - 2;
          let col_st = obj.left + 2, col_ed = obj.left + obj.width - 2;
          let ret = {
            "row": [
              rowLocation(row_st)[2],
              rowLocation(row_ed)[2]
            ],
            "column": [
              colLocation(col_st)[2],
              colLocation(col_ed)[2]
            ]
          };
          return ret;
        },
        rangeResizeDragged: function(event2, luckysheetCurrentChartResizeObj, luckysheetCurrentChartResizeXy, luckysheetCurrentChartResize, luckysheetCurrentChartResizeWinW, luckysheetCurrentChartResizeWinH) {
          let _this = this;
          _this.rangeResize = null;
          $("#luckysheet-formula-functionrange-highlight-" + _this.rangeResizeIndex).find(".luckysheet-selection-copy-hc").css("opacity", 0.03);
        },
        rangeMovexy: null,
        rangeMove: false,
        rangeMoveObj: null,
        rangeMoveIndex: null,
        rangeMoveRangedata: null,
        rangeMoveDraging: function(event2, luckysheet_cell_selected_move_index, luckysheet_select_save, obj, sheetBarHeight, statisticBarHeight) {
          let _this = this;
          let mouse = mouseposition(event2.pageX, event2.pageY);
          let scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft();
          let scrollTop = $("#luckysheet-scrollbar-y").scrollTop();
          let x = mouse[0] + scrollLeft;
          let y = mouse[1] + scrollTop;
          let winH = $(window).height() + scrollTop - sheetBarHeight - statisticBarHeight, winW = $(window).width() + scrollLeft;
          let row_index_original = luckysheet_cell_selected_move_index[0], col_index_original = luckysheet_cell_selected_move_index[1];
          let row_s = luckysheet_select_save["row"][0] - row_index_original + rowLocation(y)[2], row_e = luckysheet_select_save["row"][1] - row_index_original + rowLocation(y)[2];
          let col_s = luckysheet_select_save["column"][0] - col_index_original + colLocation(x)[2], col_e = luckysheet_select_save["column"][1] - col_index_original + colLocation(x)[2];
          if (row_s < 0 || y < 0) {
            row_s = 0;
            row_e = luckysheet_select_save["row"][1] - luckysheet_select_save["row"][0];
          }
          if (col_s < 0 || x < 0) {
            col_s = 0;
            col_e = luckysheet_select_save["column"][1] - luckysheet_select_save["column"][0];
          }
          let visibledatarow = store_default.visibledatarow;
          if (row_e >= visibledatarow[visibledatarow.length - 1] || y > winH) {
            row_s = visibledatarow.length - 1 - luckysheet_select_save["row"][1] + luckysheet_select_save["row"][0];
            row_e = visibledatarow.length - 1;
          }
          let visibledatacolumn = store_default.visibledatacolumn;
          if (col_e >= visibledatacolumn[visibledatacolumn.length - 1] || x > winW) {
            col_s = visibledatacolumn.length - 1 - luckysheet_select_save["column"][1] + luckysheet_select_save["column"][0];
            col_e = visibledatacolumn.length - 1;
          }
          let col_pre = col_s - 1 == -1 ? 0 : visibledatacolumn[col_s - 1], col = visibledatacolumn[col_e];
          let row_pre = row_s - 1 == -1 ? 0 : visibledatarow[row_s - 1], row = visibledatarow[row_e];
          let rangeindex = _this.rangeMoveIndex;
          let selected = {
            "left": col_pre,
            "width": col - col_pre - 2,
            "top": row_pre,
            "height": row - row_pre - 2,
            "display": "block"
          };
          let range2 = _this.getSelectedFromRange(selected);
          let rangetxt = getRangetxt(store_default.currentSheetIndex, range2, _this.rangetosheet);
          let $span = _this.rangeResizeTo.find("span[rangeindex='" + rangeindex + "']").html(rangetxt);
          luckysheetRangeLast(_this.rangeResizeTo[0]);
          _this.rangeMoveRangedata = range2;
          obj.css(selected);
        },
        rangeMoveDragged: function(obj) {
          let _this = this;
          _this.rangeMove = false;
          $("#luckysheet-formula-functionrange-highlight-" + _this.rangeMoveIndex).data("range", _this.rangeMoveRangedata).find(".luckysheet-selection-copy-hc").css("opacity", 0.03);
        },
        functionHTMLIndex: 0,
        functionRangeIndex: null,
        findrangeindex: function(v, vp) {
          let _this = this;
          let re = /<span.*?>/g;
          let v_a = v.replace(re, ""), vp_a = vp.replace(re, "");
          v_a = v_a.split("</span>");
          vp_a = vp_a.split("</span>");
          v_a.pop();
          vp_a.pop();
          let pfri = _this.functionRangeIndex;
          let i2 = 0;
          let spanlen = vp_a.length > v_a.length ? v_a.length : vp_a.length;
          let vplen = vp_a.length, vlen = v_a.length;
          if (vplen == vlen) {
            let i3 = pfri[0];
            let p = vp_a[i3], n = v_a[i3];
            if (p == null) {
              if (vp_a.length <= i3) {
                pfri = [vp_a.length - 1, vp_a.length - 1];
              } else if (v_a.length <= i3) {
                pfri = [v_a.length - 1, v_a.length - 1];
              }
              return pfri;
            } else if (p.length == n.length) {
              if (vp_a[i3 + 1] != null && v_a[i3 + 1] != null && vp_a[i3 + 1].length < v_a[i3 + 1].length) {
                pfri[0] = pfri[0] + 1;
                pfri[1] = 1;
              }
              return pfri;
            } else if (p.length > n.length) {
              if (p != null && v_a[i3 + 1] != null && v_a[i3 + 1].substr(0, 1) == '"' && (p.indexOf("{") > -1 || p.indexOf("}") > -1)) {
                pfri[0] = pfri[0] + 1;
                pfri[1] = 1;
              }
              return pfri;
            } else if (p.length < n.length) {
              if (pfri[1] > n.length) {
                pfri[1] = n.length;
              }
              return pfri;
            }
          } else if (vplen > vlen) {
            let i3 = pfri[0];
            let p = vp_a[i3], n = v_a[i3];
            if (n == null) {
              if (v_a[i3 - 1].indexOf("{") > -1) {
                pfri[0] = pfri[0] - 1;
                let start = v_a[i3 - 1].search("{");
                pfri[1] = pfri[1] + start;
              } else {
                pfri[0] = 0;
                pfri[1] = 0;
              }
            } else if (p.length == n.length) {
              if (v_a[i3 + 1] != null && (v_a[i3 + 1].substr(0, 1) == '"' || v_a[i3 + 1].substr(0, 1) == "{" || v_a[i3 + 1].substr(0, 1) == "}")) {
                pfri[0] = pfri[0] + 1;
                pfri[1] = 1;
              } else if (p != null && p.length > 2 && p.substr(0, 1) == '"' && p.substr(p.length - 1, 1) == '"') {
              } else if (v_a[i3] != null && v_a[i3] == '")') {
                pfri[1] = 1;
              } else if (v_a[i3] != null && v_a[i3] == '"}') {
                pfri[1] = 1;
              } else if (v_a[i3] != null && v_a[i3] == "{)") {
                pfri[1] = 1;
              } else {
                pfri[1] = n.length;
              }
              return pfri;
            } else if (p.length > n.length) {
              if (v_a[i3 + 1] != null && (v_a[i3 + 1].substr(0, 1) == '"' || v_a[i3 + 1].substr(0, 1) == "{" || v_a[i3 + 1].substr(0, 1) == "}")) {
                pfri[0] = pfri[0] + 1;
                pfri[1] = 1;
              }
              return pfri;
            } else if (p.length < n.length) {
              return pfri;
            }
            return pfri;
          } else if (vplen < vlen) {
            let i3 = pfri[0];
            let p = vp_a[i3], n = v_a[i3];
            if (p == null) {
              pfri[0] = v_a.length - 1;
              if (n != null) {
                pfri[1] = n.length;
              } else {
                pfri[1] = 1;
              }
            } else if (p.length == n.length) {
              if (vp_a[i3 + 1] != null && (vp_a[i3 + 1].substr(0, 1) == '"' || vp_a[i3 + 1].substr(0, 1) == "{" || vp_a[i3 + 1].substr(0, 1) == "}")) {
                pfri[1] = n.length;
              } else if (v_a[i3 + 1] != null && v_a[i3 + 1].substr(0, 1) == '"' && (v_a[i3 + 1].substr(0, 1) == "{" || v_a[i3 + 1].substr(0, 1) == "}")) {
                pfri[0] = pfri[0] + 1;
                pfri[1] = 1;
              } else if (n != null && n.substr(0, 1) == '"' && n.substr(n.length - 1, 1) == '"' && p.substr(0, 1) == '"' && p.substr(p.length - 1, 1) == ")") {
                pfri[1] = n.length;
              } else if (n != null && n.substr(0, 1) == "{" && n.substr(n.length - 1, 1) == "}" && p.substr(0, 1) == "{" && p.substr(p.length - 1, 1) == ")") {
                pfri[1] = n.length;
              } else {
                pfri[0] = pfri[0] + vlen - vplen;
                if (v_a.length > vp_a.length) {
                  pfri[1] = v_a[i3 + 1].length;
                } else {
                  pfri[1] = 1;
                }
              }
              return pfri;
            } else if (p.length > n.length) {
              if (p != null && p.substr(0, 1) == '"') {
                pfri[1] = n.length;
              } else if (v_a[i3 + 1] != null && /{.*?}/.test(v_a[i3 + 1])) {
                pfri[0] = pfri[0] + 1;
                pfri[1] = v_a[i3 + 1].length;
              } else if (p != null && v_a[i3 + 1].substr(0, 1) == '"' && (p.indexOf("{") > -1 || p.indexOf("}") > -1)) {
                pfri[0] = pfri[0] + 1;
                pfri[1] = 1;
              } else if (p != null && (p.indexOf("{") > -1 || p.indexOf("}") > -1)) {
              } else {
                pfri[0] = pfri[0] + vlen - vplen - 1;
                pfri[1] = v_a[i3 - 1].length;
              }
              return pfri;
            } else if (p.length < n.length) {
              return pfri;
            }
            return pfri;
          }
          return null;
        },
        setCaretPosition: function(textDom, children, pos) {
          try {
            let el = textDom;
            let range2 = document.createRange();
            let sel = window.getSelection();
            range2.setStart(el.childNodes[children], pos);
            range2.collapse(true);
            sel.removeAllRanges();
            sel.addRange(range2);
            el.focus();
          } catch (err) {
            luckysheetRangeLast(this.rangeResizeTo[0]);
          }
        },
        functionRange: function(obj, v, vp) {
          let _this = this;
          if (window.getSelection) {
            let currSelection = window.getSelection();
            let fri = _this.findrangeindex(v, vp);
            if (fri == null) {
              currSelection.selectAllChildren(obj.get(0));
              currSelection.collapseToEnd();
            } else {
              _this.setCaretPosition(obj.find("span").get(fri[0]), 0, fri[1]);
            }
          } else if (document.selection) {
            _this.functionRangeIndex.moveToElementText(obj);
            _this.functionRangeIndex.collapse(false);
            _this.functionRangeIndex.select();
          }
        },
        functionInputHanddler: function($to, $input, kcode) {
          if (isEditMode()) {
            return;
          }
          let _this = this;
          let $copy = $to, $editer = $input;
          let value1 = $editer.html(), value1txt = $editer.text();
          let xssDeal = this.xssDeal;
          setTimeout(function() {
            let value = $editer.text(), valuetxt = value;
            value = xssDeal(value);
            if (value.length > 0 && value.substr(0, 1) == "=" && (kcode != 229 || value.length == 1)) {
              value = _this.functionHTMLGenerate(value);
              value1 = _this.functionHTMLGenerate(value1txt);
              if (window.getSelection) {
                let currSelection = window.getSelection();
                if ($(currSelection.anchorNode).is("div")) {
                  let editorlen = $("#luckysheet-rich-text-editor span").length;
                  _this.functionRangeIndex = [editorlen - 1, $("#luckysheet-rich-text-editor").find("span").eq(editorlen - 1).text().length];
                } else {
                  _this.functionRangeIndex = [$(currSelection.anchorNode).parent().index(), currSelection.anchorOffset];
                }
              } else {
                let textRange = document.selection.createRange();
                _this.functionRangeIndex = textRange;
              }
              $editer.html(value);
              _this.functionRange($editer, value, value1);
              _this.canceFunctionrangeSelected();
              if (kcode != 46) {
                _this.createRangeHightlight();
              }
              $copy.html(value);
              _this.rangestart = false;
              _this.rangedrag_column_start = false;
              _this.rangedrag_row_start = false;
              _this.rangeHightlightselected($editer, kcode);
            } else if (value1txt.substr(0, 1) != "=") {
              if ($copy.attr("id") == "luckysheet-rich-text-editor") {
                if ($copy.html().substr(0, 5) == "<span") {
                } else {
                  value = _this.ltGtSignDeal(value);
                  $copy.html(value);
                }
              } else {
                value = _this.ltGtSignDeal(value);
                $copy.html(value);
              }
            }
          }, 1);
        },
        functionHTMLGenerate: function(txt) {
          let _this = this;
          if (txt.length == 0 || txt.substr(0, 1) != "=") {
            return txt;
          }
          _this.functionHTMLIndex = 0;
          return '<span dir="auto" class="luckysheet-formula-text-color">=</span>' + _this.functionHTML(txt);
        },
        functionHTML: function(txt) {
          let _this = this;
          if (_this.operatorjson == null) {
            let arr = _this.operator.split("|"), op = {};
            for (let i3 = 0; i3 < arr.length; i3++) {
              op[arr[i3].toString()] = 1;
            }
            _this.operatorjson = op;
          }
          if (txt.substr(0, 1) == "=") {
            txt = txt.substr(1);
          }
          let funcstack = txt.split("");
          let i2 = 0, str = "", function_str = "", ispassby = true;
          let matchConfig = {
            "bracket": 0,
            "comma": 0,
            "squote": 0,
            "dquote": 0,
            "braces": 0
          };
          while (i2 < funcstack.length) {
            let s = funcstack[i2];
            if (s == "(" && matchConfig.squote == 0 && matchConfig.dquote == 0 && matchConfig.braces == 0) {
              matchConfig.bracket += 1;
              if (str.length > 0) {
                function_str += '<span dir="auto" class="luckysheet-formula-text-func">' + str + '</span><span dir="auto" class="luckysheet-formula-text-lpar">(</span>';
              } else {
                function_str += '<span dir="auto" class="luckysheet-formula-text-lpar">(</span>';
              }
              str = "";
            } else if (s == ")" && matchConfig.squote == 0 && matchConfig.dquote == 0 && matchConfig.braces == 0) {
              matchConfig.bracket -= 1;
              function_str += _this.functionHTML(str) + '<span dir="auto" class="luckysheet-formula-text-rpar">)</span>';
              str = "";
            } else if (s == "{" && matchConfig.squote == 0 && matchConfig.dquote == 0) {
              str += "{";
              matchConfig.braces += 1;
            } else if (s == "}" && matchConfig.squote == 0 && matchConfig.dquote == 0) {
              str += "}";
              matchConfig.braces -= 1;
            } else if (s == '"' && matchConfig.squote == 0) {
              if (matchConfig.dquote > 0) {
                if (str.length > 0) {
                  function_str += str + '"</span>';
                } else {
                  function_str += '"</span>';
                }
                matchConfig.dquote -= 1;
                str = "";
              } else {
                matchConfig.dquote += 1;
                if (str.length > 0) {
                  function_str += _this.functionHTML(str) + '<span dir="auto" class="luckysheet-formula-text-string">"';
                } else {
                  function_str += '<span dir="auto" class="luckysheet-formula-text-string">"';
                }
                str = "";
              }
            } else if (s == "'" && matchConfig.dquote == 0) {
              str += "'";
              matchConfig.squote = matchConfig.squote == 0 ? 1 : 0;
            } else if (s == "," && matchConfig.squote == 0 && matchConfig.dquote == 0 && matchConfig.braces == 0) {
              function_str += _this.functionHTML(str) + '<span dir="auto" class="luckysheet-formula-text-comma">,</span>';
              str = "";
            } else if (s == "&" && matchConfig.squote == 0 && matchConfig.dquote == 0 && matchConfig.braces == 0) {
              if (str.length > 0) {
                function_str += _this.functionHTML(str) + '<span dir="auto" class="luckysheet-formula-text-calc">&</span>';
                str = "";
              } else {
                function_str += '<span dir="auto" class="luckysheet-formula-text-calc">&</span>';
              }
            } else if (s in _this.operatorjson && matchConfig.squote == 0 && matchConfig.dquote == 0 && matchConfig.braces == 0) {
              let s_next = "";
              if (i2 + 1 < funcstack.length) {
                s_next = funcstack[i2 + 1];
              }
              let p = i2 - 1, s_pre = null;
              if (p >= 0) {
                do {
                  s_pre = funcstack[p--];
                } while (p >= 0 && s_pre == " ");
              }
              if (s + s_next in _this.operatorjson) {
                if (str.length > 0) {
                  function_str += _this.functionHTML(str) + '<span dir="auto" class="luckysheet-formula-text-calc">' + s + s_next + "</span>";
                  str = "";
                } else {
                  function_str += '<span dir="auto" class="luckysheet-formula-text-calc">' + s + s_next + "</span>";
                }
                i2++;
              } else if (!/[^0-9]/.test(s_next) && s == "-" && (s_pre == "(" || s_pre == null || s_pre == "," || s_pre == " " || s_pre in _this.operatorjson)) {
                str += s;
              } else {
                if (str.length > 0) {
                  function_str += _this.functionHTML(str) + '<span dir="auto" class="luckysheet-formula-text-calc">' + s + "</span>";
                  str = "";
                } else {
                  function_str += '<span dir="auto" class="luckysheet-formula-text-calc">' + s + "</span>";
                }
              }
            } else {
              str += s;
            }
            if (i2 == funcstack.length - 1) {
              if (_this.iscelldata($.trim(str))) {
                function_str += '<span class="luckysheet-formula-functionrange-cell" rangeindex="' + _this.functionHTMLIndex + '" dir="auto" style="color:' + luckyColor[_this.functionHTMLIndex] + ';">' + str + "</span>";
                _this.functionHTMLIndex++;
              } else if (matchConfig.dquote > 0) {
                function_str += str + "</span>";
              } else if (str.indexOf("</span>") == -1 && str.length > 0) {
                let regx = /{.*?}/;
                if (regx.test($.trim(str))) {
                  let arraytxt = regx.exec(str)[0];
                  let arraystart = str.search(regx);
                  let alltxt = "";
                  if (arraystart > 0) {
                    alltxt += '<span dir="auto" class="luckysheet-formula-text-color">' + str.substr(0, arraystart) + "</span>";
                  }
                  alltxt += '<span dir="auto" style="color:#959a05" class="luckysheet-formula-text-array">' + arraytxt + "</span>";
                  if (arraystart + arraytxt.length < str.length) {
                    alltxt += '<span dir="auto" class="luckysheet-formula-text-color">' + str.substr(arraystart + arraytxt.length, str.length) + "</span>";
                  }
                  function_str += alltxt;
                } else {
                  function_str += '<span dir="auto" class="luckysheet-formula-text-color">' + str + "</span>";
                }
              }
            }
            i2++;
          }
          return function_str;
        },
        getfunctionParam: function(txt) {
          let _this = this;
          if (_this.operatorjson == null) {
            let arr = _this.operator.split("|"), op = {};
            for (let i3 = 0; i3 < arr.length; i3++) {
              op[arr[i3].toString()] = 1;
            }
            _this.operatorjson = op;
          }
          if (txt.substr(0, 1) == "=") {
            txt = txt.substr(1);
          }
          let funcstack = txt.split("");
          let i2 = 0, str = "", function_str = "";
          let matchConfig = {
            "bracket": 0,
            "comma": 0,
            "squote": 0,
            "dquote": 0,
            "compare": 0
          };
          let fn = null, param = [], bracket = [];
          while (i2 < funcstack.length) {
            let s = funcstack[i2];
            if (s == "(" && matchConfig.dquote == 0) {
              if (str.length > 0 && bracket.length == 0) {
                fn = str.toUpperCase();
                bracket.push(1);
                str = "";
              } else if (bracket.length == 0) {
                bracket.push(0);
                str = "";
              } else {
                bracket.push(0);
                str += s;
              }
            } else if (s == ")" && matchConfig.dquote == 0) {
              let bt = bracket.pop();
              if (bracket.length == 0) {
                param.push(str);
                str = "";
              } else {
                str += s;
              }
            } else if (s == '"') {
              str += '"';
              if (matchConfig.dquote > 0) {
                matchConfig.dquote -= 1;
                str = "";
              } else {
                matchConfig.dquote += 1;
              }
            } else if (s == "," && matchConfig.dquote == 0) {
              if (bracket.length <= 1) {
                param.push(str);
                str = "";
              } else {
                str += ",";
              }
            } else if (s in _this.operatorjson && matchConfig.dquote == 0) {
              let s_next = "";
              if (i2 + 1 < funcstack.length) {
                s_next = funcstack[i2 + 1];
              }
              let p = i2 - 1, s_pre = null;
              if (p >= 0) {
                do {
                  s_pre = funcstack[p--];
                } while (p >= 0 && s_pre == " ");
              }
              if (!/[^0-9]/.test(s_next) && s == "-" && (s_pre == "(" || s_pre == null || s_pre == "," || s_pre == " " || s_pre in _this.operatorjson)) {
                if (matchConfig.dquote == 0) {
                  str += $.trim(s);
                } else {
                  str += s;
                }
              } else {
                function_str = "";
                str = "";
              }
            } else {
              if (matchConfig.dquote == 0) {
                str += $.trim(s);
              } else {
                str += s;
              }
            }
            i2++;
          }
          return {"fn": fn, "param": param};
        },
        calPostfixExpression: function(cal) {
          if (cal.length == 0) {
            return "";
          }
          let stack = [];
          for (let i2 = cal.length - 1; i2 >= 0; i2--) {
            let c2 = cal[i2];
            if (c2 in this.operatorjson) {
              let s2 = stack.pop();
              let s1 = stack.pop();
              let str = "luckysheet_compareWith(" + s1 + ",'" + c2 + "', " + s2 + ")";
              stack.push(str);
            } else {
              stack.push(c2);
            }
          }
          if (stack.length > 0) {
            return stack[0];
          } else {
            return "";
          }
        },
        checkBracketNum: function(fp) {
          let bra_l = fp.match(/\(/g), bra_r = fp.match(/\)/g), bra_tl_txt = fp.match(/(['"])(?:(?!\1).)*?\1/g), bra_tr_txt = fp.match(/(['"])(?:(?!\1).)*?\1/g);
          let bra_l_len = 0, bra_r_len = 0;
          if (bra_l != null) {
            bra_l_len += bra_l.length;
          }
          if (bra_r != null) {
            bra_r_len += bra_r.length;
          }
          let bra_tl_len = 0, bra_tr_len = 0;
          if (bra_tl_txt != null) {
            for (let i2 = 0; i2 < bra_tl_txt.length; i2++) {
              let bra_tl = bra_tl_txt[i2].match(/\(/g);
              if (bra_tl != null) {
                bra_tl_len += bra_tl.length;
              }
            }
          }
          if (bra_tr_txt != null) {
            for (let i2 = 0; i2 < bra_tr_txt.length; i2++) {
              let bra_tr = bra_tr_txt[i2].match(/\)/g);
              if (bra_tr != null) {
                bra_tr_len += bra_tr.length;
              }
            }
          }
          bra_l_len -= bra_tl_len;
          bra_r_len -= bra_tr_len;
          if (bra_l_len != bra_r_len) {
            return false;
          } else {
            return true;
          }
        },
        operatorPriority: {
          "^": 0,
          "%": 1,
          "*": 1,
          "/": 1,
          "+": 2,
          "-": 2
        },
        functionParserExe: function(txt) {
          let _this = this;
          return this.functionParser(txt);
        },
        functionParser: function(txt, cellRangeFunction) {
          let _this = this;
          if (_this.operatorjson == null) {
            let arr = _this.operator.split("|"), op = {};
            for (let i3 = 0; i3 < arr.length; i3++) {
              op[arr[i3].toString()] = 1;
            }
            _this.operatorjson = op;
          }
          if (txt == null) {
            return "";
          }
          if (txt.substr(0, 2) == "=+") {
            txt = txt.substr(2);
          } else if (txt.substr(0, 1) == "=") {
            txt = txt.substr(1);
          }
          let funcstack = txt.split("");
          let i2 = 0, str = "", function_str = "";
          let matchConfig = {
            "bracket": 0,
            "comma": 0,
            "squote": 0,
            "dquote": 0,
            "compare": 0,
            "braces": 0
          };
          let cal1 = [], cal2 = [], bracket = [];
          let firstSQ = -1;
          while (i2 < funcstack.length) {
            let s = funcstack[i2];
            if (s == "(" && matchConfig.squote == 0 && matchConfig.dquote == 0 && matchConfig.braces == 0) {
              if (str.length > 0 && bracket.length == 0) {
                str = str.toUpperCase();
                if (str.indexOf(":") > -1) {
                  let funcArray = str.split(":");
                  function_str += "luckysheet_getSpecialReference(true,'" + $.trim(funcArray[0]).replace(/'/g, "\\'") + "', luckysheet_function." + funcArray[1] + ".f(#lucky#";
                } else {
                  function_str += "luckysheet_function." + str + ".f(";
                }
                bracket.push(1);
                str = "";
              } else if (bracket.length == 0) {
                function_str += "(";
                bracket.push(0);
                str = "";
              } else {
                bracket.push(0);
                str += s;
              }
            } else if (s == ")" && matchConfig.squote == 0 && matchConfig.dquote == 0 && matchConfig.braces == 0) {
              let bt = bracket.pop();
              if (bracket.length == 0) {
                let functionS = _this.functionParser(str, cellRangeFunction);
                if (functionS.indexOf("#lucky#") > -1) {
                  functionS = functionS.replace(/#lucky#/g, "") + ")";
                }
                function_str += functionS + ")";
                str = "";
              } else {
                str += s;
              }
            } else if (s == "{" && matchConfig.squote == 0 && matchConfig.dquote == 0) {
              str += "{";
              matchConfig.braces += 1;
            } else if (s == "}" && matchConfig.squote == 0 && matchConfig.dquote == 0) {
              str += "}";
              matchConfig.braces -= 1;
            } else if (s == '"' && matchConfig.squote == 0) {
              if (matchConfig.dquote > 0) {
                if (i2 < funcstack.length - 1 && funcstack[i2 + 1] == '"') {
                  i2++;
                  str += "\x7F";
                } else {
                  matchConfig.dquote -= 1;
                  str += '"';
                }
              } else {
                matchConfig.dquote += 1;
                str += '"';
              }
            } else if (s == "'" && matchConfig.dquote == 0) {
              str += "'";
              if (matchConfig.squote > 0) {
                if (firstSQ == i2 - 1) {
                  return "";
                }
                if (i2 < funcstack.length - 1 && funcstack[i2 + 1] == "'") {
                  i2++;
                  str += "'";
                } else {
                  if (funcstack[i2 - 1] == "'") {
                    return "";
                  } else {
                    matchConfig.squote -= 1;
                  }
                }
              } else {
                matchConfig.squote += 1;
                firstSQ = i2;
              }
            } else if (s == "," && matchConfig.squote == 0 && matchConfig.dquote == 0 && matchConfig.braces == 0) {
              if (bracket.length <= 1) {
                let functionS = _this.functionParser(str, cellRangeFunction);
                if (functionS.indexOf("#lucky#") > -1) {
                  functionS = functionS.replace(/#lucky#/g, "") + ")";
                }
                function_str += functionS + ",";
                str = "";
              } else {
                str += ",";
              }
            } else if (s in _this.operatorjson && matchConfig.squote == 0 && matchConfig.dquote == 0 && matchConfig.braces == 0) {
              let s_next = "";
              let op = _this.operatorPriority;
              if (i2 + 1 < funcstack.length) {
                s_next = funcstack[i2 + 1];
              }
              if (s + s_next in _this.operatorjson) {
                if (bracket.length == 0) {
                  if ($.trim(str).length > 0) {
                    cal2.unshift(_this.functionParser($.trim(str), cellRangeFunction));
                  } else if ($.trim(function_str).length > 0) {
                    cal2.unshift($.trim(function_str));
                  }
                  if (cal1[0] in _this.operatorjson) {
                    let stackCeilPri = op[cal1[0]];
                    while (cal1.length > 0 && stackCeilPri != null) {
                      cal2.unshift(cal1.shift());
                      stackCeilPri = op[cal1[0]];
                    }
                  }
                  cal1.unshift(s + s_next);
                  function_str = "";
                  str = "";
                } else {
                  str += s + s_next;
                }
                i2++;
              } else {
                if (bracket.length == 0) {
                  if ($.trim(str).length > 0) {
                    cal2.unshift(_this.functionParser($.trim(str), cellRangeFunction));
                  } else if ($.trim(function_str).length > 0) {
                    cal2.unshift($.trim(function_str));
                  }
                  if (cal1[0] in _this.operatorjson) {
                    let stackCeilPri = op[cal1[0]];
                    stackCeilPri = stackCeilPri == null ? 1e3 : stackCeilPri;
                    let sPri = op[s];
                    sPri = sPri == null ? 1e3 : sPri;
                    while (cal1.length > 0 && sPri >= stackCeilPri) {
                      cal2.unshift(cal1.shift());
                      stackCeilPri = op[cal1[0]];
                      stackCeilPri = stackCeilPri == null ? 1e3 : stackCeilPri;
                    }
                  }
                  cal1.unshift(s);
                  function_str = "";
                  str = "";
                } else {
                  str += s;
                }
              }
            } else {
              if (matchConfig.dquote == 0 && matchConfig.squote == 0) {
                str += s;
              } else {
                str += s;
              }
            }
            if (i2 == funcstack.length - 1) {
              let endstr = "";
              let str_nb = $.trim(str).replace(/'/g, "\\'");
              if (_this.iscelldata(str_nb) && str_nb.substr(0, 1) != ":") {
                endstr = "luckysheet_getcelldata('" + str_nb + "')";
                if (typeof cellRangeFunction == "function") {
                  cellRangeFunction(str_nb);
                }
              } else if (str_nb.substr(0, 1) == ":") {
                str_nb = str_nb.substr(1);
                if (_this.iscelldata(str_nb)) {
                  endstr = "luckysheet_getSpecialReference(false," + function_str + ",'" + str_nb + "')";
                }
              } else {
                str = $.trim(str);
                let regx = /{.*?}/;
                if (regx.test(str) && str.substr(0, 1) != '"' && str.substr(str.length - 1, 1) != '"') {
                  let arraytxt = regx.exec(str)[0];
                  let arraystart = str.search(regx);
                  let alltxt = "";
                  if (arraystart > 0) {
                    endstr += str.substr(0, arraystart);
                  }
                  endstr += "luckysheet_getarraydata('" + arraytxt + "')";
                  if (arraystart + arraytxt.length < str.length) {
                    endstr += str.substr(arraystart + arraytxt.length, str.length);
                  }
                } else {
                  endstr = str;
                }
              }
              if (endstr.length > 0) {
                cal2.unshift(endstr);
              }
              if (cal1.length > 0) {
                if (function_str.length > 0) {
                  cal2.unshift(function_str);
                  function_str = "";
                }
                while (cal1.length > 0) {
                  cal2.unshift(cal1.shift());
                }
              }
              if (cal2.length > 0) {
                function_str = _this.calPostfixExpression(cal2);
              } else {
                function_str += endstr;
              }
            }
            i2++;
          }
          return function_str;
        },
        insertUpdateDynamicArray: function(dynamicArrayItem) {
          let r2 = dynamicArrayItem.r, c2 = dynamicArrayItem.c, index2 = dynamicArrayItem.index;
          if (index2 == null) {
            index2 = store_default.currentSheetIndex;
          }
          let luckysheetfile = getluckysheetfile();
          let file = luckysheetfile[getSheetIndex(index2)];
          let dynamicArray = file.dynamicArray;
          if (dynamicArray == null) {
            dynamicArray = [];
          }
          for (let i2 = 0; i2 < dynamicArray.length; i2++) {
            let calc = dynamicArray[i2];
            if (calc.r == r2 && calc.c == c2 && calc.index == index2) {
              calc.data = dynamicArrayItem.data;
              calc.f = dynamicArrayItem.f;
              return dynamicArray;
            }
          }
          dynamicArray.push(dynamicArrayItem);
          return dynamicArray;
        },
        addFunctionGroup: function(r2, c2, func, index2) {
          if (index2 == null) {
            index2 = store_default.currentSheetIndex;
          }
          let luckysheetfile = getluckysheetfile();
          let file = luckysheetfile[getSheetIndex(index2)];
          if (file.calcChain == null) {
            file.calcChain = [];
          }
          let cc = {
            "r": r2,
            "c": c2,
            "index": index2,
            "func": func
          };
          file.calcChain.push(cc);
          server_default.saveParam("fc", index2, JSON.stringify(cc), {
            "op": "add",
            "pos": file.calcChain.length - 1
          });
          setluckysheetfile(luckysheetfile);
        },
        getAllFunctionGroup: function() {
          let luckysheetfile = getluckysheetfile();
          let ret = [];
          for (let i2 = 0; i2 < luckysheetfile.length; i2++) {
            let file = luckysheetfile[i2];
            let calcChain = file.calcChain;
            if (calcChain) {
              let tempCalcChain = [];
              calcChain.forEach((item2, idx) => {
                if (typeof item2 === "string") {
                  tempCalcChain.push(JSON.parse(item2));
                } else {
                  tempCalcChain.push(item2);
                }
              });
              calcChain = file.calcChain = tempCalcChain;
            }
            let dynamicArray_compute = file.dynamicArray_compute;
            if (calcChain == null) {
              calcChain = [];
            }
            if (dynamicArray_compute == null) {
              dynamicArray_compute = [];
            }
            ret = ret.concat(calcChain);
            for (let i3 = 0; i3 < dynamicArray_compute.length; i3++) {
              let d = dynamicArray_compute[0];
              ret.push({
                r: d.r,
                c: d.c,
                index: d.index
              });
            }
          }
          return ret;
        },
        getFunctionGroup: function(index2) {
          if (index2 == null) {
            index2 = store_default.currentSheetIndex;
          }
          let luckysheetfile = getluckysheetfile();
          let file = luckysheetfile[getSheetIndex(index2)];
          if (file.calcChain == null) {
            return [];
          }
          return file.calcChain;
        },
        updateFunctionGroup: function(r2, c2, index2) {
          if (index2 == null) {
            index2 = store_default.currentSheetIndex;
          }
          let luckysheetfile = getluckysheetfile();
          let file = luckysheetfile[getSheetIndex(index2)];
          let calcChain = file.calcChain;
          if (calcChain != null) {
            for (let i2 = 0; i2 < calcChain.length; i2++) {
              let calc = calcChain[i2];
              if (calc.r == r2 && calc.c == c2 && calc.index == index2) {
                server_default.saveParam("fc", index2, JSON.stringify(calc), {
                  "op": "update",
                  "pos": i2
                });
                break;
              }
            }
          }
          setluckysheetfile(luckysheetfile);
        },
        insertUpdateFunctionGroup: function(r2, c2, index2) {
          if (index2 == null) {
            index2 = store_default.currentSheetIndex;
          }
          let luckysheetfile = getluckysheetfile();
          let file = luckysheetfile[getSheetIndex(index2)];
          let calcChain = file.calcChain;
          if (calcChain == null) {
            calcChain = [];
          }
          for (let i2 = 0; i2 < calcChain.length; i2++) {
            let calc = calcChain[i2];
            if (calc.r == r2 && calc.c == c2 && calc.index == index2) {
              server_default.saveParam("fc", index2, JSON.stringify(calc), {
                "op": "update",
                "pos": i2
              });
              return;
            }
          }
          let cc = {
            "r": r2,
            "c": c2,
            "index": index2
          };
          calcChain.push(cc);
          file.calcChain = calcChain;
          server_default.saveParam("fc", index2, JSON.stringify(cc), {
            "op": "add",
            "pos": file.calcChain.length - 1
          });
          setluckysheetfile(luckysheetfile);
        },
        isFunctionRangeSave: false,
        isFunctionRangeSimple: function(txt, r2, c2, index2, dynamicArray_compute) {
          if (txt == null || txt.length == 0) {
            return;
          }
          let txtArray = txt.split(/==|!=|<>|<=|>=|[,()=+-\/*%&^><]/g);
          if (txtArray.length > 0) {
            for (let i2 = 0; i2 < txtArray.length; i2++) {
              let t = txtArray[i2];
              if (t.length <= 1) {
                continue;
              }
              if (t.substr(0, 1) == '"' && t.substr(t.length - 1, 1) == '"') {
                continue;
              }
              this.isFunctionRangeSaveChange(t, r2, c2, index2, dynamicArray_compute);
            }
          }
        },
        isFunctionRangeSimple1: function(txt, r2, c2, index2, dynamicArray_compute) {
          let _this = this;
          if (_this.operatorjson == null) {
            let arr = _this.operator.split("|"), op = {};
            for (let i3 = 0; i3 < arr.length; i3++) {
              op[arr[i3].toString()] = 1;
            }
            _this.operatorjson = op;
          }
          if (txt.substr(0, 1) == "=") {
            txt = txt.substr(1);
          }
          let funcstack = txt.split("");
          let i2 = 0, str = "", function_str = "", ispassby = true;
          let matchConfig = {
            "bracket": 0,
            "comma": 0,
            "squote": 0,
            "dquote": 0
          };
          let luckysheetfile = getluckysheetfile();
          while (i2 < funcstack.length) {
            let s = funcstack[i2];
            if (s == "(" && matchConfig.dquote == 0) {
              matchConfig.bracket += 1;
              if (str.length > 0) {
                function_str += "luckysheet_function." + str.toUpperCase() + ".f(";
              } else {
                function_str += "(";
              }
              str = "";
            } else if (s == ")" && matchConfig.dquote == 0) {
              matchConfig.bracket -= 1;
              function_str += _this.isFunctionRangeSimple(str, r2, c2, index2, dynamicArray_compute) + ")";
              str = "";
            } else if (s == "," && matchConfig.dquote == 0) {
              function_str += _this.isFunctionRangeSimple(str, r2, c2, index2, dynamicArray_compute) + ",";
              str = "";
            } else if (s in _this.operatorjson && matchConfig.dquote == 0) {
              let s_next = "";
              if (i2 + 1 < funcstack.length) {
                s_next = funcstack[i2 + 1];
              }
              if (s + s_next in _this.operatorjson) {
                if (str.length > 0) {
                  function_str += _this.isFunctionRangeSimple(str, r2, c2, index2, dynamicArray_compute) + s + s_next;
                  str = "";
                } else {
                  function_str += s + s_next;
                }
                i2++;
              } else {
                if (str.length > 0) {
                  function_str += _this.isFunctionRangeSimple(str, r2, c2, index2, dynamicArray_compute) + s;
                  str = "";
                } else {
                  function_str += s;
                }
              }
            } else {
              str += s;
            }
            if (i2 == funcstack.length - 1) {
              if (_this.iscelldata($.trim(str))) {
                _this.isFunctionRangeSaveChange(str, r2, c2, index2, dynamicArray_compute);
              } else {
              }
            }
            i2++;
          }
          return function_str;
        },
        isFunctionRangeSelect: function(txt, r2, c2, index2, dynamicArray_compute) {
          if (txt == null || txt == "") {
            return;
          }
          if (index2 == null) {
            index2 = store_default.currentSheetIndex;
          }
          if (dynamicArray_compute == null) {
            dynamicArray_compute = {};
          }
          let _this = this;
          let txt1 = txt.toUpperCase();
          let isOffsetFunc = txt1.indexOf("INDIRECT(") > -1 || txt1.indexOf("OFFSET(") > -1 || txt1.indexOf("INDEX(") > -1;
          if (txt in this.formulaContainCellList) {
            let cellList = this.formulaContainCellList[txt];
            if (isOffsetFunc) {
              let isoff = cellList["__LuckyisOff__"];
              if (isoff == true) {
                for (let cellStr in cellList) {
                  if (cellStr == "__LuckyisOff__") {
                    continue;
                  }
                  this.isFunctionRangeSaveChange(cellStr, r2, c2, index2, dynamicArray_compute);
                }
              } else {
                this.isFunctionRange(txt, r2, c2, index2, dynamicArray_compute, function(str) {
                  _this.addToCellList(txt, str);
                });
                cellList["__LuckyisOff__"] = true;
              }
            } else {
              for (let cellStr in cellList) {
                if (cellStr == "__LuckyisOff__") {
                  continue;
                }
                this.isFunctionRangeSaveChange(cellStr, r2, c2, index2, dynamicArray_compute);
              }
            }
            return;
          }
          if (isOffsetFunc) {
            this.isFunctionRange(txt, r2, c2, index2, dynamicArray_compute);
          } else {
            this.isFunctionRangeSimple(txt, r2, c2, index2, dynamicArray_compute);
          }
        },
        isFunctionRange: function(txt, r2, c2, index2, dynamicArray_compute, cellRangeFunction) {
          let _this = this;
          if (_this.operatorjson == null) {
            let arr = _this.operator.split("|"), op = {};
            for (let i3 = 0; i3 < arr.length; i3++) {
              op[arr[i3].toString()] = 1;
            }
            _this.operatorjson = op;
          }
          if (txt.substr(0, 1) == "=") {
            txt = txt.substr(1);
          }
          let funcstack = txt.split("");
          let i2 = 0, str = "", function_str = "", ispassby = true;
          let matchConfig = {
            "bracket": 0,
            "comma": 0,
            "squote": 0,
            "dquote": 0,
            "compare": 0,
            "braces": 0
          };
          let cal1 = [], cal2 = [], bracket = [];
          let firstSQ = -1;
          while (i2 < funcstack.length) {
            let s = funcstack[i2];
            if (s == "(" && matchConfig.squote == 0 && matchConfig.dquote == 0 && matchConfig.braces == 0) {
              if (str.length > 0 && bracket.length == 0) {
                str = str.toUpperCase();
                if (str.indexOf(":") > -1) {
                  let funcArray = str.split(":");
                  function_str += "luckysheet_getSpecialReference(true,'" + $.trim(funcArray[0]).replace(/'/g, "\\'") + "', luckysheet_function." + funcArray[1] + ".f(#lucky#";
                } else {
                  function_str += "luckysheet_function." + str + ".f(";
                }
                bracket.push(1);
                str = "";
              } else if (bracket.length == 0) {
                function_str += "(";
                bracket.push(0);
                str = "";
              } else {
                bracket.push(0);
                str += s;
              }
            } else if (s == ")" && matchConfig.squote == 0 && matchConfig.dquote == 0 && matchConfig.braces == 0) {
              let bt = bracket.pop();
              if (bracket.length == 0) {
                let functionS = _this.isFunctionRange(str, r2, c2, index2, dynamicArray_compute, cellRangeFunction);
                if (functionS.indexOf("#lucky#") > -1) {
                  functionS = functionS.replace(/#lucky#/g, "") + ")";
                }
                function_str += functionS + ")";
                str = "";
              } else {
                str += s;
              }
            } else if (s == "{" && matchConfig.squote == 0 && matchConfig.dquote == 0) {
              str += "{";
              matchConfig.braces += 1;
            } else if (s == "}" && matchConfig.squote == 0 && matchConfig.dquote == 0) {
              str += "}";
              matchConfig.braces -= 1;
            } else if (s == '"' && matchConfig.squote == 0) {
              if (matchConfig.dquote > 0) {
                if (i2 < funcstack.length - 1 && funcstack[i2 + 1] == '"') {
                  i2++;
                  str += "\x7F";
                } else {
                  matchConfig.dquote -= 1;
                  str += '"';
                }
              } else {
                matchConfig.dquote += 1;
                str += '"';
              }
            } else if (s == "'" && matchConfig.dquote == 0) {
              str += "'";
              if (matchConfig.squote > 0) {
                if (i2 < funcstack.length - 1 && funcstack[i2 + 1] == "'") {
                  i2++;
                  str += "'";
                } else {
                  matchConfig.squote -= 1;
                }
              } else {
                matchConfig.squote += 1;
                firstSQ = i2;
              }
            } else if (s == "," && matchConfig.squote == 0 && matchConfig.dquote == 0 && matchConfig.braces == 0) {
              if (bracket.length <= 1) {
                let functionS = _this.isFunctionRange(str, r2, c2, index2, dynamicArray_compute, cellRangeFunction);
                if (functionS.indexOf("#lucky#") > -1) {
                  functionS = functionS.replace(/#lucky#/g, "") + ")";
                }
                function_str += functionS + ",";
                str = "";
              } else {
                str += ",";
              }
            } else if (s in _this.operatorjson && matchConfig.squote == 0 && matchConfig.dquote == 0 && matchConfig.braces == 0) {
              let s_next = "";
              let op = _this.operatorPriority;
              if (i2 + 1 < funcstack.length) {
                s_next = funcstack[i2 + 1];
              }
              if (s + s_next in _this.operatorjson) {
                if (bracket.length == 0) {
                  if ($.trim(str).length > 0) {
                    cal2.unshift(_this.isFunctionRange($.trim(str), r2, c2, index2, dynamicArray_compute, cellRangeFunction));
                  } else if ($.trim(function_str).length > 0) {
                    cal2.unshift($.trim(function_str));
                  }
                  if (cal1[0] in _this.operatorjson) {
                    let stackCeilPri = op[cal1[0]];
                    while (cal1.length > 0 && stackCeilPri != null) {
                      cal2.unshift(cal1.shift());
                      stackCeilPri = op[cal1[0]];
                    }
                  }
                  cal1.unshift(s + s_next);
                  function_str = "";
                  str = "";
                } else {
                  str += s + s_next;
                }
                i2++;
              } else {
                if (bracket.length == 0) {
                  if ($.trim(str).length > 0) {
                    cal2.unshift(_this.isFunctionRange($.trim(str), r2, c2, index2, dynamicArray_compute, cellRangeFunction));
                  } else if ($.trim(function_str).length > 0) {
                    cal2.unshift($.trim(function_str));
                  }
                  if (cal1[0] in _this.operatorjson) {
                    let stackCeilPri = op[cal1[0]];
                    stackCeilPri = stackCeilPri == null ? 1e3 : stackCeilPri;
                    let sPri = op[s];
                    sPri = sPri == null ? 1e3 : sPri;
                    while (cal1.length > 0 && sPri >= stackCeilPri) {
                      cal2.unshift(cal1.shift());
                      stackCeilPri = op[cal1[0]];
                      stackCeilPri = stackCeilPri == null ? 1e3 : stackCeilPri;
                    }
                  }
                  cal1.unshift(s);
                  function_str = "";
                  str = "";
                } else {
                  str += s;
                }
              }
            } else {
              if (matchConfig.dquote == 0 && matchConfig.squote == 0) {
                str += $.trim(s);
              } else {
                str += s;
              }
            }
            if (i2 == funcstack.length - 1) {
              let endstr = "";
              let str_nb = $.trim(str).replace(/'/g, "\\'");
              if (_this.iscelldata(str_nb) && str_nb.substr(0, 1) != ":") {
                endstr = "luckysheet_getcelldata('" + str_nb + "')";
                _this.isFunctionRangeSaveChange(str, r2, c2, index2, dynamicArray_compute);
              } else if (str_nb.substr(0, 1) == ":") {
                str_nb = str_nb.substr(1);
                if (_this.iscelldata(str_nb)) {
                  endstr = "luckysheet_getSpecialReference(false," + function_str + ",'" + str_nb + "')";
                }
              } else {
                str = $.trim(str);
                let regx = /{.*?}/;
                if (regx.test(str) && str.substr(0, 1) != '"' && str.substr(str.length - 1, 1) != '"') {
                  let arraytxt = regx.exec(str)[0];
                  let arraystart = str.search(regx);
                  let alltxt = "";
                  if (arraystart > 0) {
                    endstr += str.substr(0, arraystart);
                  }
                  endstr += "luckysheet_getarraydata('" + arraytxt + "')";
                  if (arraystart + arraytxt.length < str.length) {
                    endstr += str.substr(arraystart + arraytxt.length, str.length);
                  }
                } else {
                  endstr = str;
                }
              }
              if (endstr.length > 0) {
                cal2.unshift(endstr);
              }
              if (cal1.length > 0) {
                if (function_str.length > 0) {
                  cal2.unshift(function_str);
                  function_str = "";
                }
                while (cal1.length > 0) {
                  cal2.unshift(cal1.shift());
                }
              }
              if (cal2.length > 0) {
                function_str = _this.calPostfixExpression(cal2);
              } else {
                function_str += endstr;
              }
            }
            i2++;
          }
          _this.checkSpecialFunctionRange(function_str, r2, c2, index2, dynamicArray_compute, cellRangeFunction);
          return function_str;
        },
        isFunctionRangeSaveChange: function(str, r2, c2, index2, dynamicArray_compute) {
          let _this = this;
          if (r2 != null && c2 != null) {
            let range2 = _this.getcellrange($.trim(str), index2);
            if (range2 == null) {
              return;
            }
            let row = range2.row, col = range2.column, sheetIndex = range2.sheetIndex;
            if (r2 + "_" + c2 in dynamicArray_compute && (index2 == sheetIndex || index2 == null)) {
              let isd_range = false;
              for (let d_r = row[0]; d_r <= row[1]; d_r++) {
                for (let d_c = col[0]; d_c <= col[1]; d_c++) {
                  if (d_r + "_" + d_c in dynamicArray_compute && dynamicArray_compute[d_r + "_" + d_c].r == r2 && dynamicArray_compute[d_r + "_" + d_c].c == c2) {
                    isd_range = true;
                  }
                }
              }
              if (isd_range) {
                _this.isFunctionRangeSave = _this.isFunctionRangeSave || true;
              } else {
                _this.isFunctionRangeSave = _this.isFunctionRangeSave || false;
              }
            } else {
              if (r2 >= row[0] && r2 <= row[1] && c2 >= col[0] && c2 <= col[1] && (index2 == sheetIndex || index2 == null)) {
                _this.isFunctionRangeSave = _this.isFunctionRangeSave || true;
              } else {
                _this.isFunctionRangeSave = _this.isFunctionRangeSave || false;
              }
            }
          } else {
            _this.isFunctionRangeSave = _this.isFunctionRangeSave || false;
          }
        },
        checkSpecialFunctionRange: function(function_str, r2, c2, index2, dynamicArray_compute, cellRangeFunction) {
          if (function_str.substr(0, 30) == "luckysheet_getSpecialReference" || function_str.substr(0, 20) == "luckysheet_function.") {
            if (function_str.substr(0, 20) == "luckysheet_function.") {
              let funcName = function_str.split(".")[1];
              if (funcName != null) {
                funcName = funcName.toUpperCase();
                if (funcName != "INDIRECT" && funcName != "OFFSET" && funcName != "INDEX") {
                  return;
                }
              }
            }
            try {
              store_default.calculateSheetIndex = index2;
              let str = new Function("return " + function_str)();
              if (str instanceof Object && str.startCell != null) {
                str = str.startCell;
              }
              let str_nb = $.trim(str);
              if (this.iscelldata(str_nb)) {
                if (typeof cellRangeFunction == "function") {
                  cellRangeFunction(str_nb);
                }
              }
            } catch (e) {
            }
          }
        },
        execvertex: {},
        execFunctionGroupData: null,
        execFunctionExist: null,
        formulaContainSheetList: {},
        formulaContainCellList: {},
        cellTextToIndexList: {},
        addToCellList: function(formulaTxt, cellstring) {
          if (formulaTxt == null || formulaTxt.length == 0 || cellstring == null || cellstring.length == 0) {
            return;
          }
          if (this.formulaContainCellList == null) {
            this.formulaContainCellList = {};
          }
          if (this.formulaContainCellList[formulaTxt] == null) {
            this.formulaContainCellList[formulaTxt] = {};
          }
          this.formulaContainCellList[formulaTxt][cellstring] = 1;
        },
        addToCellIndexList: function(txt, infoObj) {
          if (txt == null || txt.length == 0 || infoObj == null) {
            return;
          }
          if (this.cellTextToIndexList == null) {
            this.cellTextToIndexList = {};
          }
          if (txt.indexOf("!") > -1) {
            txt = txt.replace(/\\'/g, "'").replace(/''/g, "'");
            this.cellTextToIndexList[txt] = infoObj;
          } else {
            this.cellTextToIndexList[txt + "_" + infoObj.sheetIndex] = infoObj;
          }
        },
        addToSheetIndexList: function(formulaTxt, sheetIndex, obIndex) {
          if (formulaTxt == null || formulaTxt.length == 0) {
            return;
          }
          if (sheetIndex == null || sheetIndex.length == 0) {
            sheetIndex = store_default.currentSheetIndex;
          }
          if (obIndex == null || obIndex.length == 0) {
            obIndex = "";
          }
          if (this.formulaContainSheetList == null) {
            this.formulaContainSheetList = {};
          }
          if (this.formulaContainSheetList[formulaTxt] == null) {
            this.formulaContainSheetList[formulaTxt] = {};
          }
          this.formulaContainSheetList[formulaTxt][sheetIndex] = obIndex;
        },
        execFunctionGlobalData: {},
        execFunctionGroupForce: function(isForce) {
          if (isForce) {
            this.execFunctionGroup(void 0, void 0, void 0, void 0, void 0, true);
          } else {
            this.execFunctionGroup();
          }
        },
        execFunctionGroup: function(origin_r, origin_c, value, index2, data, isForce = false) {
          let _this = this;
          if (data == null) {
            data = store_default.flowdata;
          }
          if (!window.luckysheet_compareWith) {
            window.luckysheet_compareWith = luckysheet_compareWith;
            window.luckysheet_getarraydata = luckysheet_getarraydata;
            window.luckysheet_getcelldata = luckysheet_getcelldata;
            window.luckysheet_parseData = luckysheet_parseData;
            window.luckysheet_getValue = luckysheet_getValue;
            window.luckysheet_indirect_check = luckysheet_indirect_check;
            window.luckysheet_indirect_check_return = luckysheet_indirect_check_return;
            window.luckysheet_offset_check = luckysheet_offset_check;
            window.luckysheet_calcADPMM = luckysheet_calcADPMM;
            window.luckysheet_getSpecialReference = luckysheet_getSpecialReference;
          }
          if (_this.execFunctionGlobalData == null) {
            _this.execFunctionGlobalData = {};
          }
          if (index2 == null) {
            index2 = store_default.currentSheetIndex;
          }
          if (value != null) {
            let cellCache = [[{v: null}]];
            setcellvalue(0, 0, cellCache, value);
            _this.execFunctionGlobalData[origin_r + "_" + origin_c + "_" + index2] = cellCache[0][0];
          }
          let calcChains = _this.getAllFunctionGroup(), formulaObjects = {};
          let sheets = getluckysheetfile();
          let sheetData = {};
          for (let i2 = 0; i2 < sheets.length; i2++) {
            let sheet = sheets[i2];
            sheetData[sheet.index] = sheet.data;
          }
          let updateValueOjects = {}, updateValueArray = [];
          if (_this.execFunctionExist == null) {
            let key = "r" + origin_r + "c" + origin_c + "i" + index2;
            updateValueOjects[key] = 1;
          } else {
            for (let x = 0; x < _this.execFunctionExist.length; x++) {
              let cell = _this.execFunctionExist[x];
              let key = "r" + cell.r + "c" + cell.c + "i" + cell.i;
              updateValueOjects[key] = 1;
            }
          }
          let arrayMatchCache = {};
          let arrayMatch = function(formulaArray, formulaObjects2, updateValueOjects2, func) {
            for (let a = 0; a < formulaArray.length; a++) {
              let range2 = formulaArray[a];
              let cacheKey = "r" + range2.row[0] + "" + range2.row[1] + "c" + range2.column[0] + "" + range2.column[1] + "index" + range2.sheetIndex;
              if (cacheKey in arrayMatchCache) {
                let amc = arrayMatchCache[cacheKey];
                amc.forEach((item2) => {
                  func(item2.key, item2.r, item2.c, item2.sheetIndex);
                });
              } else {
                let functionArr = [];
                for (let r2 = range2.row[0]; r2 <= range2.row[1]; r2++) {
                  for (let c2 = range2.column[0]; c2 <= range2.column[1]; c2++) {
                    let key = "r" + r2 + "c" + c2 + "i" + range2.sheetIndex;
                    func(key, r2, c2, range2.sheetIndex);
                    if (formulaObjects2 && key in formulaObjects2 || updateValueOjects2 && key in updateValueOjects2) {
                      functionArr.push({
                        key,
                        r: r2,
                        c: c2,
                        sheetIndex: range2.sheetIndex
                      });
                    }
                  }
                }
                if (formulaObjects2 || updateValueOjects2) {
                  arrayMatchCache[cacheKey] = functionArr;
                }
              }
            }
          };
          let existsChildFormulaMatch = {}, ii = 0;
          for (let i2 = 0; i2 < calcChains.length; i2++) {
            let formulaCell = calcChains[i2];
            let key = "r" + formulaCell.r + "c" + formulaCell.c + "i" + formulaCell.index;
            let calc_funcStr = getcellFormula(formulaCell.r, formulaCell.c, formulaCell.index);
            if (calc_funcStr == null) {
              continue;
            }
            let txt1 = calc_funcStr.toUpperCase();
            let isOffsetFunc = txt1.indexOf("INDIRECT(") > -1 || txt1.indexOf("OFFSET(") > -1 || txt1.indexOf("INDEX(") > -1;
            let formulaArray = [];
            if (isOffsetFunc) {
              this.isFunctionRange(calc_funcStr, null, null, formulaCell.index, null, function(str_nb) {
                let range2 = _this.getcellrange($.trim(str_nb), formulaCell.index);
                if (range2 != null) {
                  formulaArray.push(range2);
                }
              });
            } else if (!(calc_funcStr.substr(0, 2) == '="' && calc_funcStr.substr(calc_funcStr.length - 1, 1) == '"')) {
              let point = 0;
              let squote = -1;
              let dquote = -1;
              let formulaTextArray = [];
              let sq_end_array = [];
              let calc_funcStr_length = calc_funcStr.length;
              for (let i3 = 0; i3 < calc_funcStr_length; i3++) {
                let char = calc_funcStr.charAt(i3);
                if (char == "'" && dquote == -1) {
                  if (squote == -1) {
                    if (point != i3) {
                      formulaTextArray.push(...calc_funcStr.substring(point, i3).split(/==|!=|<>|<=|>=|[,()=+-\/*%&\^><]/));
                    }
                    squote = i3;
                    point = i3;
                  } else {
                    if (i3 < calc_funcStr_length - 1 && calc_funcStr.charAt(i3 + 1) == "'") {
                      i3++;
                    } else {
                      point = i3 + 1;
                      formulaTextArray.push(calc_funcStr.substring(squote, point));
                      sq_end_array.push(formulaTextArray.length - 1);
                      squote = -1;
                    }
                  }
                }
                if (char == '"' && squote == -1) {
                  if (dquote == -1) {
                    if (point != i3) {
                      formulaTextArray.push(...calc_funcStr.substring(point, i3).split(/==|!=|<>|<=|>=|[,()=+-\/*%&\^><]/));
                    }
                    dquote = i3;
                    point = i3;
                  } else {
                    if (i3 < calc_funcStr_length - 1 && calc_funcStr.charAt(i3 + 1) == '"') {
                      i3++;
                    } else {
                      point = i3 + 1;
                      formulaTextArray.push(calc_funcStr.substring(dquote, point));
                      dquote = -1;
                    }
                  }
                }
              }
              if (point != calc_funcStr_length) {
                formulaTextArray.push(...calc_funcStr.substring(point, calc_funcStr_length).split(/==|!=|<>|<=|>=|[,()=+-\/*%&\^><]/));
              }
              for (let i3 = sq_end_array.length - 1; i3 >= 0; i3--) {
                if (sq_end_array[i3] != formulaTextArray.length - 1) {
                  formulaTextArray[sq_end_array[i3]] = formulaTextArray[sq_end_array[i3]] + formulaTextArray[sq_end_array[i3] + 1];
                  formulaTextArray.splice(sq_end_array[i3] + 1, 1);
                }
              }
              for (let i3 = 0; i3 < formulaTextArray.length; i3++) {
                let t = formulaTextArray[i3];
                if (t.length <= 1) {
                  continue;
                }
                if (t.substr(0, 1) == '"' && t.substr(t.length - 1, 1) == '"' && !_this.iscelldata(t)) {
                  continue;
                }
                let range2 = _this.getcellrange($.trim(t), formulaCell.index);
                if (range2 == null) {
                  continue;
                }
                formulaArray.push(range2);
              }
            }
            let item2 = {
              formulaArray,
              calc_funcStr,
              key,
              r: formulaCell.r,
              c: formulaCell.c,
              index: formulaCell.index,
              parents: {},
              chidren: {},
              color: "w"
            };
            formulaObjects[key] = item2;
          }
          Object.keys(formulaObjects).forEach((key) => {
            let formulaObject = formulaObjects[key];
            arrayMatch(formulaObject.formulaArray, formulaObjects, updateValueOjects, function(childKey) {
              if (childKey in formulaObjects) {
                let childFormulaObject = formulaObjects[childKey];
                formulaObject.chidren[childKey] = 1;
                childFormulaObject.parents[key] = 1;
              }
              if (!isForce && childKey in updateValueOjects) {
                updateValueArray.push(formulaObject);
              }
            });
            if (isForce) {
              updateValueArray.push(formulaObject);
            }
          });
          let formulaRunList = [];
          let stack = updateValueArray, existsFormulaRunList = {};
          while (stack.length > 0) {
            let formulaObject = stack.pop();
            if (formulaObject == null || formulaObject.key in existsFormulaRunList) {
              continue;
            }
            if (formulaObject.color == "b") {
              formulaRunList.push(formulaObject);
              existsFormulaRunList[formulaObject.key] = 1;
              continue;
            }
            let cacheStack = [];
            Object.keys(formulaObject.parents).forEach((parentKey) => {
              let parentFormulaObject = formulaObjects[parentKey];
              if (parentFormulaObject != null) {
                cacheStack.push(parentFormulaObject);
              }
            });
            ii++;
            if (cacheStack.length == 0) {
              formulaRunList.push(formulaObject);
              existsFormulaRunList[formulaObject.key] = 1;
            } else {
              formulaObject.color = "b";
              stack.push(formulaObject);
              stack = stack.concat(cacheStack);
            }
          }
          formulaRunList.reverse();
          for (let i2 = 0; i2 < formulaRunList.length; i2++) {
            let formulaCell = formulaRunList[i2];
            if (formulaCell.level == Math.max) {
              continue;
            }
            window.luckysheet_getcelldata_cache = null;
            let calc_funcStr = formulaCell.calc_funcStr;
            let v = _this.execfunction(calc_funcStr, formulaCell.r, formulaCell.c, formulaCell.index);
            _this.groupValuesRefreshData.push({
              "r": formulaCell.r,
              "c": formulaCell.c,
              "v": v[1],
              "f": v[2],
              "spe": v[3],
              "index": formulaCell.index
            });
            _this.execFunctionGlobalData[formulaCell.r + "_" + formulaCell.c + "_" + formulaCell.index] = {
              v: v[1],
              f: v[2]
            };
          }
          _this.execFunctionExist = null;
        },
        execFunctionGroup1: function(origin_r, origin_c, value, index2, data, isForce = false) {
          let _this = this;
          if (data == null) {
            data = store_default.flowdata;
          }
          if (!window.luckysheet_compareWith) {
            window.luckysheet_compareWith = luckysheet_compareWith;
            window.luckysheet_getarraydata = luckysheet_getarraydata;
            window.luckysheet_getcelldata = luckysheet_getcelldata;
            window.luckysheet_parseData = luckysheet_parseData;
            window.luckysheet_getValue = luckysheet_getValue;
            window.luckysheet_indirect_check = luckysheet_indirect_check;
            window.luckysheet_indirect_check_return = luckysheet_indirect_check_return;
            window.luckysheet_offset_check = luckysheet_offset_check;
            window.luckysheet_calcADPMM = luckysheet_calcADPMM;
            window.luckysheet_getSpecialReference = luckysheet_getSpecialReference;
          }
          if (_this.execFunctionGlobalData == null) {
            _this.execFunctionGlobalData = {};
          }
          let luckysheetfile = getluckysheetfile();
          let dynamicArray_compute = luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["dynamicArray_compute"] == null ? {} : luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["dynamicArray_compute"];
          if (index2 == null) {
            index2 = store_default.currentSheetIndex;
          }
          if (value != null) {
            let cellCache = [[{v: null}]];
            setcellvalue(0, 0, cellCache, value);
            _this.execFunctionGlobalData[origin_r + "_" + origin_c + "_" + index2] = cellCache[0][0];
          }
          let group = _this.getAllFunctionGroup(), vertex1 = {}, stack = [], count = 0;
          _this.execvertex = {};
          if (_this.execFunctionExist == null) {
            for (let i3 = 0; i3 < group.length; i3++) {
              let item2 = group[i3];
              let file = luckysheetfile[getSheetIndex(item2["index"])];
              if (file == null) {
                continue;
              }
              let cell = file.data[item2.r][item2.c];
              let calc_funcStr = getcellFormula(item2.r, item2.c, item2.index);
              if (cell != null && cell.f != null && cell.f == calc_funcStr) {
                if (!(item2 instanceof Object)) {
                  item2 = new Function("return " + item2)();
                }
                item2.color = "w";
                item2.parent = null;
                item2.chidren = {};
                item2.times = 0;
                vertex1["r" + item2.r + "c" + item2.c + "i" + item2.index] = item2;
                _this.isFunctionRangeSave = false;
                if (isForce) {
                  _this.isFunctionRangeSave = true;
                } else if (origin_r != null && origin_c != null) {
                  _this.isFunctionRangeSelect(calc_funcStr, origin_r, origin_c, index2, dynamicArray_compute);
                }
                if (_this.isFunctionRangeSave) {
                  stack.push(item2);
                  _this.execvertex["r" + item2.r + "c" + item2.c + "i" + item2.index] = item2;
                  count++;
                }
              }
            }
          } else {
            for (let x = 0; x < _this.execFunctionExist.length; x++) {
              let cell = _this.execFunctionExist[x];
              if ("r" + cell.r + "c" + cell.c + "i" + cell.i in vertex1) {
                continue;
              }
              for (let i3 = 0; i3 < group.length; i3++) {
                let item2 = group[i3];
                let calc_funcStr = getcellFormula(item2.r, item2.c, item2.index);
                item2.color = "w";
                item2.parent = null;
                item2.chidren = {};
                item2.times = 0;
                vertex1["r" + item2.r + "c" + item2.c + "i" + item2.index] = item2;
                _this.isFunctionRangeSave = false;
                if (isForce) {
                  _this.isFunctionRangeSave = true;
                } else {
                  _this.isFunctionRangeSelect(calc_funcStr, cell.r, cell.c, cell.i, dynamicArray_compute);
                }
                if (_this.isFunctionRangeSave) {
                  stack.push(item2);
                  _this.execvertex["r" + item2.r + "c" + item2.c + "i" + item2.index] = item2;
                  count++;
                }
              }
            }
          }
          while (stack.length > 0) {
            let u = stack.shift();
            let excludeList = {};
            _this.getChildrenVertex(u, vertex1, excludeList);
            for (let name2 in vertex1) {
              let item2 = vertex1[name2];
              if (item2 == null) {
                continue;
              }
              let ukey = "r" + u.r + "c" + u.c + "i" + u.index;
              if (name2 in excludeList) {
                continue;
              }
              _this.isFunctionRangeSave = false;
              let calc_funcStr = getcellFormula(item2.r, item2.c, item2.index);
              _this.isFunctionRangeSelect(calc_funcStr, u.r, u.c, u.index, dynamicArray_compute);
              if (_this.isFunctionRangeSave) {
                if (!(name2 in _this.execvertex)) {
                  stack.push(item2);
                  _this.execvertex[name2] = item2;
                }
                count++;
                _this.execvertex[name2].chidren[ukey] = 1;
              }
            }
          }
          _this.groupValuesRefreshData = [];
          let i2 = 0;
          while (i2 < count) {
            for (let name2 in _this.execvertex) {
              let u = _this.execvertex[name2];
              if (u.color == "w") {
                _this.functionDFS(u);
              } else if (u.color == "b") {
                i2++;
              }
            }
          }
          _this.execFunctionExist = null;
        },
        getChildrenVertex: function(u, vertex1, obj) {
          let ukey = "r" + u.r + "c" + u.c + "i" + u.index;
          obj[ukey] = 1;
          if (u.chidren != null) {
            for (let key in u.chidren) {
              if (vertex1[key] && !(key in obj)) {
                this.getChildrenVertex(vertex1[key], vertex1, obj);
              }
            }
          }
        },
        functionDFS: function(u) {
          let _this = this;
          u.color = "g";
          u.times += 1;
          for (let chd in u.chidren) {
            let v2 = _this.execvertex[chd];
            if (v2.color == "w") {
              v2.parent = "r" + u.r.toString() + "c" + u.c.toString() + "i" + u.index;
              _this.functionDFS(v2);
            }
          }
          u.color = "b";
          window.luckysheet_getcelldata_cache = null;
          let calc_funcStr = getcellFormula(u.r, u.c, u.index);
          let v = _this.execfunction(calc_funcStr, u.r, u.c, u.index);
          _this.groupValuesRefreshData.push({
            "r": u.r,
            "c": u.c,
            "v": v[1],
            "f": v[2],
            "spe": v[3],
            "index": u.index
          });
          _this.execFunctionGlobalData[u.r + "_" + u.c + "_" + u.index] = {
            v: v[1],
            f: v[2]
          };
        },
        groupValuesRefreshData: [],
        groupValuesRefresh: function() {
          let _this = this;
          let luckysheetfile = getluckysheetfile();
          if (_this.groupValuesRefreshData.length > 0) {
            for (let i2 = 0; i2 < _this.groupValuesRefreshData.length; i2++) {
              let item2 = _this.groupValuesRefreshData[i2];
              let file = luckysheetfile[getSheetIndex(item2.index)];
              let data = file.data;
              if (data == null) {
                continue;
              }
              let updateValue = {};
              if (item2.spe != null) {
                if (item2.spe.type == "sparklines") {
                  updateValue.spl = item2.spe.data;
                } else if (item2.spe.type == "dynamicArrayItem") {
                  file.dynamicArray = _this.insertUpdateDynamicArray(item2.spe.data);
                }
              }
              updateValue.v = item2.v;
              updateValue.f = item2.f;
              setcellvalue(item2.r, item2.c, data, updateValue);
              server_default.saveParam("v", item2.index, item2.v, {
                "r": item2.r,
                "c": item2.c
              });
            }
            editor_default.webWorkerFlowDataCache(store_default.flowdata);
            _this.groupValuesRefreshData = [];
          }
        },
        delFunctionGroup: function(r2, c2, index2) {
          if (index2 == null) {
            index2 = store_default.currentSheetIndex;
          }
          let luckysheetfile = getluckysheetfile();
          let file = luckysheetfile[getSheetIndex(index2)];
          let calcChain = file.calcChain;
          if (calcChain != null) {
            for (let i2 = 0; i2 < calcChain.length; i2++) {
              let calc = calcChain[i2];
              if (calc.r == r2 && calc.c == c2 && calc.index == index2) {
                calcChain.splice(i2, 1);
                server_default.saveParam("fc", index2, null, {
                  "op": "del",
                  "pos": i2
                });
                break;
              }
            }
          }
          let dynamicArray = file.dynamicArray;
          if (dynamicArray != null) {
            for (let i2 = 0; i2 < dynamicArray.length; i2++) {
              let calc = dynamicArray[i2];
              if (calc.r == r2 && calc.c == c2 && (calc.index == null || calc.index == index2)) {
                dynamicArray.splice(i2, 1);
                server_default.saveParam("ac", index2, null, {
                  "op": "del",
                  "pos": i2
                });
                break;
              }
            }
          }
          setluckysheetfile(luckysheetfile);
        },
        execfunction: function(txt, r2, c2, index2, isrefresh, notInsertFunc) {
          let _this = this;
          let _locale = locale_default();
          let locale_formulaMore = _locale.formulaMore;
          if (txt.indexOf(_this.error.r) > -1) {
            return [false, _this.error.r, txt];
          }
          if (!_this.checkBracketNum(txt)) {
            txt += ")";
          }
          if (index2 == null) {
            index2 = store_default.currentSheetIndex;
          }
          store_default.calculateSheetIndex = index2;
          let fp = $.trim(_this.functionParserExe(txt));
          if (fp.substr(0, 20) == "luckysheet_function." || fp.substr(0, 22) == "luckysheet_compareWith") {
            _this.functionHTMLIndex = 0;
          }
          if (!_this.testFunction(txt, fp) || fp == "") {
            tooltip_default.info("", locale_formulaMore.execfunctionError);
            return [false, _this.error.n, txt];
          }
          let result = null;
          window.luckysheetCurrentRow = r2;
          window.luckysheetCurrentColumn = c2;
          window.luckysheetCurrentIndex = index2;
          window.luckysheetCurrentFunction = txt;
          let sparklines = null;
          try {
            if (fp.indexOf("luckysheet_getcelldata") > -1) {
              let funcg = fp.split("luckysheet_getcelldata('");
              for (let i2 = 1; i2 < funcg.length; i2++) {
                let funcgStr = funcg[i2].split("')")[0];
                let funcgRange = _this.getcellrange(funcgStr);
                if (funcgRange.row[0] < 0 || funcgRange.column[0] < 0) {
                  return [true, _this.error.r, txt];
                }
                if (funcgRange.sheetIndex == store_default.calculateSheetIndex && r2 >= funcgRange.row[0] && r2 <= funcgRange.row[1] && c2 >= funcgRange.column[0] && c2 <= funcgRange.column[1]) {
                  if (isEditMode()) {
                    alert(locale_formulaMore.execfunctionSelfError);
                  } else {
                    tooltip_default.info("", locale_formulaMore.execfunctionSelfErrorResult);
                  }
                  return [false, 0, txt];
                }
              }
            }
            result = new Function("return " + fp)();
            if (typeof result == "string") {
              result = result.replace(/\x7F/g, '"');
            }
            if (fp.indexOf("SPLINES") > -1) {
              sparklines = result;
              result = "";
            }
          } catch (e) {
            let err = e;
            console.log(e, fp);
            err = _this.errorInfo(err);
            result = [_this.error.n, err];
          }
          if (getObjType(result) == "object" && result.startCell != null) {
            if (getObjType(result.data) == "array") {
              result = _this.error.v;
            } else {
              if (getObjType(result.data) == "object" && !isRealNull(result.data.v)) {
                result = result.data.v;
              } else if (!isRealNull(result.data)) {
                if (result.cell > 1 || result.rowl > 1) {
                  result = result.data;
                } else {
                  result = 0;
                }
              } else {
                result = 0;
              }
            }
          }
          let dynamicArrayItem = null;
          if (getObjType(result) == "array") {
            let isErr = false;
            if (getObjType(result[0]) != "array" && result.length == 2) {
              isErr = valueIsError(result[0]);
            }
            if (!isErr) {
              if (getObjType(result[0]) == "array" && result.length == 1 && result[0].length == 1) {
                result = result[0][0];
              } else {
                dynamicArrayItem = {"r": r2, "c": c2, "f": txt, "index": index2, "data": result};
                result = "";
              }
            } else {
              result = result[0];
            }
          }
          window.luckysheetCurrentRow = null;
          window.luckysheetCurrentColumn = null;
          window.luckysheetCurrentIndex = null;
          window.luckysheetCurrentFunction = null;
          if (r2 != null && c2 != null) {
            if (isrefresh) {
              _this.execFunctionGroup(r2, c2, result, index2);
            }
            if (!notInsertFunc) {
              _this.insertUpdateFunctionGroup(r2, c2, index2);
            }
          }
          if (!!sparklines) {
            return [true, result, txt, {type: "sparklines", data: sparklines}];
          }
          if (!!dynamicArrayItem) {
            return [true, result, txt, {type: "dynamicArrayItem", data: dynamicArrayItem}];
          }
          return [true, result, txt];
        },
        testFunction: function(txt, fp) {
          if (txt.substr(0, 1) == "=") {
            return true;
          } else {
            return false;
          }
        },
        execstringformula: function(txt, r2, c2, index2) {
          let _this = this;
          return this.execfunction(txt, r2, c2, index2);
        },
        functionResizeData: {},
        functionResizeStatus: false,
        functionResizeTimeout: null,
        data_parm_index: 0
      };
      formula_default = luckysheetformula;
    }
  });

  // src/controllers/controlHistory.js
  function formulaHistoryHanddler(ctr, type = "redo") {
    if (ctr == null) {
      return;
    }
    let data = ctr.data;
    if (type == "undo") {
      data = ctr.curdata;
    }
    for (let s = 0; s < ctr.range.length; s++) {
      let st_r = ctr.range[s].row[0];
      let ed_r = ctr.range[s].row[1];
      let st_c = ctr.range[s].column[0];
      let ed_c = ctr.range[s].column[1];
      for (let r2 = st_r; r2 < ed_r + 1; r2++) {
        for (let c2 = st_c; c2 < ed_c + 1; c2++) {
          if (r2 > data.length - 1) {
            break;
          }
          if (data[r2][c2] == null || data[r2][c2].f == null || data[r2][c2].f == "") {
            formula_default.delFunctionGroup(r2, c2, ctr.sheetIndex);
          } else if (data[r2][c2] != null && data[r2][c2].f != null && data[r2][c2].f.length > 0) {
            formula_default.insertUpdateFunctionGroup(r2, c2, ctr.sheetIndex);
          }
        }
      }
    }
  }
  var controlHistory, controlHistory_default;
  var init_controlHistory = __esm({
    "src/controllers/controlHistory.js"() {
      init_sheetmanage();
      init_server();
      init_pivotTable();
      init_conditionformat();
      init_postil();
      init_imageCtrl();
      init_dataVerificationCtrl();
      init_hyperlinkCtrl();
      init_zoom();
      init_filter();
      init_formula();
      init_json();
      init_cleargridelement();
      init_refresh();
      init_get();
      init_store();
      init_select();
      init_method();
      controlHistory = {
        redo: function(e) {
          if (store_default.jfredo.length == 0) {
            return;
          }
          let ctr = store_default.jfredo.pop();
          store_default.jfundo.push(ctr);
          store_default.clearjfundo = false;
          if (sheetmanage_default.hasSheet(ctr.sheetIndex) && store_default.currentSheetIndex != ctr.sheetIndex) {
            sheetmanage_default.changeSheetExec(ctr.sheetIndex);
          }
          if (ctr.type == "datachange") {
            formulaHistoryHanddler(ctr);
            let allParam = {
              "cfg": ctr.config,
              "RowlChange": ctr.RowlChange,
              "cdformat": ctr.cdformat,
              "dataVerification": ctr.dataVerification,
              "dynamicArray": ctr.dynamicArray,
              "hyperlink": ctr.hyperlink
            };
            jfrefreshgrid(ctr.data, ctr.dataRange, allParam);
          } else if (ctr.type == "pasteCut") {
            let s = {
              "sheetIndex": ctr.source["sheetIndex"],
              "data": ctr.source["curData"],
              "curData": ctr.source["data"],
              "config": ctr.source["curConfig"],
              "curConfig": ctr.source["config"],
              "cdformat": ctr.source["curCdformat"],
              "curCdformat": ctr.source["cdformat"],
              "dataVerification": ctr.source["curDataVerification"],
              "curDataVerification": ctr.source["dataVerification"],
              "range": ctr.source["range"]
            };
            let t = {
              "sheetIndex": ctr.target["sheetIndex"],
              "data": ctr.target["curData"],
              "curData": ctr.target["data"],
              "config": ctr.target["curConfig"],
              "curConfig": ctr.target["config"],
              "cdformat": ctr.target["curCdformat"],
              "curCdformat": ctr.target["cdformat"],
              "dataVerification": ctr.target["curDataVerification"],
              "curDataVerification": ctr.target["dataVerification"],
              "range": ctr.target["range"]
            };
            jfrefreshgrid_pastcut(s, t, ctr.RowlChange);
          } else if (ctr.type == "rangechange") {
            formulaHistoryHanddler(ctr);
            jfrefreshrange(ctr.data, ctr.range, ctr.cdformat);
          } else if (ctr.type == "resize") {
            store_default.config = ctr.config;
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = store_default.config;
            if (ctr.ctrlType == "resizeR") {
              server_default.saveParam("cg", ctr.sheetIndex, ctr.config["rowlen"], {"k": "rowlen"});
            } else if (ctr.ctrlType == "resizeC") {
              server_default.saveParam("cg", ctr.sheetIndex, ctr.config["columnlen"], {"k": "columnlen"});
            }
            let images = $.extend(true, {}, ctr.images);
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].images = images;
            server_default.saveParam("all", ctr.sheetIndex, images, {"k": "images"});
            imageCtrl_default.images = images;
            imageCtrl_default.allImagesShow();
            jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
          } else if (ctr.type == "cellRowChange") {
            jfrefreshgridall(ctr.data[0].length, ctr.data.length, ctr.data, ctr.config, ctr.range, ctr.ctrlType, ctr.ctrlValue, ctr.cdformat);
          } else if (ctr.type == "extend") {
            jfrefreshgridall(ctr.data[0].length, ctr.data.length, ctr.data, ctr.config, ctr.range, "dele", ctr.ctrlValue);
          } else if (ctr.type == "dele") {
            let ctrlValue1 = $.extend(true, {}, ctr.ctrlValue);
            ctrlValue1.restore = true;
            jfrefreshgridall(ctr.data[0].length, ctr.data.length, ctr.data, ctr.config, ctr.range, "extend", ctrlValue1);
          } else if (ctr.type == "addRC") {
            let ctrlValue = $.extend(true, {}, ctr.ctrlValue);
            if (ctrlValue.direction == "rightbottom") {
              ctrlValue.index = ctrlValue.index + 1;
            }
            jfrefreshgrid_adRC(ctr.data, ctr.config, "delRC", ctrlValue, ctr.calc, ctr.filterObj, ctr.cf, ctr.af, ctr.freezen, ctr.dataVerification, ctr.hyperlink);
          } else if (ctr.type == "delRC") {
            let ctrlValue = $.extend(true, {}, ctr.ctrlValue);
            ctrlValue.restore = true;
            ctrlValue.direction = "lefttop";
            jfrefreshgrid_adRC(ctr.data, ctr.config, "addRC", ctrlValue, ctr.calc, ctr.filterObj, ctr.cf, ctr.af, ctr.freezen, ctr.dataVerification, ctr.hyperlink);
          } else if (ctr.type == "deleteCell") {
            jfrefreshgrid_deleteCell(ctr.data, ctr.config, ctr.ctrl, ctr.calc, ctr.filterObj, ctr.cf, ctr.dataVerification, ctr.hyperlink);
          } else if (ctr.type == "showHidRows") {
            store_default.config = ctr.config;
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = ctr.config;
            server_default.saveParam("cg", ctr.sheetIndex, ctr.config["rowhidden"], {"k": "rowhidden"});
            jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
          } else if (ctr.type == "showHidCols") {
            store_default.config = ctr.config;
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = ctr.config;
            server_default.saveParam("cg", ctr.sheetIndex, ctr.config["colhidden"], {"k": "colhidden"});
            jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
          } else if (ctr.type == "datachangeAll") {
            formula_default.execFunctionGroup();
            jfrefreshgridall(ctr.data[0].length, ctr.data.length, ctr.data, null, ctr.range, "datachangeAll", ctr.ctrlValue);
          } else if (ctr.type == "datachangeAll_filter_clear") {
            createFilterOptions(ctr.filter_save);
            $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").each(function(i2) {
              let $top = $(this);
              let item2 = ctr.optiongroups[i2];
              labelFilterOptionState($top, item2.optionstate, item2.rowhidden, item2.caljs, false, item2.st_r, item2.ed_r, item2.cindex, item2.st_c, item2.ed_c);
            });
            server_default.saveParam("fsr", store_default.currentSheetIndex, {"filter": ctr.optiongroups, "filter_select": ctr.filter_save});
            store_default.config = ctr.config;
            store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
            if (store_default.config["rowhidden"] == null) {
              store_default.config["rowhidden"] = {};
            }
            server_default.saveParam("cg", store_default.currentSheetIndex, store_default.config["rowhidden"], {"k": "rowhidden"});
            jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
            $("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
          } else if (ctr.type == "datachangeAll_filter") {
            let $top = $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").eq(ctr["optionsindex"]);
            let st_r = $top.data("str"), ed_r = $top.data("edr"), cindex = $top.data("cindex"), st_c = $top.data("stc"), ed_c = $top.data("edc");
            labelFilterOptionState($top, json_default.hasKey(ctr.rowhidenPre), ctr.rowhidenPre, ctr.caljs, true, st_r, ed_r, cindex, st_c, ed_c);
            store_default.config = ctr.config;
            store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
            if (store_default.config["rowhidden"] == null) {
              store_default.config["rowhidden"] = {};
            }
            server_default.saveParam("cg", store_default.currentSheetIndex, store_default.config["rowhidden"], {"k": "rowhidden"});
            jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
            $("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
          } else if (ctr.type == "filtershow") {
            $("#luckysheet-filter-selected-sheet" + ctr.sheetIndex + ", #luckysheet-filter-options-sheet" + ctr.sheetIndex).remove();
            if (server_default.allowUpdate) {
              server_default.saveParam("all", ctr.sheetIndex, null, {"k": "filter_select"});
            }
          } else if (ctr.type == "pivotTable_change") {
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].pivotTable = ctr.pivotTable;
            pivotTable_default.getCellData(ctr.sheetIndex);
            pivotTable_default.initialPivotManage(true);
            pivotTable_default.refreshPivotTable();
          } else if (ctr.type == "addSheet") {
            sheetmanage_default.deleteSheet(ctr.index);
            sheetmanage_default.changeSheetExec(ctr.currentSheetIndex);
            $("#luckysheet-input-box").removeAttr("style");
            $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
          } else if (ctr.type == "copySheet") {
            sheetmanage_default.deleteSheet(ctr.index);
            sheetmanage_default.changeSheetExec(ctr.copyindex);
          } else if (ctr.type == "deleteSheet") {
            let isDupName = false;
            for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
              if (store_default.luckysheetfile[i2].name == ctr.name) {
                isDupName = true;
              }
            }
            if (!isDupName) {
              sheetmanage_default.createSheetbydata(ctr, "isrenew");
              $("#luckysheet-input-box").removeAttr("style");
              $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
            }
          } else if (ctr.type == "sheetName") {
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].name = ctr.oldtxt;
            $("#luckysheet-sheets-item" + ctr.sheetIndex).find(".luckysheet-sheets-item-name").html(ctr.oldtxt);
            server_default.saveParam("all", ctr.sheetIndex, ctr.oldtxt, {"k": "name"});
          } else if (ctr.type == "sheetColor") {
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].color = ctr.oldcolor;
            let luckysheetcurrentSheetitem2 = $("#luckysheet-sheets-item" + ctr.sheetIndex);
            luckysheetcurrentSheetitem2.find(".luckysheet-sheets-item-color").remove();
            if (ctr.oldcolor != null) {
              luckysheetcurrentSheetitem2.append('<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + ctr.oldcolor + ';"></div>');
            }
            server_default.saveParam("all", ctr.sheetIndex, ctr.oldcolor, {"k": "color"});
          } else if (ctr.type == "mergeChange") {
            let allParam = {
              "cfg": ctr.config
            };
            jfrefreshgrid(ctr.data, ctr.range, allParam);
          } else if (ctr.type == "updateDataVerification") {
            dataVerificationCtrl_default.ref(ctr.currentDataVerification, ctr.historyDataVerification, ctr.sheetIndex);
          } else if (ctr.type == "updateDataVerificationOfCheckbox") {
            dataVerificationCtrl_default.refOfCheckbox(ctr.currentDataVerification, ctr.historyDataVerification, ctr.sheetIndex, ctr.data, ctr.range);
          } else if (ctr.type == "updateHyperlink") {
            hyperlinkCtrl_default.ref(ctr.currentHyperlink, ctr.historyHyperlink, ctr.sheetIndex, ctr.data, ctr.range);
          } else if (ctr.type == "updateCF") {
            let historyRules = ctr["data"]["historyRules"];
            for (let i2 = 0; i2 < historyRules.length; i2++) {
              let sheetIndex = historyRules[i2]["sheetIndex"];
              store_default.luckysheetfile[getSheetIndex(sheetIndex)]["luckysheet_conditionformat_save"] = historyRules[i2]["luckysheet_conditionformat_save"];
              if (server_default.allowUpdate) {
                server_default.saveParam("all", sheetIndex, historyRules[i2]["luckysheet_conditionformat_save"], {"k": "luckysheet_conditionformat_save"});
              }
            }
            conditionformat_default.ref();
          } else if (ctr.type == "updateAF") {
            let historyRules = ctr["data"]["historyRules"];
            let index2 = getSheetIndex(ctr["sheetIndex"]);
            store_default.luckysheetfile[index2]["luckysheet_alternateformat_save"] = $.extend(true, [], historyRules);
            setTimeout(function() {
              luckysheetrefreshgrid();
            }, 1);
          } else if (ctr.type == "borderChange") {
            if (ctr.config["borderInfo"] == null) {
              server_default.saveParam("cg", ctr.sheetIndex, [], {"k": "borderInfo"});
            } else {
              server_default.saveParam("cg", ctr.sheetIndex, ctr.config["borderInfo"], {"k": "borderInfo"});
            }
            store_default.config = ctr.config;
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = store_default.config;
            setTimeout(function() {
              luckysheetrefreshgrid();
            }, 1);
          } else if (ctr.type == "postil") {
            postil_default.ref(ctr.data, ctr.rc);
            for (let i2 = 0; i2 < ctr.rc.length; i2++) {
              let r2 = ctr.rc[i2].split("_")[0];
              let c2 = ctr.rc[i2].split("_")[1];
              if (ctr.data[r2][c2] != null && ctr.data[r2][c2].ps != null) {
                postil_default.buildPs(r2, c2, ctr.data[r2][c2].ps);
              } else {
                postil_default.buildPs(r2, c2, null);
              }
            }
          } else if (ctr.type == "imageCtrl") {
            imageCtrl_default.images = $.extend(true, {}, ctr.images);
            imageCtrl_default.allImagesShow();
            imageCtrl_default.ref();
          } else if (ctr.type == "zoomChange") {
            store_default.zoomRatio = ctr.zoomRatio;
            server_default.saveParam("all", ctr.currentSheetIndex, ctr.zoomRatio, {"k": "zoomRatio"});
            zoomNumberDomBind();
            zoomRefreshView();
          }
          cleargridelement(e);
          if (ctr.range) {
            store_default.luckysheet_select_save = ctr.range;
            selectHightlightShow();
          }
          store_default.clearjfundo = true;
          let newCtr = __spreadValues(__spreadValues({}, ctr), {data: ctr.curdata, curdata: ctr.data});
          method_default.createHookFunction("updated", newCtr);
        },
        undo: function() {
          if (store_default.jfundo.length == 0) {
            return;
          }
          let ctr = store_default.jfundo.pop();
          store_default.jfredo.push(ctr);
          store_default.clearjfundo = false;
          if (sheetmanage_default.hasSheet(ctr.sheetIndex) && store_default.currentSheetIndex != ctr.sheetIndex) {
            sheetmanage_default.changeSheetExec(ctr.sheetIndex);
          }
          if (ctr.type == "datachange") {
            formula_default.execFunctionGroup();
            let allParam = {
              "cfg": ctr.curConfig,
              "RowlChange": ctr.RowlChange,
              "cdformat": ctr.curCdformat,
              "dataVerification": ctr.curDataVerification,
              "dynamicArray": ctr.curDynamicArray,
              "hyperlink": ctr.curHyperlink
            };
            formulaHistoryHanddler(ctr, "undo");
            jfrefreshgrid(ctr.curdata, ctr.range, allParam);
          } else if (ctr.type == "pasteCut") {
            jfrefreshgrid_pastcut(ctr.source, ctr.target, ctr.RowlChange);
          } else if (ctr.type == "rangechange") {
            formulaHistoryHanddler(ctr, "undo");
            jfrefreshrange(ctr.curdata, ctr.range, ctr.curCdformat);
          } else if (ctr.type == "resize") {
            store_default.config = ctr.curconfig;
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = store_default.config;
            if (ctr.ctrlType == "resizeR") {
              server_default.saveParam("cg", ctr.sheetIndex, ctr.curconfig["rowlen"], {"k": "rowlen"});
            } else if (ctr.ctrlType == "resizeC") {
              server_default.saveParam("cg", ctr.sheetIndex, ctr.curconfig["columnlen"], {"k": "columnlen"});
            }
            let images = $.extend(true, {}, ctr.curImages);
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].images = images;
            server_default.saveParam("all", ctr.sheetIndex, images, {"k": "images"});
            imageCtrl_default.images = images;
            imageCtrl_default.allImagesShow();
            jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
          } else if (ctr.type == "cellRowChange") {
            jfrefreshgridall(ctr.curdata[0].length, ctr.curdata.length, ctr.curdata, ctr.curconfig, ctr.currange, ctr.ctrlType, ctr.ctrlValue, ctr.curCdformat);
          } else if (ctr.type == "extend") {
            jfrefreshgridall(ctr.curdata[0].length, ctr.curdata.length, ctr.curdata, ctr.curconfig, ctr.currange, ctr.ctrlType, ctr.ctrlValue);
          } else if (ctr.type == "dele") {
            let ctrlValue1 = $.extend(true, {}, ctr.ctrlValue);
            ctrlValue1.restore = true;
            jfrefreshgridall(ctr.curdata[0].length, ctr.curdata.length, ctr.curdata, ctr.curconfig, ctr.currange, ctr.ctrlType, ctr.ctrlValue);
          } else if (ctr.type == "addRC") {
            jfrefreshgrid_adRC(ctr.curData, ctr.curConfig, "addRC", ctr.ctrlValue, ctr.curCalc, ctr.curFilterObj, ctr.curCf, ctr.curAf, ctr.curFreezen, ctr.curDataVerification, ctr.curHyperlink);
          } else if (ctr.type == "delRC") {
            jfrefreshgrid_adRC(ctr.curData, ctr.curConfig, "delRC", ctr.ctrlValue, ctr.curCalc, ctr.curFilterObj, ctr.curCf, ctr.curAf, ctr.curFreezen, ctr.curDataVerification, ctr.curHyperlink);
          } else if (ctr.type == "deleteCell") {
            jfrefreshgrid_deleteCell(ctr.curData, ctr.curConfig, ctr.ctrl, ctr.curCalc, ctr.curFilterObj, ctr.curCf, ctr.curDataVerification, ctr.curHyperlink);
          } else if (ctr.type == "showHidRows") {
            store_default.config = ctr.curconfig;
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = ctr.curconfig;
            server_default.saveParam("cg", ctr.sheetIndex, ctr.curconfig["rowhidden"], {"k": "rowhidden"});
            jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
          } else if (ctr.type == "showHidCols") {
            store_default.config = ctr.curconfig;
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = ctr.curconfig;
            server_default.saveParam("cg", ctr.sheetIndex, ctr.curconfig["colhidden"], {"k": "colhidden"});
            jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
          } else if (ctr.type == "datachangeAll") {
            formula_default.execFunctionGroup();
            jfrefreshgridall(ctr.curdata[0].length, ctr.curdata.length, ctr.curdata, null, ctr.currange, "datachangeAll", ctr.ctrlValue);
          } else if (ctr.type == "datachangeAll_filter_clear") {
            server_default.saveParam("fsc", store_default.currentSheetIndex, null);
            store_default.config = ctr.curconfig;
            store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
            server_default.saveParam("cg", store_default.currentSheetIndex, {}, {"k": "rowhidden"});
            jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
            $("#luckysheet-filter-menu .luckysheet-filter-selected-input").hide().find("input").val();
            $("#luckysheet-filter-selected span").data("type", "0").data("type", null).text("\u65E0");
            $("#luckysheet-filter-selected-sheet" + store_default.currentSheetIndex + ", #luckysheet-filter-options-sheet" + store_default.currentSheetIndex).remove();
            $("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
          } else if (ctr.type == "datachangeAll_filter") {
            let $top = $("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex + " .luckysheet-filter-options").eq(ctr["optionsindex"]);
            let st_r = $top.data("str"), ed_r = $top.data("edr"), cindex = $top.data("cindex"), st_c = $top.data("stc"), ed_c = $top.data("edc");
            labelFilterOptionState($top, json_default.hasKey(ctr.rowhidden), ctr.rowhidden, ctr.caljs, true, st_r, ed_r, cindex, st_c, ed_c);
            store_default.config = ctr.curconfig;
            store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
            server_default.saveParam("cg", store_default.currentSheetIndex, store_default.config["rowhidden"], {"k": "rowhidden"});
            jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
            $("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
          } else if (ctr.type == "filtershow") {
            store_default.luckysheet_select_save = [ctr.filter_save];
            store_default.filterchage = false;
            createFilter();
            store_default.filterchage = true;
            server_default.saveParam("all", ctr.sheetIndex, ctr.filter_save, {"k": "filter_select"});
          } else if (ctr.type == "pivotTable_change") {
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].pivotTable = ctr.pivotTablecur;
            pivotTable_default.getCellData(ctr.sheetIndex);
            pivotTable_default.initialPivotManage(true);
            pivotTable_default.refreshPivotTable();
          } else if (ctr.type == "addSheet") {
            sheetmanage_default.createSheetbydata(ctr.sheetconfig);
            $("#luckysheet-input-box").removeAttr("style");
            $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
          } else if (ctr.type == "copySheet") {
            sheetmanage_default.copySheet(ctr.copyindex);
          } else if (ctr.type == "deleteSheet") {
            sheetmanage_default.deleteSheet(ctr.index);
            if (ctr.order == 0) {
              sheetmanage_default.changeSheetExec(store_default.luckysheetfile[0].index);
            } else {
              sheetmanage_default.changeSheetExec(store_default.luckysheetfile[ctr.order - 1].index);
            }
            $("#luckysheet-input-box").removeAttr("style");
            $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
          } else if (ctr.type == "sheetName") {
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].name = ctr.txt;
            $("#luckysheet-sheets-item" + ctr.sheetIndex).find(".luckysheet-sheets-item-name").html(ctr.txt);
            server_default.saveParam("all", ctr.sheetIndex, ctr.txt, {"k": "name"});
          } else if (ctr.type == "sheetColor") {
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].color = ctr.color;
            let luckysheetcurrentSheetitem2 = $("#luckysheet-sheets-item" + ctr.sheetIndex);
            luckysheetcurrentSheetitem2.find(".luckysheet-sheets-item-color").remove();
            if (ctr.color != null) {
              luckysheetcurrentSheetitem2.append('<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + ctr.color + ';"></div>');
            }
            server_default.saveParam("all", ctr.sheetIndex, ctr.color, {"k": "color"});
          } else if (ctr.type == "mergeChange") {
            let allParam = {
              "cfg": ctr.curConfig
            };
            jfrefreshgrid(ctr.curData, ctr.range, allParam);
          } else if (ctr.type == "updateDataVerification") {
            dataVerificationCtrl_default.ref(ctr.historyDataVerification, ctr.currentDataVerification, ctr.sheetIndex);
          } else if (ctr.type == "updateDataVerificationOfCheckbox") {
            dataVerificationCtrl_default.refOfCheckbox(ctr.historyDataVerification, ctr.currentDataVerification, ctr.sheetIndex, ctr.curData, ctr.range);
          } else if (ctr.type == "updateHyperlink") {
            hyperlinkCtrl_default.ref(ctr.historyHyperlink, ctr.currentHyperlink, ctr.sheetIndex, ctr.curData, ctr.range);
          } else if (ctr.type == "updateCF") {
            let currentRules = ctr["data"]["currentRules"];
            for (let i2 = 0; i2 < currentRules.length; i2++) {
              let sheetIndex = currentRules[i2]["sheetIndex"];
              store_default.luckysheetfile[getSheetIndex(sheetIndex)]["luckysheet_conditionformat_save"] = currentRules[i2]["luckysheet_conditionformat_save"];
              if (server_default.allowUpdate) {
                server_default.saveParam("all", sheetIndex, currentRules[i2]["luckysheet_conditionformat_save"], {"k": "luckysheet_conditionformat_save"});
              }
            }
            conditionformat_default.ref();
          } else if (ctr.type == "updateAF") {
            let currentRules = ctr["data"]["currentRules"];
            let index2 = getSheetIndex(ctr["sheetIndex"]);
            store_default.luckysheetfile[index2]["luckysheet_alternateformat_save"] = $.extend(true, [], currentRules);
            setTimeout(function() {
              luckysheetrefreshgrid();
            }, 1);
          } else if (ctr.type == "borderChange") {
            server_default.saveParam("cg", ctr.sheetIndex, ctr.curconfig["borderInfo"], {"k": "borderInfo"});
            store_default.config = ctr.curconfig;
            store_default.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = store_default.config;
            setTimeout(function() {
              luckysheetrefreshgrid();
            }, 1);
          } else if (ctr.type == "postil") {
            postil_default.ref(ctr.curdata, ctr.rc);
            for (let i2 = 0; i2 < ctr.rc.length; i2++) {
              let r2 = ctr.rc[i2].split("_")[0];
              let c2 = ctr.rc[i2].split("_")[1];
              if (ctr.curdata[r2][c2] != null && ctr.curdata[r2][c2].ps != null) {
                postil_default.buildPs(r2, c2, ctr.curdata[r2][c2].ps);
              } else {
                postil_default.buildPs(r2, c2, null);
              }
            }
          } else if (ctr.type == "imageCtrl") {
            imageCtrl_default.images = $.extend(true, {}, ctr.curImages);
            imageCtrl_default.allImagesShow();
            imageCtrl_default.ref();
          } else if (ctr.type == "zoomChange") {
            store_default.zoomRatio = ctr.curZoomRatio;
            server_default.saveParam("all", ctr.currentSheetIndex, ctr.curZoomRatio, {"k": "zoomRatio"});
            zoomNumberDomBind();
            zoomRefreshView();
          }
          if (ctr.range) {
            store_default.luckysheet_select_save = ctr.range;
            selectHightlightShow();
          }
          store_default.clearjfundo = true;
        }
      };
      controlHistory_default = controlHistory;
    }
  });

  // node_modules/flatpickr/dist/esm/types/options.js
  var HOOKS, defaults;
  var init_options = __esm({
    "node_modules/flatpickr/dist/esm/types/options.js"() {
      HOOKS = [
        "onChange",
        "onClose",
        "onDayCreate",
        "onDestroy",
        "onKeyDown",
        "onMonthChange",
        "onOpen",
        "onParseConfig",
        "onReady",
        "onValueUpdate",
        "onYearChange",
        "onPreCalendarPosition"
      ];
      defaults = {
        _disable: [],
        allowInput: false,
        allowInvalidPreload: false,
        altFormat: "F j, Y",
        altInput: false,
        altInputClass: "form-control input",
        animate: typeof window === "object" && window.navigator.userAgent.indexOf("MSIE") === -1,
        ariaDateFormat: "F j, Y",
        autoFillDefaultTime: true,
        clickOpens: true,
        closeOnSelect: true,
        conjunction: ", ",
        dateFormat: "Y-m-d",
        defaultHour: 12,
        defaultMinute: 0,
        defaultSeconds: 0,
        disable: [],
        disableMobile: false,
        enableSeconds: false,
        enableTime: false,
        errorHandler: (err) => typeof console !== "undefined" && console.warn(err),
        getWeek: (givenDate) => {
          const date = new Date(givenDate.getTime());
          date.setHours(0, 0, 0, 0);
          date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);
          var week1 = new Date(date.getFullYear(), 0, 4);
          return 1 + Math.round(((date.getTime() - week1.getTime()) / 864e5 - 3 + (week1.getDay() + 6) % 7) / 7);
        },
        hourIncrement: 1,
        ignoredFocusElements: [],
        inline: false,
        locale: "default",
        minuteIncrement: 5,
        mode: "single",
        monthSelectorType: "dropdown",
        nextArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",
        noCalendar: false,
        now: new Date(),
        onChange: [],
        onClose: [],
        onDayCreate: [],
        onDestroy: [],
        onKeyDown: [],
        onMonthChange: [],
        onOpen: [],
        onParseConfig: [],
        onReady: [],
        onValueUpdate: [],
        onYearChange: [],
        onPreCalendarPosition: [],
        plugins: [],
        position: "auto",
        positionElement: void 0,
        prevArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",
        shorthandCurrentMonth: false,
        showMonths: 1,
        static: false,
        time_24hr: false,
        weekNumbers: false,
        wrap: false
      };
    }
  });

  // node_modules/flatpickr/dist/esm/l10n/default.js
  var english, default_default;
  var init_default = __esm({
    "node_modules/flatpickr/dist/esm/l10n/default.js"() {
      english = {
        weekdays: {
          shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
          longhand: [
            "Sunday",
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday"
          ]
        },
        months: {
          shorthand: [
            "Jan",
            "Feb",
            "Mar",
            "Apr",
            "May",
            "Jun",
            "Jul",
            "Aug",
            "Sep",
            "Oct",
            "Nov",
            "Dec"
          ],
          longhand: [
            "January",
            "February",
            "March",
            "April",
            "May",
            "June",
            "July",
            "August",
            "September",
            "October",
            "November",
            "December"
          ]
        },
        daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
        firstDayOfWeek: 0,
        ordinal: (nth) => {
          const s = nth % 100;
          if (s > 3 && s < 21)
            return "th";
          switch (s % 10) {
            case 1:
              return "st";
            case 2:
              return "nd";
            case 3:
              return "rd";
            default:
              return "th";
          }
        },
        rangeSeparator: " to ",
        weekAbbreviation: "Wk",
        scrollTitle: "Scroll to increment",
        toggleTitle: "Click to toggle",
        amPM: ["AM", "PM"],
        yearAriaLabel: "Year",
        monthAriaLabel: "Month",
        hourAriaLabel: "Hour",
        minuteAriaLabel: "Minute",
        time_24hr: false
      };
      default_default = english;
    }
  });

  // node_modules/flatpickr/dist/esm/utils/index.js
  function debounce(fn, wait) {
    let t;
    return function() {
      clearTimeout(t);
      t = setTimeout(() => fn.apply(this, arguments), wait);
    };
  }
  var pad, int, arrayify;
  var init_utils = __esm({
    "node_modules/flatpickr/dist/esm/utils/index.js"() {
      pad = (number, length = 2) => `000${number}`.slice(length * -1);
      int = (bool) => bool === true ? 1 : 0;
      arrayify = (obj) => obj instanceof Array ? obj : [obj];
    }
  });

  // node_modules/flatpickr/dist/esm/utils/dom.js
  function toggleClass(elem, className, bool) {
    if (bool === true)
      return elem.classList.add(className);
    elem.classList.remove(className);
  }
  function createElement(tag, className, content) {
    const e = window.document.createElement(tag);
    className = className || "";
    content = content || "";
    e.className = className;
    if (content !== void 0)
      e.textContent = content;
    return e;
  }
  function clearNode(node) {
    while (node.firstChild)
      node.removeChild(node.firstChild);
  }
  function findParent(node, condition) {
    if (condition(node))
      return node;
    else if (node.parentNode)
      return findParent(node.parentNode, condition);
    return void 0;
  }
  function createNumberInput(inputClassName, opts) {
    const wrapper = createElement("div", "numInputWrapper"), numInput = createElement("input", "numInput " + inputClassName), arrowUp = createElement("span", "arrowUp"), arrowDown = createElement("span", "arrowDown");
    if (navigator.userAgent.indexOf("MSIE 9.0") === -1) {
      numInput.type = "number";
    } else {
      numInput.type = "text";
      numInput.pattern = "\\d*";
    }
    if (opts !== void 0)
      for (const key in opts)
        numInput.setAttribute(key, opts[key]);
    wrapper.appendChild(numInput);
    wrapper.appendChild(arrowUp);
    wrapper.appendChild(arrowDown);
    return wrapper;
  }
  function getEventTarget(event2) {
    try {
      if (typeof event2.composedPath === "function") {
        const path = event2.composedPath();
        return path[0];
      }
      return event2.target;
    } catch (error3) {
      return event2.target;
    }
  }
  var init_dom = __esm({
    "node_modules/flatpickr/dist/esm/utils/dom.js"() {
    }
  });

  // node_modules/flatpickr/dist/esm/utils/formatting.js
  var doNothing, monthToStr, revFormat, tokenRegex, formats;
  var init_formatting = __esm({
    "node_modules/flatpickr/dist/esm/utils/formatting.js"() {
      init_utils();
      doNothing = () => void 0;
      monthToStr = (monthNumber, shorthand, locale2) => locale2.months[shorthand ? "shorthand" : "longhand"][monthNumber];
      revFormat = {
        D: doNothing,
        F: function(dateObj, monthName, locale2) {
          dateObj.setMonth(locale2.months.longhand.indexOf(monthName));
        },
        G: (dateObj, hour) => {
          dateObj.setHours(parseFloat(hour));
        },
        H: (dateObj, hour) => {
          dateObj.setHours(parseFloat(hour));
        },
        J: (dateObj, day) => {
          dateObj.setDate(parseFloat(day));
        },
        K: (dateObj, amPM, locale2) => {
          dateObj.setHours(dateObj.getHours() % 12 + 12 * int(new RegExp(locale2.amPM[1], "i").test(amPM)));
        },
        M: function(dateObj, shortMonth, locale2) {
          dateObj.setMonth(locale2.months.shorthand.indexOf(shortMonth));
        },
        S: (dateObj, seconds) => {
          dateObj.setSeconds(parseFloat(seconds));
        },
        U: (_, unixSeconds) => new Date(parseFloat(unixSeconds) * 1e3),
        W: function(dateObj, weekNum, locale2) {
          const weekNumber = parseInt(weekNum);
          const date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);
          date.setDate(date.getDate() - date.getDay() + locale2.firstDayOfWeek);
          return date;
        },
        Y: (dateObj, year) => {
          dateObj.setFullYear(parseFloat(year));
        },
        Z: (_, ISODate) => new Date(ISODate),
        d: (dateObj, day) => {
          dateObj.setDate(parseFloat(day));
        },
        h: (dateObj, hour) => {
          dateObj.setHours(parseFloat(hour));
        },
        i: (dateObj, minutes) => {
          dateObj.setMinutes(parseFloat(minutes));
        },
        j: (dateObj, day) => {
          dateObj.setDate(parseFloat(day));
        },
        l: doNothing,
        m: (dateObj, month) => {
          dateObj.setMonth(parseFloat(month) - 1);
        },
        n: (dateObj, month) => {
          dateObj.setMonth(parseFloat(month) - 1);
        },
        s: (dateObj, seconds) => {
          dateObj.setSeconds(parseFloat(seconds));
        },
        u: (_, unixMillSeconds) => new Date(parseFloat(unixMillSeconds)),
        w: doNothing,
        y: (dateObj, year) => {
          dateObj.setFullYear(2e3 + parseFloat(year));
        }
      };
      tokenRegex = {
        D: "(\\w+)",
        F: "(\\w+)",
        G: "(\\d\\d|\\d)",
        H: "(\\d\\d|\\d)",
        J: "(\\d\\d|\\d)\\w+",
        K: "",
        M: "(\\w+)",
        S: "(\\d\\d|\\d)",
        U: "(.+)",
        W: "(\\d\\d|\\d)",
        Y: "(\\d{4})",
        Z: "(.+)",
        d: "(\\d\\d|\\d)",
        h: "(\\d\\d|\\d)",
        i: "(\\d\\d|\\d)",
        j: "(\\d\\d|\\d)",
        l: "(\\w+)",
        m: "(\\d\\d|\\d)",
        n: "(\\d\\d|\\d)",
        s: "(\\d\\d|\\d)",
        u: "(.+)",
        w: "(\\d\\d|\\d)",
        y: "(\\d{2})"
      };
      formats = {
        Z: (date) => date.toISOString(),
        D: function(date, locale2, options) {
          return locale2.weekdays.shorthand[formats.w(date, locale2, options)];
        },
        F: function(date, locale2, options) {
          return monthToStr(formats.n(date, locale2, options) - 1, false, locale2);
        },
        G: function(date, locale2, options) {
          return pad(formats.h(date, locale2, options));
        },
        H: (date) => pad(date.getHours()),
        J: function(date, locale2) {
          return locale2.ordinal !== void 0 ? date.getDate() + locale2.ordinal(date.getDate()) : date.getDate();
        },
        K: (date, locale2) => locale2.amPM[int(date.getHours() > 11)],
        M: function(date, locale2) {
          return monthToStr(date.getMonth(), true, locale2);
        },
        S: (date) => pad(date.getSeconds()),
        U: (date) => date.getTime() / 1e3,
        W: function(date, _, options) {
          return options.getWeek(date);
        },
        Y: (date) => pad(date.getFullYear(), 4),
        d: (date) => pad(date.getDate()),
        h: (date) => date.getHours() % 12 ? date.getHours() % 12 : 12,
        i: (date) => pad(date.getMinutes()),
        j: (date) => date.getDate(),
        l: function(date, locale2) {
          return locale2.weekdays.longhand[date.getDay()];
        },
        m: (date) => pad(date.getMonth() + 1),
        n: (date) => date.getMonth() + 1,
        s: (date) => date.getSeconds(),
        u: (date) => date.getTime(),
        w: (date) => date.getDay(),
        y: (date) => String(date.getFullYear()).substring(2)
      };
    }
  });

  // node_modules/flatpickr/dist/esm/utils/dates.js
  function compareDates(date1, date2, timeless = true) {
    if (timeless !== false) {
      return new Date(date1.getTime()).setHours(0, 0, 0, 0) - new Date(date2.getTime()).setHours(0, 0, 0, 0);
    }
    return date1.getTime() - date2.getTime();
  }
  function getDefaultHours(config) {
    let hours = config.defaultHour;
    let minutes = config.defaultMinute;
    let seconds = config.defaultSeconds;
    if (config.minDate !== void 0) {
      const minHour = config.minDate.getHours();
      const minMinutes = config.minDate.getMinutes();
      const minSeconds = config.minDate.getSeconds();
      if (hours < minHour) {
        hours = minHour;
      }
      if (hours === minHour && minutes < minMinutes) {
        minutes = minMinutes;
      }
      if (hours === minHour && minutes === minMinutes && seconds < minSeconds)
        seconds = config.minDate.getSeconds();
    }
    if (config.maxDate !== void 0) {
      const maxHr = config.maxDate.getHours();
      const maxMinutes = config.maxDate.getMinutes();
      hours = Math.min(hours, maxHr);
      if (hours === maxHr)
        minutes = Math.min(maxMinutes, minutes);
      if (hours === maxHr && minutes === maxMinutes)
        seconds = config.maxDate.getSeconds();
    }
    return {hours, minutes, seconds};
  }
  var createDateFormatter, createDateParser, isBetween, duration;
  var init_dates = __esm({
    "node_modules/flatpickr/dist/esm/utils/dates.js"() {
      init_formatting();
      init_options();
      init_default();
      createDateFormatter = ({config = defaults, l10n = english, isMobile = false}) => (dateObj, frmt, overrideLocale) => {
        const locale2 = overrideLocale || l10n;
        if (config.formatDate !== void 0 && !isMobile) {
          return config.formatDate(dateObj, frmt, locale2);
        }
        return frmt.split("").map((c2, i2, arr) => formats[c2] && arr[i2 - 1] !== "\\" ? formats[c2](dateObj, locale2, config) : c2 !== "\\" ? c2 : "").join("");
      };
      createDateParser = ({config = defaults, l10n = english}) => (date, givenFormat, timeless, customLocale) => {
        if (date !== 0 && !date)
          return void 0;
        const locale2 = customLocale || l10n;
        let parsedDate;
        const dateOrig = date;
        if (date instanceof Date)
          parsedDate = new Date(date.getTime());
        else if (typeof date !== "string" && date.toFixed !== void 0)
          parsedDate = new Date(date);
        else if (typeof date === "string") {
          const format = givenFormat || (config || defaults).dateFormat;
          const datestr = String(date).trim();
          if (datestr === "today") {
            parsedDate = new Date();
            timeless = true;
          } else if (/Z$/.test(datestr) || /GMT$/.test(datestr))
            parsedDate = new Date(date);
          else if (config && config.parseDate)
            parsedDate = config.parseDate(date, format);
          else {
            parsedDate = !config || !config.noCalendar ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0) : new Date(new Date().setHours(0, 0, 0, 0));
            let matched, ops = [];
            for (let i2 = 0, matchIndex = 0, regexStr = ""; i2 < format.length; i2++) {
              const token = format[i2];
              const isBackSlash = token === "\\";
              const escaped = format[i2 - 1] === "\\" || isBackSlash;
              if (tokenRegex[token] && !escaped) {
                regexStr += tokenRegex[token];
                const match = new RegExp(regexStr).exec(date);
                if (match && (matched = true)) {
                  ops[token !== "Y" ? "push" : "unshift"]({
                    fn: revFormat[token],
                    val: match[++matchIndex]
                  });
                }
              } else if (!isBackSlash)
                regexStr += ".";
              ops.forEach(({fn, val}) => parsedDate = fn(parsedDate, val, locale2) || parsedDate);
            }
            parsedDate = matched ? parsedDate : void 0;
          }
        }
        if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {
          config.errorHandler(new Error(`Invalid date provided: ${dateOrig}`));
          return void 0;
        }
        if (timeless === true)
          parsedDate.setHours(0, 0, 0, 0);
        return parsedDate;
      };
      isBetween = (ts, ts1, ts2) => {
        return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);
      };
      duration = {
        DAY: 864e5
      };
    }
  });

  // node_modules/flatpickr/dist/esm/utils/polyfills.js
  var init_polyfills = __esm({
    "node_modules/flatpickr/dist/esm/utils/polyfills.js"() {
      "use strict";
      if (typeof Object.assign !== "function") {
        Object.assign = function(target, ...args) {
          if (!target) {
            throw TypeError("Cannot convert undefined or null to object");
          }
          for (const source of args) {
            if (source) {
              Object.keys(source).forEach((key) => target[key] = source[key]);
            }
          }
          return target;
        };
      }
    }
  });

  // node_modules/flatpickr/dist/esm/index.js
  function FlatpickrInstance(element, instanceConfig) {
    const self2 = {
      config: Object.assign(Object.assign({}, defaults), flatpickr.defaultConfig),
      l10n: default_default
    };
    self2.parseDate = createDateParser({config: self2.config, l10n: self2.l10n});
    self2._handlers = [];
    self2.pluginElements = [];
    self2.loadedPlugins = [];
    self2._bind = bind;
    self2._setHoursFromDate = setHoursFromDate;
    self2._positionCalendar = positionCalendar;
    self2.changeMonth = changeMonth;
    self2.changeYear = changeYear;
    self2.clear = clear;
    self2.close = close;
    self2._createElement = createElement;
    self2.destroy = destroy;
    self2.isEnabled = isEnabled;
    self2.jumpToDate = jumpToDate;
    self2.open = open;
    self2.redraw = redraw;
    self2.set = set;
    self2.setDate = setDate;
    self2.toggle = toggle;
    function setupHelperFunctions() {
      self2.utils = {
        getDaysInMonth(month = self2.currentMonth, yr = self2.currentYear) {
          if (month === 1 && (yr % 4 === 0 && yr % 100 !== 0 || yr % 400 === 0))
            return 29;
          return self2.l10n.daysInMonth[month];
        }
      };
    }
    function init3() {
      self2.element = self2.input = element;
      self2.isOpen = false;
      parseConfig();
      setupLocale();
      setupInputs();
      setupDates();
      setupHelperFunctions();
      if (!self2.isMobile)
        build();
      bindEvents();
      if (self2.selectedDates.length || self2.config.noCalendar) {
        if (self2.config.enableTime) {
          setHoursFromDate(self2.config.noCalendar ? self2.latestSelectedDateObj : void 0);
        }
        updateValue(false);
      }
      setCalendarWidth();
      const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
      if (!self2.isMobile && isSafari) {
        positionCalendar();
      }
      triggerEvent("onReady");
    }
    function bindToInstance(fn) {
      return fn.bind(self2);
    }
    function setCalendarWidth() {
      const config = self2.config;
      if (config.weekNumbers === false && config.showMonths === 1) {
        return;
      } else if (config.noCalendar !== true) {
        window.requestAnimationFrame(function() {
          if (self2.calendarContainer !== void 0) {
            self2.calendarContainer.style.visibility = "hidden";
            self2.calendarContainer.style.display = "block";
          }
          if (self2.daysContainer !== void 0) {
            const daysWidth = (self2.days.offsetWidth + 1) * config.showMonths;
            self2.daysContainer.style.width = daysWidth + "px";
            self2.calendarContainer.style.width = daysWidth + (self2.weekWrapper !== void 0 ? self2.weekWrapper.offsetWidth : 0) + "px";
            self2.calendarContainer.style.removeProperty("visibility");
            self2.calendarContainer.style.removeProperty("display");
          }
        });
      }
    }
    function updateTime(e) {
      if (self2.selectedDates.length === 0) {
        const defaultDate = self2.config.minDate === void 0 || compareDates(new Date(), self2.config.minDate) >= 0 ? new Date() : new Date(self2.config.minDate.getTime());
        const defaults2 = getDefaultHours(self2.config);
        defaultDate.setHours(defaults2.hours, defaults2.minutes, defaults2.seconds, defaultDate.getMilliseconds());
        self2.selectedDates = [defaultDate];
        self2.latestSelectedDateObj = defaultDate;
      }
      if (e !== void 0 && e.type !== "blur") {
        timeWrapper(e);
      }
      const prevValue = self2._input.value;
      setHoursFromInputs();
      updateValue();
      if (self2._input.value !== prevValue) {
        self2._debouncedChange();
      }
    }
    function ampm2military(hour, amPM) {
      return hour % 12 + 12 * int(amPM === self2.l10n.amPM[1]);
    }
    function military2ampm(hour) {
      switch (hour % 24) {
        case 0:
        case 12:
          return 12;
        default:
          return hour % 12;
      }
    }
    function setHoursFromInputs() {
      if (self2.hourElement === void 0 || self2.minuteElement === void 0)
        return;
      let hours = (parseInt(self2.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self2.minuteElement.value, 10) || 0) % 60, seconds = self2.secondElement !== void 0 ? (parseInt(self2.secondElement.value, 10) || 0) % 60 : 0;
      if (self2.amPM !== void 0) {
        hours = ampm2military(hours, self2.amPM.textContent);
      }
      const limitMinHours = self2.config.minTime !== void 0 || self2.config.minDate && self2.minDateHasTime && self2.latestSelectedDateObj && compareDates(self2.latestSelectedDateObj, self2.config.minDate, true) === 0;
      const limitMaxHours = self2.config.maxTime !== void 0 || self2.config.maxDate && self2.maxDateHasTime && self2.latestSelectedDateObj && compareDates(self2.latestSelectedDateObj, self2.config.maxDate, true) === 0;
      if (limitMaxHours) {
        const maxTime = self2.config.maxTime !== void 0 ? self2.config.maxTime : self2.config.maxDate;
        hours = Math.min(hours, maxTime.getHours());
        if (hours === maxTime.getHours())
          minutes = Math.min(minutes, maxTime.getMinutes());
        if (minutes === maxTime.getMinutes())
          seconds = Math.min(seconds, maxTime.getSeconds());
      }
      if (limitMinHours) {
        const minTime = self2.config.minTime !== void 0 ? self2.config.minTime : self2.config.minDate;
        hours = Math.max(hours, minTime.getHours());
        if (hours === minTime.getHours() && minutes < minTime.getMinutes())
          minutes = minTime.getMinutes();
        if (minutes === minTime.getMinutes())
          seconds = Math.max(seconds, minTime.getSeconds());
      }
      setHours(hours, minutes, seconds);
    }
    function setHoursFromDate(dateObj) {
      const date = dateObj || self2.latestSelectedDateObj;
      if (date) {
        setHours(date.getHours(), date.getMinutes(), date.getSeconds());
      }
    }
    function setHours(hours, minutes, seconds) {
      if (self2.latestSelectedDateObj !== void 0) {
        self2.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);
      }
      if (!self2.hourElement || !self2.minuteElement || self2.isMobile)
        return;
      self2.hourElement.value = pad(!self2.config.time_24hr ? (12 + hours) % 12 + 12 * int(hours % 12 === 0) : hours);
      self2.minuteElement.value = pad(minutes);
      if (self2.amPM !== void 0)
        self2.amPM.textContent = self2.l10n.amPM[int(hours >= 12)];
      if (self2.secondElement !== void 0)
        self2.secondElement.value = pad(seconds);
    }
    function onYearInput(event2) {
      const eventTarget = getEventTarget(event2);
      const year = parseInt(eventTarget.value) + (event2.delta || 0);
      if (year / 1e3 > 1 || event2.key === "Enter" && !/[^\d]/.test(year.toString())) {
        changeYear(year);
      }
    }
    function bind(element2, event2, handler, options) {
      if (event2 instanceof Array)
        return event2.forEach((ev) => bind(element2, ev, handler, options));
      if (element2 instanceof Array)
        return element2.forEach((el) => bind(el, event2, handler, options));
      element2.addEventListener(event2, handler, options);
      self2._handlers.push({
        remove: () => element2.removeEventListener(event2, handler)
      });
    }
    function triggerChange() {
      triggerEvent("onChange");
    }
    function bindEvents() {
      if (self2.config.wrap) {
        ["open", "close", "toggle", "clear"].forEach((evt) => {
          Array.prototype.forEach.call(self2.element.querySelectorAll(`[data-${evt}]`), (el) => bind(el, "click", self2[evt]));
        });
      }
      if (self2.isMobile) {
        setupMobile();
        return;
      }
      const debouncedResize = debounce(onResize, 50);
      self2._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);
      if (self2.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))
        bind(self2.daysContainer, "mouseover", (e) => {
          if (self2.config.mode === "range")
            onMouseOver(getEventTarget(e));
        });
      bind(window.document.body, "keydown", onKeyDown);
      if (!self2.config.inline && !self2.config.static)
        bind(window, "resize", debouncedResize);
      if (window.ontouchstart !== void 0)
        bind(window.document, "touchstart", documentClick);
      else
        bind(window.document, "mousedown", documentClick);
      bind(window.document, "focus", documentClick, {capture: true});
      if (self2.config.clickOpens === true) {
        bind(self2._input, "focus", self2.open);
        bind(self2._input, "click", self2.open);
      }
      if (self2.daysContainer !== void 0) {
        bind(self2.monthNav, "click", onMonthNavClick);
        bind(self2.monthNav, ["keyup", "increment"], onYearInput);
        bind(self2.daysContainer, "click", selectDate);
      }
      if (self2.timeContainer !== void 0 && self2.minuteElement !== void 0 && self2.hourElement !== void 0) {
        const selText = (e) => getEventTarget(e).select();
        bind(self2.timeContainer, ["increment"], updateTime);
        bind(self2.timeContainer, "blur", updateTime, {capture: true});
        bind(self2.timeContainer, "click", timeIncrement);
        bind([self2.hourElement, self2.minuteElement], ["focus", "click"], selText);
        if (self2.secondElement !== void 0)
          bind(self2.secondElement, "focus", () => self2.secondElement && self2.secondElement.select());
        if (self2.amPM !== void 0) {
          bind(self2.amPM, "click", (e) => {
            updateTime(e);
            triggerChange();
          });
        }
      }
      if (self2.config.allowInput) {
        bind(self2._input, "blur", onBlur);
      }
    }
    function jumpToDate(jumpDate, triggerChange2) {
      const jumpTo = jumpDate !== void 0 ? self2.parseDate(jumpDate) : self2.latestSelectedDateObj || (self2.config.minDate && self2.config.minDate > self2.now ? self2.config.minDate : self2.config.maxDate && self2.config.maxDate < self2.now ? self2.config.maxDate : self2.now);
      const oldYear = self2.currentYear;
      const oldMonth = self2.currentMonth;
      try {
        if (jumpTo !== void 0) {
          self2.currentYear = jumpTo.getFullYear();
          self2.currentMonth = jumpTo.getMonth();
        }
      } catch (e) {
        e.message = "Invalid date supplied: " + jumpTo;
        self2.config.errorHandler(e);
      }
      if (triggerChange2 && self2.currentYear !== oldYear) {
        triggerEvent("onYearChange");
        buildMonthSwitch();
      }
      if (triggerChange2 && (self2.currentYear !== oldYear || self2.currentMonth !== oldMonth)) {
        triggerEvent("onMonthChange");
      }
      self2.redraw();
    }
    function timeIncrement(e) {
      const eventTarget = getEventTarget(e);
      if (~eventTarget.className.indexOf("arrow"))
        incrementNumInput(e, eventTarget.classList.contains("arrowUp") ? 1 : -1);
    }
    function incrementNumInput(e, delta, inputElem) {
      const target = e && getEventTarget(e);
      const input = inputElem || target && target.parentNode && target.parentNode.firstChild;
      const event2 = createEvent("increment");
      event2.delta = delta;
      input && input.dispatchEvent(event2);
    }
    function build() {
      const fragment = window.document.createDocumentFragment();
      self2.calendarContainer = createElement("div", "flatpickr-calendar");
      self2.calendarContainer.tabIndex = -1;
      if (!self2.config.noCalendar) {
        fragment.appendChild(buildMonthNav());
        self2.innerContainer = createElement("div", "flatpickr-innerContainer");
        if (self2.config.weekNumbers) {
          const {weekWrapper, weekNumbers} = buildWeeks();
          self2.innerContainer.appendChild(weekWrapper);
          self2.weekNumbers = weekNumbers;
          self2.weekWrapper = weekWrapper;
        }
        self2.rContainer = createElement("div", "flatpickr-rContainer");
        self2.rContainer.appendChild(buildWeekdays());
        if (!self2.daysContainer) {
          self2.daysContainer = createElement("div", "flatpickr-days");
          self2.daysContainer.tabIndex = -1;
        }
        buildDays();
        self2.rContainer.appendChild(self2.daysContainer);
        self2.innerContainer.appendChild(self2.rContainer);
        fragment.appendChild(self2.innerContainer);
      }
      if (self2.config.enableTime) {
        fragment.appendChild(buildTime());
      }
      toggleClass(self2.calendarContainer, "rangeMode", self2.config.mode === "range");
      toggleClass(self2.calendarContainer, "animate", self2.config.animate === true);
      toggleClass(self2.calendarContainer, "multiMonth", self2.config.showMonths > 1);
      self2.calendarContainer.appendChild(fragment);
      const customAppend = self2.config.appendTo !== void 0 && self2.config.appendTo.nodeType !== void 0;
      if (self2.config.inline || self2.config.static) {
        self2.calendarContainer.classList.add(self2.config.inline ? "inline" : "static");
        if (self2.config.inline) {
          if (!customAppend && self2.element.parentNode)
            self2.element.parentNode.insertBefore(self2.calendarContainer, self2._input.nextSibling);
          else if (self2.config.appendTo !== void 0)
            self2.config.appendTo.appendChild(self2.calendarContainer);
        }
        if (self2.config.static) {
          const wrapper = createElement("div", "flatpickr-wrapper");
          if (self2.element.parentNode)
            self2.element.parentNode.insertBefore(wrapper, self2.element);
          wrapper.appendChild(self2.element);
          if (self2.altInput)
            wrapper.appendChild(self2.altInput);
          wrapper.appendChild(self2.calendarContainer);
        }
      }
      if (!self2.config.static && !self2.config.inline)
        (self2.config.appendTo !== void 0 ? self2.config.appendTo : window.document.body).appendChild(self2.calendarContainer);
    }
    function createDay(className, date, dayNumber, i2) {
      const dateIsEnabled = isEnabled(date, true), dayElement = createElement("span", "flatpickr-day " + className, date.getDate().toString());
      dayElement.dateObj = date;
      dayElement.$i = i2;
      dayElement.setAttribute("aria-label", self2.formatDate(date, self2.config.ariaDateFormat));
      if (className.indexOf("hidden") === -1 && compareDates(date, self2.now) === 0) {
        self2.todayDateElem = dayElement;
        dayElement.classList.add("today");
        dayElement.setAttribute("aria-current", "date");
      }
      if (dateIsEnabled) {
        dayElement.tabIndex = -1;
        if (isDateSelected(date)) {
          dayElement.classList.add("selected");
          self2.selectedDateElem = dayElement;
          if (self2.config.mode === "range") {
            toggleClass(dayElement, "startRange", self2.selectedDates[0] && compareDates(date, self2.selectedDates[0], true) === 0);
            toggleClass(dayElement, "endRange", self2.selectedDates[1] && compareDates(date, self2.selectedDates[1], true) === 0);
            if (className === "nextMonthDay")
              dayElement.classList.add("inRange");
          }
        }
      } else {
        dayElement.classList.add("flatpickr-disabled");
      }
      if (self2.config.mode === "range") {
        if (isDateInRange(date) && !isDateSelected(date))
          dayElement.classList.add("inRange");
      }
      if (self2.weekNumbers && self2.config.showMonths === 1 && className !== "prevMonthDay" && dayNumber % 7 === 1) {
        self2.weekNumbers.insertAdjacentHTML("beforeend", "<span class='flatpickr-day'>" + self2.config.getWeek(date) + "</span>");
      }
      triggerEvent("onDayCreate", dayElement);
      return dayElement;
    }
    function focusOnDayElem(targetNode) {
      targetNode.focus();
      if (self2.config.mode === "range")
        onMouseOver(targetNode);
    }
    function getFirstAvailableDay(delta) {
      const startMonth = delta > 0 ? 0 : self2.config.showMonths - 1;
      const endMonth = delta > 0 ? self2.config.showMonths : -1;
      for (let m = startMonth; m != endMonth; m += delta) {
        const month = self2.daysContainer.children[m];
        const startIndex = delta > 0 ? 0 : month.children.length - 1;
        const endIndex = delta > 0 ? month.children.length : -1;
        for (let i2 = startIndex; i2 != endIndex; i2 += delta) {
          const c2 = month.children[i2];
          if (c2.className.indexOf("hidden") === -1 && isEnabled(c2.dateObj))
            return c2;
        }
      }
      return void 0;
    }
    function getNextAvailableDay(current, delta) {
      const givenMonth = current.className.indexOf("Month") === -1 ? current.dateObj.getMonth() : self2.currentMonth;
      const endMonth = delta > 0 ? self2.config.showMonths : -1;
      const loopDelta = delta > 0 ? 1 : -1;
      for (let m = givenMonth - self2.currentMonth; m != endMonth; m += loopDelta) {
        const month = self2.daysContainer.children[m];
        const startIndex = givenMonth - self2.currentMonth === m ? current.$i + delta : delta < 0 ? month.children.length - 1 : 0;
        const numMonthDays = month.children.length;
        for (let i2 = startIndex; i2 >= 0 && i2 < numMonthDays && i2 != (delta > 0 ? numMonthDays : -1); i2 += loopDelta) {
          const c2 = month.children[i2];
          if (c2.className.indexOf("hidden") === -1 && isEnabled(c2.dateObj) && Math.abs(current.$i - i2) >= Math.abs(delta))
            return focusOnDayElem(c2);
        }
      }
      self2.changeMonth(loopDelta);
      focusOnDay(getFirstAvailableDay(loopDelta), 0);
      return void 0;
    }
    function focusOnDay(current, offset) {
      const dayFocused = isInView(document.activeElement || document.body);
      const startElem = current !== void 0 ? current : dayFocused ? document.activeElement : self2.selectedDateElem !== void 0 && isInView(self2.selectedDateElem) ? self2.selectedDateElem : self2.todayDateElem !== void 0 && isInView(self2.todayDateElem) ? self2.todayDateElem : getFirstAvailableDay(offset > 0 ? 1 : -1);
      if (startElem === void 0) {
        self2._input.focus();
      } else if (!dayFocused) {
        focusOnDayElem(startElem);
      } else {
        getNextAvailableDay(startElem, offset);
      }
    }
    function buildMonthDays(year, month) {
      const firstOfMonth = (new Date(year, month, 1).getDay() - self2.l10n.firstDayOfWeek + 7) % 7;
      const prevMonthDays = self2.utils.getDaysInMonth((month - 1 + 12) % 12, year);
      const daysInMonth = self2.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self2.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? "prevMonthDay hidden" : "prevMonthDay", nextMonthDayClass = isMultiMonth ? "nextMonthDay hidden" : "nextMonthDay";
      let dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;
      for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {
        days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));
      }
      for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {
        days.appendChild(createDay("", new Date(year, month, dayNumber), dayNumber, dayIndex));
      }
      for (let dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth && (self2.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {
        days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));
      }
      const dayContainer = createElement("div", "dayContainer");
      dayContainer.appendChild(days);
      return dayContainer;
    }
    function buildDays() {
      if (self2.daysContainer === void 0) {
        return;
      }
      clearNode(self2.daysContainer);
      if (self2.weekNumbers)
        clearNode(self2.weekNumbers);
      const frag = document.createDocumentFragment();
      for (let i2 = 0; i2 < self2.config.showMonths; i2++) {
        const d = new Date(self2.currentYear, self2.currentMonth, 1);
        d.setMonth(self2.currentMonth + i2);
        frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));
      }
      self2.daysContainer.appendChild(frag);
      self2.days = self2.daysContainer.firstChild;
      if (self2.config.mode === "range" && self2.selectedDates.length === 1) {
        onMouseOver();
      }
    }
    function buildMonthSwitch() {
      if (self2.config.showMonths > 1 || self2.config.monthSelectorType !== "dropdown")
        return;
      const shouldBuildMonth = function(month) {
        if (self2.config.minDate !== void 0 && self2.currentYear === self2.config.minDate.getFullYear() && month < self2.config.minDate.getMonth()) {
          return false;
        }
        return !(self2.config.maxDate !== void 0 && self2.currentYear === self2.config.maxDate.getFullYear() && month > self2.config.maxDate.getMonth());
      };
      self2.monthsDropdownContainer.tabIndex = -1;
      self2.monthsDropdownContainer.innerHTML = "";
      for (let i2 = 0; i2 < 12; i2++) {
        if (!shouldBuildMonth(i2))
          continue;
        const month = createElement("option", "flatpickr-monthDropdown-month");
        month.value = new Date(self2.currentYear, i2).getMonth().toString();
        month.textContent = monthToStr(i2, self2.config.shorthandCurrentMonth, self2.l10n);
        month.tabIndex = -1;
        if (self2.currentMonth === i2) {
          month.selected = true;
        }
        self2.monthsDropdownContainer.appendChild(month);
      }
    }
    function buildMonth() {
      const container2 = createElement("div", "flatpickr-month");
      const monthNavFragment = window.document.createDocumentFragment();
      let monthElement;
      if (self2.config.showMonths > 1 || self2.config.monthSelectorType === "static") {
        monthElement = createElement("span", "cur-month");
      } else {
        self2.monthsDropdownContainer = createElement("select", "flatpickr-monthDropdown-months");
        self2.monthsDropdownContainer.setAttribute("aria-label", self2.l10n.monthAriaLabel);
        bind(self2.monthsDropdownContainer, "change", (e) => {
          const target = getEventTarget(e);
          const selectedMonth = parseInt(target.value, 10);
          self2.changeMonth(selectedMonth - self2.currentMonth);
          triggerEvent("onMonthChange");
        });
        buildMonthSwitch();
        monthElement = self2.monthsDropdownContainer;
      }
      const yearInput = createNumberInput("cur-year", {tabindex: "-1"});
      const yearElement = yearInput.getElementsByTagName("input")[0];
      yearElement.setAttribute("aria-label", self2.l10n.yearAriaLabel);
      if (self2.config.minDate) {
        yearElement.setAttribute("min", self2.config.minDate.getFullYear().toString());
      }
      if (self2.config.maxDate) {
        yearElement.setAttribute("max", self2.config.maxDate.getFullYear().toString());
        yearElement.disabled = !!self2.config.minDate && self2.config.minDate.getFullYear() === self2.config.maxDate.getFullYear();
      }
      const currentMonth = createElement("div", "flatpickr-current-month");
      currentMonth.appendChild(monthElement);
      currentMonth.appendChild(yearInput);
      monthNavFragment.appendChild(currentMonth);
      container2.appendChild(monthNavFragment);
      return {
        container: container2,
        yearElement,
        monthElement
      };
    }
    function buildMonths() {
      clearNode(self2.monthNav);
      self2.monthNav.appendChild(self2.prevMonthNav);
      if (self2.config.showMonths) {
        self2.yearElements = [];
        self2.monthElements = [];
      }
      for (let m = self2.config.showMonths; m--; ) {
        const month = buildMonth();
        self2.yearElements.push(month.yearElement);
        self2.monthElements.push(month.monthElement);
        self2.monthNav.appendChild(month.container);
      }
      self2.monthNav.appendChild(self2.nextMonthNav);
    }
    function buildMonthNav() {
      self2.monthNav = createElement("div", "flatpickr-months");
      self2.yearElements = [];
      self2.monthElements = [];
      self2.prevMonthNav = createElement("span", "flatpickr-prev-month");
      self2.prevMonthNav.innerHTML = self2.config.prevArrow;
      self2.nextMonthNav = createElement("span", "flatpickr-next-month");
      self2.nextMonthNav.innerHTML = self2.config.nextArrow;
      buildMonths();
      Object.defineProperty(self2, "_hidePrevMonthArrow", {
        get: () => self2.__hidePrevMonthArrow,
        set(bool) {
          if (self2.__hidePrevMonthArrow !== bool) {
            toggleClass(self2.prevMonthNav, "flatpickr-disabled", bool);
            self2.__hidePrevMonthArrow = bool;
          }
        }
      });
      Object.defineProperty(self2, "_hideNextMonthArrow", {
        get: () => self2.__hideNextMonthArrow,
        set(bool) {
          if (self2.__hideNextMonthArrow !== bool) {
            toggleClass(self2.nextMonthNav, "flatpickr-disabled", bool);
            self2.__hideNextMonthArrow = bool;
          }
        }
      });
      self2.currentYearElement = self2.yearElements[0];
      updateNavigationCurrentMonth();
      return self2.monthNav;
    }
    function buildTime() {
      self2.calendarContainer.classList.add("hasTime");
      if (self2.config.noCalendar)
        self2.calendarContainer.classList.add("noCalendar");
      const defaults2 = getDefaultHours(self2.config);
      self2.timeContainer = createElement("div", "flatpickr-time");
      self2.timeContainer.tabIndex = -1;
      const separator = createElement("span", "flatpickr-time-separator", ":");
      const hourInput = createNumberInput("flatpickr-hour", {
        "aria-label": self2.l10n.hourAriaLabel
      });
      self2.hourElement = hourInput.getElementsByTagName("input")[0];
      const minuteInput = createNumberInput("flatpickr-minute", {
        "aria-label": self2.l10n.minuteAriaLabel
      });
      self2.minuteElement = minuteInput.getElementsByTagName("input")[0];
      self2.hourElement.tabIndex = self2.minuteElement.tabIndex = -1;
      self2.hourElement.value = pad(self2.latestSelectedDateObj ? self2.latestSelectedDateObj.getHours() : self2.config.time_24hr ? defaults2.hours : military2ampm(defaults2.hours));
      self2.minuteElement.value = pad(self2.latestSelectedDateObj ? self2.latestSelectedDateObj.getMinutes() : defaults2.minutes);
      self2.hourElement.setAttribute("step", self2.config.hourIncrement.toString());
      self2.minuteElement.setAttribute("step", self2.config.minuteIncrement.toString());
      self2.hourElement.setAttribute("min", self2.config.time_24hr ? "0" : "1");
      self2.hourElement.setAttribute("max", self2.config.time_24hr ? "23" : "12");
      self2.hourElement.setAttribute("maxlength", "2");
      self2.minuteElement.setAttribute("min", "0");
      self2.minuteElement.setAttribute("max", "59");
      self2.minuteElement.setAttribute("maxlength", "2");
      self2.timeContainer.appendChild(hourInput);
      self2.timeContainer.appendChild(separator);
      self2.timeContainer.appendChild(minuteInput);
      if (self2.config.time_24hr)
        self2.timeContainer.classList.add("time24hr");
      if (self2.config.enableSeconds) {
        self2.timeContainer.classList.add("hasSeconds");
        const secondInput = createNumberInput("flatpickr-second");
        self2.secondElement = secondInput.getElementsByTagName("input")[0];
        self2.secondElement.value = pad(self2.latestSelectedDateObj ? self2.latestSelectedDateObj.getSeconds() : defaults2.seconds);
        self2.secondElement.setAttribute("step", self2.minuteElement.getAttribute("step"));
        self2.secondElement.setAttribute("min", "0");
        self2.secondElement.setAttribute("max", "59");
        self2.secondElement.setAttribute("maxlength", "2");
        self2.timeContainer.appendChild(createElement("span", "flatpickr-time-separator", ":"));
        self2.timeContainer.appendChild(secondInput);
      }
      if (!self2.config.time_24hr) {
        self2.amPM = createElement("span", "flatpickr-am-pm", self2.l10n.amPM[int((self2.latestSelectedDateObj ? self2.hourElement.value : self2.config.defaultHour) > 11)]);
        self2.amPM.title = self2.l10n.toggleTitle;
        self2.amPM.tabIndex = -1;
        self2.timeContainer.appendChild(self2.amPM);
      }
      return self2.timeContainer;
    }
    function buildWeekdays() {
      if (!self2.weekdayContainer)
        self2.weekdayContainer = createElement("div", "flatpickr-weekdays");
      else
        clearNode(self2.weekdayContainer);
      for (let i2 = self2.config.showMonths; i2--; ) {
        const container2 = createElement("div", "flatpickr-weekdaycontainer");
        self2.weekdayContainer.appendChild(container2);
      }
      updateWeekdays();
      return self2.weekdayContainer;
    }
    function updateWeekdays() {
      if (!self2.weekdayContainer) {
        return;
      }
      const firstDayOfWeek = self2.l10n.firstDayOfWeek;
      let weekdays = [...self2.l10n.weekdays.shorthand];
      if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {
        weekdays = [
          ...weekdays.splice(firstDayOfWeek, weekdays.length),
          ...weekdays.splice(0, firstDayOfWeek)
        ];
      }
      for (let i2 = self2.config.showMonths; i2--; ) {
        self2.weekdayContainer.children[i2].innerHTML = `
      <span class='flatpickr-weekday'>
        ${weekdays.join("</span><span class='flatpickr-weekday'>")}
      </span>
      `;
      }
    }
    function buildWeeks() {
      self2.calendarContainer.classList.add("hasWeeks");
      const weekWrapper = createElement("div", "flatpickr-weekwrapper");
      weekWrapper.appendChild(createElement("span", "flatpickr-weekday", self2.l10n.weekAbbreviation));
      const weekNumbers = createElement("div", "flatpickr-weeks");
      weekWrapper.appendChild(weekNumbers);
      return {
        weekWrapper,
        weekNumbers
      };
    }
    function changeMonth(value, isOffset = true) {
      const delta = isOffset ? value : value - self2.currentMonth;
      if (delta < 0 && self2._hidePrevMonthArrow === true || delta > 0 && self2._hideNextMonthArrow === true)
        return;
      self2.currentMonth += delta;
      if (self2.currentMonth < 0 || self2.currentMonth > 11) {
        self2.currentYear += self2.currentMonth > 11 ? 1 : -1;
        self2.currentMonth = (self2.currentMonth + 12) % 12;
        triggerEvent("onYearChange");
        buildMonthSwitch();
      }
      buildDays();
      triggerEvent("onMonthChange");
      updateNavigationCurrentMonth();
    }
    function clear(triggerChangeEvent = true, toInitial = true) {
      self2.input.value = "";
      if (self2.altInput !== void 0)
        self2.altInput.value = "";
      if (self2.mobileInput !== void 0)
        self2.mobileInput.value = "";
      self2.selectedDates = [];
      self2.latestSelectedDateObj = void 0;
      if (toInitial === true) {
        self2.currentYear = self2._initialDate.getFullYear();
        self2.currentMonth = self2._initialDate.getMonth();
      }
      if (self2.config.enableTime === true) {
        const {hours, minutes, seconds} = getDefaultHours(self2.config);
        setHours(hours, minutes, seconds);
      }
      self2.redraw();
      if (triggerChangeEvent)
        triggerEvent("onChange");
    }
    function close() {
      self2.isOpen = false;
      if (!self2.isMobile) {
        if (self2.calendarContainer !== void 0) {
          self2.calendarContainer.classList.remove("open");
        }
        if (self2._input !== void 0) {
          self2._input.classList.remove("active");
        }
      }
      triggerEvent("onClose");
    }
    function destroy() {
      if (self2.config !== void 0)
        triggerEvent("onDestroy");
      for (let i2 = self2._handlers.length; i2--; ) {
        self2._handlers[i2].remove();
      }
      self2._handlers = [];
      if (self2.mobileInput) {
        if (self2.mobileInput.parentNode)
          self2.mobileInput.parentNode.removeChild(self2.mobileInput);
        self2.mobileInput = void 0;
      } else if (self2.calendarContainer && self2.calendarContainer.parentNode) {
        if (self2.config.static && self2.calendarContainer.parentNode) {
          const wrapper = self2.calendarContainer.parentNode;
          wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);
          if (wrapper.parentNode) {
            while (wrapper.firstChild)
              wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);
            wrapper.parentNode.removeChild(wrapper);
          }
        } else
          self2.calendarContainer.parentNode.removeChild(self2.calendarContainer);
      }
      if (self2.altInput) {
        self2.input.type = "text";
        if (self2.altInput.parentNode)
          self2.altInput.parentNode.removeChild(self2.altInput);
        delete self2.altInput;
      }
      if (self2.input) {
        self2.input.type = self2.input._type;
        self2.input.classList.remove("flatpickr-input");
        self2.input.removeAttribute("readonly");
      }
      [
        "_showTimeInput",
        "latestSelectedDateObj",
        "_hideNextMonthArrow",
        "_hidePrevMonthArrow",
        "__hideNextMonthArrow",
        "__hidePrevMonthArrow",
        "isMobile",
        "isOpen",
        "selectedDateElem",
        "minDateHasTime",
        "maxDateHasTime",
        "days",
        "daysContainer",
        "_input",
        "_positionElement",
        "innerContainer",
        "rContainer",
        "monthNav",
        "todayDateElem",
        "calendarContainer",
        "weekdayContainer",
        "prevMonthNav",
        "nextMonthNav",
        "monthsDropdownContainer",
        "currentMonthElement",
        "currentYearElement",
        "navigationCurrentMonth",
        "selectedDateElem",
        "config"
      ].forEach((k) => {
        try {
          delete self2[k];
        } catch (_) {
        }
      });
    }
    function isCalendarElem(elem) {
      if (self2.config.appendTo && self2.config.appendTo.contains(elem))
        return true;
      return self2.calendarContainer.contains(elem);
    }
    function documentClick(e) {
      if (self2.isOpen && !self2.config.inline) {
        const eventTarget = getEventTarget(e);
        const isCalendarElement = isCalendarElem(eventTarget);
        const isInput = eventTarget === self2.input || eventTarget === self2.altInput || self2.element.contains(eventTarget) || e.path && e.path.indexOf && (~e.path.indexOf(self2.input) || ~e.path.indexOf(self2.altInput));
        const lostFocus = e.type === "blur" ? isInput && e.relatedTarget && !isCalendarElem(e.relatedTarget) : !isInput && !isCalendarElement && !isCalendarElem(e.relatedTarget);
        const isIgnored = !self2.config.ignoredFocusElements.some((elem) => elem.contains(eventTarget));
        if (lostFocus && isIgnored) {
          if (self2.timeContainer !== void 0 && self2.minuteElement !== void 0 && self2.hourElement !== void 0 && self2.input.value !== "" && self2.input.value !== void 0) {
            updateTime();
          }
          self2.close();
          if (self2.config && self2.config.mode === "range" && self2.selectedDates.length === 1) {
            self2.clear(false);
            self2.redraw();
          }
        }
      }
    }
    function changeYear(newYear) {
      if (!newYear || self2.config.minDate && newYear < self2.config.minDate.getFullYear() || self2.config.maxDate && newYear > self2.config.maxDate.getFullYear())
        return;
      const newYearNum = newYear, isNewYear = self2.currentYear !== newYearNum;
      self2.currentYear = newYearNum || self2.currentYear;
      if (self2.config.maxDate && self2.currentYear === self2.config.maxDate.getFullYear()) {
        self2.currentMonth = Math.min(self2.config.maxDate.getMonth(), self2.currentMonth);
      } else if (self2.config.minDate && self2.currentYear === self2.config.minDate.getFullYear()) {
        self2.currentMonth = Math.max(self2.config.minDate.getMonth(), self2.currentMonth);
      }
      if (isNewYear) {
        self2.redraw();
        triggerEvent("onYearChange");
        buildMonthSwitch();
      }
    }
    function isEnabled(date, timeless = true) {
      var _a;
      const dateToCheck = self2.parseDate(date, void 0, timeless);
      if (self2.config.minDate && dateToCheck && compareDates(dateToCheck, self2.config.minDate, timeless !== void 0 ? timeless : !self2.minDateHasTime) < 0 || self2.config.maxDate && dateToCheck && compareDates(dateToCheck, self2.config.maxDate, timeless !== void 0 ? timeless : !self2.maxDateHasTime) > 0)
        return false;
      if (!self2.config.enable && self2.config.disable.length === 0)
        return true;
      if (dateToCheck === void 0)
        return false;
      const bool = !!self2.config.enable, array = (_a = self2.config.enable) !== null && _a !== void 0 ? _a : self2.config.disable;
      for (let i2 = 0, d; i2 < array.length; i2++) {
        d = array[i2];
        if (typeof d === "function" && d(dateToCheck))
          return bool;
        else if (d instanceof Date && dateToCheck !== void 0 && d.getTime() === dateToCheck.getTime())
          return bool;
        else if (typeof d === "string") {
          const parsed = self2.parseDate(d, void 0, true);
          return parsed && parsed.getTime() === dateToCheck.getTime() ? bool : !bool;
        } else if (typeof d === "object" && dateToCheck !== void 0 && d.from && d.to && dateToCheck.getTime() >= d.from.getTime() && dateToCheck.getTime() <= d.to.getTime())
          return bool;
      }
      return !bool;
    }
    function isInView(elem) {
      if (self2.daysContainer !== void 0)
        return elem.className.indexOf("hidden") === -1 && elem.className.indexOf("flatpickr-disabled") === -1 && self2.daysContainer.contains(elem);
      return false;
    }
    function onBlur(e) {
      const isInput = e.target === self2._input;
      if (isInput && (self2.selectedDates.length > 0 || self2._input.value.length > 0) && !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {
        self2.setDate(self2._input.value, true, e.target === self2.altInput ? self2.config.altFormat : self2.config.dateFormat);
      }
    }
    function onKeyDown(e) {
      const eventTarget = getEventTarget(e);
      const isInput = self2.config.wrap ? element.contains(eventTarget) : eventTarget === self2._input;
      const allowInput = self2.config.allowInput;
      const allowKeydown = self2.isOpen && (!allowInput || !isInput);
      const allowInlineKeydown = self2.config.inline && isInput && !allowInput;
      if (e.keyCode === 13 && isInput) {
        if (allowInput) {
          self2.setDate(self2._input.value, true, eventTarget === self2.altInput ? self2.config.altFormat : self2.config.dateFormat);
          return eventTarget.blur();
        } else {
          self2.open();
        }
      } else if (isCalendarElem(eventTarget) || allowKeydown || allowInlineKeydown) {
        const isTimeObj = !!self2.timeContainer && self2.timeContainer.contains(eventTarget);
        switch (e.keyCode) {
          case 13:
            if (isTimeObj) {
              e.preventDefault();
              updateTime();
              focusAndClose();
            } else
              selectDate(e);
            break;
          case 27:
            e.preventDefault();
            focusAndClose();
            break;
          case 8:
          case 46:
            if (isInput && !self2.config.allowInput) {
              e.preventDefault();
              self2.clear();
            }
            break;
          case 37:
          case 39:
            if (!isTimeObj && !isInput) {
              e.preventDefault();
              if (self2.daysContainer !== void 0 && (allowInput === false || document.activeElement && isInView(document.activeElement))) {
                const delta2 = e.keyCode === 39 ? 1 : -1;
                if (!e.ctrlKey)
                  focusOnDay(void 0, delta2);
                else {
                  e.stopPropagation();
                  changeMonth(delta2);
                  focusOnDay(getFirstAvailableDay(1), 0);
                }
              }
            } else if (self2.hourElement)
              self2.hourElement.focus();
            break;
          case 38:
          case 40:
            e.preventDefault();
            const delta = e.keyCode === 40 ? 1 : -1;
            if (self2.daysContainer && eventTarget.$i !== void 0 || eventTarget === self2.input || eventTarget === self2.altInput) {
              if (e.ctrlKey) {
                e.stopPropagation();
                changeYear(self2.currentYear - delta);
                focusOnDay(getFirstAvailableDay(1), 0);
              } else if (!isTimeObj)
                focusOnDay(void 0, delta * 7);
            } else if (eventTarget === self2.currentYearElement) {
              changeYear(self2.currentYear - delta);
            } else if (self2.config.enableTime) {
              if (!isTimeObj && self2.hourElement)
                self2.hourElement.focus();
              updateTime(e);
              self2._debouncedChange();
            }
            break;
          case 9:
            if (isTimeObj) {
              const elems = [
                self2.hourElement,
                self2.minuteElement,
                self2.secondElement,
                self2.amPM
              ].concat(self2.pluginElements).filter((x) => x);
              const i2 = elems.indexOf(eventTarget);
              if (i2 !== -1) {
                const target = elems[i2 + (e.shiftKey ? -1 : 1)];
                e.preventDefault();
                (target || self2._input).focus();
              }
            } else if (!self2.config.noCalendar && self2.daysContainer && self2.daysContainer.contains(eventTarget) && e.shiftKey) {
              e.preventDefault();
              self2._input.focus();
            }
            break;
          default:
            break;
        }
      }
      if (self2.amPM !== void 0 && eventTarget === self2.amPM) {
        switch (e.key) {
          case self2.l10n.amPM[0].charAt(0):
          case self2.l10n.amPM[0].charAt(0).toLowerCase():
            self2.amPM.textContent = self2.l10n.amPM[0];
            setHoursFromInputs();
            updateValue();
            break;
          case self2.l10n.amPM[1].charAt(0):
          case self2.l10n.amPM[1].charAt(0).toLowerCase():
            self2.amPM.textContent = self2.l10n.amPM[1];
            setHoursFromInputs();
            updateValue();
            break;
        }
      }
      if (isInput || isCalendarElem(eventTarget)) {
        triggerEvent("onKeyDown", e);
      }
    }
    function onMouseOver(elem) {
      if (self2.selectedDates.length !== 1 || elem && (!elem.classList.contains("flatpickr-day") || elem.classList.contains("flatpickr-disabled")))
        return;
      const hoverDate = elem ? elem.dateObj.getTime() : self2.days.firstElementChild.dateObj.getTime(), initialDate = self2.parseDate(self2.selectedDates[0], void 0, true).getTime(), rangeStartDate = Math.min(hoverDate, self2.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self2.selectedDates[0].getTime());
      let containsDisabled = false;
      let minRange = 0, maxRange = 0;
      for (let t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {
        if (!isEnabled(new Date(t), true)) {
          containsDisabled = containsDisabled || t > rangeStartDate && t < rangeEndDate;
          if (t < initialDate && (!minRange || t > minRange))
            minRange = t;
          else if (t > initialDate && (!maxRange || t < maxRange))
            maxRange = t;
        }
      }
      for (let m = 0; m < self2.config.showMonths; m++) {
        const month = self2.daysContainer.children[m];
        for (let i2 = 0, l = month.children.length; i2 < l; i2++) {
          const dayElem = month.children[i2], date = dayElem.dateObj;
          const timestamp = date.getTime();
          const outOfRange = minRange > 0 && timestamp < minRange || maxRange > 0 && timestamp > maxRange;
          if (outOfRange) {
            dayElem.classList.add("notAllowed");
            ["inRange", "startRange", "endRange"].forEach((c2) => {
              dayElem.classList.remove(c2);
            });
            continue;
          } else if (containsDisabled && !outOfRange)
            continue;
          ["startRange", "inRange", "endRange", "notAllowed"].forEach((c2) => {
            dayElem.classList.remove(c2);
          });
          if (elem !== void 0) {
            elem.classList.add(hoverDate <= self2.selectedDates[0].getTime() ? "startRange" : "endRange");
            if (initialDate < hoverDate && timestamp === initialDate)
              dayElem.classList.add("startRange");
            else if (initialDate > hoverDate && timestamp === initialDate)
              dayElem.classList.add("endRange");
            if (timestamp >= minRange && (maxRange === 0 || timestamp <= maxRange) && isBetween(timestamp, initialDate, hoverDate))
              dayElem.classList.add("inRange");
          }
        }
      }
    }
    function onResize() {
      if (self2.isOpen && !self2.config.static && !self2.config.inline)
        positionCalendar();
    }
    function open(e, positionElement = self2._positionElement) {
      if (self2.isMobile === true) {
        if (e) {
          e.preventDefault();
          const eventTarget = getEventTarget(e);
          if (eventTarget) {
            eventTarget.blur();
          }
        }
        if (self2.mobileInput !== void 0) {
          self2.mobileInput.focus();
          self2.mobileInput.click();
        }
        triggerEvent("onOpen");
        return;
      } else if (self2._input.disabled || self2.config.inline) {
        return;
      }
      const wasOpen = self2.isOpen;
      self2.isOpen = true;
      if (!wasOpen) {
        self2.calendarContainer.classList.add("open");
        self2._input.classList.add("active");
        triggerEvent("onOpen");
        positionCalendar(positionElement);
      }
      if (self2.config.enableTime === true && self2.config.noCalendar === true) {
        if (self2.config.allowInput === false && (e === void 0 || !self2.timeContainer.contains(e.relatedTarget))) {
          setTimeout(() => self2.hourElement.select(), 50);
        }
      }
    }
    function minMaxDateSetter(type) {
      return (date) => {
        const dateObj = self2.config[`_${type}Date`] = self2.parseDate(date, self2.config.dateFormat);
        const inverseDateObj = self2.config[`_${type === "min" ? "max" : "min"}Date`];
        if (dateObj !== void 0) {
          self2[type === "min" ? "minDateHasTime" : "maxDateHasTime"] = dateObj.getHours() > 0 || dateObj.getMinutes() > 0 || dateObj.getSeconds() > 0;
        }
        if (self2.selectedDates) {
          self2.selectedDates = self2.selectedDates.filter((d) => isEnabled(d));
          if (!self2.selectedDates.length && type === "min")
            setHoursFromDate(dateObj);
          updateValue();
        }
        if (self2.daysContainer) {
          redraw();
          if (dateObj !== void 0)
            self2.currentYearElement[type] = dateObj.getFullYear().toString();
          else
            self2.currentYearElement.removeAttribute(type);
          self2.currentYearElement.disabled = !!inverseDateObj && dateObj !== void 0 && inverseDateObj.getFullYear() === dateObj.getFullYear();
        }
      };
    }
    function parseConfig() {
      const boolOpts = [
        "wrap",
        "weekNumbers",
        "allowInput",
        "allowInvalidPreload",
        "clickOpens",
        "time_24hr",
        "enableTime",
        "noCalendar",
        "altInput",
        "shorthandCurrentMonth",
        "inline",
        "static",
        "enableSeconds",
        "disableMobile"
      ];
      const userConfig = Object.assign(Object.assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);
      const formats2 = {};
      self2.config.parseDate = userConfig.parseDate;
      self2.config.formatDate = userConfig.formatDate;
      Object.defineProperty(self2.config, "enable", {
        get: () => self2.config._enable,
        set: (dates) => {
          self2.config._enable = parseDateRules(dates);
        }
      });
      Object.defineProperty(self2.config, "disable", {
        get: () => self2.config._disable,
        set: (dates) => {
          self2.config._disable = parseDateRules(dates);
        }
      });
      const timeMode = userConfig.mode === "time";
      if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {
        const defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.dateFormat;
        formats2.dateFormat = userConfig.noCalendar || timeMode ? "H:i" + (userConfig.enableSeconds ? ":S" : "") : defaultDateFormat + " H:i" + (userConfig.enableSeconds ? ":S" : "");
      }
      if (userConfig.altInput && (userConfig.enableTime || timeMode) && !userConfig.altFormat) {
        const defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.altFormat;
        formats2.altFormat = userConfig.noCalendar || timeMode ? "h:i" + (userConfig.enableSeconds ? ":S K" : " K") : defaultAltFormat + ` h:i${userConfig.enableSeconds ? ":S" : ""} K`;
      }
      Object.defineProperty(self2.config, "minDate", {
        get: () => self2.config._minDate,
        set: minMaxDateSetter("min")
      });
      Object.defineProperty(self2.config, "maxDate", {
        get: () => self2.config._maxDate,
        set: minMaxDateSetter("max")
      });
      const minMaxTimeSetter = (type) => (val) => {
        self2.config[type === "min" ? "_minTime" : "_maxTime"] = self2.parseDate(val, "H:i:S");
      };
      Object.defineProperty(self2.config, "minTime", {
        get: () => self2.config._minTime,
        set: minMaxTimeSetter("min")
      });
      Object.defineProperty(self2.config, "maxTime", {
        get: () => self2.config._maxTime,
        set: minMaxTimeSetter("max")
      });
      if (userConfig.mode === "time") {
        self2.config.noCalendar = true;
        self2.config.enableTime = true;
      }
      Object.assign(self2.config, formats2, userConfig);
      for (let i2 = 0; i2 < boolOpts.length; i2++)
        self2.config[boolOpts[i2]] = self2.config[boolOpts[i2]] === true || self2.config[boolOpts[i2]] === "true";
      HOOKS.filter((hook) => self2.config[hook] !== void 0).forEach((hook) => {
        self2.config[hook] = arrayify(self2.config[hook] || []).map(bindToInstance);
      });
      self2.isMobile = !self2.config.disableMobile && !self2.config.inline && self2.config.mode === "single" && !self2.config.disable.length && !self2.config.enable && !self2.config.weekNumbers && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
      for (let i2 = 0; i2 < self2.config.plugins.length; i2++) {
        const pluginConf = self2.config.plugins[i2](self2) || {};
        for (const key in pluginConf) {
          if (HOOKS.indexOf(key) > -1) {
            self2.config[key] = arrayify(pluginConf[key]).map(bindToInstance).concat(self2.config[key]);
          } else if (typeof userConfig[key] === "undefined")
            self2.config[key] = pluginConf[key];
        }
      }
      if (!userConfig.altInputClass) {
        self2.config.altInputClass = getInputElem().className + " " + self2.config.altInputClass;
      }
      triggerEvent("onParseConfig");
    }
    function getInputElem() {
      return self2.config.wrap ? element.querySelector("[data-input]") : element;
    }
    function setupLocale() {
      if (typeof self2.config.locale !== "object" && typeof flatpickr.l10ns[self2.config.locale] === "undefined")
        self2.config.errorHandler(new Error(`flatpickr: invalid locale ${self2.config.locale}`));
      self2.l10n = Object.assign(Object.assign({}, flatpickr.l10ns.default), typeof self2.config.locale === "object" ? self2.config.locale : self2.config.locale !== "default" ? flatpickr.l10ns[self2.config.locale] : void 0);
      tokenRegex.K = `(${self2.l10n.amPM[0]}|${self2.l10n.amPM[1]}|${self2.l10n.amPM[0].toLowerCase()}|${self2.l10n.amPM[1].toLowerCase()})`;
      const userConfig = Object.assign(Object.assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));
      if (userConfig.time_24hr === void 0 && flatpickr.defaultConfig.time_24hr === void 0) {
        self2.config.time_24hr = self2.l10n.time_24hr;
      }
      self2.formatDate = createDateFormatter(self2);
      self2.parseDate = createDateParser({config: self2.config, l10n: self2.l10n});
    }
    function positionCalendar(customPositionElement) {
      if (typeof self2.config.position === "function") {
        return void self2.config.position(self2, customPositionElement);
      }
      if (self2.calendarContainer === void 0)
        return;
      triggerEvent("onPreCalendarPosition");
      const positionElement = customPositionElement || self2._positionElement;
      const calendarHeight = Array.prototype.reduce.call(self2.calendarContainer.children, (acc, child) => acc + child.offsetHeight, 0), calendarWidth = self2.calendarContainer.offsetWidth, configPos = self2.config.position.split(" "), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === "above" || configPosVertical !== "below" && distanceFromBottom < calendarHeight && inputBounds.top > calendarHeight;
      const top = window.pageYOffset + inputBounds.top + (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);
      toggleClass(self2.calendarContainer, "arrowTop", !showOnTop);
      toggleClass(self2.calendarContainer, "arrowBottom", showOnTop);
      if (self2.config.inline)
        return;
      let left = window.pageXOffset + inputBounds.left;
      let isCenter = false;
      let isRight = false;
      if (configPosHorizontal === "center") {
        left -= (calendarWidth - inputBounds.width) / 2;
        isCenter = true;
      } else if (configPosHorizontal === "right") {
        left -= calendarWidth - inputBounds.width;
        isRight = true;
      }
      toggleClass(self2.calendarContainer, "arrowLeft", !isCenter && !isRight);
      toggleClass(self2.calendarContainer, "arrowCenter", isCenter);
      toggleClass(self2.calendarContainer, "arrowRight", isRight);
      const right = window.document.body.offsetWidth - (window.pageXOffset + inputBounds.right);
      const rightMost = left + calendarWidth > window.document.body.offsetWidth;
      const centerMost = right + calendarWidth > window.document.body.offsetWidth;
      toggleClass(self2.calendarContainer, "rightMost", rightMost);
      if (self2.config.static)
        return;
      self2.calendarContainer.style.top = `${top}px`;
      if (!rightMost) {
        self2.calendarContainer.style.left = `${left}px`;
        self2.calendarContainer.style.right = "auto";
      } else if (!centerMost) {
        self2.calendarContainer.style.left = "auto";
        self2.calendarContainer.style.right = `${right}px`;
      } else {
        const doc = getDocumentStyleSheet();
        if (doc === void 0)
          return;
        const bodyWidth = window.document.body.offsetWidth;
        const centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);
        const centerBefore = ".flatpickr-calendar.centerMost:before";
        const centerAfter = ".flatpickr-calendar.centerMost:after";
        const centerIndex = doc.cssRules.length;
        const centerStyle = `{left:${inputBounds.left}px;right:auto;}`;
        toggleClass(self2.calendarContainer, "rightMost", false);
        toggleClass(self2.calendarContainer, "centerMost", true);
        doc.insertRule(`${centerBefore},${centerAfter}${centerStyle}`, centerIndex);
        self2.calendarContainer.style.left = `${centerLeft}px`;
        self2.calendarContainer.style.right = "auto";
      }
    }
    function getDocumentStyleSheet() {
      let editableSheet = null;
      for (let i2 = 0; i2 < document.styleSheets.length; i2++) {
        const sheet = document.styleSheets[i2];
        try {
          sheet.cssRules;
        } catch (err) {
          continue;
        }
        editableSheet = sheet;
        break;
      }
      return editableSheet != null ? editableSheet : createStyleSheet();
    }
    function createStyleSheet() {
      const style = document.createElement("style");
      document.head.appendChild(style);
      return style.sheet;
    }
    function redraw() {
      if (self2.config.noCalendar || self2.isMobile)
        return;
      buildMonthSwitch();
      updateNavigationCurrentMonth();
      buildDays();
    }
    function focusAndClose() {
      self2._input.focus();
      if (window.navigator.userAgent.indexOf("MSIE") !== -1 || navigator.msMaxTouchPoints !== void 0) {
        setTimeout(self2.close, 0);
      } else {
        self2.close();
      }
    }
    function selectDate(e) {
      e.preventDefault();
      e.stopPropagation();
      const isSelectable = (day) => day.classList && day.classList.contains("flatpickr-day") && !day.classList.contains("flatpickr-disabled") && !day.classList.contains("notAllowed");
      const t = findParent(getEventTarget(e), isSelectable);
      if (t === void 0)
        return;
      const target = t;
      const selectedDate = self2.latestSelectedDateObj = new Date(target.dateObj.getTime());
      const shouldChangeMonth = (selectedDate.getMonth() < self2.currentMonth || selectedDate.getMonth() > self2.currentMonth + self2.config.showMonths - 1) && self2.config.mode !== "range";
      self2.selectedDateElem = target;
      if (self2.config.mode === "single")
        self2.selectedDates = [selectedDate];
      else if (self2.config.mode === "multiple") {
        const selectedIndex = isDateSelected(selectedDate);
        if (selectedIndex)
          self2.selectedDates.splice(parseInt(selectedIndex), 1);
        else
          self2.selectedDates.push(selectedDate);
      } else if (self2.config.mode === "range") {
        if (self2.selectedDates.length === 2) {
          self2.clear(false, false);
        }
        self2.latestSelectedDateObj = selectedDate;
        self2.selectedDates.push(selectedDate);
        if (compareDates(selectedDate, self2.selectedDates[0], true) !== 0)
          self2.selectedDates.sort((a, b) => a.getTime() - b.getTime());
      }
      setHoursFromInputs();
      if (shouldChangeMonth) {
        const isNewYear = self2.currentYear !== selectedDate.getFullYear();
        self2.currentYear = selectedDate.getFullYear();
        self2.currentMonth = selectedDate.getMonth();
        if (isNewYear) {
          triggerEvent("onYearChange");
          buildMonthSwitch();
        }
        triggerEvent("onMonthChange");
      }
      updateNavigationCurrentMonth();
      buildDays();
      updateValue();
      if (!shouldChangeMonth && self2.config.mode !== "range" && self2.config.showMonths === 1)
        focusOnDayElem(target);
      else if (self2.selectedDateElem !== void 0 && self2.hourElement === void 0) {
        self2.selectedDateElem && self2.selectedDateElem.focus();
      }
      if (self2.hourElement !== void 0)
        self2.hourElement !== void 0 && self2.hourElement.focus();
      if (self2.config.closeOnSelect) {
        const single = self2.config.mode === "single" && !self2.config.enableTime;
        const range2 = self2.config.mode === "range" && self2.selectedDates.length === 2 && !self2.config.enableTime;
        if (single || range2) {
          focusAndClose();
        }
      }
      triggerChange();
    }
    const CALLBACKS = {
      locale: [setupLocale, updateWeekdays],
      showMonths: [buildMonths, setCalendarWidth, buildWeekdays],
      minDate: [jumpToDate],
      maxDate: [jumpToDate],
      clickOpens: [
        () => {
          if (self2.config.clickOpens === true) {
            bind(self2._input, "focus", self2.open);
            bind(self2._input, "click", self2.open);
          } else {
            self2._input.removeEventListener("focus", self2.open);
            self2._input.removeEventListener("click", self2.open);
          }
        }
      ]
    };
    function set(option, value) {
      if (option !== null && typeof option === "object") {
        Object.assign(self2.config, option);
        for (const key in option) {
          if (CALLBACKS[key] !== void 0)
            CALLBACKS[key].forEach((x) => x());
        }
      } else {
        self2.config[option] = value;
        if (CALLBACKS[option] !== void 0)
          CALLBACKS[option].forEach((x) => x());
        else if (HOOKS.indexOf(option) > -1)
          self2.config[option] = arrayify(value);
      }
      self2.redraw();
      updateValue(true);
    }
    function setSelectedDate(inputDate, format) {
      let dates = [];
      if (inputDate instanceof Array)
        dates = inputDate.map((d) => self2.parseDate(d, format));
      else if (inputDate instanceof Date || typeof inputDate === "number")
        dates = [self2.parseDate(inputDate, format)];
      else if (typeof inputDate === "string") {
        switch (self2.config.mode) {
          case "single":
          case "time":
            dates = [self2.parseDate(inputDate, format)];
            break;
          case "multiple":
            dates = inputDate.split(self2.config.conjunction).map((date) => self2.parseDate(date, format));
            break;
          case "range":
            dates = inputDate.split(self2.l10n.rangeSeparator).map((date) => self2.parseDate(date, format));
            break;
          default:
            break;
        }
      } else
        self2.config.errorHandler(new Error(`Invalid date supplied: ${JSON.stringify(inputDate)}`));
      self2.selectedDates = self2.config.allowInvalidPreload ? dates : dates.filter((d) => d instanceof Date && isEnabled(d, false));
      if (self2.config.mode === "range")
        self2.selectedDates.sort((a, b) => a.getTime() - b.getTime());
    }
    function setDate(date, triggerChange2 = false, format = self2.config.dateFormat) {
      if (date !== 0 && !date || date instanceof Array && date.length === 0)
        return self2.clear(triggerChange2);
      setSelectedDate(date, format);
      self2.latestSelectedDateObj = self2.selectedDates[self2.selectedDates.length - 1];
      self2.redraw();
      jumpToDate(void 0, triggerChange2);
      setHoursFromDate();
      if (self2.selectedDates.length === 0) {
        self2.clear(false);
      }
      updateValue(triggerChange2);
      if (triggerChange2)
        triggerEvent("onChange");
    }
    function parseDateRules(arr) {
      return arr.slice().map((rule) => {
        if (typeof rule === "string" || typeof rule === "number" || rule instanceof Date) {
          return self2.parseDate(rule, void 0, true);
        } else if (rule && typeof rule === "object" && rule.from && rule.to)
          return {
            from: self2.parseDate(rule.from, void 0),
            to: self2.parseDate(rule.to, void 0)
          };
        return rule;
      }).filter((x) => x);
    }
    function setupDates() {
      self2.selectedDates = [];
      self2.now = self2.parseDate(self2.config.now) || new Date();
      const preloadedDate = self2.config.defaultDate || ((self2.input.nodeName === "INPUT" || self2.input.nodeName === "TEXTAREA") && self2.input.placeholder && self2.input.value === self2.input.placeholder ? null : self2.input.value);
      if (preloadedDate)
        setSelectedDate(preloadedDate, self2.config.dateFormat);
      self2._initialDate = self2.selectedDates.length > 0 ? self2.selectedDates[0] : self2.config.minDate && self2.config.minDate.getTime() > self2.now.getTime() ? self2.config.minDate : self2.config.maxDate && self2.config.maxDate.getTime() < self2.now.getTime() ? self2.config.maxDate : self2.now;
      self2.currentYear = self2._initialDate.getFullYear();
      self2.currentMonth = self2._initialDate.getMonth();
      if (self2.selectedDates.length > 0)
        self2.latestSelectedDateObj = self2.selectedDates[0];
      if (self2.config.minTime !== void 0)
        self2.config.minTime = self2.parseDate(self2.config.minTime, "H:i");
      if (self2.config.maxTime !== void 0)
        self2.config.maxTime = self2.parseDate(self2.config.maxTime, "H:i");
      self2.minDateHasTime = !!self2.config.minDate && (self2.config.minDate.getHours() > 0 || self2.config.minDate.getMinutes() > 0 || self2.config.minDate.getSeconds() > 0);
      self2.maxDateHasTime = !!self2.config.maxDate && (self2.config.maxDate.getHours() > 0 || self2.config.maxDate.getMinutes() > 0 || self2.config.maxDate.getSeconds() > 0);
    }
    function setupInputs() {
      self2.input = getInputElem();
      if (!self2.input) {
        self2.config.errorHandler(new Error("Invalid input element specified"));
        return;
      }
      self2.input._type = self2.input.type;
      self2.input.type = "text";
      self2.input.classList.add("flatpickr-input");
      self2._input = self2.input;
      if (self2.config.altInput) {
        self2.altInput = createElement(self2.input.nodeName, self2.config.altInputClass);
        self2._input = self2.altInput;
        self2.altInput.placeholder = self2.input.placeholder;
        self2.altInput.disabled = self2.input.disabled;
        self2.altInput.required = self2.input.required;
        self2.altInput.tabIndex = self2.input.tabIndex;
        self2.altInput.type = "text";
        self2.input.setAttribute("type", "hidden");
        if (!self2.config.static && self2.input.parentNode)
          self2.input.parentNode.insertBefore(self2.altInput, self2.input.nextSibling);
      }
      if (!self2.config.allowInput)
        self2._input.setAttribute("readonly", "readonly");
      self2._positionElement = self2.config.positionElement || self2._input;
    }
    function setupMobile() {
      const inputType = self2.config.enableTime ? self2.config.noCalendar ? "time" : "datetime-local" : "date";
      self2.mobileInput = createElement("input", self2.input.className + " flatpickr-mobile");
      self2.mobileInput.tabIndex = 1;
      self2.mobileInput.type = inputType;
      self2.mobileInput.disabled = self2.input.disabled;
      self2.mobileInput.required = self2.input.required;
      self2.mobileInput.placeholder = self2.input.placeholder;
      self2.mobileFormatStr = inputType === "datetime-local" ? "Y-m-d\\TH:i:S" : inputType === "date" ? "Y-m-d" : "H:i:S";
      if (self2.selectedDates.length > 0) {
        self2.mobileInput.defaultValue = self2.mobileInput.value = self2.formatDate(self2.selectedDates[0], self2.mobileFormatStr);
      }
      if (self2.config.minDate)
        self2.mobileInput.min = self2.formatDate(self2.config.minDate, "Y-m-d");
      if (self2.config.maxDate)
        self2.mobileInput.max = self2.formatDate(self2.config.maxDate, "Y-m-d");
      if (self2.input.getAttribute("step"))
        self2.mobileInput.step = String(self2.input.getAttribute("step"));
      self2.input.type = "hidden";
      if (self2.altInput !== void 0)
        self2.altInput.type = "hidden";
      try {
        if (self2.input.parentNode)
          self2.input.parentNode.insertBefore(self2.mobileInput, self2.input.nextSibling);
      } catch (_a) {
      }
      bind(self2.mobileInput, "change", (e) => {
        self2.setDate(getEventTarget(e).value, false, self2.mobileFormatStr);
        triggerEvent("onChange");
        triggerEvent("onClose");
      });
    }
    function toggle(e) {
      if (self2.isOpen === true)
        return self2.close();
      self2.open(e);
    }
    function triggerEvent(event2, data) {
      if (self2.config === void 0)
        return;
      const hooks = self2.config[event2];
      if (hooks !== void 0 && hooks.length > 0) {
        for (let i2 = 0; hooks[i2] && i2 < hooks.length; i2++)
          hooks[i2](self2.selectedDates, self2.input.value, self2, data);
      }
      if (event2 === "onChange") {
        self2.input.dispatchEvent(createEvent("change"));
        self2.input.dispatchEvent(createEvent("input"));
      }
    }
    function createEvent(name2) {
      const e = document.createEvent("Event");
      e.initEvent(name2, true, true);
      return e;
    }
    function isDateSelected(date) {
      for (let i2 = 0; i2 < self2.selectedDates.length; i2++) {
        if (compareDates(self2.selectedDates[i2], date) === 0)
          return "" + i2;
      }
      return false;
    }
    function isDateInRange(date) {
      if (self2.config.mode !== "range" || self2.selectedDates.length < 2)
        return false;
      return compareDates(date, self2.selectedDates[0]) >= 0 && compareDates(date, self2.selectedDates[1]) <= 0;
    }
    function updateNavigationCurrentMonth() {
      if (self2.config.noCalendar || self2.isMobile || !self2.monthNav)
        return;
      self2.yearElements.forEach((yearElement, i2) => {
        const d = new Date(self2.currentYear, self2.currentMonth, 1);
        d.setMonth(self2.currentMonth + i2);
        if (self2.config.showMonths > 1 || self2.config.monthSelectorType === "static") {
          self2.monthElements[i2].textContent = monthToStr(d.getMonth(), self2.config.shorthandCurrentMonth, self2.l10n) + " ";
        } else {
          self2.monthsDropdownContainer.value = d.getMonth().toString();
        }
        yearElement.value = d.getFullYear().toString();
      });
      self2._hidePrevMonthArrow = self2.config.minDate !== void 0 && (self2.currentYear === self2.config.minDate.getFullYear() ? self2.currentMonth <= self2.config.minDate.getMonth() : self2.currentYear < self2.config.minDate.getFullYear());
      self2._hideNextMonthArrow = self2.config.maxDate !== void 0 && (self2.currentYear === self2.config.maxDate.getFullYear() ? self2.currentMonth + 1 > self2.config.maxDate.getMonth() : self2.currentYear > self2.config.maxDate.getFullYear());
    }
    function getDateStr(format) {
      return self2.selectedDates.map((dObj) => self2.formatDate(dObj, format)).filter((d, i2, arr) => self2.config.mode !== "range" || self2.config.enableTime || arr.indexOf(d) === i2).join(self2.config.mode !== "range" ? self2.config.conjunction : self2.l10n.rangeSeparator);
    }
    function updateValue(triggerChange2 = true) {
      if (self2.mobileInput !== void 0 && self2.mobileFormatStr) {
        self2.mobileInput.value = self2.latestSelectedDateObj !== void 0 ? self2.formatDate(self2.latestSelectedDateObj, self2.mobileFormatStr) : "";
      }
      self2.input.value = getDateStr(self2.config.dateFormat);
      if (self2.altInput !== void 0) {
        self2.altInput.value = getDateStr(self2.config.altFormat);
      }
      if (triggerChange2 !== false)
        triggerEvent("onValueUpdate");
    }
    function onMonthNavClick(e) {
      const eventTarget = getEventTarget(e);
      const isPrevMonth = self2.prevMonthNav.contains(eventTarget);
      const isNextMonth = self2.nextMonthNav.contains(eventTarget);
      if (isPrevMonth || isNextMonth) {
        changeMonth(isPrevMonth ? -1 : 1);
      } else if (self2.yearElements.indexOf(eventTarget) >= 0) {
        eventTarget.select();
      } else if (eventTarget.classList.contains("arrowUp")) {
        self2.changeYear(self2.currentYear + 1);
      } else if (eventTarget.classList.contains("arrowDown")) {
        self2.changeYear(self2.currentYear - 1);
      }
    }
    function timeWrapper(e) {
      e.preventDefault();
      const isKeyDown = e.type === "keydown", eventTarget = getEventTarget(e), input = eventTarget;
      if (self2.amPM !== void 0 && eventTarget === self2.amPM) {
        self2.amPM.textContent = self2.l10n.amPM[int(self2.amPM.textContent === self2.l10n.amPM[0])];
      }
      const min = parseFloat(input.getAttribute("min")), max = parseFloat(input.getAttribute("max")), step = parseFloat(input.getAttribute("step")), curValue = parseInt(input.value, 10), delta = e.delta || (isKeyDown ? e.which === 38 ? 1 : -1 : 0);
      let newValue = curValue + step * delta;
      if (typeof input.value !== "undefined" && input.value.length === 2) {
        const isHourElem = input === self2.hourElement, isMinuteElem = input === self2.minuteElement;
        if (newValue < min) {
          newValue = max + newValue + int(!isHourElem) + (int(isHourElem) && int(!self2.amPM));
          if (isMinuteElem)
            incrementNumInput(void 0, -1, self2.hourElement);
        } else if (newValue > max) {
          newValue = input === self2.hourElement ? newValue - max - int(!self2.amPM) : min;
          if (isMinuteElem)
            incrementNumInput(void 0, 1, self2.hourElement);
        }
        if (self2.amPM && isHourElem && (step === 1 ? newValue + curValue === 23 : Math.abs(newValue - curValue) > step)) {
          self2.amPM.textContent = self2.l10n.amPM[int(self2.amPM.textContent === self2.l10n.amPM[0])];
        }
        input.value = pad(newValue);
      }
    }
    init3();
    return self2;
  }
  function _flatpickr(nodeList, config) {
    const nodes = Array.prototype.slice.call(nodeList).filter((x) => x instanceof HTMLElement);
    const instances = [];
    for (let i2 = 0; i2 < nodes.length; i2++) {
      const node = nodes[i2];
      try {
        if (node.getAttribute("data-fp-omit") !== null)
          continue;
        if (node._flatpickr !== void 0) {
          node._flatpickr.destroy();
          node._flatpickr = void 0;
        }
        node._flatpickr = FlatpickrInstance(node, config || {});
        instances.push(node._flatpickr);
      } catch (e) {
        console.error(e);
      }
    }
    return instances.length === 1 ? instances[0] : instances;
  }
  var DEBOUNCED_CHANGE_MS, flatpickr, esm_default;
  var init_esm = __esm({
    "node_modules/flatpickr/dist/esm/index.js"() {
      init_options();
      init_default();
      init_utils();
      init_dom();
      init_dates();
      init_formatting();
      init_polyfills();
      DEBOUNCED_CHANGE_MS = 300;
      if (typeof HTMLElement !== "undefined" && typeof HTMLCollection !== "undefined" && typeof NodeList !== "undefined") {
        HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function(config) {
          return _flatpickr(this, config);
        };
        HTMLElement.prototype.flatpickr = function(config) {
          return _flatpickr([this], config);
        };
      }
      flatpickr = function(selector, config) {
        if (typeof selector === "string") {
          return _flatpickr(window.document.querySelectorAll(selector), config);
        } else if (selector instanceof Node) {
          return _flatpickr([selector], config);
        } else {
          return _flatpickr(selector, config);
        }
      };
      flatpickr.defaultConfig = {};
      flatpickr.l10ns = {
        en: Object.assign({}, default_default),
        default: Object.assign({}, default_default)
      };
      flatpickr.localize = (l10n) => {
        flatpickr.l10ns.default = Object.assign(Object.assign({}, flatpickr.l10ns.default), l10n);
      };
      flatpickr.setDefaults = (config) => {
        flatpickr.defaultConfig = Object.assign(Object.assign({}, flatpickr.defaultConfig), config);
      };
      flatpickr.parseDate = createDateParser({});
      flatpickr.formatDate = createDateFormatter({});
      flatpickr.compareDates = compareDates;
      if (typeof jQuery !== "undefined" && typeof jQuery.fn !== "undefined") {
        jQuery.fn.flatpickr = function(config) {
          return _flatpickr(this, config);
        };
      }
      Date.prototype.fp_incr = function(days) {
        return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === "string" ? parseInt(days, 10) : days));
      };
      if (typeof window !== "undefined") {
        window.flatpickr = flatpickr;
      }
      esm_default = flatpickr;
    }
  });

  // src/controllers/cellDatePickerCtrl.js
  var import_dayjs6, fitFormat, cellDatePickerCtrl, cellDatePickerCtrl_default;
  var init_cellDatePickerCtrl = __esm({
    "src/controllers/cellDatePickerCtrl.js"() {
      init_menuButton();
      init_formula();
      init_store();
      init_esm();
      import_dayjs6 = __toModule(require_dayjs_min());
      init_format();
      init_api();
      fitFormat = (formatStr) => {
        let dateFormat = formatStr.replace(/y/g, "Y");
        dateFormat = dateFormat.replace(/d/g, "D");
        dateFormat = dateFormat.replace(/h/g, "H");
        dateFormat = dateFormat.replace(/上午\/下午/g, "A");
        dateFormat = dateFormat.replace(/上午/g, "A");
        dateFormat = dateFormat.replace(/下午/g, "A");
        dateFormat = dateFormat.replace(/AM\/PM/g, "A");
        dateFormat = dateFormat.replace(/AM/g, "A");
        dateFormat = dateFormat.replace(/PM/g, "A");
        dateFormat = dateFormat.replace(/\"/g, "");
        if (dateFormat.includes("A")) {
          dateFormat = dateFormat.replace(/H/g, "h");
        }
        return dateFormat;
      };
      cellDatePickerCtrl = {
        cellFocus: function(r2, c2, cell) {
          let row = store_default.visibledatarow[r2], row_pre = r2 == 0 ? 0 : store_default.visibledatarow[r2 - 1];
          let col = store_default.visibledatacolumn[c2], col_pre = c2 == 0 ? 0 : store_default.visibledatacolumn[c2 - 1];
          let margeset = menuButton_default.mergeborer(store_default.flowdata, r2, c2);
          let type = cell.ct.fa || "YYYY-MM-DD";
          let defaultDate = update("yyyy-MM-dd hh:mm:ss", cell.v);
          let dateFormat = fitFormat(type);
          let enableTime = false;
          let noCalendar = false;
          let enableSeconds = false;
          let time_24hr = true;
          let hasChineseTime = false;
          if (!!margeset) {
            row = margeset.row[1];
            row_pre = margeset.row[0];
            col = margeset.column[1];
            col_pre = margeset.column[0];
          }
          $(".cell-date-picker").show().css({
            width: col - col_pre + 1,
            height: row - row_pre + 1,
            left: col_pre,
            top: row_pre
          });
          if (/[上午下午]/.test(type)) {
            hasChineseTime = true;
          }
          if (/[Hhms]/.test(dateFormat)) {
            enableTime = true;
          }
          if (!/[YMD]/.test(dateFormat)) {
            noCalendar = true;
          }
          if (/s/.test(dateFormat)) {
            enableSeconds = true;
          }
          if (/A/.test(dateFormat)) {
            time_24hr = false;
          }
          const fp = esm_default("#luckysheet-input-box", {
            allowInput: false,
            noCalendar,
            enableSeconds,
            enableTime,
            dateFormat,
            time_24hr,
            defaultDate,
            onClose() {
              setTimeout(() => {
                fp.destroy();
              }, 0);
            },
            parseDate: (datestr, format) => {
              return (0, import_dayjs6.default)(datestr).toDate();
            },
            formatDate: (date, format, locale2) => {
              if (hasChineseTime) {
                return (0, import_dayjs6.default)(date).format(format).replace("AM", "\u4E0A\u5348").replace("PM", "\u4E0B\u5348");
              }
              return (0, import_dayjs6.default)(date).format(format);
            },
            onChange: function(selectedDates, dateStr) {
              let currentVal = datenum_local(new Date(selectedDates));
              $("#luckysheet-rich-text-editor").html(dateStr);
              setCellValue(r2, c2, currentVal, {isRefresh: false});
              setCellFormat(r2, c2, "ct", cell.ct);
              if (!enableTime) {
                formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
              }
            }
          });
          $("#luckysheet-input-box").click();
        }
      };
      cellDatePickerCtrl_default = cellDatePickerCtrl;
    }
  });

  // src/controllers/updateCell.js
  function luckysheetupdateCell(row_index1, col_index1, d, cover, isnotfocus) {
    if (!checkProtectionLocked(row_index1, col_index1, store_default.currentSheetIndex)) {
      $("#luckysheet-functionbox-cell").blur();
      return;
    }
    if (isEditMode() || store_default.allowEdit === false) {
      return;
    }
    if (!method_default.createHookFunction("cellEditBefore", store_default.luckysheet_select_save)) {
      return;
    }
    server_default.saveParam("mv", store_default.currentSheetIndex, {op: "enterEdit", range: store_default.luckysheet_select_save});
    if (dataVerificationCtrl_default.dataVerification != null && dataVerificationCtrl_default.dataVerification[row_index1 + "_" + col_index1] != null) {
      let dataVerificationItem = dataVerificationCtrl_default.dataVerification[row_index1 + "_" + col_index1];
      if (dataVerificationItem.type == "dropdown") {
        dataVerificationCtrl_default.dropdownListShow();
      } else if (dataVerificationItem.type == "checkbox") {
        return;
      }
    }
    let size = getColumnAndRowSize(row_index1, col_index1, d);
    let row = size.row, row_pre = size.row_pre, col = size.col, col_pre = size.col_pre, row_index = size.row_index, col_index = size.col_index;
    if ($("#luckysheet-dropCell-icon").is(":visible")) {
      $("#luckysheet-dropCell-icon").remove();
    }
    let winH = $(window).height(), winW = $(window).width();
    let container_offset = $("#" + store_default.container).offset();
    let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
    let scrollTop = $("#luckysheet-cell-main").scrollTop();
    if (pivotTable_default.isPivotRange(row_index, col_index)) {
      return;
    }
    let left = col_pre + container_offset.left + store_default.rowHeaderWidth - scrollLeft - 2;
    if (freezen_default.freezenverticaldata != null && col_index1 <= freezen_default.freezenverticaldata[1]) {
      left = col_pre + container_offset.left + store_default.rowHeaderWidth - 2;
    }
    let top = row_pre + container_offset.top + store_default.infobarHeight + store_default.toolbarHeight + store_default.calculatebarHeight + store_default.columnHeaderHeight - scrollTop - 2;
    if (freezen_default.freezenhorizontaldata != null && row_index1 <= freezen_default.freezenhorizontaldata[1]) {
      top = row_pre + container_offset.top + store_default.infobarHeight + store_default.toolbarHeight + store_default.calculatebarHeight + store_default.columnHeaderHeight - 2;
    }
    let input_postition = {
      "min-width": col - col_pre + 1 - 8,
      "min-height": row - row_pre + 1 - 4,
      "max-width": winW + scrollLeft - col_pre - 20 - store_default.rowHeaderWidth,
      "max-height": winH + scrollTop - row_pre - 20 - 15 - store_default.toolbarHeight - store_default.infobarHeight - store_default.calculatebarHeight - store_default.sheetBarHeight - store_default.statisticBarHeight,
      "left": left,
      "top": top
    };
    let inputContentScale = {
      "transform": "scale(" + store_default.zoomRatio + ")",
      "transform-origin": "left top",
      "width": 100 / store_default.zoomRatio + "%",
      "height": 100 / store_default.zoomRatio + "%"
    };
    store_default.luckysheetCellUpdate = [row_index, col_index];
    if (!isnotfocus) {
      $("#luckysheet-rich-text-editor").focus().select();
    }
    $("#luckysheet-input-box").removeAttr("style").css({
      "background-color": "rgb(255, 255, 255)",
      "padding": "0px 2px",
      "font-size": `${store_default.defaultFontSize}pt`,
      "right": "auto",
      "overflow-y": "auto",
      "box-sizing": "initial",
      "display": "flex"
    });
    if (freezen_default.freezenverticaldata != null || freezen_default.freezenhorizontaldata != null) {
      $("#luckysheet-input-box").css("z-index", 10002);
    }
    $("#luckysheet-input-box-index").html(chatatABC(col_index) + (row_index + 1)).hide();
    $("#luckysheet-wa-functionbox-cancel, #luckysheet-wa-functionbox-confirm").addClass("luckysheet-wa-calculate-active");
    let value = "", isCenter = false;
    if (d[row_index] != null && d[row_index][col_index] != null) {
      let cell = d[row_index][col_index];
      let htValue = cell["ht"];
      let leftOrigin = "left", topOrigin = "top";
      if (htValue == "0") {
        input_postition = {
          "min-width": col - col_pre + 1 - 8,
          "min-height": row - row_pre + 1 - 4,
          "max-width": winW * 2 / 3,
          "max-height": winH + scrollTop - row_pre - 20 - 15 - store_default.toolbarHeight - store_default.infobarHeight - store_default.calculatebarHeight - store_default.sheetBarHeight - store_default.statisticBarHeight,
          "left": col_pre + container_offset.left + store_default.rowHeaderWidth - scrollLeft - 2,
          "top": row_pre + container_offset.top + store_default.infobarHeight + store_default.toolbarHeight + store_default.calculatebarHeight + store_default.columnHeaderHeight - scrollTop - 2
        };
        if (store_default.zoomRatio < 1) {
          leftOrigin = "center";
        }
        isCenter = true;
      } else if (htValue == "2") {
        input_postition = {
          "min-width": col - col_pre + 1 - 8,
          "min-height": row - row_pre + 1 - 4,
          "max-width": col + container_offset.left - scrollLeft - 8,
          "max-height": winH + scrollTop - row_pre - 20 - 15 - store_default.toolbarHeight - store_default.infobarHeight - store_default.calculatebarHeight - store_default.sheetBarHeight - store_default.statisticBarHeight,
          "right": winW - (container_offset.left + (store_default.rowHeaderWidth - 1) - scrollLeft) - col,
          "top": row_pre + container_offset.top + store_default.infobarHeight + store_default.toolbarHeight + store_default.calculatebarHeight + store_default.columnHeaderHeight - scrollTop - 2
        };
        if (store_default.zoomRatio < 1) {
          leftOrigin = "right";
        }
      }
      if (cell["vt"] == "0") {
        topOrigin = "center";
      } else if (cell["vt"] == "2") {
        topOrigin = "bottom";
      }
      inputContentScale["transform-origin"] = leftOrigin + " " + topOrigin;
      if (!cover) {
        if (isInlineStringCell(cell)) {
          value = getInlineStringStyle(row_index, col_index, d);
        } else if (cell.f != null) {
          value = getcellvalue(row_index, col_index, d, "f");
        } else {
          value = valueShowEs(row_index, col_index, d);
          if (cell.qp == "1") {
            value = value ? "" + value : value;
          }
        }
      }
      let style = menuButton_default.getStyleByCell(d, row_index, col_index);
      style = $("#luckysheet-input-box").get(0).style.cssText + style;
      $("#luckysheet-input-box").get(0).style.cssText = style;
      if ($("#luckysheet-input-box").get(0).style.backgroundColor == "rgba(0, 0, 0, 0)") {
        $("#luckysheet-input-box").get(0).style.background = "rgb(255,255,255)";
      }
    } else {
      let af_compute = alternateformat_default.getComputeMap();
      var checksAF = alternateformat_default.checksAF(row_index, col_index, af_compute);
      var cf_compute = conditionformat_default.getComputeMap();
      var checksCF = conditionformat_default.checksCF(row_index, col_index, cf_compute);
      if (checksCF != null && checksCF["cellColor"] != null) {
        $("#luckysheet-input-box").get(0).style.background = checksCF["cellColor"];
      } else if (checksAF != null) {
        $("#luckysheet-input-box").get(0).style.background = checksAF[1];
      }
    }
    if (input_postition["min-height"] > input_postition["max-height"]) {
      input_postition["min-height"] = input_postition["max-height"];
    }
    if (input_postition["min-width"] > input_postition["max-width"]) {
      input_postition["min-width"] = input_postition["max-width"];
    }
    value = formula_default.xssDeal(value);
    if (!checkProtectionCellHidden(row_index, col_index, store_default.currentSheetIndex) && value.length > 0 && value.substr(0, 63) == '<span dir="auto" class="luckysheet-formula-text-color">=</span>') {
      $("#luckysheet-rich-text-editor").html("");
    } else {
      value = formula_default.ltGtSignDeal(value);
      $("#luckysheet-rich-text-editor").html(value);
      if (!isnotfocus) {
        luckysheetRangeLast($("#luckysheet-rich-text-editor")[0]);
      }
    }
    if (isCenter) {
      let width = $("#luckysheet-input-box").width();
      if (width > input_postition["max-width"]) {
        width = input_postition["max-width"];
      }
      if (width < input_postition["min-width"]) {
        width = input_postition["min-width"];
      }
      let newLeft = input_postition["left"] - width / 2 + (col - col_pre) / 2;
      if (newLeft < 2) {
        newLeft = 2;
      }
      input_postition["left"] = newLeft - 2;
    }
    $("#luckysheet-input-box").css(input_postition);
    $("#luckysheet-rich-text-editor").css(inputContentScale);
    if (d[row_index1][col_index1] && d[row_index1][col_index1].ct && d[row_index1][col_index1].ct.t == "d") {
      cellDatePickerCtrl_default.cellFocus(row_index1, col_index1, d[row_index1][col_index1]);
    }
    formula_default.rangetosheet = store_default.currentSheetIndex;
    formula_default.createRangeHightlight();
    formula_default.rangeResizeTo = $("#luckysheet-rich-text-editor");
    cleargridelement();
  }
  function setCenterInputPosition(row_index, col_index, d) {
    if (row_index == null || col_index == null) {
      return;
    }
    let cell = d[row_index][col_index];
    if (cell == null) {
      return;
    }
    let htValue = cell["ht"];
    if (cell != null && htValue != "0") {
      return;
    }
    let size = getColumnAndRowSize(row_index, col_index, d);
    let row = size.row, row_pre = size.row_pre, col = size.col, col_pre = size.col_pre;
    let winH = $(window).height(), winW = $(window).width();
    let container_offset = $("#" + store_default.container).offset();
    let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
    let scrollTop = $("#luckysheet-cell-main").scrollTop();
    let input_postition = {
      "min-width": col - col_pre + 1 - 8,
      "max-width": winW * 2 / 3,
      "left": col_pre + container_offset.left + store_default.rowHeaderWidth - scrollLeft - 2
    };
    let width = $("#luckysheet-input-box").width();
    if (width > input_postition["max-width"]) {
      width = input_postition["max-width"];
    }
    if (width < input_postition["min-width"]) {
      width = input_postition["min-width"];
    }
    let newLeft = input_postition["left"] - width / 2 + (col - col_pre) / 2;
    if (newLeft < 2) {
      newLeft = 2;
    }
    input_postition["left"] = newLeft - 2;
    $("#luckysheet-input-box").css(input_postition);
  }
  function getColumnAndRowSize(row_index, col_index, d) {
    let row = store_default.visibledatarow[row_index], row_pre = row_index - 1 == -1 ? 0 : store_default.visibledatarow[row_index - 1];
    let col = store_default.visibledatacolumn[col_index], col_pre = col_index - 1 == -1 ? 0 : store_default.visibledatacolumn[col_index - 1];
    if (d == null) {
      d = store_default.flowdata;
    }
    let margeset = menuButton_default.mergeborer(d, row_index, col_index);
    if (!!margeset) {
      row = margeset.row[1];
      row_pre = margeset.row[0];
      row_index = margeset.row[2];
      col = margeset.column[1];
      col_pre = margeset.column[0];
      col_index = margeset.column[2];
    }
    return {
      row,
      row_pre,
      row_index,
      col,
      col_pre,
      col_index
    };
  }
  var init_updateCell = __esm({
    "src/controllers/updateCell.js"() {
      init_pivotTable();
      init_freezen();
      init_menuButton();
      init_conditionformat();
      init_alternateformat();
      init_cellDatePickerCtrl();
      init_dataVerificationCtrl();
      init_protection();
      init_util();
      init_validate();
      init_getdata();
      init_format();
      init_formula();
      init_cursorPos();
      init_cleargridelement();
      init_inlineString();
      init_store();
      init_server();
      init_method();
    }
  });

  // src/global/api.js
  var api_exports = {};
  __export(api_exports, {
    cancelFrozen: () => cancelFrozen,
    cancelRangeMerge: () => cancelRangeMerge,
    changLang: () => changLang,
    checkTheStatusOfTheSelectedCells: () => checkTheStatusOfTheSelectedCells,
    clearCell: () => clearCell,
    clearRange: () => clearRange,
    closeWebsocket: () => closeWebsocket,
    deleteCell: () => deleteCell,
    deleteColumn: () => deleteColumn,
    deleteDataVerification: () => deleteDataVerification,
    deleteImage: () => deleteImage,
    deleteRange: () => deleteRange,
    deleteRangeConditionalFormat: () => deleteRangeConditionalFormat,
    deleteRow: () => deleteRow,
    deleteRowOrColumn: () => deleteRowOrColumn,
    enterEditMode: () => enterEditMode,
    exitEditMode: () => exitEditMode,
    find: () => find,
    frozenColumnRange: () => frozenColumnRange,
    frozenFirstColumn: () => frozenFirstColumn,
    frozenFirstRow: () => frozenFirstRow,
    frozenRowRange: () => frozenRowRange,
    getAllSheets: () => getAllSheets,
    getCellValue: () => getCellValue,
    getColumnWidth: () => getColumnWidth,
    getConfig: () => getConfig,
    getDefaultColWidth: () => getDefaultColWidth,
    getDefaultRowHeight: () => getDefaultRowHeight,
    getImageOption: () => getImageOption,
    getLuckysheetfile: () => getLuckysheetfile,
    getRange: () => getRange,
    getRangeArray: () => getRangeArray,
    getRangeAxis: () => getRangeAxis,
    getRangeBoolean: () => getRangeBoolean,
    getRangeByTxt: () => getRangeByTxt,
    getRangeDiagonal: () => getRangeDiagonal,
    getRangeHtml: () => getRangeHtml,
    getRangeJson: () => getRangeJson,
    getRangeValue: () => getRangeValue,
    getRangeValuesWithFlatte: () => getRangeValuesWithFlatte,
    getRangeWithFlatten: () => getRangeWithFlatten,
    getRowHeight: () => getRowHeight,
    getScreenshot: () => getScreenshot,
    getSheet: () => getSheet,
    getSheetData: () => getSheetData,
    getTxtByRange: () => getTxtByRange,
    getWorkbookName: () => getWorkbookName,
    hideColumn: () => hideColumn,
    hideGridLines: () => hideGridLines,
    hideRow: () => hideRow,
    hideRowOrColumn: () => hideRowOrColumn,
    insertColumn: () => insertColumn,
    insertColumnRight: () => insertColumnRight,
    insertImage: () => insertImage,
    insertRow: () => insertRow,
    insertRowBottom: () => insertRowBottom,
    insertRowBottomOrColumnRight: () => insertRowBottomOrColumnRight,
    insertRowOrColumn: () => insertRowOrColumn,
    matrixCalculation: () => matrixCalculation,
    matrixOperation: () => matrixOperation,
    pagerInit: () => pagerInit,
    redo: () => redo,
    refresh: () => refresh,
    refreshFormula: () => refreshFormula,
    refreshMenuButtonFocus: () => refreshMenuButtonFocus,
    replace: () => replace,
    resize: () => resize,
    scroll: () => scroll,
    setBothFrozen: () => setBothFrozen,
    setCellFormat: () => setCellFormat,
    setCellValue: () => setCellValue,
    setColumnWidth: () => setColumnWidth,
    setConfig: () => setConfig,
    setDataVerification: () => setDataVerification,
    setHorizontalFrozen: () => setHorizontalFrozen,
    setRangeConditionalFormat: () => setRangeConditionalFormat,
    setRangeConditionalFormatDefault: () => setRangeConditionalFormatDefault,
    setRangeFilter: () => setRangeFilter,
    setRangeFormat: () => setRangeFormat,
    setRangeMerge: () => setRangeMerge,
    setRangeShow: () => setRangeShow,
    setRangeSort: () => setRangeSort,
    setRangeSortMulti: () => setRangeSortMulti,
    setRangeValue: () => setRangeValue,
    setRowHeight: () => setRowHeight,
    setSheetActive: () => setSheetActive,
    setSheetAdd: () => setSheetAdd,
    setSheetColor: () => setSheetColor,
    setSheetCopy: () => setSheetCopy,
    setSheetDelete: () => setSheetDelete,
    setSheetHide: () => setSheetHide,
    setSheetMove: () => setSheetMove,
    setSheetName: () => setSheetName,
    setSheetOrder: () => setSheetOrder,
    setSheetShow: () => setSheetShow,
    setSheetZoom: () => setSheetZoom,
    setSingleRangeFormat: () => setSingleRangeFormat,
    setVerticalFrozen: () => setVerticalFrozen,
    setWorkbookName: () => setWorkbookName,
    showColumn: () => showColumn,
    showGridLines: () => showGridLines,
    showRow: () => showRow,
    showRowOrColumn: () => showRowOrColumn,
    toJson: () => toJson,
    transToCellData: () => transToCellData,
    transToData: () => transToData,
    undo: () => undo,
    updataSheet: () => updataSheet
  });
  function getCellValue(row, column, options = {}) {
    if (!isRealNum(row) || !isRealNum(column)) {
      return tooltip_default.info("Arguments row or column cannot be null or undefined.", "");
    }
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      type = "v",
      order = curSheetOrder
    } = __spreadValues({}, options);
    let targetSheetData = store_default.luckysheetfile[order].data;
    let cellData = targetSheetData[row][column];
    let return_v;
    if (getObjType(cellData) == "object") {
      return_v = cellData[type];
      if (type == "f" && return_v != null) {
        return_v = formula_default.functionHTMLGenerate(return_v);
      } else if (type == "f") {
        return_v = cellData["v"];
      } else if (cellData && cellData.ct) {
        if (cellData.ct.fa == "yyyy-MM-dd") {
          return_v = cellData.m;
        } else if (cellData.ct.hasOwnProperty("t") && cellData.ct.t === "inlineStr") {
          let inlineStrValueArr = cellData.ct.s;
          if (inlineStrValueArr) {
            return_v = inlineStrValueArr.map((i2) => i2.v).join("");
          }
        }
      }
    }
    if (return_v == void 0) {
      return_v = null;
    }
    return return_v;
  }
  function setCellValue(row, column, value, options = {}) {
    let curv = store_default.flowdata[row][column];
    const oldValue = JSON.stringify(curv);
    if (!isRealNum(row) || !isRealNum(column)) {
      return tooltip_default.info("The row or column parameter is invalid.", "");
    }
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      isRefresh = true,
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    if (!method_default.createHookFunction("cellUpdateBefore", row, column, value, isRefresh)) {
      return;
    }
    let data = file.data;
    if (isRefresh) {
      data = $.extend(true, [], file.data);
    }
    if (data.length == 0) {
      data = sheetmanage_default.buildGridData(file);
    }
    let formatList = {
      bg: 1,
      ff: 1,
      fc: 1,
      bl: 1,
      it: 1,
      fs: 1,
      cl: 1,
      un: 1,
      vt: 1,
      ht: 1,
      mc: 1,
      tr: 1,
      tb: 1,
      rt: 1,
      qp: 1
    };
    if (value == null || value.toString().length == 0) {
      formula_default.delFunctionGroup(row, column);
      setcellvalue(row, column, data, value);
    } else if (value instanceof Object) {
      let curv2 = {};
      if (isRealNull(data[row][column])) {
        data[row][column] = {};
      }
      let cell = data[row][column];
      if (value.f != null && value.v == null) {
        curv2.f = value.f;
        if (value.ct != null) {
          curv2.ct = value.ct;
        }
        data = formula_default.updatecell(row, column, curv2, false).data;
      } else {
        if (value.ct != null) {
          curv2.ct = value.ct;
        }
        if (value.f != null) {
          curv2.f = value.f;
        }
        if (value.v != null) {
          curv2.v = value.v;
        } else {
          curv2.v = cell.v;
        }
        if (value.m != null) {
          curv2.m = value.m;
        }
        formula_default.delFunctionGroup(row, column);
        setcellvalue(row, column, data, curv2);
      }
      for (let attr in value) {
        let v = value[attr];
        if (attr in formatList) {
          menuButton_default.updateFormatCell(data, attr, v, row, row, column, column);
        } else {
          cell[attr] = v;
        }
      }
      data[row][column] = cell;
    } else {
      if (value.toString().substr(0, 1) == "=" || value.toString().substr(0, 5) == "<span") {
        data = formula_default.updatecell(row, column, value, false).data;
      } else {
        formula_default.delFunctionGroup(row, column);
        setcellvalue(row, column, data, value);
      }
    }
    setTimeout(() => {
      method_default.createHookFunction("cellUpdated", row, column, JSON.parse(oldValue), store_default.flowdata[row][column], isRefresh);
    }, 0);
    if (file.index == store_default.currentSheetIndex && isRefresh) {
      jfrefreshgrid(data, [{"row": [row, row], "column": [column, column]}]);
    } else {
      file.data = data;
    }
    if (success && typeof success === "function") {
      success(data);
    }
  }
  function clearCell(row, column, options = {}) {
    if (!isRealNum(row) || !isRealNum(column)) {
      return tooltip_default.info("Arguments row and column cannot be null or undefined.", "");
    }
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    let targetSheetData = $.extend(true, [], store_default.luckysheetfile[order].data);
    let cell = targetSheetData[row][column];
    if (getObjType(cell) == "object") {
      delete cell["m"];
      delete cell["v"];
      if (cell["f"] != null) {
        delete cell["f"];
        formula_default.delFunctionGroup(row, column, order);
        delete cell["spl"];
      }
    } else {
      cell = null;
    }
    if (order === curSheetOrder) {
      jfrefreshgrid(targetSheetData, [{
        row: [row, row],
        column: [column, column]
      }]);
    } else {
      store_default.luckysheetfile[order].data = targetSheetData;
    }
    if (success && typeof success === "function") {
      success(cell);
    }
  }
  function deleteCell(move, row, column, options = {}) {
    let moveTypes = ["left", "up"];
    if (!move || moveTypes.indexOf(move) < 0) {
      return tooltip_default.info("Arguments move cannot be null or undefined and its value must be 'left' or 'up'", "");
    }
    if (!isRealNum(row) || !isRealNum(column)) {
      return tooltip_default.info("Arguments row and column cannot be null or undefined.", "");
    }
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    let moveType = "move" + move.replace(move[0], move[0].toUpperCase());
    let sheetIndex;
    if (order) {
      if (store_default.luckysheetfile[order]) {
        sheetIndex = store_default.luckysheetfile[order].index;
      }
    }
    luckysheetDeleteCell(moveType, row, row, column, column, sheetIndex);
    if (success && typeof success === "function") {
      success();
    }
  }
  function setCellFormat(row, column, attr, value, options = {}) {
    if (!isRealNum(row) || !isRealNum(column)) {
      return tooltip_default.info("Arguments row or column cannot be null or undefined.", "");
    }
    if (!attr) {
      return tooltip_default.info("Arguments attr cannot be null or undefined.", "");
    }
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let targetSheetData = $.extend(true, [], file.data);
    if (targetSheetData.length == 0) {
      targetSheetData = sheetmanage_default.buildGridData(file);
    }
    let cellData = targetSheetData[row][column] || {};
    let cfg = $.extend(true, {}, file.config);
    if (attr == "ct" && (!value || !value.hasOwnProperty("fa") || !value.hasOwnProperty("t"))) {
      return new TypeError("While set attribute 'ct' to cell, the value must have property 'fa' and 't'");
    }
    if (attr == "bd") {
      if (cfg["borderInfo"] == null) {
        cfg["borderInfo"] = [];
      }
      let borderInfo = __spreadValues({
        rangeType: "range",
        borderType: "border-all",
        color: "#000",
        style: "1",
        range: [{
          column: [column, column],
          row: [row, row]
        }]
      }, value);
      cfg["borderInfo"].push(borderInfo);
    } else {
      cellData[attr] = value;
    }
    targetSheetData[row][column] = cellData;
    if (file.index == store_default.currentSheetIndex) {
      file.config = cfg;
      store_default.config = cfg;
      jfrefreshgrid(targetSheetData, [{"row": [row, row], "column": [column, column]}]);
    } else {
      file.config = cfg;
      file.data = targetSheetData;
    }
    if (success && typeof success === "function") {
      success(cellData);
    }
  }
  function find(content, options = {}) {
    if (!content && content != 0) {
      return tooltip_default.info("Search content cannot be null or empty", "");
    }
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      isRegularExpression = false,
      isWholeWord = false,
      isCaseSensitive = false,
      order = curSheetOrder,
      type = "m"
    } = __spreadValues({}, options);
    let targetSheetData = store_default.luckysheetfile[order].data;
    let result = [];
    for (let i2 = 0; i2 < targetSheetData.length; i2++) {
      const rowArr = targetSheetData[i2];
      for (let j = 0; j < rowArr.length; j++) {
        const cell = rowArr[j];
        if (!cell) {
          continue;
        }
        cell.row = i2;
        cell.column = j;
        if (isWholeWord) {
          if (isCaseSensitive) {
            if (content.toString() == cell[type]) {
              result.push(cell);
            }
          } else {
            if (cell[type] && content.toString().toLowerCase() == cell[type].toLowerCase()) {
              result.push(cell);
            }
          }
        } else if (isRegularExpression) {
          let reg;
          if (isCaseSensitive) {
            reg = new RegExp(func_methods_default.getRegExpStr(content), "g");
          } else {
            reg = new RegExp(func_methods_default.getRegExpStr(content), "ig");
          }
          if (reg.test(cell[type])) {
            result.push(cell);
          }
        } else if (isCaseSensitive) {
          let reg = new RegExp(func_methods_default.getRegExpStr(content), "g");
          if (reg.test(cell[type])) {
            result.push(cell);
          }
        } else {
          let reg = new RegExp(func_methods_default.getRegExpStr(content), "ig");
          if (reg.test(cell[type])) {
            result.push(cell);
          }
        }
      }
    }
    return result;
  }
  function replace(content, replaceContent, options = {}) {
    let matchCells = find(content, options);
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      order = curSheetOrder
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let sheetData = $.extend(true, [], file.data);
    matchCells.forEach((cell) => {
      cell.m = replaceContent;
      setCellValue(cell.row, cell.column, replaceContent, {order, isRefresh: false});
    });
    let fileData = $.extend(true, [], file.data);
    file.data.length = 0;
    file.data.push(...sheetData);
    if (file.index == store_default.currentSheetIndex) {
      jfrefreshgrid(fileData, void 0, void 0, true, false);
    }
    luckysheetrefreshgrid();
    if (options.success && typeof options.success === "function") {
      options.success(matchCells);
    }
    return matchCells;
  }
  function exitEditMode(options = {}) {
    if (parseInt($("#luckysheet-input-box").css("top")) > 0) {
      if ($("#luckysheet-formula-search-c").is(":visible") && formula_default.searchFunctionCell != null) {
        formula_default.searchFunctionEnter($("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active"));
      } else {
        formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
        store_default.luckysheet_select_save = [{
          "row": [store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[0]],
          "column": [store_default.luckysheetCellUpdate[1], store_default.luckysheetCellUpdate[1]],
          "row_focus": store_default.luckysheetCellUpdate[0],
          "column_focus": store_default.luckysheetCellUpdate[1]
        }];
      }
      if ($("#luckysheet-search-formula-parm").is(":visible")) {
        $("#luckysheet-search-formula-parm").hide();
      }
      if ($("#luckysheet-search-formula-parm-select").is(":visible")) {
        $("#luckysheet-search-formula-parm-select").hide();
      }
    }
    if (options.success && typeof options.success === "function") {
      options.success();
    }
  }
  function enterEditMode(options = {}) {
    if ($("#luckysheet-conditionformat-dialog").is(":visible")) {
      return;
    } else if ($("#luckysheet-cell-selected").is(":visible")) {
      let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
      let row_index = last["row_focus"], col_index = last["column_focus"];
      luckysheetupdateCell(row_index, col_index, store_default.flowdata);
    }
    if (options.success && typeof options.success === "function") {
      options.success();
    }
  }
  function frozenFirstRow(order) {
    freezen_default.saveFrozen("freezenRow", order);
    if (!order || order == getSheetIndex(store_default.currentSheetIndex)) {
      let freezenhorizontaldata, row_st, top;
      if (freezen_default.freezenRealFirstRowColumn) {
        let row_st2 = 0;
        top = store_default.visibledatarow[row_st2] - 2 + store_default.columnHeaderHeight;
        freezenhorizontaldata = [
          store_default.visibledatarow[row_st2],
          row_st2 + 1,
          0,
          freezen_default.cutVolumn(store_default.visibledatarow, row_st2 + 1),
          top
        ];
      } else {
        let scrollTop = $("#luckysheet-cell-main").scrollTop();
        row_st = luckysheet_searcharray(store_default.visibledatarow, scrollTop);
        if (row_st == -1) {
          row_st = 0;
        }
        top = store_default.visibledatarow[row_st] - 2 - scrollTop + store_default.columnHeaderHeight;
        freezenhorizontaldata = [
          store_default.visibledatarow[row_st],
          row_st + 1,
          scrollTop,
          freezen_default.cutVolumn(store_default.visibledatarow, row_st + 1),
          top
        ];
      }
      freezen_default.saveFreezen(freezenhorizontaldata, top, null, null);
      if (freezen_default.freezenverticaldata != null) {
        freezen_default.cancelFreezenVertical();
        freezen_default.createAssistCanvas();
        luckysheetrefreshgrid();
      }
      freezen_default.createFreezenHorizontal(freezenhorizontaldata, top);
      freezen_default.createAssistCanvas();
      luckysheetrefreshgrid();
    }
  }
  function frozenFirstColumn(order) {
    freezen_default.saveFrozen("freezenColumn", order);
    if (!order || order == getSheetIndex(store_default.currentSheetIndex)) {
      let freezenverticaldata, col_st, left;
      if (freezen_default.freezenRealFirstRowColumn) {
        col_st = 0;
        left = store_default.visibledatacolumn[col_st] - 2 + store_default.rowHeaderWidth;
        freezenverticaldata = [
          store_default.visibledatacolumn[col_st],
          col_st + 1,
          0,
          freezen_default.cutVolumn(store_default.visibledatacolumn, col_st + 1),
          left
        ];
      } else {
        let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
        col_st = luckysheet_searcharray(store_default.visibledatacolumn, scrollLeft);
        if (col_st == -1) {
          col_st = 0;
        }
        left = store_default.visibledatacolumn[col_st] - 2 - scrollLeft + store_default.rowHeaderWidth;
        freezenverticaldata = [
          store_default.visibledatacolumn[col_st],
          col_st + 1,
          scrollLeft,
          freezen_default.cutVolumn(store_default.visibledatacolumn, col_st + 1),
          left
        ];
      }
      freezen_default.saveFreezen(null, null, freezenverticaldata, left);
      if (freezen_default.freezenhorizontaldata != null) {
        freezen_default.cancelFreezenHorizontal();
        freezen_default.createAssistCanvas();
        luckysheetrefreshgrid();
      }
      freezen_default.createFreezenVertical(freezenverticaldata, left);
      freezen_default.createAssistCanvas();
      luckysheetrefreshgrid();
    }
  }
  function frozenRowRange(range2, order) {
    const locale_frozen = locale_default().freezen;
    if (!range2 || !range2.hasOwnProperty("row_focus") && !formula_default.iscelldata(range2)) {
      if (isEditMode()) {
        alert(locale_frozen.noSeletionError);
      } else {
        tooltip_default.info(locale_frozen.noSeletionError, "");
      }
      return;
    }
    if (typeof range2 === "string" && formula_default.iscelldata(range2)) {
      range2 = formula_default.getcellrange(range2);
      range2 = {
        row_focus: range2.row[0],
        column_focus: range2.column[0]
      };
    }
    freezen_default.saveFrozen("freezenRowRange", order, range2);
    if (!order || order == getSheetIndex(store_default.currentSheetIndex)) {
      let scrollTop = $("#luckysheet-cell-main").scrollTop();
      let row_st = luckysheet_searcharray(store_default.visibledatarow, scrollTop);
      let row_focus = range2.row_focus;
      if (row_focus > row_st) {
        row_st = row_focus;
      }
      if (row_st == -1) {
        row_st = 0;
      }
      let top = store_default.visibledatarow[row_st] - 2 - scrollTop + store_default.columnHeaderHeight;
      let freezenhorizontaldata = [
        store_default.visibledatarow[row_st],
        row_st + 1,
        scrollTop,
        freezen_default.cutVolumn(store_default.visibledatarow, row_st + 1),
        top
      ];
      freezen_default.saveFreezen(freezenhorizontaldata, top, null, null);
      if (freezen_default.freezenverticaldata != null) {
        freezen_default.cancelFreezenVertical();
        freezen_default.createAssistCanvas();
        luckysheetrefreshgrid();
      }
      freezen_default.createFreezenHorizontal(freezenhorizontaldata, top);
      freezen_default.createAssistCanvas();
      luckysheetrefreshgrid();
    }
  }
  function frozenColumnRange(range2, order) {
    const locale_frozen = locale_default().freezen;
    let isStringRange = typeof range2 === "string" && formula_default.iscelldata(range2);
    if (!range2 || !range2.hasOwnProperty("column_focus") && !isStringRange) {
      if (isEditMode()) {
        alert(locale_frozen.noSeletionError);
      } else {
        tooltip_default.info(locale_frozen.noSeletionError, "");
      }
      return;
    }
    if (isStringRange) {
      range2 = formula_default.getcellrange(range2);
      range2 = {
        row_focus: range2.row[0],
        column_focus: range2.column[0]
      };
    }
    freezen_default.saveFrozen("freezenColumnRange", order, range2);
    if (!order || order == getSheetIndex(store_default.currentSheetIndex)) {
      let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
      let col_st = luckysheet_searcharray(store_default.visibledatacolumn, scrollLeft);
      let column_focus = range2.column_focus;
      if (column_focus > col_st) {
        col_st = column_focus;
      }
      if (col_st == -1) {
        col_st = 0;
      }
      let left = store_default.visibledatacolumn[col_st] - 2 - scrollLeft + store_default.rowHeaderWidth;
      let freezenverticaldata = [
        store_default.visibledatacolumn[col_st],
        col_st + 1,
        scrollLeft,
        freezen_default.cutVolumn(store_default.visibledatacolumn, col_st + 1),
        left
      ];
      freezen_default.saveFreezen(null, null, freezenverticaldata, left);
      if (freezen_default.freezenhorizontaldata != null) {
        freezen_default.cancelFreezenHorizontal();
        freezen_default.createAssistCanvas();
        luckysheetrefreshgrid();
      }
      freezen_default.createFreezenVertical(freezenverticaldata, left);
      freezen_default.createAssistCanvas();
      luckysheetrefreshgrid();
    }
  }
  function cancelFrozen(order) {
    freezen_default.saveFrozen("freezenCancel", order);
    if (!order || order == getSheetIndex(store_default.currentSheetIndex)) {
      if (freezen_default.freezenverticaldata != null) {
        freezen_default.cancelFreezenVertical();
      }
      if (freezen_default.freezenhorizontaldata != null) {
        freezen_default.cancelFreezenHorizontal();
      }
      freezen_default.createAssistCanvas();
      luckysheetrefreshgrid();
    }
  }
  function setHorizontalFrozen(isRange, options = {}) {
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      range: range2,
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    cancelFrozen(order);
    if (!isRange) {
      frozenFirstRow(order);
    } else {
      frozenRowRange(range2, order);
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function setVerticalFrozen(isRange, options = {}) {
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      range: range2,
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    cancelFrozen(order);
    if (!isRange) {
      frozenFirstColumn(order);
    } else {
      frozenColumnRange(range2, order);
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function setBothFrozen(isRange, options = {}) {
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      range: range2,
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    let isCurrentSheet = !order || order == getSheetIndex(store_default.currentSheetIndex);
    const locale_frozen = locale_default().freezen;
    cancelFrozen(order);
    if (!isRange) {
      freezen_default.saveFrozen("freezenRC", order);
      if (isCurrentSheet) {
        let scrollTop = $("#luckysheet-cell-main").scrollTop();
        let row_st = luckysheet_searcharray(store_default.visibledatarow, scrollTop);
        if (row_st == -1) {
          row_st = 0;
        }
        let top = store_default.visibledatarow[row_st] - 2 - scrollTop + store_default.columnHeaderHeight;
        let freezenhorizontaldata = [
          store_default.visibledatarow[row_st],
          row_st + 1,
          scrollTop,
          freezen_default.cutVolumn(store_default.visibledatarow, row_st + 1),
          top
        ];
        freezen_default.saveFreezen(freezenhorizontaldata, top, null, null);
        freezen_default.createFreezenHorizontal(freezenhorizontaldata, top);
        let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
        let col_st = luckysheet_searcharray(store_default.visibledatacolumn, scrollLeft);
        if (col_st == -1) {
          col_st = 0;
        }
        let left = store_default.visibledatacolumn[col_st] - 2 - scrollLeft + store_default.rowHeaderWidth;
        let freezenverticaldata = [
          store_default.visibledatacolumn[col_st],
          col_st + 1,
          scrollLeft,
          freezen_default.cutVolumn(store_default.visibledatacolumn, col_st + 1),
          left
        ];
        freezen_default.saveFreezen(null, null, freezenverticaldata, left);
        freezen_default.createFreezenVertical(freezenverticaldata, left);
        freezen_default.createAssistCanvas();
        luckysheetrefreshgrid();
      }
    } else {
      freezen_default.saveFrozen("freezenRCRange", order, range2);
      let isStringRange = typeof range2 === "string" && formula_default.iscelldata(range2);
      if (isCurrentSheet) {
        if ((!range2 || !(range2.hasOwnProperty("column_focus") && range2.hasOwnProperty("row_focus"))) && !isStringRange) {
          if (isEditMode()) {
            alert(locale_frozen.noSeletionError);
          } else {
            tooltip_default.info(locale_frozen.noSeletionError, "");
          }
          return;
        }
        if (isStringRange) {
          range2 = formula_default.getcellrange(range2);
          range2 = {
            row_focus: range2.row[0],
            column_focus: range2.column[0]
          };
        }
        let scrollTop = $("#luckysheet-cell-main").scrollTop();
        let row_st = luckysheet_searcharray(store_default.visibledatarow, scrollTop);
        let row_focus = range2.row_focus;
        if (row_focus > row_st) {
          row_st = row_focus;
        }
        if (row_st == -1) {
          row_st = 0;
        }
        let top = store_default.visibledatarow[row_st] - 2 - scrollTop + store_default.columnHeaderHeight;
        let freezenhorizontaldata = [
          store_default.visibledatarow[row_st],
          row_st + 1,
          scrollTop,
          freezen_default.cutVolumn(store_default.visibledatarow, row_st + 1),
          top
        ];
        freezen_default.saveFreezen(freezenhorizontaldata, top, null, null);
        freezen_default.createFreezenHorizontal(freezenhorizontaldata, top);
        let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
        let col_st = luckysheet_searcharray(store_default.visibledatacolumn, scrollLeft);
        let column_focus = range2.column_focus;
        if (column_focus > col_st) {
          col_st = column_focus;
        }
        if (col_st == -1) {
          col_st = 0;
        }
        let left = store_default.visibledatacolumn[col_st] - 2 - scrollLeft + store_default.rowHeaderWidth;
        let freezenverticaldata = [
          store_default.visibledatacolumn[col_st],
          col_st + 1,
          scrollLeft,
          freezen_default.cutVolumn(store_default.visibledatacolumn, col_st + 1),
          left
        ];
        freezen_default.saveFreezen(null, null, freezenverticaldata, left);
        freezen_default.createFreezenVertical(freezenverticaldata, left);
        freezen_default.createAssistCanvas();
        luckysheetrefreshgrid();
      }
    }
  }
  function insertRowOrColumn(type, index2 = 0, options = {}) {
    if (!isRealNum(index2)) {
      return tooltip_default.info("The index parameter is invalid.", "");
    }
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      number = 1,
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    let _locale = locale_default();
    let locale_info = _locale.info;
    if (!isRealNum(number)) {
      if (isEditMode()) {
        alert(locale_info.tipInputNumber);
      } else {
        tooltip_default.info(locale_info.tipInputNumber, "");
      }
      return;
    }
    number = parseInt(number);
    if (number < 1 || number > 100) {
      if (isEditMode()) {
        alert(locale_info.tipInputNumberLimit);
      } else {
        tooltip_default.info(locale_info.tipInputNumberLimit, "");
      }
      return;
    }
    let sheetIndex;
    if (order) {
      if (store_default.luckysheetfile[order]) {
        sheetIndex = store_default.luckysheetfile[order].index;
      }
    }
    luckysheetextendtable(type, index2, number, "lefttop", sheetIndex);
    if (success && typeof success === "function") {
      success();
    }
  }
  function insertRowBottomOrColumnRight(type, index2 = 0, options = {}) {
    if (!isRealNum(index2)) {
      return tooltip_default.info("The index parameter is invalid.", "");
    }
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      number = 1,
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    let _locale = locale_default();
    let locale_info = _locale.info;
    if (!isRealNum(number)) {
      if (isEditMode()) {
        alert(locale_info.tipInputNumber);
      } else {
        tooltip_default.info(locale_info.tipInputNumber, "");
      }
      return;
    }
    number = parseInt(number);
    if (number < 1 || number > 100) {
      if (isEditMode()) {
        alert(locale_info.tipInputNumberLimit);
      } else {
        tooltip_default.info(locale_info.tipInputNumberLimit, "");
      }
      return;
    }
    let sheetIndex;
    if (order) {
      if (store_default.luckysheetfile[order]) {
        sheetIndex = store_default.luckysheetfile[order].index;
      }
    }
    luckysheetextendtable(type, index2, number, "rightbottom", sheetIndex);
    if (success && typeof success === "function") {
      success();
    }
  }
  function insertRow(row = 0, options = {}) {
    insertRowOrColumn("row", row, options);
  }
  function insertRowBottom(row = 0, options = {}) {
    insertRowBottomOrColumnRight("row", row, options);
  }
  function insertColumn(column = 0, options = {}) {
    insertRowOrColumn("column", column, options);
  }
  function insertColumnRight(column = 0, options = {}) {
    insertRowBottomOrColumnRight("column", column, options);
  }
  function deleteRowOrColumn(type, startIndex, endIndex, options = {}) {
    if (!isRealNum(startIndex) || !isRealNum(endIndex)) {
      return tooltip_default.info("Please enter the index for deleting rows or columns correctly.", "");
    }
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    let sheetIndex;
    if (order) {
      if (store_default.luckysheetfile[order]) {
        sheetIndex = store_default.luckysheetfile[order].index;
      }
    }
    luckysheetdeletetable(type, startIndex, endIndex, sheetIndex);
    if (success && typeof success === "function") {
      success();
    }
  }
  function deleteRow(rowStart, rowEnd, options = {}) {
    deleteRowOrColumn("row", rowStart, rowEnd, options);
  }
  function deleteColumn(columnStart, columnEnd, options = {}) {
    deleteRowOrColumn("column", columnStart, columnEnd, options);
  }
  function hideRowOrColumn(type, startIndex, endIndex, options = {}) {
    if (!isRealNum(startIndex) || !isRealNum(endIndex)) {
      return tooltip_default.info("Please enter the index for deleting rows or columns correctly.", "");
    }
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      order = curSheetOrder,
      saveParam = true,
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    let cfgKey = type === "row" ? "rowhidden" : "colhidden";
    let cfg = $.extend(true, {}, file.config);
    if (cfg[cfgKey] == null) {
      cfg[cfgKey] = {};
    }
    for (let i2 = startIndex; i2 <= endIndex; i2++) {
      cfg[cfgKey][i2] = 0;
    }
    if (store_default.clearjfundo) {
      let redo2 = {};
      redo2["type"] = type === "row" ? "showHidRows" : "showHidCols";
      redo2["sheetIndex"] = file.index;
      redo2["config"] = $.extend(true, {}, file.config);
      redo2["curconfig"] = cfg;
      store_default.jfundo.length = 0;
      store_default.jfredo.push(redo2);
    }
    store_default.luckysheetfile[order].config = cfg;
    if (saveParam) {
      server_default.saveParam("cg", file.index, cfg[cfgKey], {"k": cfgKey});
    }
    if (order == curSheetOrder) {
      store_default.config = cfg;
      jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function showRowOrColumn(type, startIndex, endIndex, options = {}) {
    if (!isRealNum(startIndex) || !isRealNum(endIndex)) {
      return tooltip_default.info("Please enter the index for deleting rows or columns correctly.", "");
    }
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      order = curSheetOrder,
      saveParam = true,
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    let cfgKey = type === "row" ? "rowhidden" : "colhidden";
    let cfg = $.extend(true, {}, file.config);
    if (cfg[cfgKey] == null) {
      return;
    }
    for (let i2 = startIndex; i2 <= endIndex; i2++) {
      delete cfg[cfgKey][i2];
    }
    if (store_default.clearjfundo) {
      let redo2 = {};
      redo2["type"] = type === "row" ? "showHidRows" : "showHidCols";
      redo2["sheetIndex"] = file.index;
      redo2["config"] = $.extend(true, {}, file.config);
      redo2["curconfig"] = cfg;
      store_default.jfundo.length = 0;
      store_default.jfredo.push(redo2);
    }
    store_default.luckysheetfile[order].config = store_default.config;
    if (saveParam) {
      server_default.saveParam("cg", file.index, cfg[cfgKey], {"k": cfgKey});
    }
    if (order === curSheetOrder) {
      store_default.config = cfg;
      jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function hideRow(startIndex, endIndex, options = {}) {
    hideRowOrColumn("row", startIndex, endIndex, options);
  }
  function showRow(startIndex, endIndex, options = {}) {
    showRowOrColumn("row", startIndex, endIndex, options);
  }
  function hideColumn(startIndex, endIndex, options = {}) {
    hideRowOrColumn("column", startIndex, endIndex, options);
  }
  function showColumn(startIndex, endIndex, options = {}) {
    showRowOrColumn("column", startIndex, endIndex, options);
  }
  function setRowHeight(rowInfo, options = {}) {
    if (getObjType(rowInfo) != "object") {
      return tooltip_default.info("The rowInfo parameter is invalid.", "");
    }
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let cfg = $.extend(true, {}, file.config);
    if (cfg["rowlen"] == null) {
      cfg["rowlen"] = {};
    }
    for (let r2 in rowInfo) {
      if (parseInt(r2) >= 0) {
        let len = rowInfo[r2];
        if (len === "auto") {
          cfg["rowlen"][parseInt(r2)] = len;
        } else {
          if (Number(len) >= 0) {
            cfg["rowlen"][parseInt(r2)] = Number(len);
          }
        }
      }
    }
    file.config = cfg;
    server_default.saveParam("cg", file.index, cfg["rowlen"], {"k": "rowlen"});
    if (file.index == store_default.currentSheetIndex) {
      store_default.config = cfg;
      jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function setColumnWidth(columnInfo, options = {}) {
    if (getObjType(columnInfo) != "object") {
      return tooltip_default.info("The columnInfo parameter is invalid.", "");
    }
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let cfg = $.extend(true, {}, file.config);
    if (cfg["columnlen"] == null) {
      cfg["columnlen"] = {};
    }
    for (let c2 in columnInfo) {
      if (parseInt(c2) >= 0) {
        let len = columnInfo[c2];
        if (len === "auto") {
          cfg["columnlen"][parseInt(c2)] = len;
        } else {
          if (Number(len) >= 0) {
            cfg["columnlen"][parseInt(c2)] = Number(len);
          }
        }
      }
    }
    file.config = cfg;
    server_default.saveParam("cg", file.index, cfg["columnlen"], {"k": "columnlen"});
    if (file.index == store_default.currentSheetIndex) {
      store_default.config = cfg;
      jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function getRowHeight(rowInfo, options = {}) {
    if (getObjType(rowInfo) != "array" || rowInfo.length == 0) {
      return tooltip_default.info("The rowInfo parameter is invalid.", "");
    }
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let cfg = $.extend(true, {}, file.config);
    let rowlen = cfg["rowlen"] || {};
    let rowlenObj = {};
    rowInfo.forEach((item2) => {
      if (parseInt(item2) >= 0) {
        let size = rowlen[parseInt(item2)] || store_default.defaultrowlen;
        rowlenObj[parseInt(item2)] = size;
      }
    });
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return rowlenObj;
  }
  function getColumnWidth(columnInfo, options = {}) {
    if (getObjType(columnInfo) != "array" || columnInfo.length == 0) {
      return tooltip_default.info("The columnInfo parameter is invalid.", "");
    }
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let cfg = $.extend(true, {}, file.config);
    let columnlen = cfg["columnlen"] || {};
    let columnlenObj = {};
    columnInfo.forEach((item2) => {
      if (parseInt(item2) >= 0) {
        let size = columnlen[parseInt(item2)] || store_default.defaultcollen;
        columnlenObj[parseInt(item2)] = size;
      }
    });
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return columnlenObj;
  }
  function getDefaultRowHeight(options = {}) {
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return store_default.luckysheetfile[order].defaultRowHeight || store_default.defaultrowlen;
  }
  function getDefaultColWidth(options = {}) {
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return store_default.luckysheetfile[order].defaultColWidth || store_default.defaultcollen;
  }
  function getRange() {
    let rangeArr = JSON.parse(JSON.stringify(store_default.luckysheet_select_save));
    let result = [];
    for (let i2 = 0; i2 < rangeArr.length; i2++) {
      let rangeItem = rangeArr[i2];
      let temp = {
        row: rangeItem.row,
        column: rangeItem.column
      };
      result.push(temp);
    }
    return result;
  }
  function getRangeWithFlatten(range2) {
    range2 = range2 || getRange();
    let result = [];
    range2.forEach((ele) => {
      let rs = ele.row;
      let cs = ele.column;
      for (let r2 = rs[0]; r2 <= rs[1]; r2++) {
        for (let c2 = cs[0]; c2 <= cs[1]; c2++) {
          result.push({r: r2, c: c2});
        }
      }
    });
    return result;
  }
  function getRangeValuesWithFlatte(range2) {
    range2 = range2 || getRangeWithFlatten();
    let values = [];
    range2.forEach((item2) => {
      values.push(store_default.flowdata[item2.r][item2.c]);
    });
    return values;
  }
  function getRangeAxis() {
    let result = [];
    let rangeArr = JSON.parse(JSON.stringify(store_default.luckysheet_select_save));
    let sheetIndex = store_default.currentSheetIndex;
    rangeArr.forEach((ele) => {
      let axisText = getRangetxt(sheetIndex, {column: ele.column, row: ele.row});
      result.push(axisText);
    });
    return result;
  }
  function getRangeValue(options = {}) {
    let curOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      range: range2,
      order = curOrder
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (!range2 || typeof range2 === "object") {
      return getdatabyselection(range2, file.index);
    } else if (typeof range2 === "string") {
      if (formula_default.iscelldata(range2)) {
        return getdatabyselection(formula_default.getcellrange(range2), file.index);
      } else {
        tooltip_default.info("The range is invalid, please check range parameter.", "");
      }
    }
  }
  function getRangeHtml(options = {}) {
    let {
      range: range2 = store_default.luckysheet_select_save,
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    range2 = JSON.parse(JSON.stringify(range2));
    if (getObjType(range2) == "string") {
      if (!formula_default.iscelldata(range2)) {
        return tooltip_default.info("The range parameter is invalid.", "");
      }
      let cellrange = formula_default.getcellrange(range2);
      range2 = [{
        "row": cellrange.row,
        "column": cellrange.column
      }];
    } else if (getObjType(range2) == "object") {
      if (range2.row == null || range2.column == null) {
        return tooltip_default.info("The range parameter is invalid.", "");
      }
      range2 = [{
        "row": range2.row,
        "column": range2.column
      }];
    }
    if (getObjType(range2) != "array") {
      return tooltip_default.info("The range parameter is invalid.", "");
    }
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let cfg = $.extend(true, {}, file.config);
    if (cfg["merge"] != null) {
      let has_PartMC = false;
      for (let s = 0; s < range2.length; s++) {
        let r1 = range2[s].row[0], r2 = range2[s].row[1];
        let c1 = range2[s].column[0], c2 = range2[s].column[1];
        has_PartMC = hasPartMC(cfg, r1, r2, c1, c2);
        if (has_PartMC) {
          break;
        }
      }
      if (has_PartMC) {
        return tooltip_default.info("Cannot perform this operation on partially merged cells", "");
      }
    }
    let cdformat = $.extend(true, [], file.luckysheet_conditionformat_save);
    if (range2.length > 1 && cdformat.length > 0) {
      let hasCF = false;
      let cf_compute = conditionformat_default.getComputeMap(file.index);
      for (let s = 0; s < range2.length; s++) {
        let r1 = range2[s].row[0], r2 = range2[s].row[1];
        let c1 = range2[s].column[0], c2 = range2[s].column[1];
        for (let r3 = r1; r3 <= r2; r3++) {
          for (let c3 = c1; c3 <= c2; c3++) {
            if (conditionformat_default.checksCF(r3, c3, cf_compute) != null) {
              hasCF = true;
              break;
            }
          }
          if (hasCF) {
            break;
          }
        }
        if (hasCF) {
          break;
        }
      }
      if (hasCF) {
        return tooltip_default.info("Cannot perform this operation on multiple selection areas, please select a single area", "");
      }
    }
    if (range2.length > 1) {
      let isSameRow = true, str_r = range2[0].row[0], end_r = range2[0].row[1];
      let isSameCol = true, str_c = range2[0].column[0], end_c = range2[0].column[1];
      for (let s = 1; s < range2.length; s++) {
        if (range2[s].row[0] != str_r || range2[s].row[1] != end_r) {
          isSameRow = false;
        }
        if (range2[s].column[0] != str_c || range2[s].column[1] != end_c) {
          isSameCol = false;
        }
      }
      if (!isSameRow && !isSameCol || selectIsOverlap(range2)) {
        return tooltip_default.info("Cannot perform this operation on multiple selection areas, please select a single area", "");
      }
    }
    let rowIndexArr = [], colIndexArr = [];
    for (let s = 0; s < range2.length; s++) {
      let r1 = range2[s].row[0], r2 = range2[s].row[1];
      let c1 = range2[s].column[0], c2 = range2[s].column[1];
      for (let r3 = r1; r3 <= r2; r3++) {
        if (cfg["rowhidden"] != null && cfg["rowhidden"][r3] != null) {
          continue;
        }
        if (!rowIndexArr.includes(r3)) {
          rowIndexArr.push(r3);
        }
        for (let c3 = c1; c3 <= c2; c3++) {
          if (cfg["colhidden"] != null && cfg["colhidden"][c3] != null) {
            continue;
          }
          if (!colIndexArr.includes(c3)) {
            colIndexArr.push(c3);
          }
        }
      }
    }
    let borderInfoCompute;
    if (cfg["borderInfo"] && cfg["borderInfo"].length > 0) {
      borderInfoCompute = getBorderInfoCompute(file.index);
    }
    let d = file.data;
    if (d == null || d.length == 0) {
      d = sheetmanage_default.buildGridData(file);
    }
    let cpdata = "";
    let colgroup = "";
    rowIndexArr = rowIndexArr.sort((a, b) => a - b);
    colIndexArr = colIndexArr.sort((a, b) => a - b);
    for (let i2 = 0; i2 < rowIndexArr.length; i2++) {
      let r2 = rowIndexArr[i2];
      if (cfg["rowhidden"] != null && cfg["rowhidden"][r2] != null) {
        continue;
      }
      cpdata += "<tr>";
      for (let j = 0; j < colIndexArr.length; j++) {
        let c2 = colIndexArr[j];
        if (cfg["colhidden"] != null && cfg["colhidden"][c2] != null) {
          continue;
        }
        let column = '<td ${span} style="${style}">';
        if (d[r2] != null && d[r2][c2] != null) {
          let style = "", span = "";
          if (r2 == rowIndexArr[0]) {
            if (cfg["columnlen"] == null || cfg["columnlen"][c2.toString()] == null) {
              colgroup += '<colgroup width="72px"></colgroup>';
            } else {
              colgroup += '<colgroup width="' + cfg["columnlen"][c2.toString()] + 'px"></colgroup>';
            }
          }
          if (c2 == colIndexArr[0]) {
            if (cfg["rowlen"] == null || cfg["rowlen"][r2.toString()] == null) {
              style += "height:19px;";
            } else {
              style += "height:" + cfg["rowlen"][r2.toString()] + "px;";
            }
          }
          let reg = /^(w|W)((0?)|(0\.0+))$/;
          let c_value;
          if (d[r2][c2].ct != null && d[r2][c2].ct.fa != null && d[r2][c2].ct.fa.match(reg)) {
            c_value = getcellvalue(r2, c2, d);
          } else {
            c_value = getcellvalue(r2, c2, d, "m");
          }
          style += menuButton_default.getStyleByCell(d, r2, c2);
          if (getObjType(d[r2][c2]) == "object" && "mc" in d[r2][c2]) {
            if ("rs" in d[r2][c2]["mc"]) {
              span = 'rowspan="' + d[r2][c2]["mc"].rs + '" colspan="' + d[r2][c2]["mc"].cs + '"';
              if (borderInfoCompute && borderInfoCompute[r2 + "_" + c2]) {
                let bl_obj = {"color": {}, "style": {}}, br_obj = {"color": {}, "style": {}}, bt_obj = {"color": {}, "style": {}}, bb_obj = {"color": {}, "style": {}};
                for (let bd_r = r2; bd_r < r2 + d[r2][c2]["mc"].rs; bd_r++) {
                  for (let bd_c = c2; bd_c < c2 + d[r2][c2]["mc"].cs; bd_c++) {
                    if (bd_r == r2 && borderInfoCompute[bd_r + "_" + bd_c] && borderInfoCompute[bd_r + "_" + bd_c].t) {
                      let linetype = borderInfoCompute[bd_r + "_" + bd_c].t.style;
                      let bcolor = borderInfoCompute[bd_r + "_" + bd_c].t.color;
                      if (bt_obj["style"][linetype] == null) {
                        bt_obj["style"][linetype] = 1;
                      } else {
                        bt_obj["style"][linetype] = bt_obj["style"][linetype] + 1;
                      }
                      if (bt_obj["color"][bcolor] == null) {
                        bt_obj["color"][bcolor] = 1;
                      } else {
                        bt_obj["color"][bcolor] = bt_obj["color"][bcolor] + 1;
                      }
                    }
                    if (bd_r == r2 + d[r2][c2]["mc"].rs - 1 && borderInfoCompute[bd_r + "_" + bd_c] && borderInfoCompute[bd_r + "_" + bd_c].b) {
                      let linetype = borderInfoCompute[bd_r + "_" + bd_c].b.style;
                      let bcolor = borderInfoCompute[bd_r + "_" + bd_c].b.color;
                      if (bb_obj["style"][linetype] == null) {
                        bb_obj["style"][linetype] = 1;
                      } else {
                        bb_obj["style"][linetype] = bb_obj["style"][linetype] + 1;
                      }
                      if (bb_obj["color"][bcolor] == null) {
                        bb_obj["color"][bcolor] = 1;
                      } else {
                        bb_obj["color"][bcolor] = bb_obj["color"][bcolor] + 1;
                      }
                    }
                    if (bd_c == c2 && borderInfoCompute[bd_r + "_" + bd_c] && borderInfoCompute[bd_r + "_" + bd_c].l) {
                      let linetype = borderInfoCompute[r2 + "_" + c2].l.style;
                      let bcolor = borderInfoCompute[bd_r + "_" + bd_c].l.color;
                      if (bl_obj["style"][linetype] == null) {
                        bl_obj["style"][linetype] = 1;
                      } else {
                        bl_obj["style"][linetype] = bl_obj["style"][linetype] + 1;
                      }
                      if (bl_obj["color"][bcolor] == null) {
                        bl_obj["color"][bcolor] = 1;
                      } else {
                        bl_obj["color"][bcolor] = bl_obj["color"][bcolor] + 1;
                      }
                    }
                    if (bd_c == c2 + d[r2][c2]["mc"].cs - 1 && borderInfoCompute[bd_r + "_" + bd_c] && borderInfoCompute[bd_r + "_" + bd_c].r) {
                      let linetype = borderInfoCompute[bd_r + "_" + bd_c].r.style;
                      let bcolor = borderInfoCompute[bd_r + "_" + bd_c].r.color;
                      if (br_obj["style"][linetype] == null) {
                        br_obj["style"][linetype] = 1;
                      } else {
                        br_obj["style"][linetype] = br_obj["style"][linetype] + 1;
                      }
                      if (br_obj["color"][bcolor] == null) {
                        br_obj["color"][bcolor] = 1;
                      } else {
                        br_obj["color"][bcolor] = br_obj["color"][bcolor] + 1;
                      }
                    }
                  }
                }
                let rowlen = d[r2][c2]["mc"].rs, collen = d[r2][c2]["mc"].cs;
                if (JSON.stringify(bl_obj).length > 23) {
                  let bl_color = null, bl_style = null;
                  for (let x in bl_obj.color) {
                    if (bl_obj.color[x] >= rowlen / 2) {
                      bl_color = x;
                    }
                  }
                  for (let x in bl_obj.style) {
                    if (bl_obj.style[x] >= rowlen / 2) {
                      bl_style = x;
                    }
                  }
                  if (bl_color != null && bl_style != null) {
                    style += "border-left:" + selection_default.getHtmlBorderStyle(bl_style, bl_color);
                  }
                }
                if (JSON.stringify(br_obj).length > 23) {
                  let br_color = null, br_style = null;
                  for (let x in br_obj.color) {
                    if (br_obj.color[x] >= rowlen / 2) {
                      br_color = x;
                    }
                  }
                  for (let x in br_obj.style) {
                    if (br_obj.style[x] >= rowlen / 2) {
                      br_style = x;
                    }
                  }
                  if (br_color != null && br_style != null) {
                    style += "border-right:" + selection_default.getHtmlBorderStyle(br_style, br_color);
                  }
                }
                if (JSON.stringify(bt_obj).length > 23) {
                  let bt_color = null, bt_style = null;
                  for (let x in bt_obj.color) {
                    if (bt_obj.color[x] >= collen / 2) {
                      bt_color = x;
                    }
                  }
                  for (let x in bt_obj.style) {
                    if (bt_obj.style[x] >= collen / 2) {
                      bt_style = x;
                    }
                  }
                  if (bt_color != null && bt_style != null) {
                    style += "border-top:" + selection_default.getHtmlBorderStyle(bt_style, bt_color);
                  }
                }
                if (JSON.stringify(bb_obj).length > 23) {
                  let bb_color = null, bb_style = null;
                  for (let x in bb_obj.color) {
                    if (bb_obj.color[x] >= collen / 2) {
                      bb_color = x;
                    }
                  }
                  for (let x in bb_obj.style) {
                    if (bb_obj.style[x] >= collen / 2) {
                      bb_style = x;
                    }
                  }
                  if (bb_color != null && bb_style != null) {
                    style += "border-bottom:" + selection_default.getHtmlBorderStyle(bb_style, bb_color);
                  }
                }
              }
            } else {
              continue;
            }
          } else {
            if (borderInfoCompute && borderInfoCompute[r2 + "_" + c2]) {
              if (borderInfoCompute[r2 + "_" + c2].l) {
                let linetype = borderInfoCompute[r2 + "_" + c2].l.style;
                let bcolor = borderInfoCompute[r2 + "_" + c2].l.color;
                style += "border-left:" + selection_default.getHtmlBorderStyle(linetype, bcolor);
              }
              if (borderInfoCompute[r2 + "_" + c2].r) {
                let linetype = borderInfoCompute[r2 + "_" + c2].r.style;
                let bcolor = borderInfoCompute[r2 + "_" + c2].r.color;
                style += "border-right:" + selection_default.getHtmlBorderStyle(linetype, bcolor);
              }
              if (borderInfoCompute[r2 + "_" + c2].b) {
                let linetype = borderInfoCompute[r2 + "_" + c2].b.style;
                let bcolor = borderInfoCompute[r2 + "_" + c2].b.color;
                style += "border-bottom:" + selection_default.getHtmlBorderStyle(linetype, bcolor);
              }
              if (borderInfoCompute[r2 + "_" + c2].t) {
                let linetype = borderInfoCompute[r2 + "_" + c2].t.style;
                let bcolor = borderInfoCompute[r2 + "_" + c2].t.color;
                style += "border-top:" + selection_default.getHtmlBorderStyle(linetype, bcolor);
              }
            }
          }
          column = replaceHtml(column, {"style": style, "span": span});
          if (c_value == null) {
            c_value = getcellvalue(r2, c2, d);
          }
          if (c_value == null) {
            c_value = " ";
          }
          column += c_value;
        } else {
          let style = "";
          if (borderInfoCompute && borderInfoCompute[r2 + "_" + c2]) {
            if (borderInfoCompute[r2 + "_" + c2].l) {
              let linetype = borderInfoCompute[r2 + "_" + c2].l.style;
              let bcolor = borderInfoCompute[r2 + "_" + c2].l.color;
              style += "border-left:" + selection_default.getHtmlBorderStyle(linetype, bcolor);
            }
            if (borderInfoCompute[r2 + "_" + c2].r) {
              let linetype = borderInfoCompute[r2 + "_" + c2].r.style;
              let bcolor = borderInfoCompute[r2 + "_" + c2].r.color;
              style += "border-right:" + selection_default.getHtmlBorderStyle(linetype, bcolor);
            }
            if (borderInfoCompute[r2 + "_" + c2].b) {
              let linetype = borderInfoCompute[r2 + "_" + c2].b.style;
              let bcolor = borderInfoCompute[r2 + "_" + c2].b.color;
              style += "border-bottom:" + selection_default.getHtmlBorderStyle(linetype, bcolor);
            }
            if (borderInfoCompute[r2 + "_" + c2].t) {
              let linetype = borderInfoCompute[r2 + "_" + c2].t.style;
              let bcolor = borderInfoCompute[r2 + "_" + c2].t.color;
              style += "border-top:" + selection_default.getHtmlBorderStyle(linetype, bcolor);
            }
          }
          column += "";
          if (r2 == rowIndexArr[0]) {
            if (cfg["columnlen"] == null || cfg["columnlen"][c2.toString()] == null) {
              colgroup += '<colgroup width="72px"></colgroup>';
            } else {
              colgroup += '<colgroup width="' + cfg["columnlen"][c2.toString()] + 'px"></colgroup>';
            }
          }
          if (c2 == colIndexArr[0]) {
            if (cfg["rowlen"] == null || cfg["rowlen"][r2.toString()] == null) {
              style += "height:19px;";
            } else {
              style += "height:" + cfg["rowlen"][r2.toString()] + "px;";
            }
          }
          column = replaceHtml(column, {"style": style, "span": ""});
          column += " ";
        }
        column += "</td>";
        cpdata += column;
      }
      cpdata += "</tr>";
    }
    cpdata = '<table data-type="luckysheet_copy_action_table">' + colgroup + cpdata + "</table>";
    return cpdata;
  }
  function getRangeArray(dimensional, options = {}) {
    let dimensionalValues = ["oneDimensional", "twoDimensional"];
    if (!dimensionalValues.includes(dimensional)) {
      return tooltip_default.info("The dimensional parameter is invalid.", "");
    }
    let {
      range: range2 = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1],
      order = getSheetIndex(store_default.currentSheetIndex)
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    if (getObjType(range2) == "string") {
      if (!formula_default.iscelldata(range2)) {
        return tooltip_default.info("The range parameter is invalid.", "");
      }
      range2 = formula_default.getcellrange(range2);
    }
    if (getObjType(range2) != "object" || range2.row == null || range2.column == null) {
      return tooltip_default.info("The range parameter is invalid.", "");
    }
    let r1 = range2.row[0], r2 = range2.row[1];
    let c1 = range2.column[0], c2 = range2.column[1];
    let cfg = $.extend(true, {}, file.config);
    if (cfg["merge"] != null) {
      let has_PartMC = hasPartMC(cfg, r1, r2, c1, c2);
      if (has_PartMC) {
        return tooltip_default.info("Cannot perform this operation on partially merged cells", "");
      }
    }
    let data = file.data;
    if (data == null || data.length == 0) {
      data = sheetmanage_default.buildGridData(file);
    }
    let dataArr = [];
    if (dimensional == "oneDimensional") {
      for (let r3 = r1; r3 <= r2; r3++) {
        for (let c3 = c1; c3 <= c2; c3++) {
          let cell = data[r3][c3];
          if (cell == null || cell.v == null) {
            dataArr.push(null);
          } else {
            dataArr.push(cell.v);
          }
        }
      }
    } else if (dimensional == "twoDimensional") {
      for (let r3 = r1; r3 <= r2; r3++) {
        let row = [];
        for (let c3 = c1; c3 <= c2; c3++) {
          let cell = data[r3][c3];
          if (cell == null || cell.v == null) {
            row.push(null);
          } else {
            row.push(cell.v);
          }
        }
        dataArr.push(row);
      }
    }
    return dataArr;
  }
  function getRangeJson(isFirstRowTitle, options = {}) {
    let curRange = store_default.luckysheet_select_save[0];
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      range: range2 = curRange,
      order = curSheetOrder
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    let config = file.config;
    if (range2 && typeof range2 === "string" && formula_default.iscelldata(range2)) {
      range2 = formula_default.getcellrange(range2);
    }
    if (!range2 || range2.length > 1) {
      if (isEditMode()) {
        alert(locale_drag.noMulti);
      } else {
        tooltip_default.info(locale_drag.noMulti, "");
      }
      return;
    }
    if (config["merge"] != null) {
      let has_PartMC = false;
      let r1 = range2.row[0], r2 = range2.row[1], c1 = range2.column[0], c2 = range2.column[1];
      has_PartMC = hasPartMC(config, r1, r2, c1, c2);
      if (has_PartMC) {
        if (isEditMode()) {
          alert(locale_default().drag.noPartMerge);
        } else {
          tooltip_default.info(locale_default().drag.noPartMerge, "");
        }
        return;
      }
    }
    let getdata = getdatabyselection(range2, file.index);
    let arr = [];
    if (getdata.length === 0) {
      return;
    }
    if (isFirstRowTitle) {
      if (getdata.length === 1) {
        let obj = {};
        for (let i2 = 0; i2 < getdata[0].length; i2++) {
          obj[getcellvalue(0, i2, getdata)] = "";
        }
        arr.push(obj);
      } else {
        for (let r2 = 1; r2 < getdata.length; r2++) {
          let obj = {};
          for (let c2 = 0; c2 < getdata[0].length; c2++) {
            if (getcellvalue(0, c2, getdata) == void 0) {
              obj[""] = getcellvalue(r2, c2, getdata);
            } else {
              obj[getcellvalue(0, c2, getdata)] = getcellvalue(r2, c2, getdata);
            }
          }
          arr.push(obj);
        }
      }
    } else {
      let st = range2["column"][0];
      for (let r2 = 0; r2 < getdata.length; r2++) {
        let obj = {};
        for (let c2 = 0; c2 < getdata[0].length; c2++) {
          obj[chatatABC(c2 + st)] = getcellvalue(r2, c2, getdata);
        }
        arr.push(obj);
      }
    }
    return arr;
  }
  function getRangeDiagonal(type, options = {}) {
    let typeValues = ["normal", "anti", "offset"];
    if (typeValues.indexOf(type) < 0) {
      return tooltip_default.info("The type parameter must be included in ['normal', 'anti', 'offset']", "");
    }
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let curRange = JSON.parse(JSON.stringify(store_default.luckysheet_select_save));
    let {
      column = 1,
      range: range2 = curRange,
      order = curSheetOrder
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    let config = file.config;
    if (range2 && typeof range2 === "string" && formula_default.iscelldata(range2)) {
      range2 = formula_default.getcellrange(range2);
    }
    if (!range2 || range2.length > 1) {
      if (isEditMode()) {
        alert(locale_default().drag.noMulti);
      } else {
        tooltip_default.info(locale_default().drag.noMulti, "");
      }
      return;
    }
    if (config["merge"] != null) {
      let has_PartMC = false;
      let r1 = range2[0].row[0], r2 = range2[0].row[1], c1 = range2[0].column[0], c2 = range2[0].column[1];
      has_PartMC = hasPartMC(config, r1, r2, c1, c2);
      if (has_PartMC) {
        if (isEditMode()) {
          alert(locale_default().drag.noPartMerge);
        } else {
          tooltip_default.info(locale_default().drag.noPartMerge, "");
        }
        return;
      }
    }
    let getdata = getdatabyselection(range2, order);
    let arr = [];
    if (getdata.length === 0) {
      return;
    }
    let clen = getdata[0].length;
    switch (type) {
      case "normal":
        for (let r2 = 0; r2 < getdata.length; r2++) {
          if (r2 >= clen) {
            break;
          }
          arr.push(getdata[r2][r2]);
        }
        break;
      case "anti":
        for (let r2 = 0; r2 < getdata.length; r2++) {
          if (r2 >= clen) {
            break;
          }
          arr.push(getdata[r2][clen - r2 - 1]);
        }
        break;
      case "offset":
        if (column.toString() == "NaN") {
          if (isEditMode()) {
            alert(locale_default().drag.inputCorrect);
          } else {
            tooltip_default.info(locale_default().drag.inputCorrect, "");
          }
          return;
        }
        if (column < 0) {
          if (isEditMode()) {
            alert(locale_default().drag.offsetColumnLessZero);
          } else {
            tooltip_default.info(locale_default().drag.offsetColumnLessZero, "");
          }
          return;
        }
        for (let r2 = 0; r2 < getdata.length; r2++) {
          if (r2 + column >= clen) {
            break;
          }
          arr.push(getdata[r2][r2 + column]);
        }
        break;
    }
    selection_default.copybyformat(new Event(), JSON.stringify(arr));
  }
  function getRangeBoolean(options = {}) {
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let curRange = JSON.parse(JSON.stringify(store_default.luckysheet_select_save));
    let {
      range: range2 = curRange,
      order = curSheetOrder
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    let config = file.config;
    if (range2 && typeof range2 === "string" && formula_default.iscelldata(range2)) {
      range2 = formula_default.getcellrange(range2);
    }
    if (!range2 || range2.length > 1) {
      if (isEditMode()) {
        alert(locale_default().drag.noMulti);
      } else {
        tooltip_default.info(locale_default().drag.noMulti, "");
      }
      return;
    }
    if (config["merge"] != null) {
      let has_PartMC = false;
      let r1 = range2[0].row[0], r2 = range2[0].row[1], c1 = range2[0].column[0], c2 = range2[0].column[1];
      has_PartMC = hasPartMC(config, r1, r2, c1, c2);
      if (has_PartMC) {
        if (isEditMode()) {
          alert(locale_default().drag.noPartMerge);
        } else {
          tooltip_default.info(locale_default().drag.noPartMerge, "");
        }
        return;
      }
    }
    let getdata = getdatabyselection(range2, order);
    let arr = [];
    if (getdata.length === 0) {
      return;
    }
    for (let r2 = 0; r2 < getdata.length; r2++) {
      let a = [];
      for (let c2 = 0; c2 < getdata[0].length; c2++) {
        let bool = false;
        let v;
        if (getObjType(getdata[r2][c2]) == "object") {
          v = getdata[r2][c2].v;
        } else {
          v = getdata[r2][c2];
        }
        if (v == null || v == "") {
          bool = false;
        } else {
          v = parseInt(v);
          if (v == null || v > 0) {
            bool = true;
          } else {
            bool = false;
          }
        }
        a.push(bool);
      }
      arr.push(a);
    }
    selection_default.copybyformat(event, JSON.stringify(arr));
  }
  function setRangeShow(range2, options = {}) {
    if (getObjType(range2) == "string") {
      if (!formula_default.iscelldata(range2)) {
        return tooltip_default.info("The range parameter is invalid.", "");
      }
      let cellrange = formula_default.getcellrange(range2);
      range2 = [{
        "row": cellrange.row,
        "column": cellrange.column
      }];
    } else if (getObjType(range2) == "object") {
      if (range2.row == null || range2.column == null) {
        return tooltip_default.info("The range parameter is invalid.", "");
      }
      range2 = [{
        "row": range2.row,
        "column": range2.column
      }];
    }
    if (getObjType(range2) == "array") {
      for (let i2 = 0; i2 < range2.length; i2++) {
        if (getObjType(range2[i2]) === "string") {
          if (!formula_default.iscelldata(range2[i2])) {
            return tooltip_default.info("The range parameter is invalid.", "");
          }
          let cellrange = formula_default.getcellrange(range2[i2]);
          range2[i2] = {
            "row": cellrange.row,
            "column": cellrange.column
          };
        } else if (getObjType(range2) == "object") {
          if (range2.row == null || range2.column == null) {
            return tooltip_default.info("The range parameter is invalid.", "");
          }
          range2 = {
            "row": range2.row,
            "column": range2.column
          };
        }
      }
    }
    if (getObjType(range2) != "array") {
      return tooltip_default.info("The range parameter is invalid.", "");
    }
    let {
      show = true,
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    for (let i2 = 0; i2 < range2.length; i2++) {
      let changeparam = menuButton_default.mergeMoveMain(range2[i2].column, range2[i2].row, range2[i2]);
      if (changeparam) {
        range2[i2] = {
          "row": changeparam[1],
          "column": changeparam[0]
        };
      }
    }
    file.luckysheet_select_save = range2;
    if (file.index == store_default.currentSheetIndex) {
      store_default.luckysheet_select_save = range2;
      selectHightlightShow();
      if (!show) {
        $("#luckysheet-cell-selected-boxs").hide();
        $("#luckysheet-cell-selected-focus").hide();
        $("#luckysheet-row-count-show").hide();
        $("#luckysheet-column-count-show").hide();
        $("#luckysheet-rows-h-selected").empty();
        $("#luckysheet-cols-h-selected").empty();
      }
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function setRangeValue(data, options = {}) {
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let curRange = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
    let {
      range: range2 = curRange,
      isRefresh = true,
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    if (data == null) {
      return tooltip_default.info("The data which will be set to range cannot be null.", "");
    }
    if (range2 instanceof Array) {
      return tooltip_default.info("setRangeValue only supports a single selection.", "");
    }
    if (typeof range2 === "string" && formula_default.iscelldata(range2)) {
      range2 = formula_default.getcellrange(range2);
    }
    let rowCount = range2.row[1] - range2.row[0] + 1, columnCount = range2.column[1] - range2.column[0] + 1;
    if (data.length !== rowCount || data[0].length !== columnCount) {
      return tooltip_default.info("The data to be set does not match the selection.", "");
    }
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let sheetData = $.extend(true, [], file.data);
    for (let i2 = 0; i2 < rowCount; i2++) {
      for (let j = 0; j < columnCount; j++) {
        let row = range2.row[0] + i2, column = range2.column[0] + j;
        setCellValue(row, column, data[i2][j], {order, isRefresh: false});
      }
    }
    let fileData = $.extend(true, [], file.data);
    file.data.length = 0;
    file.data.push(...sheetData);
    if (file.index == store_default.currentSheetIndex) {
      jfrefreshgrid(fileData, [{
        row: range2.row,
        column: range2.column
      }], void 0, true, false);
    }
    if (isRefresh) {
      luckysheetrefreshgrid();
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function setSingleRangeFormat(attr, value, options = {}) {
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let curRange = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
    let {
      range: range2 = curRange,
      order = curSheetOrder
    } = __spreadValues({}, options);
    if (!attr) {
      tooltip_default.info("Arguments attr cannot be null or undefined.", "");
      return "error";
    }
    if (range2 instanceof Array) {
      tooltip_default.info("setRangeValue only supports a single selection.", "");
      return "error";
    }
    if (getObjType(range2) == "string") {
      if (!formula_default.iscelldata(range2)) {
        tooltip_default.info("The range parameter is invalid.", "");
        return "error";
      }
      range2 = formula_default.getcellrange(range2);
    }
    if (getObjType(range2) != "object" || range2.row == null || range2.column == null) {
      tooltip_default.info("The range parameter is invalid.", "");
      return "error";
    }
    for (let r2 = range2.row[0]; r2 <= range2.row[1]; r2++) {
      for (let c2 = range2.column[0]; c2 <= range2.column[1]; c2++) {
        console.log("r", r2);
        console.log("c", c2);
        setCellValue(r2, c2, {[attr]: value}, {
          order,
          isRefresh: false
        });
      }
    }
  }
  function setRangeFormat(attr, value, options = {}) {
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let curRange = JSON.parse(JSON.stringify(store_default.luckysheet_select_save));
    let {
      range: range2 = curRange,
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    if (getObjType(range2) == "string") {
      if (!formula_default.iscelldata(range2)) {
        return tooltip_default.info("The range parameter is invalid.", "");
      }
      let cellrange = formula_default.getcellrange(range2);
      range2 = [{
        "row": cellrange.row,
        "column": cellrange.column
      }];
    } else if (getObjType(range2) == "object") {
      if (range2.row == null || range2.column == null) {
        return tooltip_default.info("The range parameter is invalid.", "");
      }
      range2 = [{
        "row": range2.row,
        "column": range2.column
      }];
    }
    if (getObjType(range2) != "array") {
      return tooltip_default.info("The range parameter is invalid.", "");
    }
    let file = store_default.luckysheetfile[order];
    let result = [];
    for (let i2 = 0; i2 < range2.length; i2++) {
      result.push(setSingleRangeFormat(attr, value, {range: range2[i2], order}));
    }
    let fileData = $.extend(true, [], file.data);
    if (result.some((i2) => i2 === "error")) {
      file.data.length = 0;
      file.data.push(...fileData);
      return false;
    }
    file.data.length = 0;
    file.data.push(...fileData);
    if (file.index == store_default.currentSheetIndex) {
      jfrefreshgrid(fileData, void 0, void 0, true, false);
    }
    luckysheetrefreshgrid();
    if (success && typeof success === "function") {
    }
  }
  function setRangeFilter(type, options = {}) {
    let typeValues = ["open", "close"];
    if (!typeValues.includes(type)) {
      return tooltip_default.info("The type parameter is invalid.", "");
    }
    let {
      range: range2 = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1],
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    if (getObjType(range2) == "string") {
      if (!formula_default.iscelldata(range2)) {
        return tooltip_default.info("The range parameter is invalid.", "");
      }
      range2 = formula_default.getcellrange(range2);
    }
    if (getObjType(range2) != "object" || range2.row == null || range2.column == null) {
      return tooltip_default.info("The range parameter is invalid.", "");
    }
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    if (type == "open") {
      file.filter_select = range2;
      if (file.index == store_default.currentSheetIndex) {
        createFilterOptions(range2, file.filter);
      }
      return {
        "row": range2.row,
        "column": range2.column
      };
    } else if (type == "close") {
      let luckysheet_filter_save = $.extend(true, {}, file.filter_select);
      file.filter_select = null;
      $("#luckysheet-filter-selected-sheet" + file.index).remove();
      $("#luckysheet-filter-options-sheet" + file.index).remove();
      return {
        "row": luckysheet_filter_save.row,
        "column": luckysheet_filter_save.column
      };
    }
  }
  function setRangeMerge(type, options = {}) {
    let typeValues = ["all", "horizontal", "vertical"];
    if (typeValues.indexOf(type) < 0) {
      return tooltip_default.info("The type parameter must be included in ['all', 'horizontal', 'vertical']", "");
    }
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex), curRange = JSON.parse(JSON.stringify(store_default.luckysheet_select_save));
    let {
      range: range2 = curRange,
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order], cfg = $.extend(true, {}, file.config), data = $.extend(true, [], file.data);
    if (data.length == 0) {
      data = $.extend(true, [], sheetmanage_default.buildGridData(file));
    }
    if (getObjType(range2) == "string") {
      if (!formula_default.iscelldata(range2)) {
        return tooltip_default.info("Incorrect selection format", "");
      }
      let cellrange = formula_default.getcellrange(range2);
      range2 = [{
        "row": cellrange.row,
        "column": cellrange.column
      }];
    } else if (getObjType(range2) == "object") {
      if (!range2.hasOwnProperty("row") || !range2.hasOwnProperty("column")) {
        return tooltip_default.info("Incorrect selection format", "");
      }
      range2 = [{
        "row": range2.row,
        "column": range2.column
      }];
    }
    if (selectIsOverlap(range2)) {
      return tooltip_default.info("Cannot merge overlapping range", "");
    }
    if (cfg["merge"] != null) {
      let has_PartMC = false;
      for (let s = 0; s < range2.length; s++) {
        let r1 = range2[s].row[0], r2 = range2[s].row[1];
        let c1 = range2[s].column[0], c2 = range2[s].column[1];
        has_PartMC = hasPartMC(cfg, r1, r2, c1, c2);
        if (has_PartMC) {
          break;
        }
      }
      if (has_PartMC) {
        return tooltip_default.info("Cannot perform this operation on partially merged cells", "");
      }
    } else {
      cfg.merge = {};
    }
    let isHasMc = false;
    for (let i2 = 0; i2 < range2.length; i2++) {
      let r1 = range2[i2].row[0], r2 = range2[i2].row[1];
      let c1 = range2[i2].column[0], c2 = range2[i2].column[1];
      for (let r3 = r1; r3 <= r2; r3++) {
        for (let c3 = c1; c3 <= c2; c3++) {
          let cell = data[r3][c3];
          if (getObjType(cell) == "object" && "mc" in cell) {
            isHasMc = true;
            break;
          }
        }
        if (isHasMc) {
          break;
        }
      }
    }
    if (isHasMc) {
      cancelRangeMerge({
        range: range2,
        order
      });
    } else {
      for (let i2 = 0; i2 < range2.length; i2++) {
        let r1 = range2[i2].row[0], r2 = range2[i2].row[1];
        let c1 = range2[i2].column[0], c2 = range2[i2].column[1];
        if (r1 == r2 && c1 == c2) {
          continue;
        }
        if (type == "all") {
          let fv = {}, isfirst = false;
          for (let r3 = r1; r3 <= r2; r3++) {
            for (let c3 = c1; c3 <= c2; c3++) {
              let cell = data[r3][c3];
              if (cell != null && (!isRealNull(cell.v) || cell.f != null) && !isfirst) {
                fv = $.extend(true, {}, cell);
                isfirst = true;
              }
              data[r3][c3] = {"mc": {"r": r1, "c": c1}};
            }
          }
          data[r1][c1] = fv;
          data[r1][c1].mc = {"r": r1, "c": c1, "rs": r2 - r1 + 1, "cs": c2 - c1 + 1};
          cfg["merge"][r1 + "_" + c1] = {"r": r1, "c": c1, "rs": r2 - r1 + 1, "cs": c2 - c1 + 1};
        } else if (type == "vertical") {
          for (let c3 = c1; c3 <= c2; c3++) {
            let fv = {}, isfirst = false;
            for (let r3 = r1; r3 <= r2; r3++) {
              let cell = data[r3][c3];
              if (cell != null && (!isRealNull(cell.v) || cell.f != null) && !isfirst) {
                fv = $.extend(true, {}, cell);
                isfirst = true;
              }
              data[r3][c3] = {"mc": {"r": r1, "c": c3}};
            }
            data[r1][c3] = fv;
            data[r1][c3].mc = {"r": r1, "c": c3, "rs": r2 - r1 + 1, "cs": 1};
            cfg["merge"][r1 + "_" + c3] = {"r": r1, "c": c3, "rs": r2 - r1 + 1, "cs": 1};
          }
        } else if (type == "horizontal") {
          for (let r3 = r1; r3 <= r2; r3++) {
            let fv = {}, isfirst = false;
            for (let c3 = c1; c3 <= c2; c3++) {
              let cell = data[r3][c3];
              if (cell != null && (!isRealNull(cell.v) || cell.f != null) && !isfirst) {
                fv = $.extend(true, {}, cell);
                isfirst = true;
              }
              data[r3][c3] = {"mc": {"r": r3, "c": c1}};
            }
            data[r3][c1] = fv;
            data[r3][c1].mc = {"r": r3, "c": c1, "rs": 1, "cs": c2 - c1 + 1};
            cfg["merge"][r3 + "_" + c1] = {"r": r3, "c": c1, "rs": 1, "cs": c2 - c1 + 1};
          }
        }
      }
      if (order == curSheetOrder) {
        if (store_default.clearjfundo) {
          store_default.jfundo.length = 0;
          store_default.jfredo.push({
            "type": "mergeChange",
            "sheetIndex": file.index,
            "data": $.extend(true, [], file.data),
            "curData": data,
            "range": range2,
            "config": $.extend(true, {}, file.config),
            "curConfig": cfg
          });
        }
        store_default.clearjfundo = false;
        jfrefreshgrid(data, range2, {"cfg": cfg});
        store_default.clearjfundo = true;
      } else {
        file.data = data;
        file.config = cfg;
      }
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function cancelRangeMerge(options = {}) {
    let curRange = store_default.luckysheet_select_save, curSheetOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      range: range2 = curRange,
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order], cfg = $.extend(true, {}, file.config), data = $.extend(true, [], file.data);
    if (data.length == 0) {
      data = $.extend(true, [], sheetmanage_default.buildGridData(file));
    }
    if (getObjType(range2) == "string") {
      if (!formula_default.iscelldata(range2)) {
        return tooltip_default.info("Incorrect selection format", "");
      }
      let cellrange = formula_default.getcellrange(range2);
      range2 = [{
        "row": cellrange.row,
        "column": cellrange.column
      }];
    } else if (getObjType(range2) == "object") {
      if (!range2.hasOwnProperty("row") || !range2.hasOwnProperty("column")) {
        return tooltip_default.info("Incorrect selection format", "");
      }
      range2 = [{
        "row": range2.row,
        "column": range2.column
      }];
    }
    if (selectIsOverlap(range2)) {
      return tooltip_default.info("Cannot merge overlapping range", "");
    }
    if (cfg["merge"] != null) {
      let has_PartMC = false;
      for (let s = 0; s < range2.length; s++) {
        let r1 = range2[s].row[0], r2 = range2[s].row[1];
        let c1 = range2[s].column[0], c2 = range2[s].column[1];
        has_PartMC = hasPartMC(cfg, r1, r2, c1, c2);
        if (has_PartMC) {
          break;
        }
      }
      if (has_PartMC) {
        return tooltip_default.info("Cannot perform this operation on partially merged cells", "");
      }
    }
    for (let i2 = 0; i2 < range2.length; i2++) {
      let r1 = range2[i2].row[0], r2 = range2[i2].row[1];
      let c1 = range2[i2].column[0], c2 = range2[i2].column[1];
      if (r1 == r2 && c1 == c2) {
        continue;
      }
      let fv = {};
      for (let r3 = r1; r3 <= r2; r3++) {
        for (let c3 = c1; c3 <= c2; c3++) {
          let cell = data[r3][c3];
          if (cell != null && cell.mc != null) {
            let mc_r = cell.mc.r, mc_c = cell.mc.c;
            if ("rs" in cell.mc) {
              delete cell.mc;
              delete cfg["merge"][mc_r + "_" + mc_c];
              fv[mc_r + "_" + mc_c] = $.extend(true, {}, cell);
            } else {
              let cell_clone = JSON.parse(JSON.stringify(fv[mc_r + "_" + mc_c]));
              delete cell_clone.v;
              delete cell_clone.m;
              delete cell_clone.ct;
              delete cell_clone.f;
              delete cell_clone.spl;
              data[r3][c3] = cell_clone;
            }
          }
        }
      }
    }
    if (order == curSheetOrder) {
      if (store_default.clearjfundo) {
        store_default.jfundo.length = 0;
        store_default.jfredo.push({
          "type": "mergeChange",
          "sheetIndex": file.index,
          "data": $.extend(true, [], file.data),
          "curData": data,
          "range": range2,
          "config": $.extend(true, {}, file.config),
          "curConfig": cfg
        });
      }
      store_default.clearjfundo = false;
      jfrefreshgrid(data, range2, {"cfg": cfg});
      store_default.clearjfundo = true;
    } else {
      file.data = data;
      file.config = cfg;
    }
  }
  function setRangeSort(type, options = {}) {
    let typeValues = ["asc", "desc"];
    if (typeValues.indexOf(type) < 0) {
      return tooltip_default.info("The type parameter must be included in ['asc', 'desc'", "");
    }
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex), curRange = store_default.luckysheet_select_save[0];
    let {
      range: range2 = curRange,
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order], cfg = $.extend(true, {}, file.config), fileData = $.extend(true, [], file.data);
    if (fileData.length == 0) {
      fileData = $.extend(true, [], sheetmanage_default.buildGridData(file));
    }
    if (range2 instanceof Array && range2.length > 1) {
      tooltip_default.info(locale_default().sort.noRangeError, "");
      return;
    }
    if (range2 && typeof range2 === "string" && formula_default.iscelldata(range2)) {
      range2 = formula_default.getcellrange(range2);
    }
    let r1 = range2.row[0], r2 = range2.row[1], c1 = range2.column[0], c2 = range2.column[1];
    let hasMc = false;
    let data = [];
    for (let r3 = r1; r3 <= r2; r3++) {
      let data_row = [];
      for (let c3 = c1; c3 <= c2; c3++) {
        if (fileData[r3][c3] != null && fileData[r3][c3].mc != null) {
          hasMc = true;
          break;
        }
        data_row.push(fileData[r3][c3]);
      }
      data.push(data_row);
    }
    if (hasMc) {
      tooltip_default.info(locale_default().sort.mergeError, "");
      return;
    }
    data = orderbydata([].concat(data), 0, type === "asc");
    for (let r3 = r1; r3 <= r2; r3++) {
      for (let c3 = c1; c3 <= c2; c3++) {
        fileData[r3][c3] = data[r3 - r1][c3 - c1];
      }
    }
    let allParam = {};
    if (cfg["rowlen"] != null) {
      cfg = rowlenByRange(fileData, r1, r2, cfg);
      allParam = {
        "cfg": cfg,
        "RowlChange": true
      };
    }
    if (file.index == store_default.currentSheetIndex) {
      jfrefreshgrid(fileData, [{"row": [r1, r2], "column": [c1, c2]}], allParam);
    } else {
      file.data = fileData;
      file.config = cfg;
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function setRangeSortMulti(hasTitle, sort, options = {}) {
    if (!sort || !(sort instanceof Array)) {
      return tooltip_default.info("The sort parameter is invalid.", "");
    }
    let curSheetOrder = getSheetIndex(store_default.currentSheetIndex), curRange = store_default.luckysheet_select_save[0];
    let {
      range: range2 = curRange,
      order = curSheetOrder,
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order], cfg = $.extend(true, {}, file.config), fileData = $.extend(true, [], file.data);
    if (fileData.length == 0) {
      fileData = $.extend(true, [], sheetmanage_default.buildGridData(file));
    }
    if (range2 instanceof Array && range2.length > 1) {
      tooltip_default.info(locale_default().sort.noRangeError, "");
      return;
    }
    if (range2 && typeof range2 === "string" && formula_default.iscelldata(range2)) {
      range2 = formula_default.getcellrange(range2);
    }
    let r1 = range2.row[0], r2 = range2.row[1], c1 = range2.column[0], c2 = range2.column[1];
    let str;
    if (hasTitle) {
      str = r1 + 1;
    } else {
      str = r1;
    }
    let hasMc = false;
    let data = [];
    for (let r3 = str; r3 <= r2; r3++) {
      let data_row = [];
      for (let c3 = c1; c3 <= c2; c3++) {
        if (fileData[r3][c3] != null && fileData[r3][c3].mc != null) {
          hasMc = true;
          break;
        }
        data_row.push(fileData[r3][c3]);
      }
      data.push(data_row);
    }
    if (hasMc) {
      tooltip_default.info(locale_default().sort.mergeError, "");
      return;
    }
    sort.forEach((sortItem) => {
      let i2 = sortItem.i;
      i2 -= c1;
      data = orderbydata([].concat(data), i2, sortItem.sort === "asc");
    });
    for (let r3 = str; r3 <= r2; r3++) {
      for (let c3 = c1; c3 <= c2; c3++) {
        fileData[r3][c3] = data[r3 - str][c3 - c1];
      }
    }
    let allParam = {};
    if (cfg["rowlen"] != null) {
      cfg = rowlenByRange(fileData, str, r2, cfg);
      allParam = {
        "cfg": cfg,
        "RowlChange": true
      };
    }
    if (file.index === store_default.currentSheetIndex) {
      jfrefreshgrid(fileData, [{"row": [str, r2], "column": [c1, c2]}], allParam);
    } else {
      file.data = fileData;
      file.config = cfg;
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function setRangeConditionalFormatDefault(conditionName, conditionValue, options = {}) {
    let conditionNameValues = [
      "greaterThan",
      "lessThan",
      "betweenness",
      "equal",
      "textContains",
      "occurrenceDate",
      "duplicateValue",
      "top10",
      "top10%",
      "last10",
      "last10%",
      "AboveAverage",
      "SubAverage"
    ];
    if (!conditionName || !conditionNameValues.includes(conditionName)) {
      return tooltip_default.info("The conditionName parameter is invalid.", "");
    }
    if (getObjType(conditionValue) != "array" || conditionValue.length == 0) {
      return tooltip_default.info("The conditionValue parameter is invalid.", "");
    }
    let {
      format = {
        "textColor": "#000000",
        "cellColor": "#ff0000"
      },
      cellrange = store_default.luckysheet_select_save,
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    cellrange = JSON.parse(JSON.stringify(cellrange));
    let file = store_default.luckysheetfile[order];
    let data = file.data;
    if (data == null || data.length == 0) {
      data = sheetmanage_default.buildGridData(file);
    }
    if (file == null) {
      return tooltip_default.info("Incorrect worksheet index", "");
    }
    const conditionformat_Text = locale_default().conditionformat;
    let conditionRange = [], conditionValue2 = [];
    if (conditionName == "betweenness") {
      let v1 = conditionValue[0];
      let v2 = conditionValue[1];
      let rangeArr1 = conditionformat_default.getRangeByTxt(v1);
      if (rangeArr1.length > 1) {
        conditionformat_default.infoDialog(conditionformat_Text.onlySingleCell, "");
        return;
      } else if (rangeArr1.length == 1) {
        let r1 = rangeArr1[0].row[0], r2 = rangeArr1[0].row[1];
        let c1 = rangeArr1[0].column[0], c2 = rangeArr1[0].column[1];
        if (r1 == r2 && c1 == c2) {
          v1 = getcellvalue(r1, c1, data);
          conditionRange.push({"row": rangeArr1[0].row, "column": rangeArr1[0].column});
          conditionValue2.push(v1);
        } else {
          conditionformat_default.infoDialog(conditionformat_Text.onlySingleCell, "");
          return;
        }
      } else if (rangeArr1.length == 0) {
        if (isNaN(v1) || v1 == "") {
          conditionformat_default.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
          return;
        } else {
          conditionValue2.push(v1);
        }
      }
      let rangeArr2 = conditionformat_default.getRangeByTxt(v2);
      if (rangeArr2.length > 1) {
        conditionformat_default.infoDialog(conditionformat_Text.onlySingleCell, "");
        return;
      } else if (rangeArr2.length == 1) {
        let r1 = rangeArr2[0].row[0], r2 = rangeArr2[0].row[1];
        let c1 = rangeArr2[0].column[0], c2 = rangeArr2[0].column[1];
        if (r1 == r2 && c1 == c2) {
          v2 = getcellvalue(r1, c1, data);
          conditionRange.push({"row": rangeArr2[0].row, "column": rangeArr2[0].column});
          conditionValue2.push(v2);
        } else {
          conditionformat_default.infoDialog(conditionformat_Text.onlySingleCell, "");
          return;
        }
      } else if (rangeArr2.length == 0) {
        if (isNaN(v2) || v2 == "") {
          conditionformat_default.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
          return;
        } else {
          conditionValue2.push(v2);
        }
      }
    } else if (conditionName == "greaterThan" || conditionName == "lessThan" || conditionName == "equal") {
      let v = conditionValue[0];
      let rangeArr = conditionformat_default.getRangeByTxt(v);
      if (rangeArr.length > 1) {
        conditionformat_default.infoDialog(conditionformat_Text.onlySingleCell, "");
        return;
      } else if (rangeArr.length == 1) {
        let r1 = rangeArr[0].row[0], r2 = rangeArr[0].row[1];
        let c1 = rangeArr[0].column[0], c2 = rangeArr[0].column[1];
        if (r1 == r2 && c1 == c2) {
          v = getcellvalue(r1, c1, data);
          conditionRange.push({"row": rangeArr[0].row, "column": rangeArr[0].column});
          conditionValue2.push(v);
        } else {
          conditionformat_default.infoDialog(conditionformat_Text.onlySingleCell, "");
          return;
        }
      } else if (rangeArr.length == 0) {
        if (isNaN(v) || v == "") {
          conditionformat_default.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
          return;
        } else {
          conditionValue2.push(v);
        }
      }
    } else if (conditionName == "textContains") {
      let v = conditionValue[0];
      let rangeArr = conditionformat_default.getRangeByTxt(v);
      if (rangeArr.length > 1) {
        conditionformat_default.infoDialog(conditionformat_Text.onlySingleCell, "");
        return;
      } else if (rangeArr.length == 1) {
        let r1 = rangeArr[0].row[0], r2 = rangeArr[0].row[1];
        let c1 = rangeArr[0].column[0], c2 = rangeArr[0].column[1];
        if (r1 == r2 && c1 == c2) {
          v = getcellvalue(r1, c1, data);
          conditionRange.push({"row": rangeArr[0].row, "column": rangeArr[0].column});
          conditionValue2.push(v);
        } else {
          conditionformat_default.infoDialog(conditionformat_Text.onlySingleCell, "");
          return;
        }
      } else if (rangeArr.length == 0) {
        if (v == "") {
          conditionformat_default.infoDialog(conditionformat_Text.conditionValueCanOnly, "");
          return;
        } else {
          conditionValue2.push(v);
        }
      }
    } else if (conditionName == "occurrenceDate") {
      let v1 = conditionValue[0];
      let v2 = conditionValue[1];
      if (!isdatetime(v1) || !isdatetime(v2)) {
        return tooltip_default.info("The conditionValue parameter is invalid.", "");
      }
      let v;
      if (diff(v1, v2) > 0) {
        v = (0, import_dayjs7.default)(v2).format("YYYY/MM/DD") + "-" + (0, import_dayjs7.default)(v1).format("YYYY/MM/DD");
      } else {
        v = (0, import_dayjs7.default)(v1).format("YYYY/MM/DD") + "-" + (0, import_dayjs7.default)(v2).format("YYYY/MM/DD");
      }
      conditionValue2.push(v);
    } else if (conditionName == "duplicateValue") {
      let v = conditionValue[0];
      if (v != "0" || v != "1") {
        return tooltip_default.info("The conditionValue parameter is invalid.", "");
      }
      conditionValue2.push(v);
    } else if (conditionName == "top10" || conditionName == "top10%" || conditionName == "last10" || conditionName == "last10%") {
      let v = conditionValue[0];
      if (parseInt(v) != v || parseInt(v) < 1 || parseInt(v) > 1e3) {
        conditionformat_default.infoDialog(conditionformat_Text.pleaseEnterInteger, "");
        return;
      }
      conditionValue2.push(parseInt(v));
    } else if (conditionName == "AboveAverage" || conditionName == "SubAverage") {
      conditionValue2.push(conditionName);
    }
    if (!format.hasOwnProperty("textColor") || !format.hasOwnProperty("cellColor")) {
      return tooltip_default.info("The format parameter is invalid.", "");
    }
    if (getObjType(cellrange) == "string") {
      cellrange = conditionformat_default.getRangeByTxt(cellrange);
    } else if (getObjType(cellrange) == "object") {
      cellrange = [cellrange];
    }
    if (getObjType(cellrange) != "array") {
      return tooltip_default.info("The cellrange parameter is invalid.", "");
    }
    let rule = {
      "type": "default",
      "cellrange": cellrange,
      "format": format,
      "conditionName": conditionName,
      "conditionRange": conditionRange,
      "conditionValue": conditionValue2
    };
    let fileH = $.extend(true, [], store_default.luckysheetfile);
    let historyRules = conditionformat_default.getHistoryRules(fileH);
    let ruleArr2 = file["luckysheet_conditionformat_save"] || [];
    ruleArr2.push(rule);
    file["luckysheet_conditionformat_save"] = ruleArr2;
    let fileC = $.extend(true, [], store_default.luckysheetfile);
    let currentRules = conditionformat_default.getCurrentRules(fileC);
    conditionformat_default.ref(historyRules, currentRules);
    if (server_default.allowUpdate) {
      server_default.saveParam("all", file.index, ruleArr2, {"k": "luckysheet_conditionformat_save"});
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function setRangeConditionalFormat(type, options = {}) {
    let typeValues = [
      "dataBar",
      "colorGradation",
      "icons"
    ];
    if (!type || !typeValues.includes(type)) {
      return tooltip_default.info("The type parameter is invalid.", "");
    }
    let {
      format,
      cellrange = store_default.luckysheet_select_save,
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    cellrange = JSON.parse(JSON.stringify(cellrange));
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("Incorrect worksheet index", "");
    }
    if (type == "dataBar") {
      if (format == null) {
        format = ["#638ec6", "#ffffff"];
      }
      if (getObjType(format) != "array" || format.length < 1 || format.length > 2) {
        return tooltip_default.info("The format parameter is invalid.", "");
      }
    } else if (type == "colorGradation") {
      if (format == null) {
        format = ["rgb(99, 190, 123)", "rgb(255, 235, 132)", "rgb(248, 105, 107)"];
      }
      if (getObjType(format) != "array" || format.length < 2 || format.length > 3) {
        return tooltip_default.info("The format parameter is invalid.", "");
      }
    } else if (type == "icons") {
      if (format == null) {
        format = "threeWayArrowMultiColor";
      }
      let formatValues = [
        "threeWayArrowMultiColor",
        "threeTriangles",
        "fourWayArrowMultiColor",
        "fiveWayArrowMultiColor",
        "threeWayArrowGrayColor",
        "fourWayArrowGrayColor",
        "fiveWayArrowGrayColor",
        "threeColorTrafficLightRimless",
        "threeSigns",
        "greenRedBlackGradient",
        "threeColorTrafficLightBordered",
        "fourColorTrafficLight",
        "threeSymbolsCircled",
        "tricolorFlag",
        "threeSymbolsnoCircle",
        "threeStars",
        "fiveQuadrantDiagram",
        "fiveBoxes",
        "grade4",
        "grade5"
      ];
      if (getObjType(format) != "string" || !formatValues.includes(format)) {
        return tooltip_default.info("The format parameter is invalid.", "");
      }
      switch (format) {
        case "threeWayArrowMultiColor":
          format = {
            "len": 3,
            "leftMin": 0,
            "top": 0
          };
          break;
        case "threeTriangles":
          format = {
            "len": 3,
            "leftMin": 0,
            "top": 1
          };
          break;
        case "fourWayArrowMultiColor":
          format = {
            "len": 4,
            "leftMin": 0,
            "top": 2
          };
          break;
        case "fiveWayArrowMultiColor":
          format = {
            "len": 5,
            "leftMin": 0,
            "top": 3
          };
          break;
        case "threeWayArrowGrayColor":
          format = {
            "len": 3,
            "leftMin": 5,
            "top": 0
          };
          break;
        case "fourWayArrowGrayColor":
          format = {
            "len": 4,
            "leftMin": 5,
            "top": 1
          };
          break;
        case "fiveWayArrowGrayColor":
          format = {
            "len": 5,
            "leftMin": 5,
            "top": 2
          };
          break;
        case "threeColorTrafficLightRimless":
          format = {
            "len": 3,
            "leftMin": 0,
            "top": 4
          };
          break;
        case "threeSigns":
          format = {
            "len": 3,
            "leftMin": 0,
            "top": 5
          };
          break;
        case "greenRedBlackGradient":
          format = {
            "len": 4,
            "leftMin": 0,
            "top": 6
          };
          break;
        case "threeColorTrafficLightBordered":
          format = {
            "len": 3,
            "leftMin": 5,
            "top": 4
          };
          break;
        case "fourColorTrafficLight":
          format = {
            "len": 4,
            "leftMin": 5,
            "top": 5
          };
          break;
        case "threeSymbolsCircled":
          format = {
            "len": 3,
            "leftMin": 0,
            "top": 7
          };
          break;
        case "tricolorFlag":
          format = {
            "len": 3,
            "leftMin": 0,
            "top": 8
          };
          break;
        case "threeSymbolsnoCircle":
          format = {
            "len": 3,
            "leftMin": 5,
            "top": 7
          };
          break;
        case "threeStars":
          format = {
            "len": 3,
            "leftMin": 0,
            "top": 9
          };
          break;
        case "fiveQuadrantDiagram":
          format = {
            "len": 5,
            "leftMin": 0,
            "top": 10
          };
          break;
        case "fiveBoxes":
          format = {
            "len": 5,
            "leftMin": 0,
            "top": 11
          };
          break;
        case "grade4":
          format = {
            "len": 4,
            "leftMin": 5,
            "top": 9
          };
          break;
        case "grade5":
          format = {
            "len": 5,
            "leftMin": 5,
            "top": 10
          };
          break;
      }
    }
    if (getObjType(cellrange) == "string") {
      cellrange = conditionformat_default.getRangeByTxt(cellrange);
    } else if (getObjType(cellrange) == "object") {
      cellrange = [cellrange];
    }
    if (getObjType(cellrange) != "array") {
      return tooltip_default.info("The cellrange parameter is invalid.", "");
    }
    let rule = {
      "type": type,
      "cellrange": cellrange,
      "format": format
    };
    let fileH = $.extend(true, [], store_default.luckysheetfile);
    let historyRules = conditionformat_default.getHistoryRules(fileH);
    let ruleArr2 = file["luckysheet_conditionformat_save"] || [];
    ruleArr2.push(rule);
    file["luckysheet_conditionformat_save"] = ruleArr2;
    let fileC = $.extend(true, [], store_default.luckysheetfile);
    let currentRules = conditionformat_default.getCurrentRules(fileC);
    conditionformat_default.ref(historyRules, currentRules);
    if (server_default.allowUpdate) {
      server_default.saveParam("all", file.index, ruleArr2, {"k": "luckysheet_conditionformat_save"});
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function deleteRangeConditionalFormat(itemIndex, options = {}) {
    if (!isRealNum(itemIndex)) {
      return tooltip_default.info("The itemIndex parameter is invalid.", "");
    }
    itemIndex = Number(itemIndex);
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let cdformat = $.extend(true, [], file.luckysheet_conditionformat_save);
    if (cdformat.length == 0) {
      return tooltip_default.info("This worksheet has no conditional format to delete", "");
    } else if (cdformat[itemIndex] == null) {
      return tooltip_default.info("The conditional format of the index cannot be found", "");
    }
    let cdformatItem = cdformat.splice(itemIndex, 1);
    let fileH = $.extend(true, [], store_default.luckysheetfile);
    let historyRules = conditionformat_default.getHistoryRules(fileH);
    file["luckysheet_conditionformat_save"] = cdformat;
    let fileC = $.extend(true, [], store_default.luckysheetfile);
    let currentRules = conditionformat_default.getCurrentRules(fileC);
    conditionformat_default.ref(historyRules, currentRules);
    if (server_default.allowUpdate) {
      server_default.saveParam("all", file.index, ruleArr, {"k": "luckysheet_conditionformat_save"});
    }
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return cdformatItem;
  }
  function clearRange(options = {}) {
    let {
      range: range2 = store_default.luckysheet_select_save,
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    range2 = JSON.parse(JSON.stringify(range2));
    if (getObjType(range2) == "string") {
      if (!formula_default.iscelldata(range2)) {
        return tooltip_default.info("The range parameter is invalid.", "");
      }
      let cellrange = formula_default.getcellrange(range2);
      range2 = [{
        "row": cellrange.row,
        "column": cellrange.column
      }];
    } else if (getObjType(range2) == "object") {
      if (range2.row == null || range2.column == null) {
        return tooltip_default.info("The range parameter is invalid.", "");
      }
      range2 = [{
        "row": range2.row,
        "column": range2.column
      }];
    }
    if (getObjType(range2) != "array") {
      return tooltip_default.info("The range parameter is invalid.", "");
    }
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let cfg = $.extend(true, {}, file.config);
    let has_PartMC = false;
    for (let s = 0; s < range2.length; s++) {
      let r1 = range2[s].row[0], r2 = range2[s].row[1];
      let c1 = range2[s].column[0], c2 = range2[s].column[1];
      has_PartMC = hasPartMC(cfg, r1, r2, c1, c2);
      if (has_PartMC) {
        break;
      }
    }
    if (has_PartMC) {
      return tooltip_default.info("Cannot perform this operation on partially merged cells", "");
    }
    let d = $.extend(true, [], file.data);
    if (d.length == 0) {
      d = $.extend(true, [], sheetmanage_default.buildGridData(file));
    }
    for (let s = 0; s < range2.length; s++) {
      let r1 = range2[s].row[0], r2 = range2[s].row[1];
      let c1 = range2[s].column[0], c2 = range2[s].column[1];
      for (let r3 = r1; r3 <= r2; r3++) {
        for (let c3 = c1; c3 <= c2; c3++) {
          let cell = d[r3][c3];
          if (getObjType(cell) == "object") {
            delete cell["m"];
            delete cell["v"];
            if (cell["f"] != null) {
              delete cell["f"];
              formula_default.delFunctionGroup(r3, c3, file.index);
              delete cell["spl"];
            }
            if (cell["ct"] != null && cell["ct"].t == "inlineStr") {
              delete cell["ct"];
            }
          } else {
            d[r3][c3] = null;
          }
        }
      }
    }
    if (file.index == store_default.currentSheetIndex) {
      jfrefreshgrid(d, range2);
    } else {
      file.data = d;
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function deleteRange(move, options = {}) {
    let moveList = ["left", "up"];
    if (!moveList.includes(move)) {
      return tooltip_default.info("The move parameter is invalid.", "");
    }
    let {
      range: range2 = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1],
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    if (getObjType(range2) == "string") {
      if (!formula_default.iscelldata(range2)) {
        return tooltip_default.info("The range parameter is invalid.", "");
      }
      let cellrange = formula_default.getcellrange(range2);
      range2 = {
        "row": cellrange.row,
        "column": cellrange.column
      };
    }
    if (getObjType(range2) != "object" || range2.row == null || range2.column == null) {
      return tooltip_default.info("The range parameter is invalid.", "");
    }
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let str = range2.row[0], edr = range2.row[1], stc = range2.column[0], edc = range2.column[1];
    if (move == "left") {
      luckysheetDeleteCell("moveLeft", str, edr, stc, edc, order);
    } else if (move == "up") {
      luckysheetDeleteCell("moveUp", str, edr, stc, edc, order);
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function matrixOperation(type, options = {}) {
    let typeValues = [
      "flipUpDown",
      "flipLeftRight",
      "flipClockwise",
      "flipCounterClockwise",
      "transpose",
      "deleteZeroByRow",
      "deleteZeroByColumn",
      "removeDuplicateByRow",
      "removeDuplicateByColumn",
      "newMatrix"
    ];
    if (!type || typeValues.indexOf(type) < 0) {
      return tooltip_default.info("The type parameter is invalid.", "");
    }
    let curRange = store_default.luckysheet_select_save[0];
    let {
      range: range2 = curRange,
      success
    } = __spreadValues({}, options);
    if (range2 instanceof Array && range2.length > 1) {
      tooltip_default.info(locale_default().drag.noMulti, "");
      return;
    }
    if (range2 && typeof range2 === "string" && formula_default.iscelldata(range2)) {
      range2 = formula_default.getcellrange(range2);
    }
    let getdata = getdatabyselection(range2);
    let arr = [];
    if (getdata.length === 0) {
      return;
    }
    let getdatalen, collen, arr1;
    switch (type) {
      case "flipUpDown":
        for (let r2 = getdata.length - 1; r2 >= 0; r2--) {
          let a = [];
          for (let c2 = 0; c2 < getdata[0].length; c2++) {
            let value = "";
            if (getdata[r2] != null && getdata[r2][c2] != null) {
              value = getdata[r2][c2];
            }
            a.push(value);
          }
          arr.push(a);
        }
        break;
      case "flipLeftRight":
        for (let r2 = 0; r2 < getdata.length; r2++) {
          let a = [];
          for (let c2 = getdata[0].length - 1; c2 >= 0; c2--) {
            let value = "";
            if (getdata[r2] != null && getdata[r2][c2] != null) {
              value = getdata[r2][c2];
            }
            a.push(value);
          }
          arr.push(a);
        }
        break;
      case "flipClockwise":
        for (let c2 = 0; c2 < getdata[0].length; c2++) {
          let a = [];
          for (let r2 = getdata.length - 1; r2 >= 0; r2--) {
            let value = "";
            if (getdata[r2] != null && getdata[r2][c2] != null) {
              value = getdata[r2][c2];
            }
            a.push(value);
          }
          arr.push(a);
        }
        break;
      case "flipCounterClockwise":
        for (let c2 = getdata[0].length - 1; c2 >= 0; c2--) {
          let a = [];
          for (let r2 = 0; r2 < getdata.length; r2++) {
            let value = "";
            if (getdata[r2] != null && getdata[r2][c2] != null) {
              value = getdata[r2][c2];
            }
            a.push(value);
          }
          arr.push(a);
        }
        break;
      case "transpose":
        for (let c2 = 0; c2 < getdata[0].length; c2++) {
          let a = [];
          for (let r2 = 0; r2 < getdata.length; r2++) {
            let value = "";
            if (getdata[r2] != null && getdata[r2][c2] != null) {
              value = getdata[r2][c2];
            }
            a.push(value);
          }
          arr.push(a);
        }
        break;
      case "deleteZeroByRow":
        getdatalen = getdata[0].length;
        for (let r2 = 0; r2 < getdata.length; r2++) {
          let a = [], stdel = true, eddel = true;
          for (let c2 = 0; c2 < getdatalen; c2++) {
            let value = "";
            if (getdata[r2] != null && getdata[r2][c2] != null) {
              value = getdata[r2][c2];
              if ((value.v == "0" || value.v == 0) && stdel) {
                continue;
              } else {
                stdel = false;
              }
            }
            a.push(value);
          }
          let a12 = [];
          if (a.length == getdatalen) {
            a12 = a;
          } else {
            for (let c2 = a.length - 1; c2 >= 0; c2--) {
              let value = "";
              if (a[c2] != null) {
                value = a[c2];
                if ((value.v == "0" || value.v == 0) && eddel) {
                  continue;
                } else {
                  eddel = false;
                }
              }
              a12.unshift(value);
            }
            let l = getdatalen - a12.length;
            for (let c1 = 0; c1 < l; c1++) {
              a12.push("");
            }
          }
          arr.push(a12);
        }
        break;
      case "deleteZeroByColumn":
        getdatalen = getdata.length;
        collen = getdata[0].length;
        for (let c2 = 0; c2 < collen; c2++) {
          let a = [], stdel = true, eddel = true;
          for (let r2 = 0; r2 < getdatalen; r2++) {
            let value = "";
            if (getdata[r2] != null && getdata[r2][c2] != null) {
              value = getdata[r2][c2];
              if ((value.v == "0" || value.v == 0) && stdel) {
                continue;
              } else {
                stdel = false;
              }
            }
            a.push(value);
          }
          let a12 = [];
          if (a.length == getdatalen) {
            a12 = a;
          } else {
            for (let r2 = a.length - 1; r2 >= 0; r2--) {
              let value = "";
              if (a[r2] != null) {
                value = a[r2];
                if ((value.v == "0" || value.v == 0) && eddel) {
                  continue;
                } else {
                  eddel = false;
                }
              }
              a12.unshift(value);
            }
            let l = getdatalen - a12.length;
            for (let r1 = 0; r1 < l; r1++) {
              a12.push("");
            }
          }
          arr.push(a12);
        }
        arr1 = [];
        for (let c2 = 0; c2 < arr[0].length; c2++) {
          let a = [];
          for (let r2 = 0; r2 < arr.length; r2++) {
            let value = "";
            if (arr[r2] != null && arr[r2][c2] != null) {
              value = arr[r2][c2];
            }
            a.push(value);
          }
          arr1.push(a);
        }
        break;
      case "removeDuplicateByRow":
        getdatalen = getdata[0].length;
        for (let r2 = 0; r2 < getdata.length; r2++) {
          let a = [], repeat = {};
          for (let c2 = 0; c2 < getdatalen; c2++) {
            let value = null;
            if (getdata[r2] != null && getdata[r2][c2] != null) {
              value = getdata[r2][c2];
              if (value.v in repeat) {
                repeat[value.v].push(value);
              } else {
                repeat[value.v] = [];
                repeat[value.v].push(value);
              }
            }
          }
          for (let c2 = 0; c2 < getdatalen; c2++) {
            let value = null;
            if (getdata[r2] != null && getdata[r2][c2] != null) {
              value = getdata[r2][c2];
              if (repeat[value.v].length == 1) {
                a.push(value);
              }
            }
          }
          let l = getdatalen - a.length;
          for (let c1 = 0; c1 < l; c1++) {
            a.push(null);
          }
          arr.push(a);
        }
        break;
      case "removeDuplicateByColumn":
        collen = getdata[0].length;
        getdatalen = getdata.length;
        for (let c2 = 0; c2 < collen; c2++) {
          let a = [], repeat = {};
          for (let r2 = 0; r2 < getdatalen; r2++) {
            let value = null;
            if (getdata[r2] != null && getdata[r2][c2] != null) {
              value = getdata[r2][c2];
              if (value.v in repeat) {
                repeat[value.v].push(value);
              } else {
                repeat[value.v] = [];
                repeat[value.v].push(value);
              }
            }
          }
          for (let r2 = 0; r2 < getdatalen; r2++) {
            let value = null;
            if (getdata[r2] != null && getdata[r2][c2] != null) {
              value = getdata[r2][c2];
              if (repeat[value.v].length == 1) {
                a.push(value);
              }
            }
          }
          a1 = a;
          let l = getdatalen - a1.length;
          for (let r1 = 0; r1 < l; r1++) {
            a1.push(null);
          }
          arr.push(a1);
        }
        arr1 = [];
        for (let c2 = 0; c2 < arr[0].length; c2++) {
          let a = [];
          for (let r2 = 0; r2 < arr.length; r2++) {
            let value = null;
            if (arr[r2] != null && arr[r2][c2] != null) {
              value = arr[r2][c2];
            }
            a.push(value);
          }
          arr1.push(a);
        }
        break;
      case "newMatrix":
        console.log("TODO");
        break;
    }
    editor_default.controlHandler(arr, range2);
    if (success && typeof success === "function") {
      success();
    }
  }
  function matrixCalculation(type, number, options = {}) {
    let typeValues = [
      "plus",
      "minus",
      "multiply",
      "divided",
      "power",
      "root",
      "log"
    ];
    if (!type || typeValues.indexOf(type) < 0) {
      return tooltip_default.info("The type parameter is invalid.", "");
    }
    if (!isRealNum(number)) {
      return tooltip_default.info("The number parameter is invalid.", "");
    }
    let curRange = store_default.luckysheet_select_save[0];
    let {
      range: range2 = curRange,
      success
    } = __spreadValues({}, options);
    if (range2 instanceof Array && range2.length > 1) {
      tooltip_default.info(locale_default().drag.noMulti, "");
      return;
    }
    if (range2 && typeof range2 === "string" && formula_default.iscelldata(range2)) {
      range2 = formula_default.getcellrange(range2);
    }
    let getdata = getdatabyselection(range2);
    if (getdata.length == 0) {
      return;
    }
    let arr = [];
    for (let r2 = 0; r2 < getdata.length; r2++) {
      let a = [];
      for (let c2 = 0; c2 < getdata[0].length; c2++) {
        let value = "";
        if (getdata[r2] != null && getdata[r2][c2] != null) {
          value = getdata[r2][c2];
          if (parseInt(value) != null && getdata[r2][c2].ct != void 0 && getdata[r2][c2].ct.t == "n") {
            if (type == "minus") {
              value.v = value.v - number;
            } else if (type == "multiply") {
              value.v = value.v * number;
            } else if (type == "divided") {
              value.v = numFormat(value.v / number, 4);
            } else if (type == "power") {
              value.v = Math.pow(value.v, number);
            } else if (type == "root") {
              if (number == 2) {
                value.v = numFormat(Math.sqrt(value.v), 4);
              } else if (number == 3 && Math.cbrt) {
                value.v = numFormat(Math.cbrt(value.v), 4);
              } else {
                value.v = numFormat(jfnqrt(value.v, number), 4);
              }
            } else if (type == "log") {
              value.v = numFormat(Math.log(value.v) * 1e4 / Math.log(Math.abs(number)), 4);
            } else {
              value.v = value.v + number;
            }
            if (value.v == null) {
              value.m = "";
            } else {
              value.m = value.v.toString();
            }
          }
        }
        a.push(value);
      }
      arr.push(a);
    }
    editor_default.controlHandler(arr, range2);
    if (success && typeof success === "function") {
      success();
    }
  }
  function setSheetAdd(options = {}) {
    let lastOrder = store_default.luckysheetfile.length - 1;
    let {
      sheetObject = {},
      order = lastOrder,
      success
    } = __spreadValues({}, options);
    if (!isRealNum(order)) {
      return tooltip_default.info("Parameter is not a table index", "");
    }
    order = Number(order);
    let index2 = sheetmanage_default.generateRandomSheetIndex();
    if (sheetObject.calcChain && sheetObject.calcChain.length > 0) {
      sheetObject.calcChain.forEach((item2) => {
        item2.index = index2;
      });
    }
    let sheetname = sheetmanage_default.generateRandomSheetName(store_default.luckysheetfile, false);
    if (!!sheetObject.name) {
      let sameName = false;
      for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
        if (store_default.luckysheetfile[i2].name == sheetObject.name) {
          sameName = true;
          break;
        }
      }
      if (!sameName) {
        sheetname = sheetObject.name;
      }
    }
    $("#luckysheet-sheet-container-c").append(replaceHtml(sheetHTML, {
      "index": index2,
      "active": "",
      "name": sheetname,
      "style": "",
      "colorset": ""
    }));
    let sheetconfig = {
      "name": "",
      "color": "",
      "status": "0",
      "order": "",
      "index": "",
      "celldata": [],
      "row": store_default.defaultrowNum,
      "column": store_default.defaultcolumnNum,
      "config": {},
      "pivotTable": null,
      "isPivotTable": false
    };
    sheetconfig = $.extend(true, sheetconfig, sheetObject);
    sheetconfig.index = index2;
    sheetconfig.name = sheetname;
    sheetconfig.order = order;
    if (order <= 0) {
      let beforeIndex = store_default.luckysheetfile[0].index;
      let beforeObj = $("#luckysheet-sheets-item" + beforeIndex);
      $("#luckysheet-sheets-item" + index2).insertBefore(beforeObj);
      store_default.luckysheetfile.splice(0, 0, sheetconfig);
    } else {
      if (order > store_default.luckysheetfile.length) {
        order = store_default.luckysheetfile.length;
      }
      let afterIndex = store_default.luckysheetfile[order - 1].index;
      let afterObj = $("#luckysheet-sheets-item" + afterIndex);
      $("#luckysheet-sheets-item" + index2).insertAfter(afterObj);
      store_default.luckysheetfile.splice(order, 0, sheetconfig);
    }
    let orders = {};
    store_default.luckysheetfile.forEach((item2, i2, arr) => {
      arr[i2].order = i2;
      orders[item2.index.toString()] = i2;
    });
    $("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active");
    $("#luckysheet-sheets-item" + index2).addClass("luckysheet-sheets-item-active");
    $("#luckysheet-cell-main").append('<div id="luckysheet-datavisual-selection-set-' + index2 + '" class="luckysheet-datavisual-selection-set"></div>');
    cleargridelement(true);
    server_default.saveParam("sha", null, $.extend(true, {}, sheetconfig));
    server_default.saveParam("shr", null, orders);
    if (store_default.clearjfundo) {
      store_default.jfundo.length = 0;
      let redo2 = {};
      redo2["type"] = "addSheet";
      redo2["sheetconfig"] = $.extend(true, {}, sheetconfig);
      redo2["index"] = index2;
      redo2["currentSheetIndex"] = store_default.currentSheetIndex;
      store_default.jfredo.push(redo2);
    }
    sheetmanage_default.changeSheetExec(index2, false, true);
    if (success && typeof success === "function") {
      success();
    }
    return sheetconfig;
  }
  function setSheetDelete(options = {}) {
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    if (store_default.luckysheetfile.length === 1) {
      return tooltip_default.info(locale_default().sheetconfig.noMoreSheet, "");
    }
    sheetmanage_default.deleteSheet(file.index);
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return file;
  }
  function setSheetCopy(options = {}) {
    let {
      targetOrder,
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    if (targetOrder == null) {
      targetOrder = order + 1;
    }
    if (!isRealNum(targetOrder)) {
      return tooltip_default.info("The targetOrder parameter is invalid.", "");
    }
    let copyindex = file.index;
    let index2 = sheetmanage_default.generateRandomSheetIndex();
    let copyjson = $.extend(true, {}, file);
    copyjson.order = store_default.luckysheetfile.length;
    copyjson.index = index2;
    copyjson.name = sheetmanage_default.generateCopySheetName(store_default.luckysheetfile, copyjson.name);
    let colorset = "";
    if (copyjson.color != null) {
      colorset = '<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + copyjson.color + ';"></div>';
    }
    let afterObj = $("#luckysheet-sheets-item" + copyindex);
    if (isRealNum(targetOrder)) {
      afterObj = $("#luckysheet-sheets-item" + store_default.luckysheetfile[targetOrder - 1].index);
    }
    $("#luckysheet-sheet-container-c").append(replaceHtml(sheetHTML, {
      "index": copyjson.index,
      "active": "",
      "name": copyjson.name,
      "order": copyjson.order,
      "style": "",
      "colorset": colorset
    }));
    $("#luckysheet-sheets-item" + copyjson.index).insertAfter(afterObj);
    store_default.luckysheetfile.splice(targetOrder, 0, copyjson);
    $("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active");
    $("#luckysheet-sheets-item" + index2).addClass("luckysheet-sheets-item-active");
    $("#luckysheet-cell-main").append('<div id="luckysheet-datavisual-selection-set-' + index2 + '" class="luckysheet-datavisual-selection-set"></div>');
    cleargridelement(true);
    server_default.saveParam("shc", index2, {"copyindex": copyindex, "name": copyjson.name});
    sheetmanage_default.changeSheetExec(index2);
    sheetmanage_default.reOrderAllSheet();
    if (store_default.clearjfundo) {
      store_default.jfredo.push({
        "type": "copySheet",
        "copyindex": copyindex,
        "index": copyjson.index,
        "sheetIndex": copyjson.index
      });
    } else if (store_default.jfredo.length > 0) {
      let jfredostr = store_default.jfredo[store_default.jfredo.length - 1];
      if (jfredostr.type == "copySheet") {
        jfredostr.index = copyjson.index;
        jfredostr.sheetIndex = copyjson.index;
      }
    }
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return copyjson;
  }
  function setSheetHide(options = {}) {
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    sheetmanage_default.setSheetHide(file.index);
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return file;
  }
  function setSheetShow(options = {}) {
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    sheetmanage_default.setSheetShow(file.index);
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return file;
  }
  function setSheetActive(order, options = {}) {
    if (order == null || !isRealNum(order) || store_default.luckysheetfile[order] == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let file = store_default.luckysheetfile[order];
    let {
      success
    } = __spreadValues({}, options);
    $("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active");
    $("#luckysheet-sheets-item" + file.index).addClass("luckysheet-sheets-item-active");
    sheetmanage_default.changeSheet(file.index);
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    server_default.multipleRangeShow();
    return file;
  }
  function setSheetName(name2, options = {}) {
    if (getObjType(name2) != "string" || name2.toString().length == 0) {
      return tooltip_default.info("The name parameter is invalid.", "");
    }
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let oldtxt = file.name;
    file.name = name2;
    $("#luckysheet-sheets-item" + file.index + " .luckysheet-sheets-item-name").text(name2);
    server_default.saveParam("all", file.index, name2, {"k": "name"});
    if (store_default.clearjfundo) {
      let redo2 = {};
      redo2["type"] = "sheetName";
      redo2["sheetIndex"] = file.index;
      redo2["oldtxt"] = oldtxt;
      redo2["txt"] = name2;
      store_default.jfundo.length = 0;
      store_default.jfredo.push(redo2);
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function setSheetColor(color, options = {}) {
    if (getObjType(color) != "string" || color.toString().length == 0) {
      return tooltip_default.info("The color parameter is invalid.", "");
    }
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let oldcolor = file.color;
    file.color = color;
    $("#luckysheet-sheets-item" + file.index).find(".luckysheet-sheets-item-color").remove();
    $("#luckysheet-sheets-item" + file.index).append('<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + color + ';"></div>');
    server_default.saveParam("all", file.index, color, {"k": "color"});
    if (store_default.clearjfundo) {
      let redo2 = {};
      redo2["type"] = "sheetColor";
      redo2["sheetIndex"] = file.index;
      redo2["oldcolor"] = oldcolor;
      redo2["color"] = color;
      store_default.jfundo.length = 0;
      store_default.jfredo.push(redo2);
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function setSheetMove(type, options = {}) {
    if (type != "left" && type != "right" && !isRealNum(type)) {
      return tooltip_default.info("Type parameter not available", "");
    }
    if (isRealNum(type)) {
      type = parseInt(type);
    }
    let curOrder = getSheetIndex(store_default.currentSheetIndex);
    let {
      order = curOrder,
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("ncorrect worksheet index", "");
    }
    let sheetIndex = file.index;
    if (type == "left") {
      if (order == 0) {
        return;
      }
      let prevIndex = store_default.luckysheetfile[order - 1].index;
      $("#luckysheet-sheets-item" + sheetIndex).insertBefore($("#luckysheet-sheets-item" + prevIndex));
      store_default.luckysheetfile.splice(order, 1);
      store_default.luckysheetfile.splice(order - 1, 0, file);
    } else if (type == "right") {
      if (order == store_default.luckysheetfile.length - 1) {
        return;
      }
      let nextIndex = store_default.luckysheetfile[order + 1].index;
      $("#luckysheet-sheets-item" + sheetIndex).insertAfter($("#luckysheet-sheets-item" + nextIndex));
      store_default.luckysheetfile.splice(order, 1);
      store_default.luckysheetfile.splice(order + 1, 0, file);
    } else {
      if (type < 0) {
        type = 0;
      }
      if (type > store_default.luckysheetfile.length - 1) {
        type = store_default.luckysheetfile.length - 1;
      }
      if (type == order) {
        return;
      }
      if (type < order) {
        let prevIndex = store_default.luckysheetfile[type].index;
        $("#luckysheet-sheets-item" + sheetIndex).insertBefore($("#luckysheet-sheets-item" + prevIndex));
      } else {
        let nextIndex = store_default.luckysheetfile[type].index;
        $("#luckysheet-sheets-item" + sheetIndex).insertAfter($("#luckysheet-sheets-item" + nextIndex));
      }
      store_default.luckysheetfile.splice(order, 1);
      store_default.luckysheetfile.splice(type, 0, file);
    }
    let orders = {};
    store_default.luckysheetfile.forEach((item2, i2, arr) => {
      arr[i2].order = i2;
      orders[item2.index.toString()] = i2;
    });
    server_default.saveParam("shr", null, orders);
    if (success && typeof success === "function") {
      success();
    }
  }
  function setSheetOrder(orderList, options = {}) {
    if (orderList == null || orderList.length == 0) {
      return tooltip_default.info("Type orderList not available", "");
    }
    let orderListMap = {};
    orderList.forEach((item2) => {
      orderListMap[item2.index.toString()] = item2.order;
    });
    store_default.luckysheetfile.sort((x, y) => {
      let order_x = orderListMap[x.index.toString()];
      let order_y = orderListMap[y.index.toString()];
      if (order_x != null && order_y != null) {
        return order_x - order_y;
      } else if (order_x != null) {
        return -1;
      } else if (order_y != null) {
        return 1;
      } else {
        return 1;
      }
    });
    let orders = {};
    store_default.luckysheetfile.forEach((item2, i2, arr) => {
      arr[i2].order = i2;
      orders[item2.index.toString()] = i2;
      if (i2 > 0) {
        let preIndex = arr[i2 - 1].index;
        $("#luckysheet-sheets-item" + item2.index).insertAfter($("#luckysheet-sheets-item" + preIndex));
      }
    });
    server_default.saveParam("shr", null, orders);
    let {
      success
    } = __spreadValues({}, options);
    if (success && typeof success === "function") {
      success();
    }
  }
  function setSheetZoom(zoom, options = {}) {
    if (!isRealNum(zoom) || zoom < 0.1 || zoom > 4) {
      return tooltip_default.info("The zoom parameter is invalid.", "");
    }
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    file["zoomRatio"] = zoom;
    server_default.saveParam("all", file.index, zoom, {"k": "zoomRatio"});
    if (file.index == store_default.currentSheetIndex) {
      store_default.zoomRatio = zoom;
      let currentSheet = sheetmanage_default.getSheetByIndex();
      imageCtrl_default.images = currentSheet.images;
      imageCtrl_default.allImagesShow();
      imageCtrl_default.init();
      zoomNumberDomBind();
      zoomRefreshView();
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function showGridLines(options = {}) {
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    file.showGridLines = true;
    if (file.index == store_default.currentSheetIndex) {
      store_default.showGridLines = true;
      setTimeout(function() {
        luckysheetrefreshgrid();
      }, 1);
    }
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return file;
  }
  function hideGridLines(options = {}) {
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    file.showGridLines = false;
    if (file.index == store_default.currentSheetIndex) {
      store_default.showGridLines = false;
      setTimeout(function() {
        luckysheetrefreshgrid();
      }, 1);
    }
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return file;
  }
  function refresh(options = {}) {
    jfrefreshgrid();
    let {
      success
    } = __spreadValues({}, options);
    if (success && typeof success === "function") {
      success();
    }
  }
  function scroll(options = {}) {
    let {
      scrollLeft,
      scrollTop,
      targetRow,
      targetColumn,
      success
    } = __spreadValues({}, options);
    if (scrollLeft != null) {
      if (!isRealNum(scrollLeft)) {
        return tooltip_default.info("The scrollLeft parameter is invalid.", "");
      }
      $("#luckysheet-scrollbar-x").scrollLeft(scrollLeft);
    } else if (targetColumn != null) {
      if (!isRealNum(targetColumn)) {
        return tooltip_default.info("The targetColumn parameter is invalid.", "");
      }
      let col = store_default.visibledatacolumn[targetColumn], col_pre = targetColumn <= 0 ? 0 : store_default.visibledatacolumn[targetColumn - 1];
      $("#luckysheet-scrollbar-x").scrollLeft(col_pre);
    }
    if (scrollTop != null) {
      if (!isRealNum(scrollTop)) {
        return tooltip_default.info("The scrollTop parameter is invalid.", "");
      }
      $("#luckysheet-scrollbar-y").scrollTop(scrollTop);
    } else if (targetRow != null) {
      if (!isRealNum(targetRow)) {
        return tooltip_default.info("The targetRow parameter is invalid.", "");
      }
      let row = store_default.visibledatarow[targetRow], row_pre = targetRow <= 0 ? 0 : store_default.visibledatarow[targetRow - 1];
      $("#luckysheet-scrollbar-y").scrollTop(row_pre);
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function resize(options = {}) {
    luckysheetsizeauto();
    let {
      success
    } = __spreadValues({}, options);
    if (success && typeof success === "function") {
      success();
    }
  }
  function getScreenshot(options = {}) {
    let {
      range: range2 = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1]
    } = __spreadValues({}, options);
    if (getObjType(range2) == "string") {
      if (!formula_default.iscelldata(range2)) {
        return tooltip_default.info("The range parameter is invalid.", "");
      }
      let cellrange = formula_default.getcellrange(range2);
      range2 = {
        "row": cellrange.row,
        "column": cellrange.column
      };
    }
    if (getObjType(range2) != "object" || range2.row == null || range2.column == null) {
      return tooltip_default.info("The range parameter is invalid.", "");
    }
    let str = range2.row[0], edr = range2.row[1], stc = range2.column[0], edc = range2.column[1];
    let has_PartMC = hasPartMC(store_default.config, str, edr, stc, edc);
    if (has_PartMC) {
      return tooltip_default.info("Cannot perform this operation on partially merged cells", "");
    }
    let visibledatarow = store_default.visibledatarow;
    let visibledatacolumn = store_default.visibledatacolumn;
    let scrollHeight, rh_height;
    if (str - 1 < 0) {
      scrollHeight = 0;
      rh_height = visibledatarow[edr];
    } else {
      scrollHeight = visibledatarow[str - 1];
      rh_height = visibledatarow[edr] - visibledatarow[str - 1];
    }
    let scrollWidth, ch_width;
    if (stc - 1 < 0) {
      scrollWidth = 0;
      ch_width = visibledatacolumn[edc];
    } else {
      scrollWidth = visibledatacolumn[stc - 1];
      ch_width = visibledatacolumn[edc] - visibledatacolumn[stc - 1];
    }
    let newCanvas = $("<canvas>").attr({
      width: Math.ceil(ch_width * store_default.devicePixelRatio),
      height: Math.ceil(rh_height * store_default.devicePixelRatio)
    }).css({width: ch_width, height: rh_height});
    luckysheetDrawMain(scrollWidth, scrollHeight, ch_width, rh_height, 1, 1, null, null, newCanvas);
    let ctx_newCanvas = newCanvas.get(0).getContext("2d");
    ctx_newCanvas.beginPath();
    ctx_newCanvas.moveTo(0, 0);
    ctx_newCanvas.lineTo(0, store_default.devicePixelRatio * rh_height);
    ctx_newCanvas.lineWidth = store_default.devicePixelRatio * 2;
    ctx_newCanvas.strokeStyle = luckysheetdefaultstyle.strokeStyle;
    ctx_newCanvas.stroke();
    ctx_newCanvas.closePath();
    ctx_newCanvas.beginPath();
    ctx_newCanvas.moveTo(0, 0);
    ctx_newCanvas.lineTo(store_default.devicePixelRatio * ch_width, 0);
    ctx_newCanvas.lineWidth = store_default.devicePixelRatio * 2;
    ctx_newCanvas.strokeStyle = luckysheetdefaultstyle.strokeStyle;
    ctx_newCanvas.stroke();
    ctx_newCanvas.closePath();
    let url = newCanvas.get(0).toDataURL("image/png");
    return url;
  }
  function setWorkbookName(name2, options = {}) {
    if (name2 == null || name2.toString().length == 0) {
      return tooltip_default.info("The name parameter is invalid.", "");
    }
    $("#luckysheet_info_detail_input").val(name2);
    let {
      success
    } = __spreadValues({}, options);
    if (success && typeof success === "function") {
      success();
    }
  }
  function getWorkbookName(options = {}) {
    let name2 = "";
    let element = $("#luckysheet_info_detail_input");
    if (element.length == 0) {
      tooltip_default.info("Failed to get workbook name, label loading failed!");
      return name2;
    }
    name2 = $.trim(element.val());
    let {
      success
    } = __spreadValues({}, options);
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return name2;
  }
  function undo(options = {}) {
    let ctr = $.extend(true, {}, store_default.jfredo[store_default.jfredo.length - 1]);
    controlHistory_default.redo(new Event("custom"));
    luckysheetactiveCell();
    let {
      success
    } = __spreadValues({}, options);
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return ctr;
  }
  function redo(options = {}) {
    let ctr = $.extend(true, {}, store_default.jfundo[store_default.jfundo.length - 1]);
    controlHistory_default.undo(new Event("custom"));
    luckysheetactiveCell();
    let {
      success
    } = __spreadValues({}, options);
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return ctr;
  }
  function getAllSheets() {
    let data = $.extend(true, [], store_default.luckysheetfile);
    data.forEach((item2, index2, arr) => {
      if (item2.data != null && item2.data.length > 0) {
        item2.celldata = sheetmanage_default.getGridData(item2.data);
      }
      delete item2.load;
      delete item2.freezen;
    });
    return data;
  }
  function getSheet(options = {}) {
    let {
      index: index2,
      order,
      name: name2
    } = __spreadValues({}, options);
    if (index2 != null) {
      return sheetmanage_default.getSheetByIndex(index2);
    } else if (order != null) {
      return store_default.luckysheetfile[order];
    } else if (name2 != null) {
      return sheetmanage_default.getSheetByName(name2);
    }
    return sheetmanage_default.getSheetByIndex();
  }
  function getSheetData(options = {}) {
    let {
      order = getSheetIndex(store_default.currentSheetIndex)
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let data = $.extend(true, [], file.data);
    if (data == null || data.length == 0) {
      data = $.extend(true, [], sheetmanage_default.buildGridData(file));
    }
    return data;
  }
  function getConfig(options = {}) {
    let {
      order = getSheetIndex(store_default.currentSheetIndex)
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let config = $.extend(true, {}, file.config);
    return config;
  }
  function setConfig(cfg, options = {}) {
    if (getObjType(cfg) != "object") {
      return tooltip_default.info("The cfg parameter is invalid.", "");
    }
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    file.config = cfg;
    if (file.index == store_default.currentSheetIndex) {
      store_default.config = cfg;
      if ("rowhidden" in cfg || "colhidden" in cfg || "rowlen" in cfg || "columnlen" in cfg) {
        jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
      }
      setTimeout(function() {
        luckysheetrefreshgrid();
      }, 1);
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function getLuckysheetfile() {
    return getluckysheetfile();
  }
  function setDataVerification(optionItem, options = {}) {
    if (getObjType(optionItem) != "object") {
      return tooltip_default.info("The optionItem parameter is invalid.", "");
    }
    let {
      type,
      type2 = null,
      value1 = "",
      value2 = "",
      remote = false,
      prohibitInput = false,
      hintShow = false,
      hintText = "",
      checked = false
    } = __spreadValues({}, optionItem);
    let typeValues = ["dropdown", "checkbox", "number", "number_integer", "number_decimal", "text_content", "text_length", "date", "validity"];
    let type2Values_1 = ["bw", "nb", "eq", "ne", "gt", "lt", "gte", "lte"];
    let type2Values_2 = ["include", "exclude", "equal"];
    let type2Values_3 = ["bw", "nb", "eq", "ne", "bf", "nbf", "af", "naf"];
    let type2Values_4 = ["card", "phone"];
    if (!typeValues.includes(type)) {
      return tooltip_default.info("The optionItem.type parameter is invalid.", "");
    }
    let dvText = locale_default().dataVerification;
    if (type == "dropdown") {
      if (value1.length == 0) {
        tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo1);
        return;
      }
    } else if (type == "checkbox") {
      if (value1.length == 0 || value2.length == 0) {
        tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo2);
        return;
      }
    } else if (type == "number" || type == "number_integer" || type == "number_decimal") {
      if (!type2Values_1.includes(type2)) {
        return tooltip_default.info("The optionItem.type2 parameter is invalid.", "");
      }
      if (!isRealNum(value1)) {
        tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo3);
        return;
      }
      if (type2 == "bw" || type2 == "nb") {
        if (!isRealNum(value2)) {
          tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo3);
          return;
        }
        if (Number(value2) < Number(value1)) {
          tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo4);
          return;
        }
      }
    } else if (type == "text_content") {
      if (!type2Values_2.includes(type2)) {
        return tooltip_default.info("The optionItem.type2 parameter is invalid.", "");
      }
      if (value1.length == 0) {
        tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo5);
        return;
      }
    } else if (type == "text_length") {
      if (!type2Values_1.includes(type2)) {
        return tooltip_default.info("The optionItem.type2 parameter is invalid.", "");
      }
      if (!isRealNum(value1)) {
        tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo3);
        return;
      }
      if (type2 == "bw" || type2 == "nb") {
        if (!isRealNum(value2)) {
          tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo3);
          return;
        }
        if (Number(value2) < Number(value1)) {
          tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo4);
          return;
        }
      }
    } else if (type == "date") {
      if (!type2Values_3.includes(type2)) {
        return tooltip_default.info("The optionItem.type2 parameter is invalid.", "");
      }
      if (!isdatetime(value1)) {
        tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo6);
        return;
      }
      if (type2 == "bw" || type2 == "nb") {
        if (!isdatetime(value2)) {
          tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo6);
          return;
        }
        if (diff(value1, value2) > 0) {
          tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', dvText.tooltipInfo7);
          return;
        }
      }
    } else if (type == "validity") {
      if (!type2Values_4.includes(type2)) {
        return tooltip_default.info("The optionItem.type2 parameter is invalid.", "");
      }
    }
    if (getObjType(remote) != "boolean") {
      return tooltip_default.info("The optionItem.remote parameter is invalid.", "");
    }
    if (getObjType(prohibitInput) != "boolean") {
      return tooltip_default.info("The optionItem.prohibitInput parameter is invalid.", "");
    }
    if (getObjType(hintShow) != "boolean") {
      return tooltip_default.info("The optionItem.hintShow parameter is invalid.", "");
    }
    let {
      range: range2 = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1],
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    if (getObjType(range2) == "string") {
      if (!formula_default.iscelldata(range2)) {
        return tooltip_default.info("The range parameter is invalid.", "");
      }
      let cellrange = formula_default.getcellrange(range2);
      range2 = {
        "row": cellrange.row,
        "column": cellrange.column
      };
    }
    if (getObjType(range2) != "object" || range2.row == null || range2.column == null) {
      return tooltip_default.info("The range parameter is invalid.", "");
    }
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let item2 = {
      type,
      type2,
      value1,
      value2,
      checked,
      remote,
      prohibitInput,
      hintShow,
      hintText
    };
    let currentDataVerification = $.extend(true, {}, file.dataVerification);
    let data = $.extend(true, [], file.data);
    if (data.length == 0) {
      data = sheetmanage_default.buildGridData(file);
    }
    let str = range2.row[0], edr = range2.row[1], stc = range2.column[0], edc = range2.column[1];
    for (let r2 = str; r2 <= edr; r2++) {
      for (let c2 = stc; c2 <= edc; c2++) {
        currentDataVerification[r2 + "_" + c2] = item2;
        if (type == "checkbox") {
          item2.checked ? setcellvalue(r2, c2, data, item2.value1) : setcellvalue(r2, c2, data, item2.value2);
        }
      }
    }
    if (file.index == store_default.currentSheetIndex) {
      let historyDataVerification = $.extend(true, {}, file.dataVerification);
      if (type == "checkbox") {
        dataVerificationCtrl_default.refOfCheckbox(historyDataVerification, currentDataVerification, store_default.currentSheetIndex, data, range2);
      } else {
        dataVerificationCtrl_default.ref(historyDataVerification, currentDataVerification, store_default.currentSheetIndex);
      }
    } else {
      file.dataVerification = currentDataVerification;
      file.data = data;
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function deleteDataVerification(options = {}) {
    let {
      range: range2 = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1],
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    if (getObjType(range2) == "string") {
      if (!formula_default.iscelldata(range2)) {
        return tooltip_default.info("The range parameter is invalid.", "");
      }
      let cellrange = formula_default.getcellrange(range2);
      range2 = {
        "row": cellrange.row,
        "column": cellrange.column
      };
    }
    if (getObjType(range2) != "object" || range2.row == null || range2.column == null) {
      return tooltip_default.info("The range parameter is invalid.", "");
    }
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let currentDataVerification = $.extend(true, {}, file.dataVerification);
    let str = range2.row[0], edr = range2.row[1], stc = range2.column[0], edc = range2.column[1];
    for (let r2 = str; r2 <= edr; r2++) {
      for (let c2 = stc; c2 <= edc; c2++) {
        delete currentDataVerification[r2 + "_" + c2];
      }
    }
    if (file.index == store_default.currentSheetIndex) {
      let historyDataVerification = $.extend(true, {}, file.dataVerification);
      dataVerificationCtrl_default.ref(historyDataVerification, currentDataVerification, store_default.currentSheetIndex);
    } else {
      file.dataVerification = currentDataVerification;
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function insertImage(src, options = {}) {
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      rowIndex,
      colIndex,
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    if (file.index == store_default.currentSheetIndex) {
      let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
      if (rowIndex == null) {
        rowIndex = last.row_focus || 0;
      }
      if (rowIndex < 0) {
        rowIndex = 0;
      }
      if (rowIndex > store_default.visibledatarow.length) {
        rowIndex = store_default.visibledatarow.length;
      }
      if (colIndex == null) {
        colIndex = last.column_focus || 0;
      }
      if (colIndex < 0) {
        colIndex = 0;
      }
      if (colIndex > store_default.visibledatacolumn.length) {
        colIndex = store_default.visibledatacolumn.length;
      }
      let left = colIndex == 0 ? 0 : store_default.visibledatacolumn[colIndex - 1];
      let top = rowIndex == 0 ? 0 : store_default.visibledatarow[rowIndex - 1];
      let image = new Image();
      image.onload = function() {
        let width = image.width, height = image.height;
        let img = {
          src,
          left,
          top,
          originWidth: width,
          originHeight: height
        };
        imageCtrl_default.addImgItem(img);
        if (success && typeof success === "function") {
          success();
        }
      };
      image.src = src;
    } else {
      let images = file.images || {};
      let config = file.config;
      let zoomRatio = file.zoomRatio || 1;
      let rowheight = file.row;
      let visibledatarow = file.visibledatarow || [];
      if (visibledatarow.length === 0) {
        let rh_height = 0;
        for (let r2 = 0; r2 < rowheight; r2++) {
          let rowlen = store_default.defaultrowlen;
          if (config["rowlen"] != null && config["rowlen"][r2] != null) {
            rowlen = config["rowlen"][r2];
          }
          if (config["rowhidden"] != null && config["rowhidden"][r2] != null) {
            visibledatarow.push(rh_height);
            continue;
          }
          rh_height += Math.round((rowlen + 1) * zoomRatio);
          visibledatarow.push(rh_height);
        }
      }
      let colwidth = file.column;
      let visibledatacolumn = file.visibledatacolumn || [];
      if (visibledatacolumn.length === 0) {
        let ch_width = 0;
        for (let c2 = 0; c2 < colwidth; c2++) {
          let firstcolumnlen = store_default.defaultcollen;
          if (config["columnlen"] != null && config["columnlen"][c2] != null) {
            firstcolumnlen = config["columnlen"][c2];
          }
          if (config["colhidden"] != null && config["colhidden"][c2] != null) {
            visibledatacolumn.push(ch_width);
            continue;
          }
          ch_width += Math.round((firstcolumnlen + 1) * zoomRatio);
          visibledatacolumn.push(ch_width);
        }
      }
      if (rowIndex == null) {
        rowIndex = 0;
      }
      if (rowIndex < 0) {
        rowIndex = 0;
      }
      if (rowIndex > visibledatarow.length) {
        rowIndex = visibledatarow.length;
      }
      if (colIndex == null) {
        colIndex = 0;
      }
      if (colIndex < 0) {
        colIndex = 0;
      }
      if (colIndex > visibledatacolumn.length) {
        colIndex = visibledatacolumn.length;
      }
      let left = colIndex == 0 ? 0 : visibledatacolumn[colIndex - 1];
      let top = rowIndex == 0 ? 0 : visibledatarow[rowIndex - 1];
      let image = new Image();
      image.onload = function() {
        let img = {
          src,
          left,
          top,
          originWidth: image.width,
          originHeight: image.height
        };
        let width, height;
        let max = 400;
        if (img.originHeight < img.originWidth) {
          height = Math.round(img.originHeight * (max / img.originWidth));
          width = max;
        } else {
          width = Math.round(img.originWidth * (max / img.originHeight));
          height = max;
        }
        let imgItem = $.extend(true, {}, imageCtrl_default.imgItem);
        imgItem.src = img.src;
        imgItem.originWidth = img.originWidth;
        imgItem.originHeight = img.originHeight;
        imgItem.default.width = width;
        imgItem.default.height = height;
        imgItem.default.left = img.left;
        imgItem.default.top = img.top;
        imgItem.crop.width = width;
        imgItem.crop.height = height;
        let id = imageCtrl_default.generateRandomId();
        images[id] = imgItem;
        file.images = images;
        if (success && typeof success === "function") {
          success();
        }
      };
      image.src = src;
    }
  }
  function deleteImage(options = {}) {
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      idList = "all",
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    let images = file.images;
    if (images == null) {
      return tooltip_default.info("The worksheet has no pictures to delete.", "");
    }
    if (idList != "all" && getObjType(idList) != "array") {
      return tooltip_default.info("The idList parameter is invalid.", "");
    }
    if (getObjType(idList) == "array") {
      idList.forEach((item2) => {
        delete images[item2];
      });
    } else {
      images = null;
    }
    file.images = images;
    if (file.index == store_default.currentSheetIndex) {
      if (imageCtrl_default.currentImgId != null && (idList == "all" || idList.includes(imageCtrl_default.currentImgId))) {
        $("#luckysheet-modal-dialog-activeImage").hide();
        $("#luckysheet-modal-dialog-cropping").hide();
        $("#luckysheet-modal-dialog-slider-imageCtrl").hide();
      }
      imageCtrl_default.images = images;
      imageCtrl_default.allImagesShow();
      imageCtrl_default.init();
    }
    if (success && typeof success === "function") {
      success();
    }
  }
  function getImageOption(options = {}) {
    let {
      order = getSheetIndex(store_default.currentSheetIndex),
      success
    } = __spreadValues({}, options);
    let file = store_default.luckysheetfile[order];
    if (file == null) {
      return tooltip_default.info("The order parameter is invalid.", "");
    }
    setTimeout(function() {
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    return file.images;
  }
  function transToCellData(data, options = {}) {
    let {
      success
    } = __spreadValues({}, options);
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 0);
    return sheetmanage_default.getGridData(data);
  }
  function transToData(celldata, options = {}) {
    let {
      success
    } = __spreadValues({}, options);
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    }, 0);
    return sheetmanage_default.buildGridData({
      celldata
    });
  }
  function toJson() {
    const toJsonOptions = store_default.toJsonOptions;
    toJsonOptions.title = $("#luckysheet_info_detail_input").val();
    toJsonOptions.data = getAllSheets();
    getluckysheetfile().forEach((file, index2) => {
      if (file.data == void 0) {
        return;
      }
      toJsonOptions.data[index2].row = getObjType(file.data) === "array" ? file.data.length : 0;
      toJsonOptions.data[index2].column = getObjType(file.data[0]) === "array" ? file.data[0].length : 0;
    });
    return toJsonOptions;
  }
  function changLang(lang = "zh") {
    if (!["zh", "en", "es"].includes(lang)) {
      return tooltip_default.info("The lang parameter is invalid.", "");
    }
    let options = toJson();
    options.lang = lang;
    luckysheet.create(options);
  }
  function closeWebsocket() {
    if (server_default.websocket == null) {
      return;
    }
    server_default.websocket.close(1e3);
  }
  function getRangeByTxt(txt) {
    if (txt == null) {
      return {
        column: store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1].column,
        row: store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1].row
      };
    }
    const range2 = conditionformat_default.getRangeByTxt(txt);
    return {
      column: range2[0].column,
      row: range2[0].row
    };
  }
  function getTxtByRange(range2 = store_default.luckysheet_select_save) {
    if (getObjType(range2) === "object") {
      range2 = [range2];
    }
    return conditionformat_default.getTxtByRange(range2);
  }
  function pagerInit(config) {
    const {prevPage, nextPage, total} = locale_default().button;
    $("#luckysheet-bottom-pager").remove();
    $("#luckysheet-sheet-content").after('<div id="luckysheet-bottom-pager" style="font-size: 14px; margin-left: 10px; display: inline-block;"></div>');
    $("#luckysheet-bottom-pager").sPage({
      page: config.pageIndex,
      total: config.total,
      selectOption: config.selectOption,
      pageSize: config.pageSize,
      showTotal: config.showTotal,
      showSkip: config.showSkip,
      showPN: config.showPN,
      prevPage: config.prevPage || prevPage,
      nextPage: config.nextPage || nextPage,
      totalTxt: config.totalTxt || total + config.total,
      backFun: function(page) {
        page.pageIndex = page.page;
        if (!method_default.createHookFunction("onTogglePager", page)) {
          return;
        }
      }
    });
  }
  function refreshFormula(success) {
    formula_default.execFunctionGroupForce(true);
    luckysheetrefreshgrid();
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    });
  }
  function updataSheet(options = {}) {
    let {data, success} = options;
    let files = store_default.luckysheetfile;
    for (let i2 = 0; i2 < data.length; i2++) {
      for (let j = 0; j < files.length; j++) {
        if (files[j].index === data[i2].index) {
          files[j] = data[i2];
        }
      }
    }
    let file = files[sheetmanage_default.getSheetIndex(store_default.currentSheetIndex)], sheetData = sheetmanage_default.buildGridData(file);
    file.data = sheetData;
    if (!!file.isPivotTable) {
      store_default.luckysheetcurrentisPivotTable = true;
      if (!isPivotInitial) {
        pivotTable_default.changePivotTable(index);
      }
    } else {
      store_default.luckysheetcurrentisPivotTable = false;
      $("#luckysheet-modal-dialog-slider-pivot").hide();
      luckysheetsizeauto(false);
    }
    sheetmanage_default.mergeCalculation(file["index"]);
    sheetmanage_default.setSheetParam();
    setTimeout(function() {
      sheetmanage_default.showSheet();
      sheetmanage_default.restoreCache();
      formula_default.execFunctionGroupForce(luckysheetConfigsetting_default.forceCalculation);
      sheetmanage_default.restoreSheetAll(store_default.currentSheetIndex);
      luckysheetrefreshgrid();
      if (success && typeof success === "function") {
        success();
      }
    }, 1);
    server_default.saveParam("shs", null, store_default.currentSheetIndex);
  }
  function refreshMenuButtonFocus(data, r2, c2, success) {
    data = data || store_default.flowdata;
    if (r2 == null && c2 == null) {
      let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
      r2 = last.row_focus || last.row[0];
      c2 = last.column_focus || last.column[0];
    }
    menuButton_default.menuButtonFocus(data, r2, c2);
    setTimeout(() => {
      if (success && typeof success === "function") {
        success();
      }
    });
  }
  function checkTheStatusOfTheSelectedCells(type, status) {
    let cells = getRangeWithFlatten();
    let flag = cells.every(({r: r2, c: c2}) => {
      let cell = store_default.flowdata[r2][c2];
      if (cell == null) {
        return false;
      }
      return cell[type] == status;
    });
    return flag;
  }
  var import_dayjs7;
  var init_api = __esm({
    "src/global/api.js"() {
      init_store();
      init_util();
      init_get();
      init_locale();
      init_method();
      init_formula();
      init_func_methods();
      init_tooltip();
      init_json();
      init_editor();
      init_formula();
      init_cleargridelement();
      init_format();
      init_setdata();
      init_sort();
      init_getRowlen();
      init_getdata();
      init_refresh();
      init_extend();
      init_validate();
      init_datecontroll();
      init_border();
      init_draw();
      init_pivotTable();
      init_server();
      init_menuButton();
      init_selection();
      init_luckysheetConfigsetting();
      init_freezen();
      init_resize();
      init_sheetmanage();
      init_conditionformat();
      init_sheetSearch();
      init_select();
      init_constant();
      init_filter();
      init_controlHistory();
      init_zoom();
      init_dataVerificationCtrl();
      init_imageCtrl();
      import_dayjs7 = __toModule(require_dayjs_min());
      init_get();
      init_updateCell();
    }
  });

  // src/controllers/select.js
  function seletedHighlistByindex(id, r1, r2, c1, c2) {
    let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
    let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
    $("#" + id).css({
      "left": col_pre,
      "width": col - col_pre - 1,
      "top": row_pre,
      "height": row - row_pre - 1
    });
  }
  function selectHightlightShow(isRestore = false) {
    $("#luckysheet-cell-selected-boxs").show();
    $("#luckysheet-cell-selected-boxs #luckysheet-cell-selected").siblings(".luckysheet-cell-selected").remove();
    if (store_default.luckysheet_select_save.length > 0) {
      for (let i2 = 0; i2 < store_default.luckysheet_select_save.length; i2++) {
        let r1 = store_default.luckysheet_select_save[i2].row[0], r2 = store_default.luckysheet_select_save[i2].row[1];
        let c1 = store_default.luckysheet_select_save[i2].column[0], c2 = store_default.luckysheet_select_save[i2].column[1];
        let rf, cf;
        if (store_default.luckysheet_select_save[i2].row_focus == null) {
          rf = r1;
        } else {
          rf = store_default.luckysheet_select_save[i2].row_focus;
        }
        if (store_default.luckysheet_select_save[i2].column_focus == null) {
          cf = c1;
        } else {
          cf = store_default.luckysheet_select_save[i2].column_focus;
        }
        let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
        let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
        let row_f = store_default.visibledatarow[rf], row_pre_f = rf - 1 == -1 ? 0 : store_default.visibledatarow[rf - 1];
        let col_f = store_default.visibledatacolumn[cf], col_pre_f = cf - 1 == -1 ? 0 : store_default.visibledatacolumn[cf - 1];
        let margeset = menuButton_default.mergeborer(store_default.flowdata, rf, cf);
        if (!!margeset) {
          row_f = margeset.row[1];
          row_pre_f = margeset.row[0];
          col_f = margeset.column[1];
          col_pre_f = margeset.column[0];
        }
        store_default.luckysheet_select_save[i2]["row"] = [r1, r2];
        store_default.luckysheet_select_save[i2]["column"] = [c1, c2];
        store_default.luckysheet_select_save[i2]["row_focus"] = rf;
        store_default.luckysheet_select_save[i2]["column_focus"] = cf;
        store_default.luckysheet_select_save[i2]["left"] = col_pre_f;
        store_default.luckysheet_select_save[i2]["width"] = col_f - col_pre_f - 1;
        store_default.luckysheet_select_save[i2]["top"] = row_pre_f;
        store_default.luckysheet_select_save[i2]["height"] = row_f - row_pre_f - 1;
        store_default.luckysheet_select_save[i2]["left_move"] = col_pre;
        store_default.luckysheet_select_save[i2]["width_move"] = col - col_pre - 1;
        store_default.luckysheet_select_save[i2]["top_move"] = row_pre;
        store_default.luckysheet_select_save[i2]["height_move"] = row - row_pre - 1;
        if (i2 == 0) {
          if (store_default.luckysheet_select_save.length == 1) {
            if (browser_default.mobilecheck()) {
              $("#luckysheet-cell-selected-boxs #luckysheet-cell-selected").css({
                "left": store_default.luckysheet_select_save[i2]["left_move"],
                "width": store_default.luckysheet_select_save[i2]["width_move"],
                "top": store_default.luckysheet_select_save[i2]["top_move"],
                "height": store_default.luckysheet_select_save[i2]["height_move"],
                "display": "block",
                "border": "1px solid #0188fb"
              }).find(".luckysheet-cs-draghandle").css("display", "block").end().find(".luckysheet-cs-fillhandle").css("display", "none").end().find(".luckysheet-cs-touchhandle").css("display", "block");
            } else {
              $("#luckysheet-cell-selected-boxs #luckysheet-cell-selected").css({
                "left": store_default.luckysheet_select_save[i2]["left_move"],
                "width": store_default.luckysheet_select_save[i2]["width_move"],
                "top": store_default.luckysheet_select_save[i2]["top_move"],
                "height": store_default.luckysheet_select_save[i2]["height_move"],
                "display": "block",
                "border": "1px solid #0188fb"
              }).find(".luckysheet-cs-draghandle").css("display", "block").end().find(".luckysheet-cs-fillhandle").css("display", "block").end().find(".luckysheet-cs-touchhandle").css("display", "none");
            }
          } else {
            $("#luckysheet-cell-selected-boxs #luckysheet-cell-selected").css({
              "left": store_default.luckysheet_select_save[i2]["left_move"],
              "width": store_default.luckysheet_select_save[i2]["width_move"],
              "top": store_default.luckysheet_select_save[i2]["top_move"],
              "height": store_default.luckysheet_select_save[i2]["height_move"],
              "display": "block",
              "border": "1px solid rgba(1, 136, 251, 0.15)"
            }).find(".luckysheet-cs-draghandle").css("display", "none").end().find(".luckysheet-cs-fillhandle").css("display", "none");
          }
        } else {
          $("#luckysheet-cell-selected-boxs").append('<div class="luckysheet-cell-selected" style="left: ' + store_default.luckysheet_select_save[i2]["left_move"] + "px; width: " + store_default.luckysheet_select_save[i2]["width_move"] + "px; top: " + store_default.luckysheet_select_save[i2]["top_move"] + "px; height: " + store_default.luckysheet_select_save[i2]["height_move"] + 'px; border: 1px solid rgba(1, 136, 251, 0.15); display: block;"></div>');
        }
        if (i2 == store_default.luckysheet_select_save.length - 1) {
          $("#luckysheet-cell-selected-focus").css({
            "left": store_default.luckysheet_select_save[i2]["left"],
            "width": store_default.luckysheet_select_save[i2]["width"],
            "top": store_default.luckysheet_select_save[i2]["top"],
            "height": store_default.luckysheet_select_save[i2]["height"],
            "display": "block"
          });
          luckysheet_count_show(store_default.luckysheet_select_save[i2]["left_move"], store_default.luckysheet_select_save[i2]["top_move"], store_default.luckysheet_select_save[i2]["width_move"], store_default.luckysheet_select_save[i2]["height_move"], [r1, r2], [c1, c2]);
          formula_default.fucntionboxshow(rf, cf);
          dataVerificationCtrl_default.cellFocus(rf, cf);
        }
      }
      selectTitlesShow(store_default.luckysheet_select_save, isRestore);
      selectHelpboxFill();
      if (store_default.luckysheet_select_save.length == 1 && store_default.luckysheet_select_save[0].row[0] == store_default.luckysheet_select_save[0].row[1] && store_default.luckysheet_select_save[0].column[0] == store_default.luckysheet_select_save[0].column[1]) {
        dynamicArrayHightShow(store_default.luckysheet_select_save[0].row[0], store_default.luckysheet_select_save[0].column[0]);
      }
      refreshMenuButtonFocus();
    }
    store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].luckysheet_select_save = store_default.luckysheet_select_save;
    const luckysheet_select_save_previous = JSON.stringify(store_default.luckysheet_select_save);
    if (store_default.luckysheet_select_save_previous == null | store_default.luckysheet_select_save_previous !== luckysheet_select_save_previous) {
      method_default.createHookFunction("rangeSelect", store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)], store_default.luckysheet_select_save);
    }
    store_default.luckysheet_select_save_previous = luckysheet_select_save_previous;
  }
  function selectTitlesShow(rangeArr, isRestore = false) {
    let s = $.extend(true, [], rangeArr);
    let rowTitleMap = {}, columnTitleMap = {};
    for (let i2 = 0; i2 < s.length; i2++) {
      let r1 = s[i2]["row"][0], r2 = s[i2]["row"][1], c1 = s[i2]["column"][0], c2 = s[i2]["column"][1];
      rowTitleMap = selectTitlesMap(rowTitleMap, r1, r2);
      columnTitleMap = selectTitlesMap(columnTitleMap, c1, c2);
    }
    $("#luckysheet-rows-h-selected").empty();
    let rowTitleRange = selectTitlesRange(rowTitleMap);
    for (let i2 = 0; i2 < rowTitleRange.length; i2++) {
      let r1 = rowTitleRange[i2][0], r2 = rowTitleRange[i2][rowTitleRange[i2].length - 1];
      let row = rowLocationByIndex(r2)[1], row_pre = rowLocationByIndex(r1)[0];
      $("#luckysheet-rows-h-selected").append('<div class="luckysheet-rows-h-selected" style="top: ' + row_pre + "px; height: " + (row - row_pre - 1) + 'px; display: block; background-color: rgba(76, 76, 76, 0.1);"></div>');
    }
    $("#luckysheet-cols-h-selected").empty();
    let columnTitleRange = selectTitlesRange(columnTitleMap);
    for (let j = 0; j < columnTitleRange.length; j++) {
      let c1 = columnTitleRange[j][0], c2 = columnTitleRange[j][columnTitleRange[j].length - 1];
      let col = colLocationByIndex(c2)[1], col_pre = colLocationByIndex(c1)[0];
      $("#luckysheet-cols-h-selected").append('<div class="luckysheet-cols-h-selected" style="left: ' + col_pre + "px; width: " + (col - col_pre - 1) + 'px; display: block; background-color: rgba(76, 76, 76, 0.1);"></div>');
    }
  }
  function selectTitlesMap(rangeMap, range1, range2) {
    let map = $.extend(true, {}, rangeMap);
    for (let i2 = range1; i2 <= range2; i2++) {
      if (i2 in map) {
        continue;
      }
      map[i2] = 0;
    }
    return map;
  }
  function selectTitlesRange(map) {
    let mapArr = [];
    for (let i2 in map) {
      mapArr.push(i2);
    }
    mapArr.sort(function(a, b) {
      return a - b;
    });
    let rangeArr = [];
    let item2 = [];
    if (mapArr.length > 1) {
      for (let j = 1; j < mapArr.length; j++) {
        if (mapArr[j] - mapArr[j - 1] == 1) {
          item2.push(mapArr[j - 1]);
          if (j == mapArr.length - 1) {
            item2.push(mapArr[j]);
            rangeArr.push(item2);
          }
        } else {
          if (j == 1) {
            if (j == mapArr.length - 1) {
              item2.push(mapArr[j - 1]);
              rangeArr.push(item2);
              rangeArr.push([mapArr[j]]);
            } else {
              rangeArr.push(mapArr[0]);
            }
          } else if (j == mapArr.length - 1) {
            item2.push(mapArr[j - 1]);
            rangeArr.push(item2);
            rangeArr.push([mapArr[j]]);
          } else {
            item2.push(mapArr[j - 1]);
            rangeArr.push(item2);
            item2 = [];
          }
        }
      }
    } else {
      rangeArr.push([mapArr[0]]);
    }
    return rangeArr;
  }
  function selectIsOverlap(range2) {
    if (range2 == null) {
      range2 = store_default.luckysheet_select_save;
    }
    range2 = JSON.parse(JSON.stringify(range2));
    let overlap = false;
    let map = {};
    for (let s = 0; s < range2.length; s++) {
      let str_r = range2[s].row[0], end_r = range2[s].row[1];
      let str_c = range2[s].column[0], end_c = range2[s].column[1];
      for (let r2 = str_r; r2 <= end_r; r2++) {
        for (let c2 = str_c; c2 <= end_c; c2++) {
          if (r2 + "_" + c2 in map) {
            overlap = true;
            break;
          } else {
            map[r2 + "_" + c2] = 0;
          }
        }
      }
    }
    return overlap;
  }
  function collaborativeEditBox() {
    let all_width = store_default.visibledatacolumn;
    let all_height = store_default.visibledatarow;
    store_default.cooperativeEdit.changeCollaborationSize.forEach((value) => {
      if (value.i == store_default.currentSheetIndex) {
        let count_col = value.v.column;
        let change_width = all_width[count_col[0]] - 1;
        if (value.v.column[0] !== 0) {
          change_width = all_width[count_col[1]] - all_width[count_col[0] - 1] - (count_col[1] - count_col[0] + 1);
        }
        let count_row = value.v.row;
        let change_height = all_height[count_row[0]] - 1;
        if (value.v.row[0] !== 0) {
          change_height = all_height[count_row[1]] - all_height[count_row[0] - 1] - (count_row[1] - count_row[0] + 1);
        }
        let range2 = store_default.cooperativeEdit.merge_range;
        let change_left = all_width[value.v.column[0] - 1] - 1;
        let change_top = all_height[value.v.row[0] - 1] - 1;
        if (store_default.config.columnlen !== null) {
          for (let k in store_default.config.columnlen) {
            if (value.v.column[0] <= k && k <= value.v.column[1]) {
              store_default.luckysheet_cols_change_size_start[1] = k - 0;
              break;
            }
          }
        }
        if (store_default.config.rowlen !== null) {
          for (let k in store_default.config.rowlen) {
            if (value.v.row[0] <= k && k <= value.v.row[1]) {
              store_default.luckysheet_rows_change_size_start[1] = k - 0;
              break;
            }
          }
        }
        let flag_width = value.v.column[0] <= store_default.luckysheet_cols_change_size_start[1] && store_default.luckysheet_cols_change_size_start[1] <= value.v.column[1];
        if (flag_width) {
          if (store_default.luckysheet_cols_change_size_start[1] == 0) {
            change_width = all_width[0] - 1;
          } else {
            let counts = value.v.column;
            change_width = all_width[counts[1]] - all_width[counts[0] - 1] - (counts[1] - counts[0] + 1);
          }
        }
        let flag_height = value.v.row[0] <= store_default.luckysheet_rows_change_size_start[1] && store_default.luckysheet_rows_change_size_start[1] <= value.v.row[1];
        if (flag_height) {
          if (store_default.luckysheet_rows_change_size_start[1] == 0) {
            change_height = all_height[0] - 1;
          } else {
            let counts = value.v.row;
            change_height = all_height[counts[1]] - all_height[counts[0] - 1] - (counts[1] - counts[0] + 1);
          }
        }
        if (Object.keys(range2).length > 0) {
          let flag_sure_merge = false;
          if (range2.v.length > 1) {
            flag_sure_merge = range2.v[1][0] == null || Object.keys(range2.v[1][0]).length > 0;
          }
          if (range2.v[0].length > 1) {
            flag_sure_merge = range2.v[0][1] == null || Object.keys(range2.v[0][1]).length > 0;
          }
          if (flag_sure_merge) {
            let flag_merge_width = range2.column[0] <= value.v.column[0] && range2.column[1] >= value.v.column[1];
            change_left = all_width[range2.column[0] - 1] - 1;
            change_top = all_height[range2.row[0] - 1] - 1;
            change_width = all_width[range2.column[1]] - 1;
            change_height = all_height[range2.row[1]] - 1;
            if (flag_merge_width) {
              if (range2.column[0] !== 0) {
                let counts = range2.column;
                change_width = all_width[counts[1]] - all_width[counts[0] - 1] - (counts[1] - counts[0] + 1);
              } else {
                change_left = 0;
              }
              value.v.column = range2.column;
            }
            let flag_merge_height = range2.row[0] <= value.v.row[0] && range2.row[1] >= value.v.row[1];
            if (flag_merge_height) {
              if (range2.row[0] !== 0) {
                let counts = range2.row;
                change_height = all_height[counts[1]] - all_height[counts[0] - 1] - (counts[1] - counts[0] + 1);
              } else {
                change_top = 0;
              }
              value.v.row = range2.row;
            }
          } else {
            change_width = all_width[count_col[0]] - all_width[count_col[0] - 1] - 1;
            if (count_col[0] === 0) {
              change_width = all_width[count_col[0]] - 1;
            }
            change_height = all_height[count_row[0]] - all_height[count_row[0] - 1] - 1;
            if (count_row[0] === 0) {
              change_height = all_height[count_row[0]] - 1;
            }
          }
        }
        $("#luckysheet-multipleRange-show-" + value.id).css({"height": change_height, "width": change_width, "top": change_top + "px", "left": change_left + "px"});
        let change_bottom = $("#luckysheet-multipleRange-show-" + value.id)[0].offsetHeight - 1;
        $("#luckysheet-multipleRange-show-" + value.id + ">.username").css({"bottom": change_bottom + "px"});
      }
    });
  }
  function selectionCopyShow(range2) {
    $("#luckysheet-selection-copy").empty();
    if (range2 == null) {
      range2 = store_default.luckysheet_selection_range;
    }
    range2 = JSON.parse(JSON.stringify(range2));
    if (range2.length > 0) {
      for (let s = 0; s < range2.length; s++) {
        let r1 = range2[s].row[0], r2 = range2[s].row[1];
        let c1 = range2[s].column[0], c2 = range2[s].column[1];
        let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
        let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
        let copyDomHtml = '<div class="luckysheet-selection-copy" style="display: block; left: ' + col_pre + "px; width: " + (col - col_pre - 1) + "px; top: " + row_pre + "px; height: " + (row - row_pre - 1) + 'px;"><div class="luckysheet-selection-copy-top luckysheet-copy"></div><div class="luckysheet-selection-copy-right luckysheet-copy"></div><div class="luckysheet-selection-copy-bottom luckysheet-copy"></div><div class="luckysheet-selection-copy-left luckysheet-copy"></div><div class="luckysheet-selection-copy-hc"></div></div>';
        $("#luckysheet-selection-copy").append(copyDomHtml);
      }
    }
  }
  function luckysheet_count_show(left, top, width, height, rowseleted, columnseleted) {
    let rowl = rowseleted[1] - rowseleted[0] + 1, coll = columnseleted[1] - columnseleted[0] + 1;
    let drawWidth = store_default.luckysheetTableContentHW[0], drawHeight = store_default.luckysheetTableContentHW[1];
    let scrollWidth = $("#luckysheet-cell-main").scrollLeft(), scrollHeight = $("#luckysheet-cell-main").scrollTop();
    const _locale = locale_default();
    const locale_info = _locale.info;
    if (rowl >= 4) {
      let leftv = left - 25;
      if (leftv < 0) {
        leftv = left + 5;
      }
      if (leftv < scrollWidth) {
        leftv = scrollWidth + 10;
      }
      let topv = top + height / 2;
      if (height > drawHeight) {
        topv = scrollHeight + drawHeight / 2;
      }
      $("#luckysheet-row-count-show").css({"left": leftv, "top": topv, "display": "block", "width": "11px"}).html("<div>" + rowl.toString().split("").join("</div><div>") + "</div><div>" + locale_info.row + "</div>");
    } else {
      $("#luckysheet-row-count-show").hide();
    }
    if (coll >= 4) {
      let topv = top - 25;
      if (topv < 0) {
        topv = top + 5;
      }
      if (topv < scrollHeight) {
        topv = scrollHeight + 10;
      }
      let leftv = left + width / 2;
      if (width > drawWidth) {
        leftv = scrollWidth + drawWidth / 2;
      }
      $("#luckysheet-column-count-show").css({"left": leftv, "top": topv, "display": "block"}).text(coll + locale_info.column);
    } else {
      $("#luckysheet-column-count-show").hide();
    }
  }
  function selectHelpboxFill() {
    let range2 = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
    let rf = range2["row_focus"], cf = range2["column_focus"];
    if (store_default.config["merge"] != null && rf + "_" + cf in store_default.config["merge"]) {
      $("#luckysheet-helpbox-cell").text(getRangetxt(store_default.currentSheetIndex, {
        column: [cf, cf],
        row: [rf, rf]
      }));
    } else {
      $("#luckysheet-helpbox-cell").text(getRangetxt(store_default.currentSheetIndex, range2));
    }
  }
  var init_select = __esm({
    "src/controllers/select.js"() {
      init_menuButton();
      init_formula();
      init_dynamicArray();
      init_location();
      init_browser();
      init_dataVerificationCtrl();
      init_get();
      init_store();
      init_method();
      init_locale();
      init_api();
    }
  });

  // src/controllers/moreFormat.js
  var luckysheetMoreFormat, moreFormat_default;
  var init_moreFormat = __esm({
    "src/controllers/moreFormat.js"() {
      init_util();
      init_constant();
      init_menuButton();
      init_editor();
      init_tooltip();
      init_validate();
      init_store();
      init_locale();
      luckysheetMoreFormat = {
        moneyFmtList: [
          {
            "name": "\u4EBA\u6C11\u5E01",
            "pos": "before",
            "value": "\xA5"
          },
          {
            "name": "\u7F8E\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u6B27\u5143",
            "pos": "before",
            "value": "\u20AC"
          },
          {
            "name": "\u82F1\u9551",
            "pos": "before",
            "value": "\uFFE1"
          },
          {
            "name": "\u6E2F\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u65E5\u5143",
            "pos": "before",
            "value": "\uFFE5"
          },
          {
            "name": "\u963F\u5C14\u5DF4\u5C3C\u4E9A\u5217\u514B",
            "pos": "before",
            "value": "Lek"
          },
          {
            "name": "\u963F\u5C14\u53CA\u5229\u4E9A\u7B2C\u7EB3\u5C14",
            "pos": "before",
            "value": "din"
          },
          {
            "name": "\u963F\u5BCC\u6C57\u5C3C",
            "pos": "after",
            "value": "Af"
          },
          {
            "name": "\u963F\u6839\u5EF7\u6BD4\u7D22",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u963F\u62C9\u4F2F\u8054\u5408\u914B\u957F\u56FD\u8FEA\u62C9\u59C6",
            "pos": "before",
            "value": "dh"
          },
          {
            "name": "\u963F\u9C81\u5DF4\u5F17\u7F57\u6797",
            "pos": "before",
            "value": "Afl"
          },
          {
            "name": "\u963F\u66FC\u91CC\u4E9A\u5C14",
            "pos": "before",
            "value": "Rial"
          },
          {
            "name": "\u963F\u585E\u62DC\u7586\u9A6C\u7EB3\u7279",
            "pos": "before",
            "value": "?"
          },
          {
            "name": "\u57C3\u53CA\u9551",
            "pos": "before",
            "value": "\uFFE1"
          },
          {
            "name": "\u57C3\u585E\u4FC4\u6BD4\u4E9A\u6BD4\u5C14",
            "pos": "before",
            "value": "Birr"
          },
          {
            "name": "\u5B89\u54E5\u62C9\u5BBD\u624E",
            "pos": "before",
            "value": "Kz"
          },
          {
            "name": "\u6FB3\u5927\u5229\u4E9A\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u6FB3\u95E8\u5143",
            "pos": "before",
            "value": "MOP"
          },
          {
            "name": "\u5DF4\u5DF4\u591A\u65AF\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u5DF4\u5E03\u4E9A\u65B0\u51E0\u5185\u4E9A\u57FA\u90A3",
            "pos": "before",
            "value": "PGK"
          },
          {
            "name": "\u5DF4\u54C8\u9A6C\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u5DF4\u57FA\u65AF\u5766\u5362\u6BD4",
            "pos": "before",
            "value": "Rs"
          },
          {
            "name": "\u5DF4\u62C9\u572D\u74DC\u62C9\u5C3C",
            "pos": "after",
            "value": "Gs"
          },
          {
            "name": "\u5DF4\u6797\u7B2C\u7EB3\u5C14",
            "pos": "before",
            "value": "din"
          },
          {
            "name": "\u5DF4\u62FF\u9A6C\u5DF4\u6CE2\u4E9A",
            "pos": "before",
            "value": "B/"
          },
          {
            "name": "\u5DF4\u897F\u91CC\u4E9A\u4F0A",
            "pos": "before",
            "value": "R$"
          },
          {
            "name": "\u767D\u4FC4\u7F57\u65AF\u5362\u5E03",
            "pos": "after",
            "value": "\u0440"
          },
          {
            "name": "\u767E\u6155\u5927\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u4FDD\u52A0\u5229\u4E9A\u5217\u5F17",
            "pos": "before",
            "value": "lev"
          },
          {
            "name": "\u51B0\u5C9B\u514B\u6717",
            "pos": "before",
            "value": "kr"
          },
          {
            "name": "\u6CE2\u9ED1\u53EF\u5151\u6362\u9A6C\u514B",
            "pos": "before",
            "value": "KM"
          },
          {
            "name": "\u6CE2\u5170\u5179\u7F57\u63D0",
            "pos": "after",
            "value": "z?"
          },
          {
            "name": "\u73BB\u5229\u7EF4\u4E9A\u8BFA",
            "pos": "before",
            "value": "Bs"
          },
          {
            "name": "\u4F2F\u5229\u5179\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u535A\u8328\u74E6\u7EB3\u666E\u62C9",
            "pos": "before",
            "value": "P"
          },
          {
            "name": "\u4E0D\u4E39\u52AA\u624E\u59C6",
            "pos": "before",
            "value": "Nu"
          },
          {
            "name": "\u5E03\u9686\u8FEA\u6CD5\u90CE",
            "pos": "before",
            "value": "FBu"
          },
          {
            "name": "\u671D\u9C9C\u5706",
            "pos": "before",
            "value": "?KP"
          },
          {
            "name": "\u4E39\u9EA6\u514B\u6717",
            "pos": "after",
            "value": "kr"
          },
          {
            "name": "\u4E1C\u52A0\u52D2\u6BD4\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u591A\u7C73\u5C3C\u52A0\u6BD4\u7D22",
            "pos": "before",
            "value": "RD$"
          },
          {
            "name": "\u4FC4\u56FD\u5362\u5E03",
            "pos": "after",
            "value": "?"
          },
          {
            "name": "\u5384\u7ACB\u7279\u91CC\u4E9A\u7EB3\u514B\u6CD5",
            "pos": "before",
            "value": "Nfk"
          },
          {
            "name": "\u975E\u6D32\u91D1\u878D\u5171\u540C\u4F53\u6CD5\u90CE",
            "pos": "before",
            "value": "CFA"
          },
          {
            "name": "\u83F2\u5F8B\u5BBE\u6BD4\u7D22",
            "pos": "before",
            "value": "?"
          },
          {
            "name": "\u6590\u6D4E\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u4F5B\u5F97\u89D2\u57C3\u65AF\u5E93\u591A",
            "pos": "before",
            "value": "CVE"
          },
          {
            "name": "\u798F\u514B\u5170\u7FA4\u5C9B\u9551",
            "pos": "before",
            "value": "\uFFE1"
          },
          {
            "name": "\u5188\u6BD4\u4E9A\u8FBE\u62C9\u897F",
            "pos": "before",
            "value": "GMD"
          },
          {
            "name": "\u521A\u679C\u6CD5\u90CE",
            "pos": "before",
            "value": "FrCD"
          },
          {
            "name": "\u54E5\u4F26\u6BD4\u4E9A\u6BD4\u7D22",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u54E5\u65AF\u8FBE\u9ECE\u52A0\u79D1\u6717",
            "pos": "before",
            "value": "?"
          },
          {
            "name": "\u53E4\u5DF4\u6BD4\u7D22",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u53E4\u5DF4\u53EF\u5151\u6362\u6BD4\u7D22",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u572D\u4E9A\u90A3\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u54C8\u8428\u514B\u65AF\u5766\u575A\u6208",
            "pos": "before",
            "value": "?"
          },
          {
            "name": "\u6D77\u5730\u53E4\u5FB7",
            "pos": "before",
            "value": "HTG"
          },
          {
            "name": "\u97E9\u5143",
            "pos": "before",
            "value": "?"
          },
          {
            "name": "\u8377\u5C5E\u5B89\u7684\u5217\u65AF\u76FE",
            "pos": "before",
            "value": "NAf."
          },
          {
            "name": "\u6D2A\u90FD\u62C9\u65AF\u62C9\u4F26\u76AE\u62C9",
            "pos": "before",
            "value": "L"
          },
          {
            "name": "\u5409\u5E03\u63D0\u6CD5\u90CE",
            "pos": "before",
            "value": "Fdj"
          },
          {
            "name": "\u5409\u5C14\u5409\u65AF\u65AF\u5766\u7D22\u59C6",
            "pos": "before",
            "value": "KGS"
          },
          {
            "name": "\u51E0\u5185\u4E9A\u6CD5\u90CE",
            "pos": "before",
            "value": "FG"
          },
          {
            "name": "\u52A0\u62FF\u5927\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u52A0\u7EB3\u585E\u5730",
            "pos": "before",
            "value": "GHS"
          },
          {
            "name": "\u67EC\u57D4\u5BE8\u745E\u5C14",
            "pos": "before",
            "value": "Riel"
          },
          {
            "name": "\u6377\u514B\u514B\u6717",
            "pos": "after",
            "value": "K?"
          },
          {
            "name": "\u6D25\u5DF4\u5E03\u97E6\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u5361\u5854\u5C14\u91CC\u4E9A\u5C14",
            "pos": "before",
            "value": "Rial"
          },
          {
            "name": "\u5F00\u66FC\u7FA4\u5C9B\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u79D1\u6469\u7F57\u6CD5\u90CE",
            "pos": "before",
            "value": "CF"
          },
          {
            "name": "\u79D1\u5A01\u7279\u7B2C\u7EB3\u5C14",
            "pos": "before",
            "value": "din"
          },
          {
            "name": "\u514B\u7F57\u5730\u4E9A\u5E93\u7EB3",
            "pos": "before",
            "value": "kn"
          },
          {
            "name": "\u80AF\u5C3C\u4E9A\u5148\u4EE4",
            "pos": "before",
            "value": "Ksh"
          },
          {
            "name": "\u83B1\u7D22\u6258\u6D1B\u8482",
            "pos": "before",
            "value": "LSL"
          },
          {
            "name": "\u8001\u631D\u57FA\u666E",
            "pos": "before",
            "value": "?"
          },
          {
            "name": "\u9ECE\u5DF4\u5AE9\u9551",
            "pos": "before",
            "value": "L\uFFE1"
          },
          {
            "name": "\u7ACB\u9676\u5B9B\u7ACB\u7279",
            "pos": "before",
            "value": "Lt"
          },
          {
            "name": "\u5229\u6BD4\u4E9A\u7B2C\u7EB3\u5C14",
            "pos": "before",
            "value": "din"
          },
          {
            "name": "\u5229\u6BD4\u4E9A\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u5362\u65FA\u8FBE\u6CD5\u90CE",
            "pos": "before",
            "value": "RF"
          },
          {
            "name": "\u7F57\u9A6C\u5C3C\u4E9A\u5217\u4F0A",
            "pos": "before",
            "value": "RON"
          },
          {
            "name": "\u9A6C\u8FBE\u52A0\u65AF\u52A0\u963F\u91CC\u4E9A\u91CC",
            "pos": "before",
            "value": "Ar"
          },
          {
            "name": "\u9A6C\u5C14\u4EE3\u592B\u62C9\u83F2\u4E9A",
            "pos": "before",
            "value": "Rf"
          },
          {
            "name": "\u9A6C\u62C9\u7EF4\u514B\u74E6\u67E5",
            "pos": "before",
            "value": "MWK"
          },
          {
            "name": "\u9A6C\u6765\u897F\u4E9A\u6797\u5409\u7279",
            "pos": "before",
            "value": "RM"
          },
          {
            "name": "\u9A6C\u5176\u987F\u6234\u7B2C\u7EB3\u5C14",
            "pos": "before",
            "value": "din"
          },
          {
            "name": "\u6BDB\u91CC\u6C42\u65AF\u5362\u6BD4",
            "pos": "before",
            "value": "MURs"
          },
          {
            "name": "\u6BDB\u91CC\u5854\u5C3C\u4E9A\u4E4C\u5409\u4E9A",
            "pos": "before",
            "value": "MRO"
          },
          {
            "name": "\u8499\u53E4\u56FE\u683C\u91CC\u514B",
            "pos": "before",
            "value": "?"
          },
          {
            "name": "\u5B5F\u52A0\u62C9\u5854\u5361",
            "pos": "before",
            "value": "?"
          },
          {
            "name": "\u79D8\u9C81\u65B0\u7D22\u5C14",
            "pos": "before",
            "value": "S/"
          },
          {
            "name": "\u7F05\u7538\u5F00\u4E9A\u7279",
            "pos": "before",
            "value": "K"
          },
          {
            "name": "\u6469\u5C14\u591A\u74E6\u5217\u4F0A",
            "pos": "before",
            "value": "MDL"
          },
          {
            "name": "\u6469\u6D1B\u54E5\u8FEA\u62C9\u59C6",
            "pos": "before",
            "value": "dh"
          },
          {
            "name": "\u83AB\u6851\u6BD4\u514B\u6885\u8482\u5361\u5C14",
            "pos": "before",
            "value": "MTn"
          },
          {
            "name": "\u58A8\u897F\u54E5\u6BD4\u7D22",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u7EB3\u7C73\u6BD4\u4E9A\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u5357\u975E\u5170\u7279",
            "pos": "before",
            "value": "R"
          },
          {
            "name": "\u5357\u82CF\u4E39\u9551",
            "pos": "before",
            "value": "\uFFE1"
          },
          {
            "name": "\u5C3C\u52A0\u62C9\u74DC\u79D1\u591A\u5DF4",
            "pos": "before",
            "value": "C$"
          },
          {
            "name": "\u5C3C\u6CCA\u5C14\u5362\u6BD4",
            "pos": "before",
            "value": "Rs"
          },
          {
            "name": "\u5C3C\u65E5\u5229\u4E9A\u5948\u62C9",
            "pos": "before",
            "value": "?"
          },
          {
            "name": "\u632A\u5A01\u514B\u6717",
            "pos": "after",
            "value": "kr"
          },
          {
            "name": "\u4E54\u6CBB\u4E9A\u62C9\u745E",
            "pos": "before",
            "value": "GEL"
          },
          {
            "name": "\u4EBA\u6C11\u5E01\uFF08\u79BB\u5CB8\uFF09",
            "pos": "before",
            "value": "\uFFE5"
          },
          {
            "name": "\u745E\u5178\u514B\u6717",
            "pos": "after",
            "value": "kr"
          },
          {
            "name": "\u745E\u58EB\u6CD5\u90CE",
            "pos": "before",
            "value": "CHF"
          },
          {
            "name": "\u585E\u5C14\u7EF4\u4E9A\u7B2C\u7EB3\u5C14",
            "pos": "before",
            "value": "din"
          },
          {
            "name": "\u585E\u62C9\u5229\u6602\u5229\u6602",
            "pos": "before",
            "value": "SLL"
          },
          {
            "name": "\u585E\u820C\u5C14\u5362\u6BD4",
            "pos": "before",
            "value": "SCR"
          },
          {
            "name": "\u6C99\u7279\u91CC\u4E9A\u5C14",
            "pos": "before",
            "value": "Rial"
          },
          {
            "name": "\u5723\u591A\u7F8E\u591A\u5E03\u62C9",
            "pos": "before",
            "value": "Db"
          },
          {
            "name": "\u5723\u8D6B\u52D2\u62FF\u7FA4\u5C9B\u78C5",
            "pos": "before",
            "value": "\uFFE1"
          },
          {
            "name": "\u65AF\u91CC\u5170\u5361\u5362\u6BD4",
            "pos": "before",
            "value": "Rs"
          },
          {
            "name": "\u65AF\u5A01\u58EB\u5170\u91CC\u5170\u5409\u5C3C",
            "pos": "before",
            "value": "SZL"
          },
          {
            "name": "\u82CF\u4E39\u9551",
            "pos": "before",
            "value": "SDG"
          },
          {
            "name": "\u82CF\u91CC\u5357\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u6240\u7F57\u95E8\u7FA4\u5C9B\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u7D22\u9A6C\u91CC\u5148\u4EE4",
            "pos": "before",
            "value": "SOS"
          },
          {
            "name": "\u5854\u5409\u514B\u65AF\u5766\u7D22\u83AB\u5C3C",
            "pos": "before",
            "value": "Som"
          },
          {
            "name": "\u592A\u5E73\u6D0B\u6CD5\u90CE",
            "pos": "after",
            "value": "FCFP"
          },
          {
            "name": "\u6CF0\u56FD\u94E2",
            "pos": "before",
            "value": "?"
          },
          {
            "name": "\u5766\u6851\u5C3C\u4E9A\u5148\u4EE4",
            "pos": "before",
            "value": "TSh"
          },
          {
            "name": "\u6C64\u52A0\u6F58\u52A0",
            "pos": "before",
            "value": "T$"
          },
          {
            "name": "\u7279\u7ACB\u5C3C\u8FBE\u548C\u591A\u5DF4\u54E5\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u7A81\u5C3C\u65AF\u7B2C\u7EB3\u5C14",
            "pos": "before",
            "value": "din"
          },
          {
            "name": "\u571F\u8033\u5176\u91CC\u62C9",
            "pos": "before",
            "value": "?"
          },
          {
            "name": "\u74E6\u52AA\u963F\u56FE\u74E6\u56FE",
            "pos": "before",
            "value": "VUV"
          },
          {
            "name": "\u5371\u5730\u9A6C\u62C9\u683C\u67E5\u5C14",
            "pos": "before",
            "value": "Q"
          },
          {
            "name": "\u59D4\u5185\u745E\u62C9\u535A\u5229\u74E6",
            "pos": "before",
            "value": "Bs"
          },
          {
            "name": "\u6587\u83B1\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u4E4C\u5E72\u8FBE\u5148\u4EE4",
            "pos": "before",
            "value": "UGX"
          },
          {
            "name": "\u4E4C\u514B\u5170\u683C\u91CC\u592B\u5C3C\u4E9A",
            "pos": "before",
            "value": "\u0433\u0440\u043D."
          },
          {
            "name": "\u4E4C\u62C9\u572D\u6BD4\u7D22",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u4E4C\u5179\u522B\u514B\u65AF\u5766\u82CF\u59C6",
            "pos": "before",
            "value": "so?m"
          },
          {
            "name": "\u897F\u8428\u6469\u4E9A\u5854\u62C9",
            "pos": "before",
            "value": "WST"
          },
          {
            "name": "\u65B0\u52A0\u5761\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u65B0\u53F0\u5E01",
            "pos": "before",
            "value": "NT$"
          },
          {
            "name": "\u65B0\u897F\u5170\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u5308\u7259\u5229\u798F\u6797",
            "pos": "before",
            "value": "Ft"
          },
          {
            "name": "\u53D9\u5229\u4E9A\u9551",
            "pos": "before",
            "value": "\uFFE1"
          },
          {
            "name": "\u7259\u4E70\u52A0\u5143",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u4E9A\u7F8E\u5C3C\u4E9A\u5FB7\u62C9\u59C6",
            "pos": "before",
            "value": "Dram"
          },
          {
            "name": "\u4E5F\u95E8\u91CC\u4E9A\u5C14",
            "pos": "before",
            "value": "Rial"
          },
          {
            "name": "\u4F0A\u62C9\u514B\u7B2C\u7EB3\u5C14",
            "pos": "before",
            "value": "din"
          },
          {
            "name": "\u4F0A\u6717\u91CC\u4E9A\u5C14",
            "pos": "before",
            "value": "Rial"
          },
          {
            "name": "\u4EE5\u8272\u5217\u65B0\u8C22\u514B\u5C14",
            "pos": "before",
            "value": "?"
          },
          {
            "name": "\u5370\u5EA6\u5362\u6BD4",
            "pos": "before",
            "value": "?"
          },
          {
            "name": "\u5370\u5EA6\u5C3C\u897F\u4E9A\u5362\u6BD4",
            "pos": "before",
            "value": "Rp"
          },
          {
            "name": "\u7EA6\u65E6\u7B2C\u7EB3\u5C14",
            "pos": "before",
            "value": "din"
          },
          {
            "name": "\u8D8A\u5357\u76FE",
            "pos": "after",
            "value": "?"
          },
          {
            "name": "\u8D5E\u6BD4\u4E9A\u514B\u74E6\u67E5",
            "pos": "before",
            "value": "ZMW"
          },
          {
            "name": "\u76F4\u5E03\u7F57\u9640\u9551",
            "pos": "before",
            "value": "\uFFE1"
          },
          {
            "name": "\u667A\u5229\u6BD4\u7D22",
            "pos": "before",
            "value": "$"
          },
          {
            "name": "\u4E2D\u975E\u91D1\u878D\u5408\u4F5C\u6CD5\u90CE",
            "pos": "before",
            "value": "FCFA"
          }
        ],
        dateFmtList: [
          {
            "name": "1930-08-05",
            "value": "yyyy-MM-dd"
          },
          {
            "name": "1930/8/5",
            "value": "yyyy/MM/dd"
          },
          {
            "name": "1930\u5E748\u67085\u65E5",
            "value": 'yyyy"\u5E74"M"\u6708"d"\u65E5"'
          },
          {
            "name": "08-05",
            "value": "MM-dd"
          },
          {
            "name": "8-5",
            "value": "M-d"
          },
          {
            "name": "8\u67085\u65E5",
            "value": 'M"\u6708"d"\u65E5"'
          },
          {
            "name": "13:30:30",
            "value": "h:mm:ss"
          },
          {
            "name": "13:30",
            "value": "h:mm"
          },
          {
            "name": "\u4E0B\u534801:30",
            "value": "\u4E0A\u5348/\u4E0B\u5348 hh:mm"
          },
          {
            "name": "\u4E0B\u53481:30",
            "value": "\u4E0A\u5348/\u4E0B\u5348 h:mm"
          },
          {
            "name": "\u4E0B\u53481:30:30",
            "value": "\u4E0A\u5348/\u4E0B\u5348 h:mm:ss"
          },
          {
            "name": "08-05 \u4E0B\u534801:30",
            "value": "MM-dd \u4E0A\u5348/\u4E0B\u5348 hh:mm"
          }
        ],
        numFmtList: [
          {
            "name": "1235",
            "value": "0"
          },
          {
            "name": "1234.56",
            "value": "0.00"
          },
          {
            "name": "1,235",
            "value": "#,##0"
          },
          {
            "name": "1,234.56",
            "value": "#,##0.00"
          },
          {
            "name": "1,235",
            "value": "#,##0_);(#,##0)"
          },
          {
            "name": "1,235",
            "value": "#,##0_);[Red](#,##0)"
          },
          {
            "name": "1,234.56",
            "value": "#,##0.00_);(#,##0.00)"
          },
          {
            "name": "1,234.56",
            "value": "#,##0.00_);[Red](#,##0.00)"
          },
          {
            "name": "$1,235",
            "value": "$#,##0_);($#,##0)"
          },
          {
            "name": "$1,235",
            "value": "$#,##0_);[Red]($#,##0)"
          },
          {
            "name": "$1,234.56",
            "value": "$#,##0.00_);($#,##0.00)"
          },
          {
            "name": "$1,234.56",
            "value": "$#,##0.00_);[Red]($#,##0.00)"
          },
          {
            "name": "1234.56",
            "value": "@"
          },
          {
            "name": "123456%",
            "value": "0%"
          },
          {
            "name": "123456.00%",
            "value": "0.00%"
          },
          {
            "name": "1.23E+03",
            "value": "0.00E+00"
          },
          {
            "name": "1.2E+3",
            "value": "##0.0E+0"
          },
          {
            "name": "1234 5/9",
            "value": "# ?/?"
          },
          {
            "name": "1234 14/25",
            "value": "# ??/??"
          },
          {
            "name": "$ 1,235",
            "value": '_($* #,##0_);_(...($* "-"_);_(@_)'
          },
          {
            "name": "1,235",
            "value": '_(* #,##0_);_(*..._(* "-"_);_(@_)'
          },
          {
            "name": "$ 1,234.56",
            "value": '_($* #,##0.00_);_(...($* "-"_);_(@_)'
          },
          {
            "name": "1,234.56",
            "value": '_(* #,##0.00_);...* "-"??_);_(@_)'
          }
        ],
        createDialog: function(type) {
          let _this = this;
          const currencyDetail = locale_default().currencyDetail;
          const locale_format = locale_default().format;
          const locale_button = locale_default().button;
          this.moneyFmtList = [
            {"name": currencyDetail.RMB, "pos": "before", "value": "\xA5"},
            {"name": currencyDetail.USdollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.EUR, "pos": "before", "value": "\u20AC"},
            {"name": currencyDetail.GBP, "pos": "before", "value": "\uFFE1"},
            {"name": currencyDetail.HK, "pos": "before", "value": "$"},
            {"name": currencyDetail.JPY, "pos": "before", "value": "\uFFE5"},
            {"name": currencyDetail.AlbanianLek, "pos": "before", "value": "Lek"},
            {"name": currencyDetail.AlgerianDinar, "pos": "before", "value": "din"},
            {"name": currencyDetail.Afghani, "pos": "after", "value": "Af"},
            {"name": currencyDetail.ArgentinePeso, "pos": "before", "value": "$"},
            {"name": currencyDetail.UnitedArabEmiratesDirham, "pos": "before", "value": "dh"},
            {"name": currencyDetail.ArubanFlorin, "pos": "before", "value": "Afl"},
            {"name": currencyDetail.OmaniRial, "pos": "before", "value": "Rial"},
            {"name": currencyDetail.Azerbaijanimanat, "pos": "before", "value": "?"},
            {"name": currencyDetail.EgyptianPound, "pos": "before", "value": "\uFFE1"},
            {"name": currencyDetail.EthiopianBirr, "pos": "before", "value": "Birr"},
            {"name": currencyDetail.AngolaKwanza, "pos": "before", "value": "Kz"},
            {"name": currencyDetail.AustralianDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.Patacas, "pos": "before", "value": "MOP"},
            {"name": currencyDetail.BarbadosDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.PapuaNewGuineaKina, "pos": "before", "value": "PGK"},
            {"name": currencyDetail.BahamianDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.PakistanRupee, "pos": "before", "value": "Rs"},
            {"name": currencyDetail.ParaguayanGuarani, "pos": "after", "value": "Gs"},
            {"name": currencyDetail.BahrainiDinar, "pos": "before", "value": "din"},
            {"name": currencyDetail.PanamanianBalboa, "pos": "before", "value": "B/"},
            {"name": currencyDetail.Brazilianreal, "pos": "before", "value": "R$"},
            {"name": currencyDetail.Belarusianruble, "pos": "after", "value": "\u0440"},
            {"name": currencyDetail.BermudianDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.BulgarianLev, "pos": "before", "value": "lev"},
            {"name": currencyDetail.IcelandKrona, "pos": "before", "value": "kr"},
            {"name": currencyDetail.BosniaHerzegovinaConvertibleMark, "pos": "before", "value": "KM"},
            {"name": currencyDetail.PolishZloty, "pos": "after", "value": "z?"},
            {"name": currencyDetail.Boliviano, "pos": "before", "value": "Bs"},
            {"name": currencyDetail.BelizeDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.BotswanaPula, "pos": "before", "value": "P"},
            {"name": currencyDetail.NotDannuzhamu, "pos": "before", "value": "Nu"},
            {"name": currencyDetail.BurundiFranc, "pos": "before", "value": "FBu"},
            {"name": currencyDetail.NorthKoreanWon, "pos": "before", "value": "?KP"},
            {"name": currencyDetail.DanishKrone, "pos": "after", "value": "kr"},
            {"name": currencyDetail.EastCaribbeanDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.DominicaPeso, "pos": "before", "value": "RD$"},
            {"name": currencyDetail.RussianRuble, "pos": "after", "value": "?"},
            {"name": currencyDetail.EritreanNakfa, "pos": "before", "value": "Nfk"},
            {"name": currencyDetail.CFAfranc, "pos": "before", "value": "CFA"},
            {"name": currencyDetail.PhilippinePeso, "pos": "before", "value": "?"},
            {"name": currencyDetail.FijiDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.CapeVerdeEscudo, "pos": "before", "value": "CVE"},
            {"name": currencyDetail.FalklandIslandsPound, "pos": "before", "value": "\uFFE1"},
            {"name": currencyDetail.GambianDalasi, "pos": "before", "value": "GMD"},
            {"name": currencyDetail.Congolesefranc, "pos": "before", "value": "FrCD"},
            {"name": currencyDetail.ColombianPeso, "pos": "before", "value": "$"},
            {"name": currencyDetail.CostaRicanColon, "pos": "before", "value": "?"},
            {"name": currencyDetail.CubanPeso, "pos": "before", "value": "$"},
            {"name": currencyDetail.Cubanconvertiblepeso, "pos": "before", "value": "$"},
            {"name": currencyDetail.GuyanaDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.KazakhstanTenge, "pos": "before", "value": "?"},
            {"name": currencyDetail.Haitiangourde, "pos": "before", "value": "HTG"},
            {"name": currencyDetail.won, "pos": "before", "value": "?"},
            {"name": currencyDetail.NetherlandsAntillesGuilder, "pos": "before", "value": "NAf."},
            {"name": currencyDetail.Honduraslempiras, "pos": "before", "value": "L"},
            {"name": currencyDetail.DjiboutiFranc, "pos": "before", "value": "Fdj"},
            {"name": currencyDetail.KyrgyzstanSom, "pos": "before", "value": "KGS"},
            {"name": currencyDetail.GuineaFranc, "pos": "before", "value": "FG"},
            {"name": currencyDetail.CanadianDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.GhanaianCedi, "pos": "before", "value": "GHS"},
            {"name": currencyDetail.Cambodianriel, "pos": "before", "value": "Riel"},
            {"name": currencyDetail.CzechKoruna, "pos": "after", "value": "K?"},
            {"name": currencyDetail.ZimbabweDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.QatariRiyal, "pos": "before", "value": "Rial"},
            {"name": currencyDetail.CaymanIslandsDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.Comorianfranc, "pos": "before", "value": "CF"},
            {"name": currencyDetail.KuwaitiDinar, "pos": "before", "value": "din"},
            {"name": currencyDetail.CroatianKuna, "pos": "before", "value": "kn"},
            {"name": currencyDetail.KenyanShilling, "pos": "before", "value": "Ksh"},
            {"name": currencyDetail.LesothoLoti, "pos": "before", "value": "LSL"},
            {"name": currencyDetail.LaoKip, "pos": "before", "value": "?"},
            {"name": currencyDetail.LebanesePound, "pos": "before", "value": "L\uFFE1"},
            {"name": currencyDetail.Lithuanianlitas, "pos": "before", "value": "Lt"},
            {"name": currencyDetail.LibyanDinar, "pos": "before", "value": "din"},
            {"name": currencyDetail.LiberianDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.RwandaFranc, "pos": "before", "value": "RF"},
            {"name": currencyDetail.RomanianLeu, "pos": "before", "value": "RON"},
            {"name": currencyDetail.MalagasyAriary, "pos": "before", "value": "Ar"},
            {"name": currencyDetail.MaldivianRufiyaa, "pos": "before", "value": "Rf"},
            {"name": currencyDetail.MalawiKwacha, "pos": "before", "value": "MWK"},
            {"name": currencyDetail.MalaysianRinggit, "pos": "before", "value": "RM"},
            {"name": currencyDetail.MacedoniawearingDinar, "pos": "before", "value": "din"},
            {"name": currencyDetail.MauritiusRupee, "pos": "before", "value": "MURs"},
            {"name": currencyDetail.MauritanianOuguiya, "pos": "before", "value": "MRO"},
            {"name": currencyDetail.MongolianTugrik, "pos": "before", "value": "?"},
            {"name": currencyDetail.BangladeshiTaka, "pos": "before", "value": "?"},
            {"name": currencyDetail.PeruvianNuevoSol, "pos": "before", "value": "S/"},
            {"name": currencyDetail.MyanmarKyat, "pos": "before", "value": "K"},
            {"name": currencyDetail.MoldovanLeu, "pos": "before", "value": "MDL"},
            {"name": currencyDetail.MoroccanDirham, "pos": "before", "value": "dh"},
            {"name": currencyDetail.MozambiqueMetical, "pos": "before", "value": "MTn"},
            {"name": currencyDetail.MexicanPeso, "pos": "before", "value": "$"},
            {"name": currencyDetail.NamibianDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.SouthAfricanRand, "pos": "before", "value": "R"},
            {"name": currencyDetail.SouthSudanesePound, "pos": "before", "value": "\uFFE1"},
            {"name": currencyDetail.NicaraguaCordoba, "pos": "before", "value": "C$"},
            {"name": currencyDetail.NepaleseRupee, "pos": "before", "value": "Rs"},
            {"name": currencyDetail.NigerianNaira, "pos": "before", "value": "?"},
            {"name": currencyDetail.NorwegianKrone, "pos": "after", "value": "kr"},
            {"name": currencyDetail.GeorgianLari, "pos": "before", "value": "GEL"},
            {"name": currencyDetail.RenminbiOffshore, "pos": "before", "value": "\uFFE5"},
            {"name": currencyDetail.SwedishKrona, "pos": "after", "value": "kr"},
            {"name": currencyDetail.SwissFranc, "pos": "before", "value": "CHF"},
            {"name": currencyDetail.SerbianDinar, "pos": "before", "value": "din"},
            {"name": currencyDetail.SierraLeone, "pos": "before", "value": "SLL"},
            {"name": currencyDetail.SeychellesRupee, "pos": "before", "value": "SCR"},
            {"name": currencyDetail.SaudiRiyal, "pos": "before", "value": "Rial"},
            {"name": currencyDetail.SaoTomeDobra, "pos": "before", "value": "Db"},
            {"name": currencyDetail.SaintHelenapound, "pos": "before", "value": "\uFFE1"},
            {"name": currencyDetail.SriLankaRupee, "pos": "before", "value": "Rs"},
            {"name": currencyDetail.SwazilandLilangeni, "pos": "before", "value": "SZL"},
            {"name": currencyDetail.SudanesePound, "pos": "before", "value": "SDG"},
            {"name": currencyDetail.Surinamesedollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.SolomonIslandsDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.SomaliShilling, "pos": "before", "value": "SOS"},
            {"name": currencyDetail.TajikistanSomoni, "pos": "before", "value": "Som"},
            {"name": currencyDetail.PacificFranc, "pos": "after", "value": "FCFP"},
            {"name": currencyDetail.ThaiBaht, "pos": "before", "value": "?"},
            {"name": currencyDetail.TanzanianShilling, "pos": "before", "value": "TSh"},
            {"name": currencyDetail.TonganPaanga, "pos": "before", "value": "T$"},
            {"name": currencyDetail.TrinidadandTobagoDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.TunisianDinar, "pos": "before", "value": "din"},
            {"name": currencyDetail.TurkishLira, "pos": "before", "value": "?"},
            {"name": currencyDetail.VanuatuVatu, "pos": "before", "value": "VUV"},
            {"name": currencyDetail.GuatemalanQuetzal, "pos": "before", "value": "Q"},
            {"name": currencyDetail.CommissionBolivar, "pos": "before", "value": "Bs"},
            {"name": currencyDetail.BruneiDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.UgandanShilling, "pos": "before", "value": "UGX"},
            {"name": currencyDetail.UkrainianHryvnia, "pos": "before", "value": "\u0433\u0440\u043D."},
            {"name": currencyDetail.UruguayanPeso, "pos": "before", "value": "$"},
            {"name": currencyDetail.Uzbekistansom, "pos": "before", "value": "so?m"},
            {"name": currencyDetail.WesternSamoaTala, "pos": "before", "value": "WST"},
            {"name": currencyDetail.SingaporeDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.NT, "pos": "before", "value": "NT$"},
            {"name": currencyDetail.NewZealandDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.HungarianForint, "pos": "before", "value": "Ft"},
            {"name": currencyDetail.SyrianPound, "pos": "before", "value": "\uFFE1"},
            {"name": currencyDetail.JamaicanDollar, "pos": "before", "value": "$"},
            {"name": currencyDetail.ArmenianDram, "pos": "before", "value": "Dram"},
            {"name": currencyDetail.YemeniRial, "pos": "before", "value": "Rial"},
            {"name": currencyDetail.IraqiDinar, "pos": "before", "value": "din"},
            {"name": currencyDetail.IranianRial, "pos": "before", "value": "Rial"},
            {"name": currencyDetail.NewIsraeliShekel, "pos": "before", "value": "?"},
            {"name": currencyDetail.IndianRupee, "pos": "before", "value": "?"},
            {"name": currencyDetail.IndonesianRupiah, "pos": "before", "value": "Rp"},
            {"name": currencyDetail.JordanianDinar, "pos": "before", "value": "din"},
            {"name": currencyDetail.VND, "pos": "after", "value": "?"},
            {"name": currencyDetail.ZambianKwacha, "pos": "before", "value": "ZMW"},
            {"name": currencyDetail.GibraltarPound, "pos": "before", "value": "\uFFE1"},
            {"name": currencyDetail.ChileanPeso, "pos": "before", "value": "$"},
            {"name": currencyDetail.CFAFrancBEAC, "pos": "before", "value": "FCFA"}
          ];
          this.dateFmtList = locale_default().dateFmtList;
          this.numFmtList = [
            {
              "name": "1235",
              "value": "0"
            },
            {
              "name": "1234.56",
              "value": "0.00"
            },
            {
              "name": "1,235",
              "value": "#,##0"
            },
            {
              "name": "1,234.56",
              "value": "#,##0.00"
            },
            {
              "name": "1,235",
              "value": "#,##0_);(#,##0)"
            },
            {
              "name": "1,235",
              "value": "#,##0_);[Red](#,##0)"
            },
            {
              "name": "1,234.56",
              "value": "#,##0.00_);(#,##0.00)"
            },
            {
              "name": "1,234.56",
              "value": "#,##0.00_);[Red](#,##0.00)"
            },
            {
              "name": "$1,235",
              "value": "$#,##0_);($#,##0)"
            },
            {
              "name": "$1,235",
              "value": "$#,##0_);[Red]($#,##0)"
            },
            {
              "name": "$1,234.56",
              "value": "$#,##0.00_);($#,##0.00)"
            },
            {
              "name": "$1,234.56",
              "value": "$#,##0.00_);[Red]($#,##0.00)"
            },
            {
              "name": "1234.56",
              "value": "@"
            },
            {
              "name": "123456%",
              "value": "0%"
            },
            {
              "name": "123456.00%",
              "value": "0.00%"
            },
            {
              "name": "1.23E+03",
              "value": "0.00E+00"
            },
            {
              "name": "1.2E+3",
              "value": "##0.0E+0"
            },
            {
              "name": "1234 5/9",
              "value": "# ?/?"
            },
            {
              "name": "1234 14/25",
              "value": "# ??/??"
            },
            {
              "name": "$ 1,235",
              "value": '_($* #,##0_);_(...($* "-"_);_(@_)'
            },
            {
              "name": "1,235",
              "value": '_(* #,##0_);_(*..._(* "-"_);_(@_)'
            },
            {
              "name": "$ 1,234.56",
              "value": '_($* #,##0.00_);_(...($* "-"_);_(@_)'
            },
            {
              "name": "1,234.56",
              "value": '_(* #,##0.00_);...* "-"??_);_(@_)'
            }
          ];
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-moreFormat-dialog").remove();
          let title = "", content = "";
          if (type == "morecurrency") {
            title = locale_format.titleCurrency;
            let listHtml = "";
            for (let i2 = 0; i2 < _this.moneyFmtList.length; i2++) {
              let name2 = _this.moneyFmtList[i2]["name"];
              let pos = _this.moneyFmtList[i2]["pos"];
              let value = _this.moneyFmtList[i2]["value"];
              listHtml += '<div class="listItem"><div class="name">' + name2 + '</div><div class="value">' + value + '</div><input type="hidden" value="' + pos + '"/></div>';
            }
            content = '<div class="box" id="morecurrency"><div class="decimal"><label>' + locale_format.decimalPlaces + '\uFF1A</label><input type="number" class="formulaInputFocus" value="2" min="0" max="9"/></div><div class="listbox">' + listHtml + "</div></div>";
          } else if (type == "moredatetime") {
            title = locale_format.titleDateTime;
            let listHtml = "";
            for (let i2 = 0; i2 < _this.dateFmtList.length; i2++) {
              let name2 = _this.dateFmtList[i2]["name"];
              let value = _this.dateFmtList[i2]["value"];
              listHtml += '<div class="listItem"><div class="name">' + name2 + '</div><div class="value">' + value + "</div></div>";
            }
            content = '<div class="box" id="moredatetime"><div class="listbox">' + listHtml + "</div></div>";
          } else if (type == "moredigit") {
            title = locale_format.titleNumber;
            let listHtml = "";
            for (let i2 = 0; i2 < _this.numFmtList.length; i2++) {
              let name2 = _this.numFmtList[i2]["name"];
              let value = _this.numFmtList[i2]["value"];
              listHtml += '<div class="listItem"><div class="name">' + name2 + '</div><div class="value">' + value + "</div></div>";
            }
            content = '<div class="box" id="moredigit"><div class="listbox">' + listHtml + "</div></div>";
          }
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-moreFormat-dialog",
            "addclass": "luckysheet-moreFormat-dialog",
            "title": title,
            "content": content,
            "botton": '<button id="luckysheet-moreFormat-dialog-confirm" class="btn btn-primary">' + locale_button.confirm + '</button><button class="btn btn-default luckysheet-model-close-btn">' + locale_button.cancel + "</button>",
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-moreFormat-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 400).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-moreFormat-dialog").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3}).show();
          $("#luckysheet-moreFormat-dialog .listbox .listItem").eq(0).addClass("on");
        },
        init: function() {
          let _this = this;
          $(document).on("click", "#luckysheet-moreFormat-dialog .listbox .listItem", function() {
            $(this).addClass("on").siblings().removeClass("on");
          });
          $(document).off("click.moreFormatConfirm").on("click.moreFormatConfirm", "#luckysheet-moreFormat-dialog #luckysheet-moreFormat-dialog-confirm", function() {
            $("#luckysheet-moreFormat-dialog").hide();
            $("#luckysheet-modal-dialog-mask").hide();
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let value = $("#luckysheet-moreFormat-dialog .listbox .listItem.on .value").text();
            let id = $(this).parents("#luckysheet-moreFormat-dialog").find(".box").attr("id");
            if (id == "morecurrency") {
              if (value.indexOf("?") != -1) {
                return;
              }
              let decimal = parseInt($("#luckysheet-moreFormat-dialog .decimal input").val().trim());
              if (decimal.toString() == "NaN" || decimal < 0 || decimal > 9) {
                if (isEditMode()) {
                  alert("\u5C0F\u6570\u4F4D\u6570\u5FC5\u987B\u57280-9\u4E4B\u95F4\uFF01");
                } else {
                  tooltip_default.info("\u5C0F\u6570\u4F4D\u6570\u5FC5\u987B\u57280-9\u4E4B\u95F4\uFF01", "");
                }
                return;
              }
              let str = "";
              if (decimal > 0) {
                for (let i2 = 1; i2 <= decimal; i2++) {
                  str += "0";
                }
                str = "0." + str;
              } else {
                str = "#";
              }
              let pos = $("#luckysheet-moreFormat-dialog .listbox .listItem.on input:hidden").val();
              if (pos == "before") {
                str = '"' + value + '" ' + str;
              } else if (pos == "after") {
                str = str + ' "' + value + '"';
              }
              menuButton_default.updateFormat(d, "ct", str);
            } else if (id == "moredatetime") {
              menuButton_default.updateFormat(d, "ct", value);
            } else if (id == "moredigit") {
              menuButton_default.updateFormat(d, "ct", value);
            }
          });
        }
      };
      moreFormat_default = luckysheetMoreFormat;
    }
  });

  // node_modules/escape-html/index.js
  var require_escape_html = __commonJS({
    "node_modules/escape-html/index.js"(exports, module) {
      "use strict";
      var matchHtmlRegExp = /["'&<>]/;
      module.exports = escapeHtml2;
      function escapeHtml2(string) {
        var str = "" + string;
        var match = matchHtmlRegExp.exec(str);
        if (!match) {
          return str;
        }
        var escape;
        var html = "";
        var index2 = 0;
        var lastIndex = 0;
        for (index2 = match.index; index2 < str.length; index2++) {
          switch (str.charCodeAt(index2)) {
            case 34:
              escape = "&quot;";
              break;
            case 38:
              escape = "&amp;";
              break;
            case 39:
              escape = "&#39;";
              break;
            case 60:
              escape = "&lt;";
              break;
            case 62:
              escape = "&gt;";
              break;
            default:
              continue;
          }
          if (lastIndex !== index2) {
            html += str.substring(lastIndex, index2);
          }
          lastIndex = index2 + 1;
          html += escape;
        }
        return lastIndex !== index2 ? html + str.substring(lastIndex, index2) : html;
      }
    }
  });

  // src/controllers/searchReplace.js
  var import_escape_html, luckysheetSearchReplace, searchReplace_default;
  var init_searchReplace = __esm({
    "src/controllers/searchReplace.js"() {
      init_util();
      init_get();
      init_constant();
      init_select();
      init_sheetmanage();
      init_validate();
      init_format();
      init_setdata();
      init_refresh();
      init_editor();
      init_tooltip();
      init_func_methods();
      init_store();
      init_locale();
      init_protection();
      import_escape_html = __toModule(require_escape_html());
      luckysheetSearchReplace = {
        createDialog: function(source) {
          $("#luckysheet-modal-dialog-mask").hide();
          $("#luckysheet-search-replace").remove();
          const _locale = locale_default();
          const locale_findAndReplace = _locale.findAndReplace;
          const locale_button = _locale.button;
          let content = '<div class="tabBox"><span id="searchTab">' + locale_findAndReplace.find + '</span><span id="replaceTab">' + locale_findAndReplace.replace + '</span></div><div class="ctBox"><div class="inputBox"><div class="textboxs" id="searchInput">' + locale_findAndReplace.findTextbox + '\uFF1A<input class="formulaInputFocus" spellcheck="false" value=""/></div><div class="textboxs" id="replaceInput">' + locale_findAndReplace.replaceTextbox + '\uFF1A<input class="formulaInputFocus" spellcheck="false" value=""/></div><div class="checkboxs"><div id="regCheck"><input type="checkbox"/><span>' + locale_findAndReplace.regexTextbox + '</span></div><div id="wordCheck"><input type="checkbox"/><span>' + locale_findAndReplace.wholeTextbox + '</span></div><div id="caseCheck"><input type="checkbox"/><span>' + locale_findAndReplace.distinguishTextbox + '</span></div></div></div><div class="btnBox"><button id="replaceAllBtn" class="btn btn-default">' + locale_findAndReplace.allReplaceBtn + '</button><button id="replaceBtn" class="btn btn-default">' + locale_findAndReplace.replaceBtn + '</button><button id="searchAllBtn" class="btn btn-default">' + locale_findAndReplace.allFindBtn + '</button><button id="searchNextBtn" class="btn btn-default">' + locale_findAndReplace.findBtn + "</button></div></div>";
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-search-replace",
            "addclass": "luckysheet-search-replace",
            "title": "",
            "content": content,
            "botton": '<button class="btn btn-default luckysheet-model-close-btn">' + locale_button.close + "</button>",
            "style": "z-index:100003",
            "close": locale_button.close
          }));
          let $t = $("#luckysheet-search-replace").find(".luckysheet-modal-dialog-content").css("min-width", 500).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-search-replace").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3}).show();
          if (source == "0") {
            $("#luckysheet-search-replace #searchTab").addClass("on").siblings().removeClass("on");
            $("#luckysheet-search-replace #replaceInput").hide();
            $("#luckysheet-search-replace #replaceAllBtn").hide();
            $("#luckysheet-search-replace #replaceBtn").hide();
          } else if (source == "1") {
            $("#luckysheet-search-replace #replaceTab").addClass("on").siblings().removeClass("on");
            $("#luckysheet-search-replace #replaceInput").show();
            $("#luckysheet-search-replace #replaceAllBtn").show();
            $("#luckysheet-search-replace #replaceBtn").show();
          }
        },
        init: function() {
          let _this = this;
          $(document).off("click.SRtabBoxspan").on("click.SRtabBoxspan", "#luckysheet-search-replace .tabBox span", function() {
            $(this).addClass("on").siblings().removeClass("on");
            let $id = $(this).attr("id");
            if ($id == "searchTab") {
              $("#luckysheet-search-replace #replaceInput").hide();
              $("#luckysheet-search-replace #replaceAllBtn").hide();
              $("#luckysheet-search-replace #replaceBtn").hide();
              $("#luckysheet-search-replace #searchInput input").focus();
            } else if ($id == "replaceTab") {
              $("#luckysheet-search-replace #replaceInput").show();
              $("#luckysheet-search-replace #replaceAllBtn").show();
              $("#luckysheet-search-replace #replaceBtn").show();
              $("#luckysheet-search-replace #replaceInput input").focus();
            }
          });
          $(document).off("keyup.SRsearchInput").on("keyup.SRsearchInput", "#luckysheet-search-replace #searchInput input", function(event2) {
            let kcode = event2.keyCode;
            if (kcode == keycode.ENTER) {
              _this.searchNext();
            }
          });
          $(document).off("click.SRsearchNextBtn").on("click.SRsearchNextBtn", "#luckysheet-search-replace #searchNextBtn", function() {
            _this.searchNext();
          });
          $(document).off("click.SRsearchAllBtn").on("click.SRsearchAllBtn", "#luckysheet-search-replace #searchAllBtn", function() {
            _this.searchAll();
          });
          $(document).off("click.SRsearchAllboxItem").on("click.SRsearchAllboxItem", "#luckysheet-search-replace #searchAllbox .boxItem", function() {
            $(this).addClass("on").siblings().removeClass("on");
            let r2 = $(this).attr("data-row");
            let c2 = $(this).attr("data-col");
            let sheetIndex = $(this).attr("data-sheetIndex");
            if (sheetIndex != store_default.currentSheetIndex) {
              sheetmanage_default.changeSheetExec(sheetIndex);
            }
            store_default.luckysheet_select_save = [
              {"row": [r2, r2], "column": [c2, c2]}
            ];
            selectHightlightShow();
            let scrollLeft = $("#luckysheet-cell-main").scrollLeft(), scrollTop = $("#luckysheet-cell-main").scrollTop();
            let winH = $("#luckysheet-cell-main").height(), winW = $("#luckysheet-cell-main").width();
            let row = store_default.visibledatarow[r2], row_pre = r2 - 1 == -1 ? 0 : store_default.visibledatarow[r2 - 1];
            let col = store_default.visibledatacolumn[c2], col_pre = c2 - 1 == -1 ? 0 : store_default.visibledatacolumn[c2 - 1];
            if (col - scrollLeft - winW + 20 > 0) {
              $("#luckysheet-scrollbar-x").scrollLeft(col - winW + 20);
            } else if (col_pre - scrollLeft - 20 < 0) {
              $("#luckysheet-scrollbar-x").scrollLeft(col_pre - 20);
            }
            if (row - scrollTop - winH + 20 > 0) {
              $("#luckysheet-scrollbar-y").scrollTop(row - winH + 20);
            } else if (row_pre - scrollTop - 20 < 0) {
              $("#luckysheet-scrollbar-y").scrollTop(row_pre - 20);
            }
          });
          $(document).off("click.SRreplaceBtn").on("click.SRreplaceBtn", "#luckysheet-search-replace #replaceBtn", function() {
            _this.replace();
          });
          $(document).off("click.SRreplaceAllBtn").on("click.SRreplaceAllBtn", "#luckysheet-search-replace #replaceAllBtn", function() {
            _this.replaceAll();
          });
        },
        searchNext: function() {
          let _this = this;
          let searchText = $("#luckysheet-search-replace #searchInput input").val();
          if (searchText == "" || searchText == null) {
            return;
          }
          const _locale = locale_default();
          const locale_findAndReplace = _locale.findAndReplace;
          let range2;
          if (store_default.luckysheet_select_save.length == 0 || store_default.luckysheet_select_save.length == 1 && store_default.luckysheet_select_save[0].row[0] == store_default.luckysheet_select_save[0].row[1] && store_default.luckysheet_select_save[0].column[0] == store_default.luckysheet_select_save[0].column[1]) {
            range2 = [{
              "row": [0, store_default.flowdata.length - 1],
              "column": [0, store_default.flowdata[0].length - 1]
            }];
          } else {
            range2 = $.extend(true, [], store_default.luckysheet_select_save);
          }
          let searchIndexArr = _this.getSearchIndexArr(searchText, range2);
          if (searchIndexArr.length == 0) {
            if (isEditMode()) {
              alert(locale_findAndReplace.noFindTip);
            } else {
              tooltip_default.info(locale_findAndReplace.noFindTip, "");
            }
            return;
          }
          let count = 0;
          if (store_default.luckysheet_select_save.length == 0 || store_default.luckysheet_select_save.length == 1 && store_default.luckysheet_select_save[0].row[0] == store_default.luckysheet_select_save[0].row[1] && store_default.luckysheet_select_save[0].column[0] == store_default.luckysheet_select_save[0].column[1]) {
            if (store_default.luckysheet_select_save.length == 0) {
              count = 0;
            } else {
              for (let i2 = 0; i2 < searchIndexArr.length; i2++) {
                if (searchIndexArr[i2].r == store_default.luckysheet_select_save[0].row[0] && searchIndexArr[i2].c == store_default.luckysheet_select_save[0].column[0]) {
                  if (i2 == searchIndexArr.length - 1) {
                    count = 0;
                  } else {
                    count = i2 + 1;
                  }
                  break;
                }
              }
            }
            store_default.luckysheet_select_save = [{
              "row": [searchIndexArr[count].r, searchIndexArr[count].r],
              "column": [searchIndexArr[count].c, searchIndexArr[count].c]
            }];
          } else {
            let rf = range2[range2.length - 1].row_focus;
            let cf = range2[range2.length - 1].column_focus;
            for (let i2 = 0; i2 < searchIndexArr.length; i2++) {
              if (searchIndexArr[i2].r == rf && searchIndexArr[i2].c == cf) {
                if (i2 == searchIndexArr.length - 1) {
                  count = 0;
                } else {
                  count = i2 + 1;
                }
                break;
              }
            }
            for (let s = 0; s < range2.length; s++) {
              let r1 = range2[s].row[0], r2 = range2[s].row[1];
              let c1 = range2[s].column[0], c2 = range2[s].column[1];
              if (searchIndexArr[count].r >= r1 && searchIndexArr[count].r <= r2 && searchIndexArr[count].c >= c1 && searchIndexArr[count].c <= c2) {
                let obj = range2[s];
                obj["row_focus"] = searchIndexArr[count].r;
                obj["column_focus"] = searchIndexArr[count].c;
                range2.splice(s, 1);
                range2.push(obj);
                break;
              }
            }
            store_default.luckysheet_select_save = range2;
          }
          selectHightlightShow();
          let scrollLeft = $("#luckysheet-cell-main").scrollLeft(), scrollTop = $("#luckysheet-cell-main").scrollTop();
          let winH = $("#luckysheet-cell-main").height(), winW = $("#luckysheet-cell-main").width();
          let row = store_default.visibledatarow[searchIndexArr[count].r], row_pre = searchIndexArr[count].r - 1 == -1 ? 0 : store_default.visibledatarow[searchIndexArr[count].r - 1];
          let col = store_default.visibledatacolumn[searchIndexArr[count].c], col_pre = searchIndexArr[count].c - 1 == -1 ? 0 : store_default.visibledatacolumn[searchIndexArr[count].c - 1];
          if (col - scrollLeft - winW + 20 > 0) {
            $("#luckysheet-scrollbar-x").scrollLeft(col - winW + 20);
          } else if (col_pre - scrollLeft - 20 < 0) {
            $("#luckysheet-scrollbar-x").scrollLeft(col_pre - 20);
          }
          if (row - scrollTop - winH + 20 > 0) {
            $("#luckysheet-scrollbar-y").scrollTop(row - winH + 20);
          } else if (row_pre - scrollTop - 20 < 0) {
            $("#luckysheet-scrollbar-y").scrollTop(row_pre - 20);
          }
          if ($("#searchAllbox").is(":visible")) {
            $("#luckysheet-search-replace #searchAllbox .boxItem").removeClass("on");
          }
        },
        searchAll: function() {
          let _this = this;
          const _locale = locale_default();
          const locale_findAndReplace = _locale.findAndReplace;
          $("#luckysheet-search-replace #searchAllbox").remove();
          let searchText = $("#luckysheet-search-replace #searchInput input").val();
          if (searchText == "" || searchText == null) {
            return;
          }
          let range2;
          if (store_default.luckysheet_select_save.length == 0 || store_default.luckysheet_select_save.length == 1 && store_default.luckysheet_select_save[0].row[0] == store_default.luckysheet_select_save[0].row[1] && store_default.luckysheet_select_save[0].column[0] == store_default.luckysheet_select_save[0].column[1]) {
            range2 = [{
              "row": [0, store_default.flowdata.length - 1],
              "column": [0, store_default.flowdata[0].length - 1]
            }];
          } else {
            range2 = $.extend(true, [], store_default.luckysheet_select_save);
          }
          let searchIndexArr = _this.getSearchIndexArr(searchText, range2);
          if (searchIndexArr.length == 0) {
            if (isEditMode()) {
              alert(locale_findAndReplace.noFindTip);
            } else {
              tooltip_default.info(locale_findAndReplace.noFindTip, "");
            }
            return;
          }
          let searchAllHtml = "";
          for (let i2 = 0; i2 < searchIndexArr.length; i2++) {
            let value_ShowEs = valueShowEs(searchIndexArr[i2].r, searchIndexArr[i2].c, store_default.flowdata).toString();
            if (value_ShowEs.indexOf("</") > -1 && value_ShowEs.indexOf(">") > -1) {
              searchAllHtml += '<div class="boxItem" data-row="' + searchIndexArr[i2].r + '" data-col="' + searchIndexArr[i2].c + '" data-sheetIndex="' + store_default.currentSheetIndex + '"><span>' + (0, import_escape_html.default)(store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].name) + "</span><span>" + chatatABC(searchIndexArr[i2].c) + (searchIndexArr[i2].r + 1) + "</span><span>" + (0, import_escape_html.default)(value_ShowEs) + "</span></div>";
            } else {
              searchAllHtml += '<div class="boxItem" data-row="' + searchIndexArr[i2].r + '" data-col="' + searchIndexArr[i2].c + '" data-sheetIndex="' + store_default.currentSheetIndex + '"><span>' + store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].name + "</span><span>" + chatatABC(searchIndexArr[i2].c) + (searchIndexArr[i2].r + 1) + '</span><span title="' + (0, import_escape_html.default)(value_ShowEs) + '">' + (0, import_escape_html.default)(value_ShowEs) + "</span></div>";
            }
          }
          $(`<div id="searchAllbox"><div class="boxTitle"><span>${locale_findAndReplace.searchTargetSheet}</span><span>${locale_findAndReplace.searchTargetCell}</span><span>${locale_findAndReplace.searchTargetValue}</span></div><div class="boxMain">${searchAllHtml}</div></div>`).appendTo($("#luckysheet-search-replace"));
          $("#luckysheet-search-replace #searchAllbox .boxItem").eq(0).addClass("on").siblings().removeClass("on");
          store_default.luckysheet_select_save = [{
            "row": [searchIndexArr[0].r, searchIndexArr[0].r],
            "column": [searchIndexArr[0].c, searchIndexArr[0].c]
          }];
          selectHightlightShow();
        },
        getSearchIndexArr: function(searchText, range2) {
          const arr = [];
          const obj = {};
          const $container = $("#luckysheet-search-replace");
          const isChecked = (inputId) => $container.find(`#${inputId} input[type='checkbox']`).is(":checked");
          const regCheck = isChecked("regCheck");
          const wordCheck = isChecked("wordCheck");
          const caseCheck = isChecked("caseCheck");
          let regExpFlags = "g";
          if (!caseCheck) {
            searchText = searchText.toLowerCase();
            regExpFlags += "i";
          }
          const addResult = (r2, c2) => {
            if (!(r2 + "_" + c2 in obj)) {
              obj[r2 + "_" + c2] = 0;
              arr.push({"r": r2, "c": c2});
            }
          };
          for (let s = 0; s < range2.length; s++) {
            const r1 = range2[s].row[0], r2 = range2[s].row[1];
            const c1 = range2[s].column[0], c2 = range2[s].column[1];
            for (let r3 = r1; r3 <= r2; r3++) {
              for (let c3 = c1; c3 <= c2; c3++) {
                const cell = store_default.flowdata[r3][c3];
                if (cell != null) {
                  let value = valueShowEs(r3, c3, store_default.flowdata);
                  if (value == 0) {
                    value = value.toString();
                  }
                  if (value != null && value != "") {
                    let wasFound = false;
                    value = value.toString();
                    value = caseCheck ? value : value.toLowerCase();
                    if (wordCheck) {
                      wasFound = searchText == value;
                    } else if (regCheck) {
                      let reg = new RegExp(func_methods_default.getRegExpStr(searchText), regExpFlags);
                      wasFound = reg.test(value);
                    } else {
                      wasFound = ~value.indexOf(searchText);
                    }
                    wasFound && addResult(r3, c3);
                  }
                }
              }
            }
          }
          return arr;
        },
        replace: function() {
          let _this = this;
          const _locale = locale_default();
          const locale_findAndReplace = _locale.findAndReplace;
          if (!store_default.allowEdit) {
            tooltip_default.info(locale_findAndReplace.modeTip, "");
            return;
          }
          let searchText = $("#luckysheet-search-replace #searchInput input").val();
          if (searchText == "" || searchText == null) {
            if (isEditMode()) {
              alert(locale_findAndReplace.searchInputTip);
            } else {
              tooltip_default.info(locale_findAndReplace.searchInputTip, "");
            }
            return;
          }
          let range2;
          if (store_default.luckysheet_select_save.length == 0 || store_default.luckysheet_select_save.length == 1 && store_default.luckysheet_select_save[0].row[0] == store_default.luckysheet_select_save[0].row[1] && store_default.luckysheet_select_save[0].column[0] == store_default.luckysheet_select_save[0].column[1]) {
            range2 = [{
              "row": [0, store_default.flowdata.length - 1],
              "column": [0, store_default.flowdata[0].length - 1]
            }];
          } else {
            range2 = $.extend(true, [], store_default.luckysheet_select_save);
          }
          let searchIndexArr = _this.getSearchIndexArr(searchText, range2);
          if (searchIndexArr.length == 0) {
            if (isEditMode()) {
              alert(locale_findAndReplace.noReplceTip);
            } else {
              tooltip_default.info(locale_findAndReplace.noReplceTip, "");
            }
            return;
          }
          let count = null;
          let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
          let rf = last.row_focus;
          let cf = last.column_focus;
          for (let i2 = 0; i2 < searchIndexArr.length; i2++) {
            if (searchIndexArr[i2].r == rf && searchIndexArr[i2].c == cf) {
              count = i2;
              break;
            }
          }
          if (count == null) {
            if (searchIndexArr.length == 0) {
              if (isEditMode()) {
                alert(locale_findAndReplace.noMatchTip);
              } else {
                tooltip_default.info(locale_findAndReplace.noMatchTip, "");
              }
              return;
            } else {
              count = 0;
            }
          }
          let regCheck = false;
          if ($("#luckysheet-search-replace #regCheck input[type='checkbox']").is(":checked")) {
            regCheck = true;
          }
          let wordCheck = false;
          if ($("#luckysheet-search-replace #wordCheck input[type='checkbox']").is(":checked")) {
            wordCheck = true;
          }
          let caseCheck = false;
          if ($("#luckysheet-search-replace #caseCheck input[type='checkbox']").is(":checked")) {
            caseCheck = true;
          }
          let replaceText = $("#luckysheet-search-replace #replaceInput input").val();
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          let r2, c2;
          if (wordCheck) {
            r2 = searchIndexArr[count].r;
            c2 = searchIndexArr[count].c;
            let v = replaceText;
            if (!checkProtectionLocked(r2, c2, store_default.currentSheetIndex)) {
              return;
            }
            setcellvalue(r2, c2, d, v);
          } else {
            let reg;
            if (caseCheck) {
              reg = new RegExp(func_methods_default.getRegExpStr(searchText), "g");
            } else {
              reg = new RegExp(func_methods_default.getRegExpStr(searchText), "ig");
            }
            r2 = searchIndexArr[count].r;
            c2 = searchIndexArr[count].c;
            if (!checkProtectionLocked(r2, c2, store_default.currentSheetIndex)) {
              return;
            }
            let v = valueShowEs(r2, c2, d).toString().replace(reg, replaceText);
            setcellvalue(r2, c2, d, v);
          }
          store_default.luckysheet_select_save = [{"row": [r2, r2], "column": [c2, c2]}];
          if ($("#luckysheet-search-replace #searchAllbox").is(":visible")) {
            $("#luckysheet-search-replace #searchAllbox").hide();
          }
          jfrefreshgrid(d, store_default.luckysheet_select_save);
          selectHightlightShow();
          let scrollLeft = $("#luckysheet-cell-main").scrollLeft(), scrollTop = $("#luckysheet-cell-main").scrollTop();
          let winH = $("#luckysheet-cell-main").height(), winW = $("#luckysheet-cell-main").width();
          let row = store_default.visibledatarow[r2], row_pre = r2 - 1 == -1 ? 0 : store_default.visibledatarow[r2 - 1];
          let col = store_default.visibledatacolumn[c2], col_pre = c2 - 1 == -1 ? 0 : store_default.visibledatacolumn[c2 - 1];
          if (col - scrollLeft - winW + 20 > 0) {
            $("#luckysheet-scrollbar-x").scrollLeft(col - winW + 20);
          } else if (col_pre - scrollLeft - 20 < 0) {
            $("#luckysheet-scrollbar-x").scrollLeft(col_pre - 20);
          }
          if (row - scrollTop - winH + 20 > 0) {
            $("#luckysheet-scrollbar-y").scrollTop(row - winH + 20);
          } else if (row_pre - scrollTop - 20 < 0) {
            $("#luckysheet-scrollbar-y").scrollTop(row_pre - 20);
          }
        },
        replaceAll: function() {
          let _this = this;
          const _locale = locale_default();
          const locale_findAndReplace = _locale.findAndReplace;
          if (!store_default.allowEdit) {
            tooltip_default.info(locale_findAndReplace.modeTip, "");
            return;
          }
          let searchText = $("#luckysheet-search-replace #searchInput input").val();
          if (searchText == "" || searchText == null) {
            if (isEditMode()) {
              alert(locale_findAndReplace.searchInputTip);
            } else {
              tooltip_default.info(locale_findAndReplace.searchInputTip, "");
            }
            return;
          }
          let range2;
          if (store_default.luckysheet_select_save.length == 0 || store_default.luckysheet_select_save.length == 1 && store_default.luckysheet_select_save[0].row[0] == store_default.luckysheet_select_save[0].row[1] && store_default.luckysheet_select_save[0].column[0] == store_default.luckysheet_select_save[0].column[1]) {
            range2 = [{
              "row": [0, store_default.flowdata.length - 1],
              "column": [0, store_default.flowdata[0].length - 1]
            }];
          } else {
            range2 = $.extend(true, [], store_default.luckysheet_select_save);
          }
          let searchIndexArr = _this.getSearchIndexArr(searchText, range2);
          if (searchIndexArr.length == 0) {
            if (isEditMode()) {
              alert(locale_findAndReplace.noReplceTip);
            } else {
              tooltip_default.info(locale_findAndReplace.noReplceTip, "");
            }
            return;
          }
          let regCheck = false;
          if ($("#luckysheet-search-replace #regCheck input[type='checkbox']").is(":checked")) {
            regCheck = true;
          }
          let wordCheck = false;
          if ($("#luckysheet-search-replace #wordCheck input[type='checkbox']").is(":checked")) {
            wordCheck = true;
          }
          let caseCheck = false;
          if ($("#luckysheet-search-replace #caseCheck input[type='checkbox']").is(":checked")) {
            caseCheck = true;
          }
          let replaceText = $("#luckysheet-search-replace #replaceInput input").val();
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          let replaceCount = 0;
          if (wordCheck) {
            for (let i2 = 0; i2 < searchIndexArr.length; i2++) {
              let r2 = searchIndexArr[i2].r;
              let c2 = searchIndexArr[i2].c;
              if (!checkProtectionLocked(r2, c2, store_default.currentSheetIndex, false)) {
                continue;
              }
              let v = replaceText;
              setcellvalue(r2, c2, d, v);
              range2.push({"row": [r2, r2], "column": [c2, c2]});
              replaceCount++;
            }
          } else {
            let reg;
            if (caseCheck) {
              reg = new RegExp(func_methods_default.getRegExpStr(searchText), "g");
            } else {
              reg = new RegExp(func_methods_default.getRegExpStr(searchText), "ig");
            }
            for (let i2 = 0; i2 < searchIndexArr.length; i2++) {
              let r2 = searchIndexArr[i2].r;
              let c2 = searchIndexArr[i2].c;
              if (!checkProtectionLocked(r2, c2, store_default.currentSheetIndex, false)) {
                continue;
              }
              let v = valueShowEs(r2, c2, d).toString().replace(reg, replaceText);
              setcellvalue(r2, c2, d, v);
              range2.push({"row": [r2, r2], "column": [c2, c2]});
              replaceCount++;
            }
          }
          if ($("#luckysheet-search-replace #searchAllbox").is(":visible")) {
            $("#luckysheet-search-replace #searchAllbox").hide();
          }
          jfrefreshgrid(d, range2);
          store_default.luckysheet_select_save = $.extend(true, [], range2);
          selectHightlightShow();
          let succeedInfo = replaceHtml(locale_findAndReplace.successTip, {
            "xlength": replaceCount
          });
          if (isEditMode()) {
            alert(succeedInfo);
          } else {
            tooltip_default.info(succeedInfo, "");
          }
        }
      };
      searchReplace_default = luckysheetSearchReplace;
    }
  });

  // src/controllers/locationCell.js
  var luckysheetLocationCell, locationCell_default;
  var init_locationCell = __esm({
    "src/controllers/locationCell.js"() {
      init_util();
      init_get();
      init_validate();
      init_validate();
      init_tooltip();
      init_constant();
      init_select();
      init_conditionformat();
      init_store();
      init_locale();
      luckysheetLocationCell = {
        createDialog: function() {
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-locationCell-dialog").remove();
          const _locale = locale_default();
          const locale_location = _locale.findAndReplace;
          const locale_button = _locale.button;
          let content = '<div class="listbox"><div class="listItem"><input type="radio" name="locationType" checked="checked" id="locationConstant"><label for="locationConstant">' + locale_location.locationConstant + '</label><div class="subbox"><div class="subItem"><input type="checkbox" checked="checked" class="date" id="locationConstantDate"><label for="locationConstantDate">' + locale_location.locationDate + '</label></div><div class="subItem"><input type="checkbox" checked="checked" class="number" id="locationConstantNumber"><label for="locationConstantNumber">' + locale_location.locationDigital + '</label></div><div class="subItem"><input type="checkbox" checked="checked" class="string" id="locationConstantString"><label for="locationConstantString">' + locale_location.locationString + '</label></div><div class="subItem"><input type="checkbox" checked="checked" class="boolean" id="locationConstantBoolean"><label for="locationConstantBoolean">' + locale_location.locationBool + '</label></div><div class="subItem"><input type="checkbox" checked="checked" class="error" id="locationConstantError"><label for="locationConstantError">' + locale_location.locationBool + '</label></div></div></div><div class="listItem"><input type="radio" name="locationType" id="locationFormula"><label for="locationFormula">' + locale_location.locationFormula + '</label><div class="subbox"><div class="subItem"><input type="checkbox" checked="checked" class="date" id="locationFormulaDate" disabled="true"><label for="locationFormulaDate" style="color: #666">' + locale_location.locationDate + '</label></div><div class="subItem"><input type="checkbox" checked="checked" class="number" id="locationFormulaNumber" disabled="true"><label for="locationFormulaNumber" style="color: #666">' + locale_location.locationDigital + '</label></div><div class="subItem"><input type="checkbox" checked="checked" class="string" id="locationFormulaString" disabled="true"><label for="locationFormulaString" style="color: #666">' + locale_location.locationString + '</label></div><div class="subItem"><input type="checkbox" checked="checked" class="boolean" id="locationFormulaBoolean" disabled="true"><label for="locationFormulaBoolean" style="color: #666">' + locale_location.locationBool + '</label></div><div class="subItem"><input type="checkbox" checked="checked" class="error" id="locationFormulaError" disabled="true"><label for="locationFormulaError" style="color: #666">' + locale_location.locationError + '</label></div></div></div><div class="listItem"><input type="radio" name="locationType" id="locationNull"><label for="locationNull">' + locale_location.locationNull + '</label></div><div class="listItem"><input type="radio" name="locationType" id="locationCF"><label for="locationCF">' + locale_location.locationCondition + '</label></div><div class="listItem"><input type="radio" name="locationType" id="locationStepRow"><label for="locationStepRow">' + locale_location.locationRowSpan + '</label></div><div class="listItem"><input type="radio" name="locationType" id="locationStepColumn"><label for="locationStepColumn">' + locale_location.locationColumnSpan + "</label></div></div>";
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-locationCell-dialog",
            "addclass": "luckysheet-locationCell-dialog",
            "title": locale_location.location,
            "content": content,
            "botton": '<button id="luckysheet-locationCell-dialog-confirm" class="btn btn-primary">' + locale_button.confirm + '</button><button class="btn btn-default luckysheet-model-close-btn">' + locale_button.cancel + "</button>",
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-locationCell-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 400).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-locationCell-dialog").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3}).show();
        },
        init: function() {
          let _this = this;
          const locale_location = locale_default().findAndReplace;
          $(document).on("click", "#luckysheet-locationCell-dialog .listItem input:radio", function(e) {
            $("#luckysheet-locationCell-dialog .listItem input:checkbox").prop("disabled", true);
            $("#luckysheet-locationCell-dialog .listItem .subbox label").css("color", "#666");
            $(this).siblings(".subbox").find("input:checkbox").removeAttr("disabled");
            $(this).siblings(".subbox").find("label").css("color", "#000");
          });
          $(document).off("click.locationCellConfirm").on("click.locationCellConfirm", "#luckysheet-locationCell-dialog #luckysheet-locationCell-dialog-confirm", function() {
            $("#luckysheet-modal-dialog-mask").hide();
            $("#luckysheet-locationCell-dialog").hide();
            let $radio = $("#luckysheet-locationCell-dialog .listItem input:radio:checked");
            let id = $radio.attr("id");
            if (id == "locationConstant" || id == "locationFormula") {
              let $checkbox = $radio.siblings(".subbox").find("input:checkbox:checked");
              let value;
              if ($checkbox.length == 0) {
                return;
              } else if ($checkbox.length == 5) {
                value = "all";
              } else {
                let arr = [];
                for (let i2 = 0; i2 < $checkbox.length; i2++) {
                  if ($($checkbox[i2]).hasClass("date")) {
                    arr.push("d");
                  } else if ($($checkbox[i2]).hasClass("number")) {
                    arr.push("n");
                  } else if ($($checkbox[i2]).hasClass("string")) {
                    arr.push("s,g");
                  } else if ($($checkbox[i2]).hasClass("boolean")) {
                    arr.push("b");
                  } else if ($($checkbox[i2]).hasClass("error")) {
                    arr.push("e");
                  }
                }
                value = arr.join(",");
              }
              let range2;
              if (store_default.luckysheet_select_save.length == 0 || store_default.luckysheet_select_save.length == 1 && store_default.luckysheet_select_save[0].row[0] == store_default.luckysheet_select_save[0].row[1] && store_default.luckysheet_select_save[0].column[0] == store_default.luckysheet_select_save[0].column[1]) {
                range2 = [{"row": [0, store_default.flowdata.length - 1], "column": [0, store_default.flowdata[0].length - 1]}];
              } else {
                range2 = $.extend(true, [], store_default.luckysheet_select_save);
              }
              _this.apply(range2, id, value);
            } else if (id == "locationStepRow") {
              if (store_default.luckysheet_select_save.length == 0 || store_default.luckysheet_select_save.length == 1 && store_default.luckysheet_select_save[0].row[0] == store_default.luckysheet_select_save[0].row[1]) {
                if (isEditMode()) {
                  alert(locale_location.locationTiplessTwoRow);
                } else {
                  tooltip_default.info("", locale_location.locationTiplessTwoRow);
                }
                return;
              }
              let range2 = $.extend(true, [], store_default.luckysheet_select_save);
              _this.apply(range2, "locationStepRow");
            } else if (id == "locationStepColumn") {
              if (store_default.luckysheet_select_save.length == 0 || store_default.luckysheet_select_save.length == 1 && store_default.luckysheet_select_save[0].column[0] == store_default.luckysheet_select_save[0].column[1]) {
                if (isEditMode()) {
                  alert(locale_location.locationTiplessTwoColumn);
                } else {
                  tooltip_default.info("", locale_location.locationTiplessTwoColumn);
                }
                return;
              }
              let range2 = $.extend(true, [], store_default.luckysheet_select_save);
              _this.apply(range2, "locationStepColumn");
            } else {
              let range2;
              if (store_default.luckysheet_select_save.length == 0 || store_default.luckysheet_select_save.length == 1 && store_default.luckysheet_select_save[0].row[0] == store_default.luckysheet_select_save[0].row[1] && store_default.luckysheet_select_save[0].column[0] == store_default.luckysheet_select_save[0].column[1]) {
                range2 = [{"row": [0, store_default.flowdata.length - 1], "column": [0, store_default.flowdata[0].length - 1]}];
              } else {
                range2 = $.extend(true, [], store_default.luckysheet_select_save);
              }
              _this.apply(range2, id);
            }
          });
        },
        apply: function(range2, type, value) {
          const locale_location = locale_default().findAndReplace;
          let rangeArr = [];
          if (type == "locationFormula" || type == "locationConstant" || type == "locationNull") {
            let minR = null, maxR = null, minC = null, maxC = null, cellSave = {};
            for (let s = 0; s < range2.length; s++) {
              let st_r = range2[s].row[0], ed_r = range2[s].row[1], st_c = range2[s].column[0], ed_c = range2[s].column[1];
              if (minR == null || minR < st_r) {
                minR = st_r;
              }
              if (maxR == null || maxR > ed_r) {
                maxR = ed_r;
              }
              if (minC == null || minC < st_c) {
                minC = st_c;
              }
              if (maxC == null || maxC > ed_c) {
                maxC = ed_c;
              }
              for (let r2 = st_r; r2 <= ed_r; r2++) {
                for (let c2 = st_c; c2 <= ed_c; c2++) {
                  let cell = store_default.flowdata[r2][c2];
                  if (cell != null && cell.mc != null) {
                    cell = store_default.flowdata[cell.mc.r][cell.mc.c];
                  }
                  if (type == "locationFormula" && cell != null && !isRealNull(cell.v) && cell.f != null && (value == "all" || cell.ct != null && value.indexOf(cell.ct.t) > -1)) {
                    cellSave[r2 + "_" + c2] = 0;
                  } else if (type == "locationConstant" && cell != null && !isRealNull(cell.v) && (value == "all" || cell.ct != null && value.indexOf(cell.ct.t) > -1)) {
                    cellSave[r2 + "_" + c2] = 0;
                  } else if (type == "locationNull" && (cell == null || isRealNull(cell.v))) {
                    cellSave[r2 + "_" + c2] = 0;
                  }
                }
              }
            }
            rangeArr = this.getRangeArr(minR, maxR, minC, maxC, cellSave, rangeArr);
          } else if (type == "locationCF") {
            let index2 = getSheetIndex(store_default.currentSheetIndex);
            let ruleArr2 = store_default.luckysheetfile[index2]["luckysheet_conditionformat_save"];
            let data = store_default.luckysheetfile[index2]["data"];
            if (ruleArr2 == null || ruleArr2.length == 0) {
              if (isEditMode()) {
                alert(locale_location.locationTipNotFindCell);
              } else {
                tooltip_default.info("", locale_location.locationTipNotFindCell);
              }
              return;
            }
            computeMap = conditionformat_default.compute(ruleArr2, data);
            if (Object.keys(computeMap).length == 0) {
              if (isEditMode()) {
                alert(locale_location.locationTipNotFindCell);
              } else {
                tooltip_default.info("", locale_location.locationTipNotFindCell);
              }
              return;
            }
            let minR = null, maxR = null, minC = null, maxC = null, cellSave = {};
            for (let s = 0; s < range2.length; s++) {
              let st_r = range2[s].row[0], ed_r = range2[s].row[1], st_c = range2[s].column[0], ed_c = range2[s].column[1];
              if (minR == null || minR < st_r) {
                minR = st_r;
              }
              if (maxR == null || maxR > ed_r) {
                maxR = ed_r;
              }
              if (minC == null || minC < st_c) {
                minC = st_c;
              }
              if (maxC == null || maxC > ed_c) {
                maxC = ed_c;
              }
              for (let r2 = st_r; r2 <= ed_r; r2++) {
                for (let c2 = st_c; c2 <= ed_c; c2++) {
                  if (r2 + "_" + c2 in computeMap) {
                    cellSave[r2 + "_" + c2] = 0;
                  }
                }
              }
            }
            rangeArr = this.getRangeArr(minR, maxR, minC, maxC, cellSave, rangeArr);
          } else if (type == "locationStepRow") {
            for (let s = 0; s < range2.length; s++) {
              if (range2[s].row[0] == range2[s].row[1]) {
                continue;
              }
              let st_r = range2[s].row[0], ed_r = range2[s].row[1];
              let st_c = range2[s].column[0], ed_c = range2[s].column[1];
              for (let r2 = st_r; r2 <= ed_r; r2++) {
                if ((r2 - st_r) % 2 == 0) {
                  rangeArr.push({"row": [r2, r2], "column": [st_c, ed_c]});
                }
              }
            }
          } else if (type == "locationStepColumn") {
            for (let s = 0; s < range2.length; s++) {
              if (range2[s].column[0] == range2[s].column[1]) {
                continue;
              }
              let st_r = range2[s].row[0], ed_r = range2[s].row[1];
              let st_c = range2[s].column[0], ed_c = range2[s].column[1];
              for (let c2 = st_c; c2 <= ed_c; c2++) {
                if ((c2 - st_c) % 2 == 0) {
                  rangeArr.push({"row": [st_r, ed_r], "column": [c2, c2]});
                }
              }
            }
          }
          if (rangeArr.length == 0) {
            if (isEditMode()) {
              alert(locale_location.locationTipNotFindCell);
            } else {
              tooltip_default.info("", locale_location.locationTipNotFindCell);
            }
          } else {
            store_default.luckysheet_select_save = rangeArr;
            selectHightlightShow();
            let scrollLeft = $("#luckysheet-cell-main").scrollLeft(), scrollTop = $("#luckysheet-cell-main").scrollTop();
            let winH = $("#luckysheet-cell-main").height(), winW = $("#luckysheet-cell-main").width();
            let r1 = store_default.luckysheet_select_save[0]["row"][0], r2 = store_default.luckysheet_select_save[0]["row"][1], c1 = store_default.luckysheet_select_save[0]["column"][0], c2 = store_default.luckysheet_select_save[0]["column"][1];
            let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
            let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
            if (col - scrollLeft - winW + 20 > 0) {
              $("#luckysheet-scrollbar-x").scrollLeft(col - winW + 20);
            } else if (col_pre - scrollLeft - 20 < 0) {
              $("#luckysheet-scrollbar-x").scrollLeft(col_pre - 20);
            }
            if (row - scrollTop - winH + 20 > 0) {
              $("#luckysheet-scrollbar-y").scrollTop(row - winH + 20);
            } else if (row_pre - scrollTop - 20 < 0) {
              $("#luckysheet-scrollbar-y").scrollTop(row_pre - 20);
            }
          }
        },
        getRangeArr(minR, maxR, minC, maxC, cellSave, rangeArr) {
          if (Object.keys(cellSave).length == 0) {
            return rangeArr;
          }
          let _this = this;
          let stack_str = null, stack_edr = null, stack_stc = null, stack_edc = null;
          for (let r2 = minR; r2 <= maxR; r2++) {
            for (let c2 = minC; c2 <= maxC; c2++) {
              let cell = store_default.flowdata[r2][c2];
              if (r2 + "_" + c2 in cellSave) {
                if (cell != null && cell.mc != null) {
                  if (stack_stc == null) {
                    let range2 = {
                      "row": [cell.mc.r, cell.mc.r + cell.mc.rs - 1],
                      "column": [cell.mc.c, cell.mc.c + cell.mc.cs - 1]
                    };
                    rangeArr.push(range2);
                    cellSave = _this.deleteCellInSave(cellSave, range2);
                    return _this.getRangeArr(minR, maxR, minC, maxC, cellSave, rangeArr);
                  } else if (c2 < stack_edc) {
                    let range2 = {
                      "row": [stack_str, stack_edr],
                      "column": [stack_stc, stack_edc]
                    };
                    rangeArr.push(range2);
                    cellSave = _this.deleteCellInSave(cellSave, range2);
                    return _this.getRangeArr(minR, maxR, minC, maxC, cellSave, rangeArr);
                  } else {
                    break;
                  }
                } else if (stack_stc == null) {
                  stack_stc = c2;
                  stack_edc = c2;
                  stack_str = r2;
                  stack_edr = r2;
                } else if (c2 > stack_edc) {
                  stack_edc = c2;
                }
              } else if (stack_stc != null) {
                if (cell != null && cell.mc != null) {
                  break;
                } else if (c2 < stack_stc) {
                } else if (c2 <= stack_edc) {
                  let range2 = {
                    "row": [stack_str, stack_edr],
                    "column": [stack_stc, stack_edc]
                  };
                  rangeArr.push(range2);
                  cellSave = _this.deleteCellInSave(cellSave, range2);
                  return _this.getRangeArr(minR, maxR, minC, maxC, cellSave, rangeArr);
                } else {
                  stack_edr = r2;
                }
              }
            }
          }
          if (stack_stc != null) {
            let range2 = {
              "row": [stack_str, stack_edr],
              "column": [stack_stc, stack_edc]
            };
            rangeArr.push(range2);
            cellSave = _this.deleteCellInSave(cellSave, range2);
            return _this.getRangeArr(minR, maxR, minC, maxC, cellSave, rangeArr);
          }
        },
        deleteCellInSave(cellSave, range2) {
          for (let r2 = range2.row[0]; r2 <= range2.row[1]; r2++) {
            for (let c2 = range2.column[0]; c2 <= range2.column[1]; c2++) {
              delete cellSave[r2 + "_" + c2];
            }
          }
          return cellSave;
        }
      };
      locationCell_default = luckysheetLocationCell;
    }
  });

  // src/controllers/ifFormulaGenerator.js
  var ifFormulaGenerator, ifFormulaGenerator_default;
  var init_ifFormulaGenerator = __esm({
    "src/controllers/ifFormulaGenerator.js"() {
      init_formula();
      init_editor();
      init_updateCell();
      init_constant();
      init_util();
      init_store();
      init_locale();
      ifFormulaGenerator = {
        singleRangeFocus: false,
        init: function() {
          let _this = this;
          const _locale = locale_default();
          const locale_formula = _locale.formula;
          const locale_button = _locale.button;
          $(document).off("focus.IFcompareValue").on("focus.IFcompareValue", "#luckysheet-ifFormulaGenerator-dialog #compareValue", function() {
            $("#luckysheet-modal-dialog-mask").hide();
            _this.singleRangeFocus = true;
          });
          $(document).off("click.IFsingRange").on("click.IFsingRange", "#luckysheet-ifFormulaGenerator-dialog .singRange", function() {
            let value = $("#luckysheet-ifFormulaGenerator-dialog #compareValue").val().trim();
            if (formula_default.iscelldata(value)) {
              _this.singleRangeDialog(value);
            } else {
              _this.singleRangeDialog();
            }
          });
          $(document).off("click.IFsingRangeConfirm").on("click.IFsingRangeConfirm", "#luckysheet-ifFormulaGenerator-singleRange-confirm", function() {
            $("#luckysheet-formula-functionrange-select").hide();
            $("#luckysheet-ifFormulaGenerator-singleRange-dialog").hide();
            $("#luckysheet-modal-dialog-mask").show();
            $("#luckysheet-ifFormulaGenerator-dialog").show();
            let value = $(this).parents("#luckysheet-ifFormulaGenerator-singleRange-dialog").find("input").val().trim();
            $("#luckysheet-ifFormulaGenerator-dialog #compareValue").val(value);
            _this.singleRangeFocus = false;
          });
          $(document).off("click.IFsingRangeCancel").on("click.IFsingRangeCancel", "#luckysheet-ifFormulaGenerator-singleRange-cancel", function() {
            $("#luckysheet-formula-functionrange-select").hide();
            $("#luckysheet-ifFormulaGenerator-singleRange-dialog").hide();
            $("#luckysheet-modal-dialog-mask").show();
            $("#luckysheet-ifFormulaGenerator-dialog").show();
            _this.singleRangeFocus = false;
          });
          $(document).off("click.IFsingRangeClose").on("click.IFsingRangeClose", "#luckysheet-ifFormulaGenerator-singleRange-dialog .luckysheet-modal-dialog-title-close", function() {
            $("#luckysheet-formula-functionrange-select").hide();
            $("#luckysheet-modal-dialog-mask").show();
            $("#luckysheet-ifFormulaGenerator-dialog").show();
            _this.singleRangeFocus = false;
          });
          $(document).off("click.IFmultiRange").on("click.IFmultiRange", "#luckysheet-ifFormulaGenerator-dialog .multiRange", function() {
            _this.multiRangeDialog();
            _this.singleRangeFocus = false;
          });
          $(document).off("click.IFmultiRangeConfirm").on("click.IFmultiRangeConfirm", "#luckysheet-ifFormulaGenerator-multiRange-confirm", function() {
            $("#luckysheet-formula-functionrange-select").hide();
            $("#luckysheet-row-count-show").hide();
            $("#luckysheet-column-count-show").hide();
            $("#luckysheet-ifFormulaGenerator-multiRange-dialog").hide();
            $("#luckysheet-modal-dialog-mask").show();
            $("#luckysheet-ifFormulaGenerator-dialog").show();
            let value = $(this).parents("#luckysheet-ifFormulaGenerator-multiRange-dialog").find("input").val().trim();
            let cellrange = formula_default.getcellrange(value);
            let str_r = cellrange["row"][0], end_r = cellrange["row"][1], str_c = cellrange["column"][0], end_c = cellrange["column"][1];
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let arr = [];
            for (let r2 = str_r; r2 <= end_r; r2++) {
              for (let c2 = str_c; c2 <= end_c; c2++) {
                if (d[r2] != null && d[r2][c2] != null && d[r2][c2]["ct"] != null && d[r2][c2]["ct"]["t"] == "n") {
                  arr.push(d[r2][c2]["v"]);
                }
              }
            }
            for (let j = 0; j < arr.length; j++) {
              for (let k = 0; k < arr.length - 1 - j; k++) {
                if (arr[k] < arr[k + 1]) {
                  let temp = arr[k];
                  arr[k] = arr[k + 1];
                  arr[k + 1] = temp;
                }
              }
            }
            let largeNum = arr[0];
            let smallNum = arr[arr.length - 1];
            $("#luckysheet-ifFormulaGenerator-dialog #smallRange").val(smallNum);
            $("#luckysheet-ifFormulaGenerator-dialog #largeRange").val(largeNum);
          });
          $(document).off("click.IFmultiRangeCancel").on("click.IFmultiRangeCancel", "#luckysheet-ifFormulaGenerator-multiRange-cancel", function() {
            $("#luckysheet-formula-functionrange-select").hide();
            $("#luckysheet-row-count-show").hide();
            $("#luckysheet-column-count-show").hide();
            $("#luckysheet-ifFormulaGenerator-multiRange-dialog").hide();
            $("#luckysheet-modal-dialog-mask").show();
            $("#luckysheet-ifFormulaGenerator-dialog").show();
          });
          $(document).off("click.IFmultiRangeClose").on("click.IFmultiRangeClose", "#luckysheet-ifFormulaGenerator-multiRange-dialog .luckysheet-modal-dialog-title-close", function() {
            $("#luckysheet-formula-functionrange-select").hide();
            $("#luckysheet-row-count-show").hide();
            $("#luckysheet-column-count-show").hide();
            $("#luckysheet-modal-dialog-mask").show();
            $("#luckysheet-ifFormulaGenerator-dialog").show();
          });
          $(document).on("change", "#DivisionMethod", function() {
            let value = $(this).find("option:selected").val();
            if (value == "2") {
              $("#DivisionMethodVal").hide();
            } else {
              $("#DivisionMethodVal").show();
            }
            $("#luckysheet-ifFormulaGenerator-dialog .ifList").empty();
          });
          $(document).off("click.IFcreateBtn").on("click.IFcreateBtn", "#luckysheet-ifFormulaGenerator-dialog #createBtn", function() {
            let compareValue = $(this).parents("#luckysheet-ifFormulaGenerator-dialog").find("#compareValue").val().trim();
            if (compareValue == "") {
              _this.info(locale_formula.ifGenTipNotNullValue);
              return;
            }
            let method2 = $(this).parents("#luckysheet-ifFormulaGenerator-dialog").find("#DivisionMethod option:selected").val();
            if (method2 == "2") {
              let itemHtml = '<div class="item"><input type="number" class="smallNum formulaInputFocus"/><select class="operator"><option value="0"> <= </option><option value="1"> < </option></select><span class="compareValue">' + compareValue + '</span><select class="operator2"><option value="0"> <= </option><option value="1" selected="selected"> < </option></select><input type="number" class="largeNum formulaInputFocus"/><span>' + locale_formula.ifGenTipLableTitile + '\uFF1A</span><input type="text" class="markText formulaInputFocus" value=""><i class="fa fa-remove" aria-hidden="true"></i></div>';
              $("#luckysheet-ifFormulaGenerator-dialog .ifList").append(itemHtml);
            } else {
              let smallRange = $(this).parents("#luckysheet-ifFormulaGenerator-dialog").find("#smallRange").val().trim();
              let largeRange = $(this).parents("#luckysheet-ifFormulaGenerator-dialog").find("#largeRange").val().trim();
              let DivisionMethodVal = $(this).parents("#luckysheet-ifFormulaGenerator-dialog").find("#DivisionMethodVal").val().trim();
              if (smallRange == "" || largeRange == "") {
                _this.info(locale_formula.ifGenTipRangeNotforNull);
                return;
              } else if (DivisionMethodVal == "") {
                _this.info(locale_formula.ifGenTipCutValueNotforNull);
                return;
              }
              _this.getIfList(compareValue, smallRange, largeRange, method2, DivisionMethodVal);
            }
          });
          $(document).on("click", "#luckysheet-ifFormulaGenerator-dialog .item .fa-remove", function() {
            $(this).parents(".item").remove();
          });
          $(document).off("click.IFconfirmBtn").on("click.IFconfirmBtn", "#luckysheet-ifFormulaGenerator-dialog-confirm", function() {
            let $item = $(this).parents("#luckysheet-ifFormulaGenerator-dialog").find(".ifList .item");
            let str = "";
            $($item.toArray().reverse()).each(function(i2, e) {
              let smallNum = $(e).find(".smallNum").val().trim();
              let largeNum = $(e).find(".largeNum").val().trim();
              let operator = $(e).find(".operator option:selected").val();
              let operator2 = $(e).find(".operator2 option:selected").val();
              let compareValue = $(e).find(".compareValue").text();
              let markText = $(e).find(".markText").val().trim();
              if (markText == "") {
                markText = locale_formula.ifGenTipLableTitile + (i2 + 1);
              }
              if (smallNum == "" && largeNum == "") {
                return true;
              }
              let s;
              if (operator == "0") {
                s = compareValue + ">=" + smallNum;
              } else {
                s = compareValue + ">" + smallNum;
              }
              let l;
              if (operator2 == "0") {
                l = compareValue + "<=" + largeNum;
              } else {
                l = compareValue + "<" + largeNum;
              }
              let a;
              if (i2 == 0 && largeNum == "") {
                a = s;
              } else if (i2 == $item.length - 1 && smallNum == "") {
                a = l;
              } else {
                a = "and(" + s + "," + l + ")";
              }
              if (i2 == 0) {
                str = "if(" + a + ',"' + markText + '")';
              } else {
                str = "if(" + a + ',"' + markText + '",' + str + ")";
              }
            });
            if (str.length == 0) {
              _this.info(locale_formula.ifGenTipNotGenCondition);
              return;
            }
            $("#luckysheet-modal-dialog-mask").hide();
            $("#luckysheet-ifFormulaGenerator-dialog").hide();
            let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
            let row_index = last["row_focus"], col_index = last["column_focus"];
            luckysheetupdateCell(row_index, col_index, store_default.flowdata);
            $("#luckysheet-rich-text-editor").html("=" + str);
            $("#luckysheet-functionbox-cell").html($("#luckysheet-rich-text-editor").html());
            $("#luckysheet-wa-functionbox-confirm").click();
          });
          $(document).on("click", "#luckysheet-ifFormulaGenerator-info .luckysheet-model-close-btn", function() {
            $("#luckysheet-modal-dialog-mask").show();
          });
          $(document).on("click", "#luckysheet-ifFormulaGenerator-info .luckysheet-modal-dialog-title-close", function() {
            $("#luckysheet-modal-dialog-mask").show();
          });
        },
        ifFormulaDialog: function(fp) {
          let _this = this;
          const _locale = locale_default();
          const locale_formula = _locale.formula;
          const locale_button = _locale.button;
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-ifFormulaGenerator-dialog").remove();
          let compareValue = "";
          let ifListHtml = "";
          if (!!fp) {
            let arr = fp.split("if(");
            for (let i2 = 1; i2 < arr.length; i2++) {
              let txt = arr[i2].replace("and(", "").replace(/\)/g, "").replace(/\"/g, "");
              let arr2 = txt.split(",");
              arr2 = _this.clearArr(arr2);
              compareValue = _this.splitTxt(arr2[0])[0];
              let smallNum, largeNum, markText;
              if (arr2.length == 3) {
                smallNum = _this.splitTxt(arr2[0])[1];
                largeNum = _this.splitTxt(arr2[1])[2];
                markText = arr2[2];
              } else {
                smallNum = _this.splitTxt(arr2[0])[1];
                largeNum = _this.splitTxt(arr2[0])[2];
                markText = arr2[1];
              }
              let itemHtml = '<div class="item"><input type="number" class="smallNum formulaInputFocus" value="' + smallNum + '"/><select class="operator"><option value="0"> <= </option><option value="1"> < </option></select><span class="compareValue">' + compareValue + '</span><select class="operator2"><option value="0"> <= </option><option value="1" selected="selected"> < </option></select><input type="number" class="largeNum formulaInputFocus" value="' + largeNum + '"/><span>' + locale_formula.ifGenTipLableTitile + '\uFF1A</span><input type="text" class="markText formulaInputFocus" value="' + markText + '"><i class="fa fa-remove" aria-hidden="true"></i></div>';
              ifListHtml += itemHtml;
            }
          }
          let content = '<div class="ifAttr"><div class="attrBox"><label for="compareValue"> ' + locale_formula.ifGenCompareValueTitle + ' </label><div class="inpBox"><input id="compareValue" class="formulaInputFocus" value="' + compareValue + '"/><i class="singRange fa fa-table" aria-hidden="true" title="' + locale_formula.ifGenSelectCellTitle + '"></i></div></div><div class="attrBox"><label for="smallRange"> ' + locale_formula.ifGenRangeTitle + ' </label><input type="number" id="smallRange" class="formulaInputFocus"/><span class="text"> ' + locale_formula.ifGenRangeTo + ' </span><input type="number" id="largeRange" class="formulaInputFocus"/><div id="rangeAssess"><span> ' + locale_formula.ifGenRangeEvaluate + ' </span><i class="multiRange fa fa-table" aria-hidden="true" title="' + locale_formula.ifGenSelectRangeTitle + '"></i></div></div><div class="attrBox"><label for="DivisionMethod"> ' + locale_formula.ifGenCutWay + ' </label><select id="DivisionMethod"><option value="0"> ' + locale_formula.ifGenCutSame + ' </option><option value="1"> ' + locale_formula.ifGenCutNpiece + ' </option><option value="2"> ' + locale_formula.ifGenCutCustom + ' </option></select><input id="DivisionMethodVal" class="formulaInputFocus"/><div id="createBtn"> ' + locale_formula.ifGenCutSame + ' </div></div></div><div class="ifList">' + ifListHtml + "</div>";
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-ifFormulaGenerator-dialog",
            "addclass": "luckysheet-ifFormulaGenerator-dialog",
            "title": locale_formula.ifGenerate,
            "content": content,
            "botton": '<button id="luckysheet-ifFormulaGenerator-dialog-confirm" class="btn btn-primary">' + locale_button.confirm + '</button><button class="btn btn-default luckysheet-model-close-btn">' + locale_button.cancel + "</button>",
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-ifFormulaGenerator-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 590).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-ifFormulaGenerator-dialog").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3}).show();
        },
        clearArr: function(arr) {
          for (let i2 = 0; i2 < arr.length; i2++) {
            if (arr[i2] == "" || arr[i2] == null || arr[i2] == void 0) {
              arr.splice(i2, 1);
            }
          }
          return arr;
        },
        splitTxt: function(txt) {
          let compareValue, smallNum, largeNum;
          if (txt.indexOf(">=") != -1) {
            compareValue = txt.split(">=")[0];
            smallNum = txt.split(">=")[1];
            return [compareValue, smallNum, largeNum];
          } else if (txt.indexOf(">") != -1) {
            compareValue = txt.split(">")[0];
            smallNum = txt.split(">")[1];
            return [compareValue, smallNum, largeNum];
          } else if (txt.indexOf("<=") != -1) {
            compareValue = txt.split("<=")[0];
            largeNum = txt.split("<=")[1];
            return [compareValue, smallNum, largeNum];
          } else if (txt.indexOf("<") != -1) {
            compareValue = txt.split("<")[0];
            largeNum = txt.split("<")[1];
            return [compareValue, smallNum, largeNum];
          }
        },
        singleRangeDialog: function(value) {
          $("#luckysheet-modal-dialog-mask").hide();
          $("#luckysheet-ifFormulaGenerator-dialog").hide();
          $("#luckysheet-ifFormulaGenerator-singleRange-dialog").remove();
          const _locale = locale_default();
          const locale_formula = _locale.formula;
          const locale_button = _locale.button;
          if (value == null) {
            value = "";
          }
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-ifFormulaGenerator-singleRange-dialog",
            "addclass": "luckysheet-ifFormulaGenerator-singleRange-dialog",
            "title": locale_formula.ifGenTipSelectCell,
            "content": '<input readonly="readonly" placeholder="' + locale_formula.ifGenTipSelectCellPlace + '" value="' + value + '">',
            "botton": '<button id="luckysheet-ifFormulaGenerator-singleRange-confirm" class="btn btn-primary">' + locale_button.confirm + '</button><button id="luckysheet-ifFormulaGenerator-singleRange-cancel" class="btn btn-default">' + locale_button.cancel + "</button>",
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-ifFormulaGenerator-singleRange-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 400).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-ifFormulaGenerator-singleRange-dialog").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3}).show();
        },
        multiRangeDialog: function() {
          $("#luckysheet-modal-dialog-mask").hide();
          $("#luckysheet-ifFormulaGenerator-dialog").hide();
          $("#luckysheet-ifFormulaGenerator-multiRange-dialog").remove();
          const _locale = locale_default();
          const locale_formula = _locale.formula;
          const locale_button = _locale.button;
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-ifFormulaGenerator-multiRange-dialog",
            "addclass": "luckysheet-ifFormulaGenerator-multiRange-dialog",
            "title": locale_formula.ifGenTipSelectRange,
            "content": '<input readonly="readonly" placeholder="' + locale_formula.ifGenTipSelectRangePlace + '" value="">',
            "botton": '<button id="luckysheet-ifFormulaGenerator-multiRange-confirm" class="btn btn-primary">' + locale_button.confirm + '</button><button id="luckysheet-ifFormulaGenerator-multiRange-cancel" class="btn btn-default">' + locale_button.cancel + "</button>",
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-ifFormulaGenerator-multiRange-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 400).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-ifFormulaGenerator-multiRange-dialog").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3}).show();
        },
        getIfList: function(compareValue, smallRange, largeRange, method2, methodVal) {
          const locale_formula = locale_default().formula;
          $("#luckysheet-ifFormulaGenerator-dialog .ifList").empty();
          smallRange = parseInt(smallRange);
          largeRange = parseInt(largeRange);
          methodVal = parseInt(methodVal);
          let arr = [];
          if (method2 == "0") {
            let len = Math.ceil((largeRange - smallRange) / methodVal);
            for (let i2 = 0; i2 <= len; i2++) {
              let num = smallRange + methodVal * i2;
              if (i2 == 0 || num >= largeRange) {
                arr.push("");
              } else {
                arr.push(num);
              }
            }
          } else if (method2 == "1") {
            let addnum = Math.ceil((largeRange - smallRange) / methodVal);
            for (let i2 = 0; i2 <= methodVal; i2++) {
              let num = smallRange + addnum * i2;
              if (i2 == 0 || num >= largeRange) {
                arr.push("");
              } else {
                arr.push(num);
              }
            }
          }
          for (let j = 0; j < arr.length - 1; j++) {
            let markText;
            if (j == 0) {
              markText = "\u5C0F\u4E8E" + arr[j + 1];
            } else if (j == arr.length - 2) {
              markText = "\u5927\u4E8E\u7B49\u4E8E" + arr[j];
            } else {
              markText = arr[j] + "\u5230" + arr[j + 1];
            }
            let itemHtml = '<div class="item"><input type="number" class="smallNum formulaInputFocus" value="' + arr[j] + '"/><select class="operator"><option value="0"> <= </option><option value="1"> < </option></select><span class="compareValue">' + compareValue + '</span><select class="operator2"><option value="0"> <= </option><option value="1" selected="selected"> < </option></select><input type="number" class="largeNum formulaInputFocus" value="' + arr[j + 1] + '"/><span>' + locale_formula.ifGenTipLableTitile + '\uFF1A</span><input type="text" class="markText formulaInputFocus" value="' + markText + '"><i class="fa fa-remove" aria-hidden="true"></i></div>';
            $("#luckysheet-ifFormulaGenerator-dialog .ifList").append(itemHtml);
          }
        },
        info: function(title) {
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-ifFormulaGenerator-info").remove();
          const _locale = locale_default();
          const locale_button = _locale.button;
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-ifFormulaGenerator-info",
            "addclass": "",
            "title": title,
            "content": "",
            "botton": '<button class="btn btn-default luckysheet-model-close-btn">&nbsp;&nbsp;' + locale_button.close + "&nbsp;&nbsp;</button>",
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-ifFormulaGenerator-info").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-ifFormulaGenerator-info").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3}).show();
        }
      };
      ifFormulaGenerator_default = ifFormulaGenerator;
    }
  });

  // src/controllers/insertFormula.js
  var insertFormula, insertFormula_default;
  var init_insertFormula = __esm({
    "src/controllers/insertFormula.js"() {
      init_func();
      init_formula();
      init_validate();
      init_constant();
      init_select();
      init_util();
      init_store();
      init_locale();
      insertFormula = {
        init: function() {
          let _this = this;
          let _locale = locale_default();
          let locale_formulaMore = _locale.formulaMore;
          let locale_button = _locale.button;
          $(document).off("keyup.fxSFLI").on("keyup.fxSFLI", "#searchFormulaListInput", function() {
            $("#formulaTypeList").empty();
            let txt = $(this).val().toUpperCase();
            let functionlist2 = store_default.functionlist;
            if (txt == "") {
              _this.formulaListByType($("#formulaTypeSelect option:selected").val());
            } else {
              for (let i2 = 0; i2 < functionlist2.length; i2++) {
                if (/^[a-zA-Z]+$/.test(txt)) {
                  if (functionlist2[i2].n.indexOf(txt) != "-1") {
                    $('<div class="listBox" name="' + functionlist2[i2].n + '"><span>' + functionlist2[i2].n + "</span><span>" + functionlist2[i2].a + "</span></div>").appendTo($("#formulaTypeList"));
                  }
                } else if (functionlist2[i2].a.indexOf(txt) != "-1") {
                  $('<div class="listBox" name="' + functionlist2[i2].n + '"><span>' + functionlist2[i2].n + "</span><span>" + functionlist2[i2].a + "</span></div>").appendTo($("#formulaTypeList"));
                }
              }
            }
            $("#formulaTypeList .listBox:first-child").addClass("on");
          });
          $(document).off("change.fxFormulaTS").on("change.fxFormulaTS", "#formulaTypeSelect", function() {
            let type = $("#formulaTypeSelect option:selected").val();
            _this.formulaListByType(type);
          });
          $(document).off("click.fxListbox").on("click.fxListbox", "#formulaTypeList .listBox", function() {
            $(this).addClass("on").siblings().removeClass("on");
          });
          $(document).off("click.fxFormulaCf").on("click.fxFormulaCf", "#luckysheet-search-formula-confirm", function() {
            let formula = $("#luckysheet-search-formula .listBox.on").attr("name");
            let formulaTxt = '<span dir="auto" class="luckysheet-formula-text-color">=</span><span dir="auto" class="luckysheet-formula-text-color">' + formula.toUpperCase() + '</span><span dir="auto" class="luckysheet-formula-text-color">(</span><span dir="auto" class="luckysheet-formula-text-color">)</span>';
            $("#luckysheet-rich-text-editor").html(formulaTxt);
            $("#luckysheet-functionbox-cell").html($("#luckysheet-rich-text-editor").html());
            _this.formulaParmDialog(formula);
          });
          $(document).off("focus.fxParamInput").on("focus.fxParamInput", "#luckysheet-search-formula-parm .parmBox input", function() {
            let parmIndex = $(this).parents(".parmBox").index();
            formula_default.data_parm_index = parmIndex;
            let formulatxt = $(this).parents("#luckysheet-search-formula-parm").find(".luckysheet-modal-dialog-title-text").text();
            let parmLen = store_default.luckysheet_function[formulatxt].p.length;
            let parmDetail, parmRepeat;
            if (parmIndex >= parmLen) {
              parmDetail = store_default.luckysheet_function[formulatxt].p[parmLen - 1].detail;
              parmRepeat = store_default.luckysheet_function[formulatxt].p[parmLen - 1].repeat;
            } else {
              parmDetail = store_default.luckysheet_function[formulatxt].p[parmIndex].detail;
              parmRepeat = store_default.luckysheet_function[formulatxt].p[parmIndex].repeat;
            }
            _this.parmTxtShow($(this).val());
            _this.functionStrCompute();
            $("#luckysheet-search-formula-parm .parmDetailsBox").empty();
            let parmName = $(this).parents(".parmBox").find(".name").text();
            $("<span>" + parmName + ":</span><span>" + parmDetail + "</span>").appendTo($("#luckysheet-search-formula-parm .parmDetailsBox"));
            if (parmRepeat == "y") {
              let parmCount = $("#luckysheet-search-formula-parm .parmBox").length;
              if (parmCount < 5 && parmIndex == parmCount - 1) {
                $('<div class="parmBox"><div class="name">' + locale_formulaMore.valueTitle + "" + (parmCount + 1) + '</div><div class="txt"><input class="formulaInputFocus" /><i class="fa fa-table" aria-hidden="true" title="' + locale_formulaMore.tipSelectDataRange + '"></i></div><div class="val">=</div></div>').appendTo($("#luckysheet-search-formula-parm .parmListBox"));
              }
            }
          });
          $(document).off("blur.fxParamInput").on("blur.fxParamInput", "#luckysheet-search-formula-parm .parmBox input", function() {
            let txt = $(this).val();
            if (formula_default.getfunctionParam(txt).fn == null && !formula_default.iscelldata(txt)) {
              if (!isRealNum(txt) && txt != "" && txt.length <= 2 && txt.indexOf('"') != 0 && txt.lastIndexOf('"') != 0) {
                txt = '"' + txt + '"';
                $(this).val(txt);
                _this.parmTxtShow(txt);
                _this.functionStrCompute();
              }
            }
          });
          $(document).off("keyup.fxParamInput").on("keyup.fxParamInput", "#luckysheet-search-formula-parm .parmBox input", function() {
            _this.parmTxtShow($(this).val());
            _this.functionStrCompute();
          });
          $(document).off("click.fxParamI").on("click.fxParamI", "#luckysheet-search-formula-parm .parmBox i", function() {
            formula_default.data_parm_index = $(this).parents(".parmBox").index();
            $("#luckysheet-search-formula-parm").hide();
            $("#luckysheet-modal-dialog-mask").hide();
            $("#luckysheet-search-formula-parm-select").remove();
            if ($(this).parents(".parmBox").find(".txt input").val() == "") {
              $("body").append(replaceHtml(modelHTML, {
                "id": "luckysheet-search-formula-parm-select",
                "addclass": "luckysheet-search-formula-parm-select",
                "title": locale_formulaMore.tipSelectDataRange,
                "content": "<input id='luckysheet-search-formula-parm-select-input' class='luckysheet-datavisual-range-container' style='font-size: 14px;padding:5px;max-width:none;' spellcheck='false' aria-label='" + locale_formulaMore.tipDataRangeTile + "' readonly='true' placeholder='" + locale_formulaMore.tipDataRangeTile + "'>",
                "botton": '<button id="luckysheet-search-formula-parm-select-confirm" class="btn btn-primary">' + locale_button.confirm + "</button>",
                "style": "z-index:100003"
              }));
            } else {
              $("body").append(replaceHtml(modelHTML, {
                "id": "luckysheet-search-formula-parm-select",
                "addclass": "luckysheet-search-formula-parm-select",
                "title": locale_formulaMore.tipSelectDataRange,
                "content": "<input id='luckysheet-search-formula-parm-select-input' class='luckysheet-datavisual-range-container' style='font-size: 14px;padding:5px;max-width:none;' spellcheck='false' aria-label='" + locale_formulaMore.tipDataRangeTile + "' readonly='true' value='" + $(this).parents(".parmBox").find(".txt input").val() + "'>",
                "botton": '<button id="luckysheet-search-formula-parm-select-confirm" class="btn btn-primary">' + locale_button.confirm + "</button>",
                "style": "z-index:100003"
              }));
            }
            let $t = $("#luckysheet-search-formula-parm-select").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
            let winw = $(window).width(), winh = $(window).height();
            let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
            $("#luckysheet-search-formula-parm-select").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3}).show();
            _this.parmTxtShow($(this).parents(".parmBox").find(".txt input").val());
          });
          $(document).off("click.fxParamCf").on("click.fxParamCf", "#luckysheet-search-formula-parm-confirm", function() {
            $("#luckysheet-wa-functionbox-confirm").click();
          });
          $(document).off("click.fxParamSelectCf").on("click.fxParamSelectCf", "#luckysheet-search-formula-parm-select-confirm", function() {
            let parmIndex = $("#luckysheet-search-formula-parm-select-input").attr("data_parm_index");
            $("#luckysheet-search-formula-parm-select").hide();
            $("#luckysheet-search-formula-parm").show();
            $("#luckysheet-search-formula-parm .parmBox").eq(parmIndex).find(".txt input").focus();
          });
        },
        formulaListDialog: function() {
          let _this = this;
          let _locale = locale_default();
          let locale_formulaMore = _locale.formulaMore;
          let locale_button = _locale.button;
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-search-formula").remove();
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-search-formula",
            "addclass": "luckysheet-search-formula",
            "title": "",
            "content": "<div class='inpbox'><label for='searchFormulaListInput'>" + locale_formulaMore.findFunctionTitle + "\uFF1A</label><input class='formulaInputFocus' id='searchFormulaListInput' placeholder='" + locale_formulaMore.tipInputFunctionName + "' spellcheck='false'/></div><div class='selbox'><label>" + locale_formulaMore.selectCategory + "\uFF1A</label><select id='formulaTypeSelect'><option value='0'>" + locale_formulaMore.Math + "</option><option value='1'>" + locale_formulaMore.Statistical + "</option><option value='2'>" + locale_formulaMore.Lookup + "</option><option value='3'>" + locale_formulaMore.luckysheet + "</option><option value='4'>" + locale_formulaMore.dataMining + "</option><option value='5'>" + locale_formulaMore.Database + "</option><option value='6'>" + locale_formulaMore.Date + "</option><option value='7'>" + locale_formulaMore.Filter + "</option><option value='8'>" + locale_formulaMore.Financial + "</option><option value='9'>" + locale_formulaMore.Engineering + "</option><option value='10'>" + locale_formulaMore.Logical + "</option><option value='11'>" + locale_formulaMore.Operator + "</option><option value='12'>" + locale_formulaMore.Text + "</option><option value='13'>" + locale_formulaMore.Parser + "</option><option value='14'>" + locale_formulaMore.Array + "</option><option value='-1'>" + locale_formulaMore.other + "</option></select></div><div class='listbox'><label>" + locale_formulaMore.selectFunctionTitle + "\uFF1A</label><div id='formulaTypeList'></div></div>",
            "botton": '<button id="luckysheet-search-formula-confirm" class="btn btn-primary">' + locale_button.confirm + '</button><button class="btn btn-default luckysheet-model-close-btn">' + locale_button.cancel + "</button>",
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-search-formula").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-search-formula").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3, "user-select": "none"}).show();
          _this.formulaListByType("0");
          $("#searchFormulaListInput").focus();
        },
        formulaListByType: function(type) {
          $("#formulaTypeList").empty();
          let functionlist2 = store_default.functionlist;
          for (let i2 = 0; i2 < functionlist2.length; i2++) {
            if (type == "-1" && functionlist2[i2].t > 14 || functionlist2[i2].t == type) {
              $('<div class="listBox" name="' + functionlist2[i2].n + '"><span>' + functionlist2[i2].n + "</span><span>" + functionlist2[i2].a + "</span></div>").appendTo($("#formulaTypeList"));
            }
          }
          $("#formulaTypeList .listBox:first-child").addClass("on");
        },
        formulaParmDialog: function(formulaTxt, parm) {
          let parm_title = "", parm_content = "", parm_list_content = "";
          let _locale = locale_default();
          let locale_formulaMore = _locale.formulaMore;
          let locale_button = _locale.button;
          let functionlist2 = store_default.functionlist;
          for (let i2 = 0; i2 < functionlist2.length; i2++) {
            if (functionlist2[i2].n == formulaTxt.toUpperCase()) {
              parm_title = functionlist2[i2].n;
              for (let j = 0; j < functionlist2[i2].p.length; j++) {
                if (parm == null) {
                  parm_list_content += '<div class="parmBox"><div class="name">' + functionlist2[i2].p[j].name + '</div><div class="txt"><input class="formulaInputFocus" spellcheck="false"/><i class="fa fa-table" aria-hidden="true" title="' + locale_formulaMore.tipSelectDataRange + '"></i></div><div class="val">=</div></div>';
                } else {
                  if (parm[j] == null) {
                    parm[j] = "";
                  }
                  parm_list_content += '<div class="parmBox"><div class="name">' + functionlist2[i2].p[j].name + '</div><div class="txt"><input class="formulaInputFocus" value="' + parm[j] + '" spellcheck="false"/><i class="fa fa-table" aria-hidden="true" title="' + locale_formulaMore.tipSelectDataRange + '"></i></div><div class="val">=</div></div>';
                }
              }
              parm_content = '<div><div class="parmListBox">' + parm_list_content + '</div><div class="formulaDetails">' + functionlist2[i2].d + '</div><div class="parmDetailsBox"></div><div class="result">' + locale_formulaMore.calculationResult + " = <span></span></div></div>";
            }
          }
          $("#luckysheet-search-formula").hide();
          $("#luckysheet-modal-dialog-mask").hide();
          $("#luckysheet-search-formula-parm").remove();
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-search-formula-parm",
            "addclass": "luckysheet-search-formula-parm",
            "title": parm_title,
            "content": parm_content,
            "botton": '<button id="luckysheet-search-formula-parm-confirm" class="btn btn-primary">' + locale_button.confirm + '</button><button class="btn btn-default luckysheet-model-close-btn">' + locale_button.cancel + "</button>",
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-search-formula-parm").find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-search-formula-parm").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3}).show();
          $("#luckysheet-search-formula-parm .parmBox:eq(0) input").focus();
          $("#luckysheet-search-formula-parm .parmBox").each(function(index2, e) {
            let parmtxt = $(e).find(".txt input").val();
            if (formula_default.getfunctionParam(parmtxt).fn == null) {
              if (formula_default.iscelldata(parmtxt)) {
                let txtdata = luckysheet_getcelldata(parmtxt).data;
                if (getObjType(txtdata) == "array") {
                  let txtArr = [];
                  for (let i2 = 0; i2 < txtdata.length; i2++) {
                    for (let j = 0; j < txtdata[i2].length; j++) {
                      let cell = txtdata[i2][j];
                      if (cell == null || isRealNull(cell.v)) {
                        txtArr.push(null);
                      } else {
                        txtArr.push(cell.v);
                      }
                    }
                  }
                  $("#luckysheet-search-formula-parm .parmBox").eq(index2).find(".val").text(" = {" + txtArr.join(",") + "}");
                } else {
                  $("#luckysheet-search-formula-parm .parmBox").eq(index2).find(".val").text(" = {" + txtdata.v + "}");
                }
              } else {
                $("#luckysheet-search-formula-parm .parmBox").eq(index2).find(".val").text(" = {" + parmtxt + "}");
              }
            } else {
              $("#luckysheet-search-formula-parm .parmBox").eq(index2).find(".val").text(" = {" + new Function("return " + $.trim(formula_default.functionParserExe("=" + parmtxt)))() + "}");
            }
          });
          $("#luckysheet-formula-functionrange .luckysheet-formula-functionrange-highlight").remove();
          formula_default.data_parm_index = 0;
          formula_default.rangestart = true;
        },
        parmTxtShow: function(parmtxt) {
          if (formula_default.getfunctionParam(parmtxt).fn == null) {
            if (formula_default.iscelldata(parmtxt)) {
              let cellrange = formula_default.getcellrange(parmtxt);
              let r1 = cellrange.row[0], r2 = cellrange.row[1], c1 = cellrange.column[0], c2 = cellrange.column[1];
              let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
              let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
              $("#luckysheet-formula-functionrange-select").css({
                "left": col_pre,
                "width": col - col_pre - 1,
                "top": row_pre,
                "height": row - row_pre - 1
              }).show();
              $("#luckysheet-formula-help-c").hide();
              luckysheet_count_show(col_pre, row_pre, col - col_pre - 1, row - row_pre - 1, cellrange.row, cellrange.column);
              let txtdata = luckysheet_getcelldata(parmtxt).data;
              if (getObjType(txtdata) == "array") {
                let txtArr = [];
                for (let i2 = 0; i2 < txtdata.length; i2++) {
                  for (let j = 0; j < txtdata[i2].length; j++) {
                    let cell = txtdata[i2][j];
                    if (cell == null || isRealNull(cell.v)) {
                      txtArr.push(null);
                    } else {
                      txtArr.push(cell.v);
                    }
                  }
                }
                $("#luckysheet-search-formula-parm .parmBox").eq(formula_default.data_parm_index).find(".val").text(" = {" + txtArr.join(",") + "}");
              } else {
                $("#luckysheet-search-formula-parm .parmBox").eq(formula_default.data_parm_index).find(".val").text(" = {" + txtdata.v + "}");
              }
            } else {
              $("#luckysheet-search-formula-parm .parmBox").eq(formula_default.data_parm_index).find(".val").text(" = {" + parmtxt + "}");
              $("#luckysheet-formula-functionrange-select").hide();
            }
          } else {
            let txt;
            for (let k = 0; k < formula_default.getfunctionParam(parmtxt).param.length; k++) {
              if (formula_default.iscelldata(formula_default.getfunctionParam(parmtxt).param[k])) {
                txt = formula_default.getfunctionParam(parmtxt).param[k];
                break;
              }
            }
            let cellrange = formula_default.getcellrange(txt);
            let r1 = cellrange.row[0], r2 = cellrange.row[1], c1 = cellrange.column[0], c2 = cellrange.column[1];
            let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
            let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
            $("#luckysheet-formula-functionrange-select").css({
              "left": col_pre,
              "width": col - col_pre - 1,
              "top": row_pre,
              "height": row - row_pre - 1
            }).show();
            $("#luckysheet-formula-help-c").hide();
            luckysheet_count_show(col_pre, row_pre, col - col_pre - 1, row - row_pre - 1, cellrange.row, cellrange.column);
            $("#luckysheet-search-formula-parm .parmBox").eq(formula_default.data_parm_index).find(".val").text(" = {" + new Function("return " + $.trim(formula_default.functionParserExe("=" + parmtxt)))() + "}");
          }
        },
        functionStrCompute: function() {
          let isVal = true;
          let parmValArr = [];
          let lvi = -1;
          let formulatxt = $("#luckysheet-search-formula-parm").find(".luckysheet-modal-dialog-title-text").text();
          let p = store_default.luckysheet_function[formulatxt].p;
          $("#luckysheet-search-formula-parm .parmBox").each(function(i2, e) {
            let parmtxt = $(e).find(".txt input").val();
            let parmRequire;
            if (i2 < p.length) {
              parmRequire = p[i2].require;
            } else {
              parmRequire = p[p.length - 1].require;
            }
            if (parmtxt == "" && parmRequire == "m") {
              isVal = false;
            }
            if (parmtxt != "") {
              lvi = i2;
            }
          });
          let functionHtmlTxt;
          if (lvi == -1) {
            functionHtmlTxt = "=" + $("#luckysheet-search-formula-parm .luckysheet-modal-dialog-title-text").text() + "()";
          } else if (lvi == 0) {
            functionHtmlTxt = "=" + $("#luckysheet-search-formula-parm .luckysheet-modal-dialog-title-text").text() + "(" + $("#luckysheet-search-formula-parm .parmBox").eq(0).find(".txt input").val() + ")";
          } else {
            for (let j = 0; j <= lvi; j++) {
              parmValArr.push($("#luckysheet-search-formula-parm .parmBox").eq(j).find(".txt input").val());
            }
            functionHtmlTxt = "=" + $("#luckysheet-search-formula-parm .luckysheet-modal-dialog-title-text").text() + "(" + parmValArr.join(",") + ")";
          }
          let function_str = formula_default.functionHTMLGenerate(functionHtmlTxt);
          $("#luckysheet-rich-text-editor").html(function_str);
          $("#luckysheet-functionbox-cell").html($("#luckysheet-rich-text-editor").html());
          if (isVal) {
            let fp = $.trim(formula_default.functionParserExe($("#luckysheet-rich-text-editor").text()));
            let result = null;
            try {
              result = new Function("return " + fp)();
            } catch (e) {
              result = formula_default.error.n;
            }
            $("#luckysheet-search-formula-parm .result span").text(result);
          }
        }
      };
      insertFormula_default = insertFormula;
    }
  });

  // src/controllers/menuButton.js
  var menuButton, menuButton_default;
  var init_menuButton = __esm({
    "src/controllers/menuButton.js"() {
      init_select();
      init_constant();
      init_luckysheetConfigsetting();
      init_moreFormat();
      init_alternateformat();
      init_conditionformat();
      init_server();
      init_sheetSearch();
      init_freezen();
      init_resize();
      init_filter();
      init_searchReplace();
      init_locationCell();
      init_ifFormulaGenerator();
      init_updateCell();
      init_insertFormula();
      init_sheetmanage();
      init_postil();
      init_validate();
      init_tooltip();
      init_editor();
      init_format();
      init_refresh();
      init_sort();
      init_formula();
      init_location();
      init_datecontroll();
      init_getRowlen();
      init_setdata();
      init_getdata();
      init_count();
      init_cursorPos();
      init_get();
      init_set();
      init_inlineString();
      init_util();
      init_protection();
      init_store();
      init_locale();
      init_api();
      menuButton = {
        "menu": '<div class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-menuButton ${subclass} luckysheet-mousedown-cancel" id="luckysheet-icon-${id}-menuButton">${item}</div>',
        "item": '<div itemvalue="${value}" itemname="${name}" class="luckysheet-cols-menuitem ${sub} luckysheet-mousedown-cancel"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel" style="padding: 3px 0px 3px 1px;"><span style="margin-right:3px;width:13px;display:inline-block;" class="icon luckysheet-mousedown-cancel"></span> ${name} <span class="luckysheet-submenu-arrow luckysheet-mousedown-cancel ${iconClass}" style="user-select: none;">${example}</span></div></div>',
        "split": '<div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div>',
        "color": '<div class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel luckysheet-menuButton ${sub}" id="${id}"><div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel luckysheet-color-reset"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${resetColor}</div></div> <div class="luckysheet-mousedown-cancel"> <div class="luckysheet-mousedown-cancel"> <input type="text" class="luckysheet-color-selected" /> </div> </div> <div class="luckysheet-menuseparator luckysheet-mousedown-cancel" role="separator"></div> ${coloritem}</div>',
        "coloritem": '<div class="luckysheet-cols-menuitem luckysheet-mousedown-cancel ${class}"><div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel">${name}</div></div>',
        "subcolor": '<div id="luckysheet-icon-${id}-menuButton" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-menuButton-sub luckysheet-mousedown-cancel"> <div class="luckysheet-mousedown-cancel"> <div class="luckysheet-mousedown-cancel"> <input type="text" class="luckysheet-color-selected" /> </div> </div></div>',
        "rightclickmenu": null,
        "submenuhide": {},
        focus: function($obj, value) {
          if ($obj.attr("id") == "luckysheet-icon-font-family-menuButton") {
            if (isdatatypemulti(value)["num"]) {
              let _locale = locale_default();
              const locale_fontarray = _locale.fontarray;
              value = locale_fontarray[parseInt(value)];
              if (value == null) {
                value = this.defualtFont[itemvalue];
              }
            }
          }
          $obj.find(".luckysheet-cols-menuitem").find("span.icon").html("");
          if (value == null) {
            $obj.find(".luckysheet-cols-menuitem").eq(0).find("span.icon").html('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
          } else {
            $obj.find(".luckysheet-cols-menuitem[itemvalue='" + value + "']").find("span.icon").html('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
          }
        },
        createButtonMenu: function(itemdata) {
          let itemset = "";
          let _this = this;
          for (let i2 = 0; i2 < itemdata.length; i2++) {
            let item2 = itemdata[i2];
            if (item2.value == "split") {
              itemset += _this.split;
            } else {
              if (item2.example == "more") {
                itemset += replaceHtml(_this.item, {"value": item2.value, "name": item2.text, "example": "", "sub": "luckysheet-cols-submenu", "iconClass": "iconfont luckysheet-iconfont-youjiantou"});
              } else {
                itemset += replaceHtml(_this.item, {"value": item2.value, "name": item2.text, "example": item2.example, "sub": "", "iconClass": ""});
              }
            }
          }
          return itemset;
        },
        cancelPaintModel: function() {
          let _this = this;
          $("#luckysheet-sheettable_0").removeClass("luckysheetPaintCursor");
          if (store_default.luckysheet_copy_save["dataSheetIndex"] == store_default.currentSheetIndex) {
            store_default.luckysheet_selection_range = [];
            selectionCopyShow();
          } else {
            store_default.luckysheetfile[getSheetIndex(store_default.luckysheet_copy_save["dataSheetIndex"])].luckysheet_selection_range = [];
          }
          store_default.luckysheet_copy_save = {};
          _this.luckysheetPaintModelOn = false;
          $("#luckysheetpopover").fadeOut(200, function() {
            $("#luckysheetpopover").remove();
          });
        },
        luckysheetPaintModelOn: false,
        luckysheetPaintSingle: false,
        initialMenuButton: function() {
          let _this = this;
          $("#luckysheet-icon-paintformat").click(function(e) {
            if (!checkIsAllowEdit()) {
              tooltip_default.info("", locale_default().pivotTable.errorNotAllowEdit);
              return;
            }
            e.stopPropagation();
            let _locale = locale_default();
            let locale_paint = _locale.paint;
            if (store_default.luckysheet_select_save == null || store_default.luckysheet_select_save.length == 0) {
              if (isEditMode()) {
                alert(locale_paint.tipSelectRange);
              } else {
                tooltip_default.info("", locale_paint.tipSelectRange);
              }
              return;
            } else if (store_default.luckysheet_select_save.length > 1) {
              if (isEditMode()) {
                alert(locale_paint.tipNotMulti);
              } else {
                tooltip_default.info("", locale_paint.tipNotMulti);
              }
              return;
            }
            let has_PartMC = false;
            let r1 = store_default.luckysheet_select_save[0].row[0], r2 = store_default.luckysheet_select_save[0].row[1];
            let c1 = store_default.luckysheet_select_save[0].column[0], c2 = store_default.luckysheet_select_save[0].column[1];
            has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
            if (has_PartMC) {
              tooltip_default.info(_locale.merge.partiallyError, "");
              return;
            }
            tooltip_default.popover("<i class='fa fa-paint-brush'></i> " + locale_paint.start + "", "topCenter", true, null, locale_paint.end, function() {
              _this.cancelPaintModel();
            });
            $("#luckysheet-sheettable_0").addClass("luckysheetPaintCursor");
            store_default.luckysheet_selection_range = [{"row": store_default.luckysheet_select_save[0].row, "column": store_default.luckysheet_select_save[0].column}];
            selectionCopyShow();
            let RowlChange = false, HasMC = false;
            for (let r3 = store_default.luckysheet_select_save[0].row[0]; r3 <= store_default.luckysheet_select_save[0].row[1]; r3++) {
              if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][r3] != null) {
                continue;
              }
              if (store_default.config["rowlen"] != null && r3 in store_default.config["rowlen"]) {
                RowlChange = true;
              }
              for (let c3 = store_default.luckysheet_select_save[0].column[0]; c3 <= store_default.luckysheet_select_save[0].column[1]; c3++) {
                let cell = store_default.flowdata[r3][c3];
                if (getObjType(cell) == "object" && "mc" in cell && cell.mc.rs != null) {
                  HasMC = true;
                }
              }
            }
            store_default.luckysheet_copy_save = {"dataSheetIndex": store_default.currentSheetIndex, "copyRange": [{"row": store_default.luckysheet_select_save[0].row, "column": store_default.luckysheet_select_save[0].column}], "RowlChange": RowlChange, "HasMC": HasMC};
            _this.luckysheetPaintModelOn = true;
            _this.luckysheetPaintSingle = true;
          });
          $("#luckysheet-icon-paintformat").dblclick(function() {
            if (!checkIsAllowEdit()) {
              tooltip_default.info("", locale_default().pivotTable.errorNotAllowEdit);
              return;
            }
            let _locale = locale_default();
            let locale_paint = _locale.paint;
            if (store_default.luckysheet_select_save == null || store_default.luckysheet_select_save.length == 0) {
              if (isEditMode()) {
                alert(locale_paint.tipSelectRange);
              } else {
                tooltip_default.info("", locale_paint.tipSelectRange);
              }
              return;
            } else if (store_default.luckysheet_select_save.length > 1) {
              if (isEditMode()) {
                alert(locale_paint.tipNotMulti);
              } else {
                tooltip_default.info("", locale_paint.tipNotMulti);
              }
              return;
            }
            tooltip_default.popover("<i class='fa fa-paint-brush'></i> " + locale_paint.start, "topCenter", true, null, locale_paint.end, function() {
              _this.cancelPaintModel();
            });
            $("#luckysheet-sheettable_0").addClass("luckysheetPaintCursor");
            store_default.luckysheet_selection_range = [{"row": store_default.luckysheet_select_save[0].row, "column": store_default.luckysheet_select_save[0].column}];
            selectionCopyShow();
            let RowlChange = false, HasMC = false;
            for (let r2 = store_default.luckysheet_select_save[0].row[0]; r2 <= store_default.luckysheet_select_save[0].row[1]; r2++) {
              if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][r2] != null) {
                continue;
              }
              if (store_default.config["rowlen"] != null && r2 in store_default.config["rowlen"]) {
                RowlChange = true;
              }
              for (let c2 = store_default.luckysheet_select_save[0].column[0]; c2 <= store_default.luckysheet_select_save[0].column[1]; c2++) {
                let cell = store_default.flowdata[r2][c2];
                if (getObjType(cell) == "object" && "mc" in cell && cell.mc.rs != null) {
                  HasMC = true;
                }
              }
            }
            store_default.luckysheet_copy_save = {"dataSheetIndex": store_default.currentSheetIndex, "copyRange": [{"row": store_default.luckysheet_select_save[0].row, "column": store_default.luckysheet_select_save[0].column}], "RowlChange": RowlChange, "HasMC": HasMC};
            _this.luckysheetPaintModelOn = true;
            _this.luckysheetPaintSingle = false;
          });
          $("#luckysheet-icon-currency").click(function() {
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            _this.updateFormat(d, "ct", "\xA5 #.00");
          });
          $("#luckysheet-icon-percent").click(function() {
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            _this.updateFormat(d, "ct", "0.00%");
          });
          $("#luckysheet-icon-fmt-decimal-decrease").click(function() {
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let row_index = store_default.luckysheet_select_save[0]["row_focus"], col_index = store_default.luckysheet_select_save[0]["column_focus"];
            let foucsStatus = _this.checkstatus(d, row_index, col_index, "ct");
            let cell = d[row_index][col_index];
            if (foucsStatus == null || foucsStatus.t != "n") {
              return;
            }
            if (foucsStatus.fa == "General") {
              let mask = genarate(cell.v);
              foucsStatus = mask[1];
            }
            let reg = /^(w|W)((0?)|(0\.0+))$/;
            if (reg.test(foucsStatus.fa)) {
              if (foucsStatus.fa.indexOf(".") > -1) {
                if (foucsStatus.fa.substr(-2) == ".0") {
                  _this.updateFormat(d, "ct", foucsStatus.fa.split(".")[0]);
                } else {
                  _this.updateFormat(d, "ct", foucsStatus.fa.substr(0, foucsStatus.fa.length - 1));
                }
              } else {
                _this.updateFormat(d, "ct", foucsStatus.fa);
              }
              return;
            }
            let prefix = "", main = "", fa = [];
            if (foucsStatus.fa.indexOf(".") > -1) {
              fa = foucsStatus.fa.split(".");
              prefix = fa[0];
              main = fa[1];
            } else {
              return;
            }
            fa = main.split("");
            let tail = "";
            for (let i2 = fa.length - 1; i2 >= 0; i2--) {
              let c2 = fa[i2];
              if (c2 != "#" && c2 != "0" && c2 != "," && isNaN(parseInt(c2))) {
                tail = c2 + tail;
              } else {
                break;
              }
            }
            let fmt = "";
            if (foucsStatus.fa.indexOf(".") > -1) {
              let suffix = main;
              if (tail.length > 0) {
                suffix = main.replace(tail, "");
              }
              let pos = suffix.replace(/#/g, "0");
              pos = pos.substr(0, pos.length - 1);
              if (pos == "") {
                fmt = prefix + tail;
              } else {
                fmt = prefix + "." + pos + tail;
              }
            }
            _this.updateFormat(d, "ct", fmt);
          });
          $("#luckysheet-icon-fmt-decimal-increase").click(function() {
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let row_index = store_default.luckysheet_select_save[0]["row_focus"], col_index = store_default.luckysheet_select_save[0]["column_focus"];
            let foucsStatus = _this.checkstatus(d, row_index, col_index, "ct");
            let cell = d[row_index][col_index];
            if (foucsStatus == null || foucsStatus.t != "n") {
              return;
            }
            if (foucsStatus.fa == "General") {
              let mask = genarate(cell.v);
              foucsStatus = mask[1];
            }
            if (foucsStatus.fa == "General") {
              _this.updateFormat(d, "ct", "#.0");
              return;
            }
            let reg = /^(w|W)((0?)|(0\.0+))$/;
            if (reg.test(foucsStatus.fa)) {
              if (foucsStatus.fa.indexOf(".") > -1) {
                _this.updateFormat(d, "ct", foucsStatus.fa + "0");
              } else {
                if (foucsStatus.fa.substr(-1) == "0") {
                  _this.updateFormat(d, "ct", foucsStatus.fa + ".0");
                } else {
                  _this.updateFormat(d, "ct", foucsStatus.fa + "0.0");
                }
              }
              return;
            }
            let prefix = "", main = "", fa = [];
            if (foucsStatus.fa.indexOf(".") > -1) {
              fa = foucsStatus.fa.split(".");
              prefix = fa[0];
              main = fa[1];
            } else {
              main = foucsStatus.fa;
            }
            fa = main.split("");
            let tail = "";
            for (let i2 = fa.length - 1; i2 >= 0; i2--) {
              let c2 = fa[i2];
              if (c2 != "#" && c2 != "0" && c2 != "," && isNaN(parseInt(c2))) {
                tail = c2 + tail;
              } else {
                break;
              }
            }
            let fmt = "";
            if (foucsStatus.fa.indexOf(".") > -1) {
              let suffix = main;
              if (tail.length > 0) {
                suffix = main.replace(tail, "");
              }
              let pos = suffix.replace(/#/g, "0");
              pos += "0";
              fmt = prefix + "." + pos + tail;
            } else {
              if (tail.length > 0) {
                fmt = main.replace(tail, "") + ".0" + tail;
              } else {
                fmt = main + ".0" + tail;
              }
            }
            _this.updateFormat(d, "ct", fmt);
          });
          $("#luckysheet-icon-fmt-other").click(function() {
            const _locale = locale_default();
            const locale_format = _locale.format;
            const locale_defaultFmt = _locale.defaultFmt;
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            if ($menuButton.length == 0) {
              let itemdata = locale_defaultFmt;
              let itemset = _this.createButtonMenu(itemdata);
              let menu = replaceHtml(_this.menu, {"id": "fmt-other", "item": itemset, "subclass": "", "sub": ""});
              let subitemdata = [
                {"text": locale_format.moreCurrency + "...", "value": "morecurrency", "example": ""},
                {"text": locale_format.moreDateTime + "...", "value": "moredatetime", "example": ""},
                {"text": locale_format.moreNumber + "...", "value": "moredigit", "example": ""}
              ];
              let subitemset = _this.createButtonMenu(subitemdata);
              let submenu = replaceHtml(_this.menu, {"id": "fmtOtherSelf", "item": subitemset, "subclass": "luckysheet-menuButton-sub"});
              $("body").append(menu + submenu);
              $menuButton = $("#" + menuButtonId).width(250);
              _this.focus($menuButton);
              $menuButton.find(".luckysheet-cols-menuitem").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue"), itemname = $t.attr("itemname");
                $("#luckysheet-icon-fmt-other").find(".luckysheet-toolbar-menu-button-caption").html(" " + itemname + " ");
                if (itemvalue2 == "fmtOtherSelf") {
                  return;
                }
                let d = editor_default.deepCopyFlowData(store_default.flowdata);
                _this.focus($menuButton, itemvalue2);
                _this.updateFormat(d, "ct", itemvalue2);
              });
              $("#luckysheet-icon-fmtOtherSelf-menuButton").find(".luckysheet-cols-menuitem").click(function() {
                $menuButton.hide();
                $("#luckysheet-icon-fmtOtherSelf-menuButton").hide();
                luckysheetContainerFocus();
                let itemvalue2 = $(this).attr("itemvalue");
                moreFormat_default.createDialog(itemvalue2);
                moreFormat_default.init();
              });
            } else {
              const text = $(this).find(".luckysheet-toolbar-menu-button-caption").text().trim();
              const format = locale_defaultFmt.find((f) => f.text === text);
              if (format) {
                _this.focus($menuButton, format.value);
              }
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft, $(this).offset().top + 25, "lefttop");
          });
          $("#luckysheet-icon-font-family").mousedown(function(e) {
            hideMenuByCancel(e);
            e.stopPropagation();
          }).click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            if ($menuButton.length == 0) {
              let itemset = _this.createButtonMenu(_this.fontSelectList);
              let menu = replaceHtml(_this.menu, {"id": "font-family", "item": itemset, "subclass": "", "sub": ""});
              $("body").append(menu);
              $menuButton = $("#" + menuButtonId).width(200);
              _this.focus($menuButton);
              $menuButton.on("click", ".luckysheet-cols-menuitem", function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue"), itemname = $t.attr("itemname");
                _this.focus($menuButton, itemvalue2);
                $("#luckysheet-icon-font-family").find(".luckysheet-toolbar-menu-button-caption").html(" " + itemname + " ");
                let d = editor_default.deepCopyFlowData(store_default.flowdata);
                _this.updateFormat(d, "ff", itemvalue2);
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft, $(this).offset().top + 25, "lefttop");
          });
          $("#luckysheet-icon-text-color").mousedown(function(e) {
            hideMenuByCancel(e);
            e.stopPropagation();
          }).click(function() {
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let color = $(this).attr("color");
            if (color == null) {
              color = "#000000";
            }
            _this.updateFormat(d, "fc", color);
          });
          $("#luckysheet-icon-text-color-menu").mousedown(function(e) {
            hideMenuByCancel(e);
            e.stopPropagation();
          }).click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            if ($menuButton.length == 0) {
              const _locale = locale_default();
              const locale_toolbar = _locale.toolbar;
              const locale_button = _locale.button;
              const locale_alternatingColors = _locale.alternatingColors;
              let itemdata = [
                {"name": locale_toolbar.alternatingColors + "...", "id": "luckysheet-color-alternate", "example": ""}
              ];
              let itemset = _this.createButtonMenu(itemdata);
              let subid = "text-color-self";
              let coloritem = replaceHtml(_this.coloritem, {"class": "luckysheet-icon-alternateformat", "name": locale_toolbar.alternatingColors + "..."});
              let menu = replaceHtml(_this.color, {"id": menuButtonId, "coloritem": coloritem, "colorself": subid, "sub": "", "resetColor": locale_toolbar.resetColor});
              $("body").append(menu);
              $menuButton = $("#" + menuButtonId);
              $("#" + menuButtonId).find(".luckysheet-color-selected").spectrum({
                showPalette: true,
                showPaletteOnly: true,
                preferredFormat: "hex",
                clickoutFiresChange: false,
                showInitial: true,
                showInput: true,
                flat: true,
                hideAfterPaletteSelect: true,
                showSelectionPalette: true,
                maxPaletteSize: 8,
                maxSelectionSize: 8,
                cancelText: locale_button.cancel,
                chooseText: locale_button.confirm,
                togglePaletteMoreText: locale_toolbar.customColor,
                togglePaletteLessText: locale_toolbar.collapse,
                togglePaletteOnly: true,
                clearText: locale_toolbar.clearText,
                color: luckysheetConfigsetting_default.defaultTextColor,
                noColorSelectedText: locale_toolbar.noColorSelectedText,
                localStorageKey: "spectrum.textcolor" + server_default.gridKey,
                palette: [
                  ["#000", "#444", "#666", "#999", "#ccc", "#eee", "#f3f3f3", "#fff"],
                  ["#f00", "#f90", "#ff0", "#0f0", "#0ff", "#00f", "#90f", "#f0f"],
                  ["#f4cccc", "#fce5cd", "#fff2cc", "#d9ead3", "#d0e0e3", "#cfe2f3", "#d9d2e9", "#ead1dc"],
                  ["#ea9999", "#f9cb9c", "#ffe599", "#b6d7a8", "#a2c4c9", "#9fc5e8", "#b4a7d6", "#d5a6bd"],
                  ["#e06666", "#f6b26b", "#ffd966", "#93c47d", "#76a5af", "#6fa8dc", "#8e7cc3", "#c27ba0"],
                  ["#c00", "#e69138", "#f1c232", "#6aa84f", "#45818e", "#3d85c6", "#674ea7", "#a64d79"],
                  ["#900", "#b45f06", "#bf9000", "#38761d", "#134f5c", "#0b5394", "#351c75", "#741b47"],
                  ["#600", "#783f04", "#7f6000", "#274e13", "#0c343d", "#073763", "#20124d", "#4c1130"]
                ],
                change: function(color) {
                  let $input = $(this);
                  if (color != null) {
                    color = color.toHexString();
                  } else {
                    color = "#000";
                  }
                  let oldcolor = null;
                  $("#luckysheet-icon-text-color .text-color-bar").css("background-color", color);
                  $("#luckysheet-icon-text-color").attr("color", color);
                  let d = editor_default.deepCopyFlowData(store_default.flowdata);
                  _this.updateFormat(d, "fc", color);
                  $menuButton.hide();
                  luckysheetContainerFocus();
                }
              });
              $menuButton.find(".luckysheet-color-reset").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $input = $("#" + menuButtonId).find(".luckysheet-color-selected");
                $input.val("#000000");
                $("#luckysheet-icon-text-color").attr("color", null);
                $input.spectrum("set", "#000000");
                $("#luckysheet-icon-text-color .luckysheet-color-menu-button-indicator").css("border-bottom-color", "#000000");
                let d = editor_default.deepCopyFlowData(store_default.flowdata);
                _this.updateFormat(d, "fc", null);
              });
              $menuButton.find(".luckysheet-icon-alternateformat").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                if (store_default.luckysheet_select_save.length > 1) {
                  if (isEditMode()) {
                    alert(locale_alternatingColors.errorInfo);
                  } else {
                    tooltip_default.info(locale_alternatingColors.errorInfo, "");
                  }
                  return;
                }
                let range2 = $.extend(true, {}, store_default.luckysheet_select_save[0]);
                let isExists = alternateformat_default.rangeIsExists(range2)[0];
                if (!isExists) {
                  alternateformat_default.modelfocusIndex = 0;
                  alternateformat_default.new(range2);
                }
                alternateformat_default.init();
                alternateformat_default.perfect();
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            let offsetTop = $(this).offset().top + 26;
            setTimeout(function() {
              let $input = $("#" + menuButtonId).find(".luckysheet-color-selected");
              $input.spectrum("set", $input.val());
              mouseclickposition($menuButton, menuleft - 28, offsetTop, "lefttop");
            }, 1);
          });
          $("#luckysheet-icon-cell-color").click(function() {
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let color = $(this).attr("color");
            if (color == null) {
              color = "#ffffff";
            }
            _this.updateFormat(d, "bg", color);
          });
          $("#luckysheet-icon-cell-color-menu").click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            if ($menuButton.length == 0) {
              let subid = "cell-color-self";
              const _locale = locale_default();
              const locale_toolbar = _locale.toolbar;
              const locale_button = _locale.button;
              const locale_alternatingColors = _locale.alternatingColors;
              let coloritem = replaceHtml(_this.coloritem, {"class": "luckysheet-icon-alternateformat", "name": locale_toolbar.alternatingColors + "..."});
              let menu = replaceHtml(_this.color, {"id": menuButtonId, "coloritem": coloritem, "colorself": subid, "sub": "", "resetColor": locale_toolbar.resetColor});
              $("body").append(menu);
              $menuButton = $("#" + menuButtonId);
              $("#" + menuButtonId).find(".luckysheet-color-selected").spectrum({
                showPalette: true,
                showPaletteOnly: true,
                preferredFormat: "hex",
                clickoutFiresChange: false,
                showInitial: true,
                showInput: true,
                flat: true,
                hideAfterPaletteSelect: true,
                showSelectionPalette: true,
                maxPaletteSize: 8,
                maxSelectionSize: 8,
                color: luckysheetConfigsetting_default.defaultCellColor,
                cancelText: locale_button.cancel,
                chooseText: locale_button.confirm,
                togglePaletteMoreText: locale_toolbar.customColor,
                togglePaletteLessText: locale_toolbar.collapse,
                togglePaletteOnly: true,
                clearText: locale_toolbar.clearText,
                noColorSelectedText: locale_toolbar.noColorSelectedText,
                localStorageKey: "spectrum.bgcolor" + server_default.gridKey,
                palette: [
                  ["#000", "#444", "#666", "#999", "#ccc", "#eee", "#f3f3f3", "#fff"],
                  ["#f00", "#f90", "#ff0", "#0f0", "#0ff", "#00f", "#90f", "#f0f"],
                  ["#f4cccc", "#fce5cd", "#fff2cc", "#d9ead3", "#d0e0e3", "#cfe2f3", "#d9d2e9", "#ead1dc"],
                  ["#ea9999", "#f9cb9c", "#ffe599", "#b6d7a8", "#a2c4c9", "#9fc5e8", "#b4a7d6", "#d5a6bd"],
                  ["#e06666", "#f6b26b", "#ffd966", "#93c47d", "#76a5af", "#6fa8dc", "#8e7cc3", "#c27ba0"],
                  ["#c00", "#e69138", "#f1c232", "#6aa84f", "#45818e", "#3d85c6", "#674ea7", "#a64d79"],
                  ["#900", "#b45f06", "#bf9000", "#38761d", "#134f5c", "#0b5394", "#351c75", "#741b47"],
                  ["#600", "#783f04", "#7f6000", "#274e13", "#0c343d", "#073763", "#20124d", "#4c1130"]
                ],
                change: function(color) {
                  let $input = $(this);
                  if (color != null) {
                    color = color.toHexString();
                  } else {
                    color = "#fff";
                  }
                  let oldcolor = null;
                  $("#luckysheet-icon-cell-color .text-color-bar").css("background-color", color);
                  $("#luckysheet-icon-cell-color").attr("color", color);
                  let d = editor_default.deepCopyFlowData(store_default.flowdata);
                  _this.updateFormat(d, "bg", color);
                  $menuButton.hide();
                  luckysheetContainerFocus();
                }
              });
              $menuButton.find(".luckysheet-color-reset").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $input = $("#" + menuButtonId).find(".luckysheet-color-selected");
                $input.val("#ffffff");
                $("#luckysheet-icon-cell-color").attr("color", null);
                $input.spectrum("set", "#ffffff");
                $("#luckysheet-icon-cell-color .luckysheet-color-menu-button-indicator").css("border-bottom-color", "#ffffff");
                let d = editor_default.deepCopyFlowData(store_default.flowdata);
                _this.updateFormat(d, "bg", null);
              });
              $menuButton.find(".luckysheet-icon-alternateformat").click(function() {
                if (!checkIsAllowEdit()) {
                  tooltip_default.info("", locale_default().pivotTable.errorNotAllowEdit);
                  return;
                }
                $menuButton.hide();
                luckysheetContainerFocus();
                if (store_default.luckysheet_select_save.length > 1) {
                  if (isEditMode()) {
                    alert(locale_alternatingColors.errorInfo);
                  } else {
                    tooltip_default.info(locale_alternatingColors.errorInfo, "");
                  }
                  return;
                }
                let range2 = $.extend(true, {}, store_default.luckysheet_select_save[0]);
                let isExists = alternateformat_default.rangeIsExists(range2)[0];
                if (!isExists) {
                  alternateformat_default.modelfocusIndex = 0;
                  alternateformat_default.new(range2);
                }
                alternateformat_default.init();
                alternateformat_default.perfect();
              });
              $("#" + menuButtonId).find(".luckysheet-color-selected").val("#fff");
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            let offsetTop = $(this).offset().top + 26;
            setTimeout(function() {
              let $input = $("#" + menuButtonId).find(".luckysheet-color-selected");
              $input.spectrum("set", $input.val());
              mouseclickposition($menuButton, menuleft - 28, offsetTop, "lefttop");
            }, 1);
          });
          let luckysheet_fs_setTimeout = null;
          $("#luckysheet-icon-font-size").mousedown(function(e) {
            if (parseInt($("#luckysheet-input-box").css("top")) > 0) {
              let w = window.getSelection();
              if (w.type != "None") {
                let range2 = w.getRangeAt(0);
                if (!range2.collapsed) {
                  store_default.inlineStringEditRange = range2.cloneRange();
                }
              }
            }
            hideMenuByCancel(e);
            e.stopPropagation();
          }).click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            if ($menuButton.length == 0) {
              let itemdata = [
                {"text": "9", "value": "9", "example": ""},
                {"text": "10", "value": "10", "example": ""},
                {"text": "11", "value": "11", "example": ""},
                {"text": "12", "value": "12", "example": ""},
                {"text": "14", "value": "14", "example": ""},
                {"text": "16", "value": "16", "example": ""},
                {"text": "18", "value": "18", "example": ""},
                {"text": "20", "value": "20", "example": ""},
                {"text": "22", "value": "22", "example": ""},
                {"text": "24", "value": "24", "example": ""},
                {"text": "26", "value": "26", "example": ""},
                {"text": "28", "value": "28", "example": ""},
                {"text": "36", "value": "36", "example": ""},
                {"text": "48", "value": "48", "example": ""},
                {"text": "72", "value": "72", "example": ""}
              ];
              let itemset = _this.createButtonMenu(itemdata);
              let menu = replaceHtml(_this.menu, {"id": "font-size", "item": itemset, "subclass": "", "sub": ""});
              $("body").append(menu);
              $menuButton = $("#" + menuButtonId).width(150);
              _this.focus($menuButton, 10);
              $menuButton.find(".luckysheet-cols-menuitem").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue"), $input = $("#luckysheet-icon-font-size input");
                $("#luckysheet-icon-font-size").attr("itemvalue", itemvalue2);
                _this.focus($menuButton, itemvalue2);
                $input.val(itemvalue2);
                let d = editor_default.deepCopyFlowData(store_default.flowdata);
                _this.updateFormat(d, "fs", itemvalue2);
                clearTimeout(luckysheet_fs_setTimeout);
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let defualtvalue = $("#luckysheet-icon-font-size").attr("itemvalue");
            if (defualtvalue == null) {
              defualtvalue = 10;
            }
            _this.focus($menuButton, defualtvalue);
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft, $(this).offset().top + 25, "lefttop");
          }).find("input.luckysheet-toolbar-textinput").keydown(function(e) {
            hideMenuByCancel(e);
            e.stopPropagation();
          }).keyup(function(e) {
            if (e.keyCode != 13) {
              return;
            }
            let $this = $(this);
            let itemvalue2 = parseInt($this.val());
            let $menuButton = $("#luckysheet-icon-font-size-menuButton");
            _this.focus($menuButton, itemvalue2);
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            _this.updateFormat(d, "fs", itemvalue2);
            luckysheet_fs_setTimeout = setTimeout(function() {
              $menuButton.hide();
              $this.blur();
            }, 200);
          });
          $("#luckysheet-icon-border-all").click(function() {
            if (!checkIsAllowEdit()) {
              tooltip_default.info("", locale_default().pivotTable.errorNotAllowEdit);
              return;
            }
            if (!checkProtectionFormatCells(store_default.currentSheetIndex)) {
              return;
            }
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let type = $(this).attr("type");
            if (type == null) {
              type = "border-all";
            }
            let subcolormenuid = "luckysheet-icon-borderColor-menuButton";
            let color = $("#" + subcolormenuid).find(".luckysheet-color-selected").val();
            let style = $("#luckysheetborderSizepreview").attr("itemvalue");
            if (color == null || color == "") {
              color = "#000";
            }
            if (style == null || style == "") {
              style = "1";
            }
            let cfg = $.extend(true, {}, store_default.config);
            if (cfg["borderInfo"] == null) {
              cfg["borderInfo"] = [];
            }
            let borderInfo = {
              "rangeType": "range",
              "borderType": type,
              "color": color,
              "style": style,
              "range": $.extend(true, [], store_default.luckysheet_select_save)
            };
            cfg["borderInfo"].push(borderInfo);
            if (store_default.clearjfundo) {
              store_default.jfundo.length = 0;
              let redo2 = [];
              redo2["type"] = "borderChange";
              redo2["config"] = $.extend(true, {}, store_default.config);
              redo2["curconfig"] = $.extend(true, {}, cfg);
              redo2["sheetIndex"] = store_default.currentSheetIndex;
              store_default.jfredo.push(redo2);
            }
            server_default.saveParam("cg", store_default.currentSheetIndex, cfg["borderInfo"], {"k": "borderInfo"});
            store_default.config = cfg;
            store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
            setTimeout(function() {
              luckysheetrefreshgrid();
            }, 1);
          });
          $("#luckysheet-icon-border-menu").click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            if ($menuButton.length == 0) {
              let canvasH = 10, canvasW = 120;
              const _locale = locale_default();
              const locale_border = _locale.border;
              const locale_toolbar = _locale.toolbar;
              const locale_button = _locale.button;
              let itemdata = [
                {"text": locale_border.borderTop, "value": "border-top", "example": '<div class="luckysheet-icon luckysheet-inline-block luckysheet-material-icon luckysheet-mousedown-cancel" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-border-top iconfont luckysheet-iconfont-shangbiankuang" style="user-select: none;"> </div> </div>'},
                {"text": locale_border.borderBottom, "value": "border-bottom", "example": '<div class="luckysheet-icon luckysheet-inline-block luckysheet-material-icon luckysheet-mousedown-cancel" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-border-bottom iconfont luckysheet-iconfont-xiabiankuang" style="user-select: none;"> </div> </div>'},
                {"text": locale_border.borderLeft, "value": "border-left", "example": '<div class="luckysheet-icon luckysheet-inline-block luckysheet-material-icon luckysheet-mousedown-cancel" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-border-left iconfont luckysheet-iconfont-zuobiankuang" style="user-select: none;"> </div> </div>'},
                {"text": locale_border.borderRight, "value": "border-right", "example": '<div class="luckysheet-icon luckysheet-inline-block luckysheet-material-icon luckysheet-mousedown-cancel" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-border-right iconfont luckysheet-iconfont-youbiankuang" style="user-select: none;"> </div> </div>'},
                {"text": "", "value": "split", "example": ""},
                {"text": locale_border.borderNone, "value": "border-none", "example": '<div class="luckysheet-icon luckysheet-inline-block luckysheet-material-icon luckysheet-mousedown-cancel" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-border-none iconfont luckysheet-iconfont-wubiankuang" style="user-select: none;"> </div> </div>'},
                {"text": locale_border.borderAll, "value": "border-all", "example": '<div class="luckysheet-icon luckysheet-inline-block luckysheet-material-icon luckysheet-mousedown-cancel" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-border-all iconfont luckysheet-iconfont-quanjiabiankuang" style="user-select: none;"> </div> </div>'},
                {"text": locale_border.borderOutside, "value": "border-outside", "example": '<div class="luckysheet-icon luckysheet-inline-block luckysheet-material-icon luckysheet-mousedown-cancel" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-border-outside iconfont luckysheet-iconfont-sizhoujiabiankuang" style="user-select: none;"> </div> </div>'},
                {"text": "", "value": "split", "example": ""},
                {"text": locale_border.borderInside, "value": "border-inside", "example": '<div class="luckysheet-icon luckysheet-inline-block luckysheet-material-icon luckysheet-mousedown-cancel" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-border-inside iconfont luckysheet-iconfont-neikuangxian" style="user-select: none;"> </div> </div>'},
                {"text": locale_border.borderHorizontal, "value": "border-horizontal", "example": '<div class="luckysheet-icon luckysheet-inline-block luckysheet-material-icon luckysheet-mousedown-cancel" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-border-horizontal iconfont luckysheet-iconfont-neikuanghengxian" style="user-select: none;"> </div> </div>'},
                {"text": locale_border.borderVertical, "value": "border-vertical", "example": '<div class="luckysheet-icon luckysheet-inline-block luckysheet-material-icon luckysheet-mousedown-cancel" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-border-vertical iconfont luckysheet-iconfont-neikuangshuxian" style="user-select: none;"> </div> </div>'},
                {"text": "", "value": "split", "example": ""},
                {"text": "<span id='luckysheet-icon-borderColor-linecolor' class='luckysheet-mousedown-cancel' style='border-bottom:3px solid #000;'>" + locale_border.borderColor + "</span>", "value": "borderColor", "example": "more"},
                {"text": "" + locale_border.borderSize + "<img id='luckysheetborderSizepreview' width=100 height=10 src='data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==' style='position:absolute;bottom:-5px;right:0px;width:100px;height:10px;'>", "value": "borderSize", "example": "more"}
              ];
              const iconfontObject = iconfontObjects.border;
              let itemset = _this.createButtonMenu(itemdata);
              let menu = replaceHtml(_this.menu, {"id": "border-menu", "item": itemset, "subclass": "", "sub": ""});
              let subitemdata = [
                {"text": locale_border.borderNone, "value": "0", "example": ""},
                {"text": "<canvas type='Thin' class='border-Thin' width=" + canvasW + " height=" + canvasH + " style='width:" + canvasW + "px;height:" + canvasH + "px;position:static;'></canvas>", "value": "1", "example": ""},
                {"text": "<canvas type='Hair' class='border-Hair' width=" + canvasW + " height=" + canvasH + " style='width:" + canvasW + "px;height:" + canvasH + "px;position:static;'></canvas>", "value": "2", "example": ""},
                {"text": "<canvas type='Dotted' class='border-Dotted' width=" + canvasW + " height=" + canvasH + " style='width:" + canvasW + "px;height:" + canvasH + "px;position:static;'></canvas>", "value": "3", "example": ""},
                {"text": "<canvas type='Dashed' class='border-Dashed' width=" + canvasW + " height=" + canvasH + " style='width:" + canvasW + "px;height:" + canvasH + "px;position:static;'></canvas>", "value": "4", "example": ""},
                {"text": "<canvas type='DashDot' class='border-DashDot' width=" + canvasW + " height=" + canvasH + " style='width:" + canvasW + "px;height:" + canvasH + "px;position:static;'></canvas>", "value": "5", "example": ""},
                {"text": "<canvas type='DashDotDot' class='border-DashDotDot' width=" + canvasW + " height=" + canvasH + " style='width:" + canvasW + "px;height:" + canvasH + "px;position:static;'></canvas>", "value": "6", "example": ""},
                {"text": "<canvas type='Medium' class='border-Medium' width=" + canvasW + " height=" + canvasH + " style='width:" + canvasW + "px;height:" + canvasH + "px;position:static;'></canvas>", "value": "8", "example": ""},
                {"text": "<canvas type='MediumDashed' class='border-MediumDashed' width=" + canvasW + " height=" + canvasH + " style='width:" + canvasW + "px;height:" + canvasH + "px;position:static;'></canvas>", "value": "9", "example": ""},
                {"text": "<canvas type='MediumDashDot' class='border-MediumDashDot' width=" + canvasW + " height=" + canvasH + " style='width:" + canvasW + "px;height:" + canvasH + "px;position:static;'></canvas>", "value": "10", "example": ""},
                {"text": "<canvas type='MediumDashDotDot' class='border-MediumDashDotDot' width=" + canvasW + " height=" + canvasH + " style='width:" + canvasW + "px;height:" + canvasH + "px;position:static;'></canvas>", "value": "11", "example": ""},
                {"text": "<canvas type='Thick' class='border-Thick' width=" + canvasW + " height=" + canvasH + " style='width:" + canvasW + "px;height:" + canvasH + "px;position:static;'></canvas>", "value": "13", "example": ""}
              ];
              let subitemset = _this.createButtonMenu(subitemdata);
              let submenu = replaceHtml(_this.menu, {"id": "borderSize", "item": subitemset, "subclass": "luckysheet-menuButton-sub"});
              let submenuid = "luckysheet-icon-borderSize-menuButton";
              let subcolormenuid = "luckysheet-icon-borderColor-menuButton";
              let colormenu = replaceHtml(_this.color, {"id": subcolormenuid, "coloritem": "", "colorself": "", "sub": "luckysheet-menuButton-sub", resetColor: locale_toolbar.resetColor});
              $("body").append(menu + colormenu + submenu);
              $menuButton = $("#" + menuButtonId).width(170);
              _this.focus($menuButton, "border-all");
              $("#" + submenuid + " canvas").each(function(i2) {
                let type = $(this).attr("type");
                let itemvalue2 = $(this).closest(".luckysheet-cols-menuitem").attr("itemvalue");
                let canvasborder = $(this).addClass("luckysheet-mousedown-cancel").get(0).getContext("2d");
                canvasborder.translate(0.5, 0.5);
                _this.setLineDash(canvasborder, itemvalue2, "h", 0, 5, 100, 5);
                canvasborder.strokeStyle = "#000000";
                canvasborder.stroke();
                canvasborder.closePath();
              });
              $("#" + submenuid + " .luckysheet-cols-menuitem").click(function() {
                $("#" + submenuid).hide();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                if (itemvalue2 == 0) {
                  $("#luckysheetborderSizepreview").attr("src", "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==").attr("itemvalue", null);
                } else {
                  let bg = $t.find("canvas").get(0).toDataURL("image/png");
                  $("#luckysheetborderSizepreview").attr("src", bg).attr("itemvalue", itemvalue2);
                }
                _this.focus($("#" + submenuid), itemvalue2);
              });
              $menuButton.find(".luckysheet-cols-menuitem").click(function() {
                if (!checkIsAllowEdit()) {
                  tooltip_default.info("", locale_default().pivotTable.errorNotAllowEdit);
                  return;
                }
                $menuButton.hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                if (itemvalue2 == "borderColor" || itemvalue2 == "borderSize") {
                  return;
                }
                if (!checkProtectionFormatCells(store_default.currentSheetIndex)) {
                  return;
                }
                let d = editor_default.deepCopyFlowData(store_default.flowdata);
                let color = $("#" + subcolormenuid).find(".luckysheet-color-selected").val();
                let style = $("#luckysheetborderSizepreview").attr("itemvalue");
                if (color == null || color == "") {
                  color = "#000";
                }
                if (style == null || style == "") {
                  style = "1";
                }
                let cfg = $.extend(true, {}, store_default.config);
                if (cfg["borderInfo"] == null) {
                  cfg["borderInfo"] = [];
                }
                let borderInfo = {
                  "rangeType": "range",
                  "borderType": itemvalue2,
                  "color": color,
                  "style": style,
                  "range": $.extend(true, [], store_default.luckysheet_select_save)
                };
                cfg["borderInfo"].push(borderInfo);
                if (store_default.clearjfundo) {
                  store_default.jfundo.length = 0;
                  let redo2 = [];
                  redo2["type"] = "borderChange";
                  redo2["config"] = $.extend(true, {}, store_default.config);
                  redo2["curconfig"] = $.extend(true, {}, cfg);
                  redo2["sheetIndex"] = store_default.currentSheetIndex;
                  store_default.jfredo.push(redo2);
                }
                server_default.saveParam("cg", store_default.currentSheetIndex, cfg["borderInfo"], {"k": "borderInfo"});
                store_default.config = cfg;
                store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
                setTimeout(function() {
                  luckysheetrefreshgrid();
                }, 1);
                $("#luckysheet-icon-border-all").attr("type", itemvalue2);
                let $icon = $("#luckysheet-icon-border-all").find(".luckysheet-icon-img-container");
                $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-" + itemvalue2 + iconfontObject[itemvalue2]);
                _this.focus($menuButton, itemvalue2);
              });
              $("#" + subcolormenuid).find(".luckysheet-color-selected").spectrum({
                showPalette: true,
                showPaletteOnly: true,
                preferredFormat: "hex",
                clickoutFiresChange: false,
                showInitial: true,
                showInput: true,
                flat: true,
                hideAfterPaletteSelect: true,
                showSelectionPalette: true,
                maxPaletteSize: 8,
                maxSelectionSize: 8,
                color: "#000",
                cancelText: locale_button.cancel,
                chooseText: locale_button.confirm,
                togglePaletteMoreText: locale_toolbar.customColor,
                togglePaletteLessText: locale_toolbar.collapse,
                togglePaletteOnly: true,
                clearText: locale_toolbar.clearText,
                noColorSelectedText: locale_toolbar.noColorSelectedText,
                localStorageKey: "spectrum.bordercolor" + server_default.gridKey,
                palette: [
                  ["#000", "#444", "#666", "#999", "#ccc", "#eee", "#f3f3f3", "#fff"],
                  ["#f00", "#f90", "#ff0", "#0f0", "#0ff", "#00f", "#90f", "#f0f"],
                  ["#f4cccc", "#fce5cd", "#fff2cc", "#d9ead3", "#d0e0e3", "#cfe2f3", "#d9d2e9", "#ead1dc"],
                  ["#ea9999", "#f9cb9c", "#ffe599", "#b6d7a8", "#a2c4c9", "#9fc5e8", "#b4a7d6", "#d5a6bd"],
                  ["#e06666", "#f6b26b", "#ffd966", "#93c47d", "#76a5af", "#6fa8dc", "#8e7cc3", "#c27ba0"],
                  ["#c00", "#e69138", "#f1c232", "#6aa84f", "#45818e", "#3d85c6", "#674ea7", "#a64d79"],
                  ["#900", "#b45f06", "#bf9000", "#38761d", "#134f5c", "#0b5394", "#351c75", "#741b47"],
                  ["#600", "#783f04", "#7f6000", "#274e13", "#0c343d", "#073763", "#20124d", "#4c1130"]
                ],
                change: function(color) {
                  let $input = $(this);
                  if (color != null) {
                    color = color.toHexString();
                  } else {
                    color = "#000";
                  }
                  let oldcolor = null;
                  $("#luckysheet-icon-borderColor-linecolor").css("border-bottom-color", color);
                  $("#" + subcolormenuid).find(".luckysheet-color-selected").val(color);
                }
              });
              $("#" + subcolormenuid).find(".luckysheet-color-reset").click(function() {
                let $input = $("#" + subcolormenuid).find(".luckysheet-color-selected");
                $input.val("#000");
                $("#luckysheet-icon-cell-color").attr("color", null);
                $input.spectrum("set", "#000");
                $("#luckysheet-icon-borderColor-linecolor").css("border-bottom-color", "#000");
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft - 28, $(this).offset().top + 25, "lefttop");
          });
          $("#luckysheet-icon-merge-button").click(function() {
            const _locale = locale_default();
            const locale_merge = _locale.merge;
            if (!checkProtectionNotEnable(store_default.currentSheetIndex)) {
              return;
            }
            if (selectIsOverlap()) {
              if (isEditMode()) {
                alert(locale_merge.overlappingError);
              } else {
                tooltip_default.info(locale_merge.overlappingError, "");
              }
              return;
            }
            if (store_default.config["merge"] != null) {
              let has_PartMC = false;
              for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
                let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
                let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
                has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
                if (has_PartMC) {
                  break;
                }
              }
              if (has_PartMC) {
                if (isEditMode()) {
                  alert(locale_merge.partiallyError);
                } else {
                  tooltip_default.info(locale_merge.partiallyError, "");
                }
                return;
              }
            }
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            _this.updateFormat_mc(d, "mergeAll");
          });
          $("#luckysheet-icon-merge-menu").click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            if ($menuButton.length == 0) {
              const _locale = locale_default();
              const locale_merge = _locale.merge;
              let itemdata = [
                {"text": locale_merge.mergeAll, "value": "mergeAll", "example": ""},
                {"text": locale_merge.mergeV, "value": "mergeV", "example": ""},
                {"text": locale_merge.mergeH, "value": "mergeH", "example": ""},
                {"text": locale_merge.mergeCancel, "value": "mergeCancel", "example": ""}
              ];
              let itemset = _this.createButtonMenu(itemdata);
              let menu = replaceHtml(_this.menu, {"id": "merge-menu", "item": itemset, "subclass": "", "sub": ""});
              $("body").append(menu);
              $menuButton = $("#" + menuButtonId);
              _this.focus($menuButton);
              $menuButton.find(".luckysheet-cols-menuitem").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                if (selectIsOverlap()) {
                  if (isEditMode()) {
                    alert(locale_merge.overlappingError);
                  } else {
                    tooltip_default.info(locale_merge.overlappingError, "");
                  }
                  return;
                }
                if (store_default.config["merge"] != null) {
                  let has_PartMC = false;
                  for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
                    let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
                    let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
                    has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
                    if (has_PartMC) {
                      break;
                    }
                  }
                  if (has_PartMC) {
                    if (isEditMode()) {
                      alert(locale_merge.partiallyError);
                    } else {
                      tooltip_default.info(locale_merge.partiallyError, "");
                    }
                    return;
                  }
                }
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                _this.focus($menuButton, itemvalue2);
                let d = editor_default.deepCopyFlowData(store_default.flowdata);
                _this.updateFormat_mc(d, itemvalue2);
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft - 28, $(this).offset().top + 25, "lefttop");
          });
          $("#luckysheet-icon-align").click(function() {
            let itemvalue2 = $("#luckysheet-icon-align").attr("type");
            if (itemvalue2 == null) {
              itemvalue2 = "left";
            }
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            _this.updateFormat(d, "ht", itemvalue2);
          });
          $("#luckysheet-icon-align-menu").click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            if ($menuButton.length == 0) {
              const _locale = locale_default();
              const locale_align = _locale.align;
              let itemdata = [
                {"text": locale_align.left, "value": "left", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-align-left iconfont luckysheet-iconfont-wenbenzuoduiqi" style="user-select: none;"> </div> </div>'},
                {"text": locale_align.center, "value": "center", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-align-center iconfont luckysheet-iconfont-wenbenjuzhongduiqi" style="user-select: none;"> </div> </div>'},
                {"text": locale_align.right, "value": "right", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-align-right iconfont luckysheet-iconfont-wenbenyouduiqi" style="user-select: none;"> </div> </div>'}
              ];
              const iconfontObject = iconfontObjects.align;
              let itemset = _this.createButtonMenu(itemdata);
              let menu = replaceHtml(_this.menu, {"id": "align-menu", "item": itemset, "subclass": "", "sub": ""});
              $("body").append(menu);
              $menuButton = $("#" + menuButtonId).width(120);
              _this.focus($menuButton);
              $menuButton.find(".luckysheet-cols-menuitem").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                _this.focus($menuButton, itemvalue2);
                let $icon = $("#luckysheet-icon-align").attr("type", itemvalue2).find(".luckysheet-icon-img-container");
                $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-align-" + itemvalue2 + iconfontObject[itemvalue2]);
                let d = editor_default.deepCopyFlowData(store_default.flowdata);
                _this.updateFormat(d, "ht", itemvalue2);
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft - 28, $(this).offset().top + 25, "lefttop");
          });
          $("#luckysheet-icon-valign").click(function() {
            let itemvalue2 = $("#luckysheet-icon-valign").attr("type");
            if (itemvalue2 == null) {
              itemvalue2 = "bottom";
            }
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            _this.updateFormat(d, "vt", itemvalue2);
          });
          $("#luckysheet-icon-valign-menu").click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            const _locale = locale_default();
            const locale_align = _locale.align;
            if ($menuButton.length == 0) {
              let itemdata = [
                {"text": locale_align.top, "value": "top", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-valign-top iconfont luckysheet-iconfont-dingbuduiqi" style="user-select: none;"> </div> </div>'},
                {"text": locale_align.middle, "value": "middle", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-valign-middle iconfont luckysheet-iconfont-shuipingduiqi" style="user-select: none;"> </div> </div>'},
                {"text": locale_align.bottom, "value": "bottom", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-valign-bottom iconfont luckysheet-iconfont-dibuduiqi" style="user-select: none;"> </div> </div>'}
              ];
              const iconfontObject = iconfontObjects.align;
              let itemset = _this.createButtonMenu(itemdata);
              let menu = replaceHtml(_this.menu, {"id": "valign-menu", "item": itemset, "subclass": "", "sub": ""});
              $("body").append(menu);
              $menuButton = $("#" + menuButtonId).width(120);
              _this.focus($menuButton, "bottom");
              $menuButton.find(".luckysheet-cols-menuitem").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                _this.focus($menuButton, itemvalue2);
                let $icon = $("#luckysheet-icon-valign").attr("type", itemvalue2).find(".luckysheet-icon-img-container");
                $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-valign-" + itemvalue2 + iconfontObject[itemvalue2]);
                let d = editor_default.deepCopyFlowData(store_default.flowdata);
                _this.updateFormat(d, "vt", itemvalue2);
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft - 28, $(this).offset().top + 25, "lefttop");
          });
          $("#luckysheet-icon-textwrap-menu").click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            if ($menuButton.length == 0) {
              const _locale = locale_default();
              const locale_textWrap = _locale.textWrap;
              let itemdata = [
                {"text": locale_textWrap.overflow, "value": "overflow", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-textwrap-overflow iconfont luckysheet-iconfont-yichu1" style="user-select: none;"> </div> </div>'},
                {"text": locale_textWrap.wrap, "value": "wrap", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-textwrap-wrap iconfont luckysheet-iconfont-zidonghuanhang" style="user-select: none;"> </div> </div>'},
                {"text": locale_textWrap.clip, "value": "clip", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-textwrap-clip iconfont luckysheet-iconfont-jieduan" style="user-select: none;"> </div> </div>'}
              ];
              const iconfontObject = iconfontObjects.textWrap;
              let itemset = _this.createButtonMenu(itemdata);
              let menu = replaceHtml(_this.menu, {"id": "textwrap-menu", "item": itemset, "subclass": "", "sub": ""});
              $("body").append(menu);
              $menuButton = $("#" + menuButtonId).width(120);
              _this.focus($menuButton, "clip");
              $menuButton.find(".luckysheet-cols-menuitem").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                _this.focus($menuButton, itemvalue2);
                let $icon = $("#luckysheet-icon-textwrap").attr("type", itemvalue2).find(".luckysheet-icon-img-container");
                $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-textwrap-" + itemvalue2 + iconfontObject[itemvalue2]);
                let d = editor_default.deepCopyFlowData(store_default.flowdata);
                _this.updateFormat(d, "tb", itemvalue2);
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft - 28, $(this).offset().top + 25, "lefttop");
          });
          $("#luckysheet-icon-rotation-menu").click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            if ($menuButton.length == 0) {
              const _locale = locale_default();
              const locale_rotation = _locale.rotation;
              let itemdata = [
                {"text": locale_rotation.none, "value": "none", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-none iconfont luckysheet-iconfont-wuxuanzhuang" style="user-select: none;"> </div> </div>'},
                {"text": locale_rotation.angleup, "value": "angleup", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-angleup iconfont luckysheet-iconfont-xiangshangqingxie" style="user-select: none;"> </div> </div>'},
                {"text": locale_rotation.angledown, "value": "angledown", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-angledown iconfont luckysheet-iconfont-xiangxiaqingxie" style="user-select: none;"> </div> </div>'},
                {"text": locale_rotation.vertical, "value": "vertical", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-vertical iconfont luckysheet-iconfont-shupaiwenzi" style="user-select: none;"> </div> </div>'},
                {"text": locale_rotation.rotationUp, "value": "rotation-up", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-rotation-up iconfont luckysheet-iconfont-wenbenxiangshang" style="user-select: none;"> </div> </div>'},
                {"text": locale_rotation.rotationDown, "value": "rotation-down", "example": '<div class="luckysheet-icon luckysheet-inline-block" style="user-select: none;opacity:1;"> <div aria-hidden="true" class="luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-rotation-down iconfont luckysheet-iconfont-xiangxia90" style="user-select: none;"> </div> </div>'}
              ];
              const iconfontObject = iconfontObjects.rotation;
              let itemset = _this.createButtonMenu(itemdata);
              let menu = replaceHtml(_this.menu, {"id": "rotation-menu", "item": itemset, "subclass": "", "sub": ""});
              $("body").append(menu);
              $menuButton = $("#" + menuButtonId).width(160);
              _this.focus($menuButton);
              $menuButton.find(".luckysheet-cols-menuitem").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                _this.focus($menuButton, itemvalue2);
                let $icon = $("#luckysheet-icon-rotation").attr("type", itemvalue2).find(".luckysheet-icon-img-container");
                $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-" + itemvalue2 + iconfontObject[itemvalue2]);
                let d = editor_default.deepCopyFlowData(store_default.flowdata);
                _this.updateFormat(d, "tr", itemvalue2);
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft - 28, $(this).offset().top + 25, "lefttop");
          });
          $("#luckysheet-icon-freezen-menu").click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            if ($menuButton.length == 0) {
              const _locale = locale_default();
              const locale_freezen = _locale.freezen;
              let itemdata = [
                {"text": locale_freezen.freezenRow, "value": "freezenRow", "example": ""},
                {"text": locale_freezen.freezenColumn, "value": "freezenColumn", "example": ""},
                {"text": locale_freezen.freezenRC, "value": "freezenRC", "example": ""},
                {"text": "", "value": "split", "example": ""},
                {"text": locale_freezen.freezenRowRange, "value": "freezenRowRange", "example": ""},
                {"text": locale_freezen.freezenColumnRange, "value": "freezenColumnRange", "example": ""},
                {"text": locale_freezen.freezenRCRange, "value": "freezenRCRange", "example": ""},
                {"text": "", "value": "split", "example": ""},
                {"text": locale_freezen.freezenCancel, "value": "freezenCancel", "example": ""}
              ];
              let itemset = _this.createButtonMenu(itemdata);
              let menu = replaceHtml(_this.menu, {"id": "freezen-menu", "item": itemset, "subclass": "", "sub": ""});
              $("body").append(menu);
              $menuButton = $("#" + menuButtonId).width(170);
              $menuButton.find(".luckysheet-cols-menuitem").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                _this.focus($menuButton, itemvalue2);
                if (itemvalue2 === "freezenCancel") {
                  $menuButton.find(".fa.fa-check").remove();
                }
                freezen_default.saveFrozen(itemvalue2);
                if (itemvalue2 == "freezenRow") {
                  frozenFirstRow();
                } else if (itemvalue2 == "freezenColumn") {
                  frozenFirstColumn();
                } else if (itemvalue2 == "freezenRC") {
                  if (freezen_default.freezenRealFirstRowColumn) {
                    let row_st = 0;
                    let top = store_default.visibledatarow[row_st] - 2 + store_default.columnHeaderHeight;
                    let freezenhorizontaldata = [store_default.visibledatarow[row_st], row_st + 1, 0, freezen_default.cutVolumn(store_default.visibledatarow, row_st + 1), top];
                    freezen_default.saveFreezen(freezenhorizontaldata, top, null, null);
                    freezen_default.createFreezenHorizontal(freezenhorizontaldata, top);
                    let col_st = 0;
                    let left = store_default.visibledatacolumn[col_st] - 2 + store_default.rowHeaderWidth;
                    let freezenverticaldata = [store_default.visibledatacolumn[col_st], col_st + 1, 0, freezen_default.cutVolumn(store_default.visibledatacolumn, col_st + 1), left];
                    freezen_default.saveFreezen(null, null, freezenverticaldata, left);
                    freezen_default.createFreezenVertical(freezenverticaldata, left);
                  } else {
                    let scrollTop = $("#luckysheet-cell-main").scrollTop();
                    let row_st = luckysheet_searcharray(store_default.visibledatarow, scrollTop);
                    if (row_st == -1) {
                      row_st = 0;
                    }
                    let top = store_default.visibledatarow[row_st] - 2 - scrollTop + store_default.columnHeaderHeight;
                    let freezenhorizontaldata = [store_default.visibledatarow[row_st], row_st + 1, scrollTop, freezen_default.cutVolumn(store_default.visibledatarow, row_st + 1), top];
                    freezen_default.saveFreezen(freezenhorizontaldata, top, null, null);
                    freezen_default.createFreezenHorizontal(freezenhorizontaldata, top);
                    let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
                    let col_st = luckysheet_searcharray(store_default.visibledatacolumn, scrollLeft);
                    if (col_st == -1) {
                      col_st = 0;
                    }
                    let left = store_default.visibledatacolumn[col_st] - 2 - scrollLeft + store_default.rowHeaderWidth;
                    let freezenverticaldata = [store_default.visibledatacolumn[col_st], col_st + 1, scrollLeft, freezen_default.cutVolumn(store_default.visibledatacolumn, col_st + 1), left];
                    freezen_default.saveFreezen(null, null, freezenverticaldata, left);
                    freezen_default.createFreezenVertical(freezenverticaldata, left);
                  }
                  freezen_default.createAssistCanvas();
                  luckysheetrefreshgrid();
                } else if (itemvalue2 == "freezenRowRange") {
                  if (store_default.luckysheet_select_save == null || store_default.luckysheet_select_save.length == 0) {
                    if (isEditMode()) {
                      alert(locale_freezen.noSeletionError);
                    } else {
                      tooltip_default.info(locale_freezen.noSeletionError, "");
                    }
                    return;
                  }
                  let rangeTop = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1].top;
                  if (freezen_default.freezenRealFirstRowColumn && rangeTop > $("#luckysheet-cell-main").height()) {
                    return tooltip_default.info(locale_freezen.rangeRCOverErrorTitle, locale_freezen.rangeRCOverError);
                  }
                  let scrollTop = $("#luckysheet-cell-main").scrollTop();
                  let row_st = luckysheet_searcharray(store_default.visibledatarow, scrollTop);
                  let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
                  let row_focus = last["row_focus"] == null ? last["row"][0] : last["row_focus"];
                  row_st = Math.max(row_st - 1, row_focus - 1, 0);
                  let top, freezenhorizontaldata;
                  if (freezen_default.freezenRealFirstRowColumn) {
                    top = store_default.visibledatarow[row_st] - 2 + store_default.columnHeaderHeight;
                    freezenhorizontaldata = [store_default.visibledatarow[row_st], row_st + 1, 0, freezen_default.cutVolumn(store_default.visibledatarow, row_st + 1), top];
                  } else {
                    top = store_default.visibledatarow[row_st] - 2 - scrollTop + store_default.columnHeaderHeight;
                    freezenhorizontaldata = [store_default.visibledatarow[row_st], row_st + 1, scrollTop, freezen_default.cutVolumn(store_default.visibledatarow, row_st + 1), top];
                  }
                  freezen_default.saveFreezen(freezenhorizontaldata, top, null, null);
                  if (freezen_default.freezenverticaldata != null) {
                    freezen_default.cancelFreezenVertical();
                    freezen_default.createAssistCanvas();
                    luckysheetrefreshgrid();
                  }
                  freezen_default.createFreezenHorizontal(freezenhorizontaldata, top);
                  freezen_default.createAssistCanvas();
                  luckysheetrefreshgrid();
                } else if (itemvalue2 == "freezenColumnRange") {
                  if (store_default.luckysheet_select_save == null || store_default.luckysheet_select_save.length == 0) {
                    if (isEditMode()) {
                      alert(locale_freezen.noSeletionError);
                    } else {
                      tooltip_default.info(locale_freezen.noSeletionError, "");
                    }
                    return;
                  }
                  let rangeLeft = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1].left;
                  if (freezen_default.freezenRealFirstRowColumn && rangeLeft > $("#luckysheet-cell-main").width()) {
                    return tooltip_default.info(locale_freezen.rangeRCOverErrorTitle, locale_freezen.rangeRCOverError);
                  }
                  let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
                  let col_st = luckysheet_searcharray(store_default.visibledatacolumn, scrollLeft);
                  let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
                  let column_focus = last["column_focus"] == null ? last["column"][0] : last["column_focus"];
                  col_st = Math.max(col_st - 1, column_focus - 1, 0);
                  let left, freezenverticaldata;
                  if (freezen_default.freezenRealFirstRowColumn) {
                    left = store_default.visibledatacolumn[col_st] - 2 + store_default.rowHeaderWidth;
                    freezenverticaldata = [store_default.visibledatacolumn[col_st], col_st + 1, 0, freezen_default.cutVolumn(store_default.visibledatacolumn, col_st + 1), left];
                  } else {
                    left = store_default.visibledatacolumn[col_st] - 2 - scrollLeft + store_default.rowHeaderWidth;
                    freezenverticaldata = [store_default.visibledatacolumn[col_st], col_st + 1, scrollLeft, freezen_default.cutVolumn(store_default.visibledatacolumn, col_st + 1), left];
                  }
                  freezen_default.saveFreezen(null, null, freezenverticaldata, left);
                  if (freezen_default.freezenhorizontaldata != null) {
                    freezen_default.cancelFreezenHorizontal();
                    freezen_default.createAssistCanvas();
                    luckysheetrefreshgrid();
                  }
                  freezen_default.createFreezenVertical(freezenverticaldata, left);
                  freezen_default.createAssistCanvas();
                  luckysheetrefreshgrid();
                } else if (itemvalue2 == "freezenRCRange") {
                  if (store_default.luckysheet_select_save == null || store_default.luckysheet_select_save.length == 0) {
                    if (isEditMode()) {
                      alert(locale_freezen.noSeletionError);
                    } else {
                      tooltip_default.info(locale_freezen.noSeletionError, "");
                    }
                    return;
                  }
                  let rangeTop = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1].top;
                  let rangeLeft = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1].left;
                  if (freezen_default.freezenRealFirstRowColumn && (rangeTop > $("#luckysheet-cell-main").height() || rangeLeft > $("#luckysheet-cell-main").width())) {
                    return tooltip_default.info(locale_freezen.rangeRCOverErrorTitle, locale_freezen.rangeRCOverError);
                  }
                  let scrollTop = $("#luckysheet-cell-main").scrollTop();
                  let row_st = luckysheet_searcharray(store_default.visibledatarow, scrollTop);
                  let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
                  let row_focus = last["row_focus"] == null ? last["row"][0] : last["row_focus"];
                  row_st = Math.max(row_st - 1, row_focus - 1, 0);
                  let top, freezenhorizontaldata;
                  if (freezen_default.freezenRealFirstRowColumn) {
                    top = store_default.visibledatarow[row_st] - 2 + store_default.columnHeaderHeight;
                    freezenhorizontaldata = [store_default.visibledatarow[row_st], row_st + 1, 0, freezen_default.cutVolumn(store_default.visibledatarow, row_st + 1), top];
                    freezen_default.saveFreezen(freezenhorizontaldata, top, null, null);
                  } else {
                    top = store_default.visibledatarow[row_st] - 2 - scrollTop + store_default.columnHeaderHeight;
                    freezenhorizontaldata = [store_default.visibledatarow[row_st], row_st + 1, scrollTop, freezen_default.cutVolumn(store_default.visibledatarow, row_st + 1), top];
                    freezen_default.saveFreezen(freezenhorizontaldata, top, null, null);
                  }
                  freezen_default.createFreezenHorizontal(freezenhorizontaldata, top);
                  let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
                  let col_st = luckysheet_searcharray(store_default.visibledatacolumn, scrollLeft);
                  let column_focus = last["column_focus"] == null ? last["column"][0] : last["column_focus"];
                  col_st = Math.max(col_st - 1, column_focus - 1, 0);
                  let left, freezenverticaldata;
                  if (freezen_default.freezenRealFirstRowColumn) {
                    left = store_default.visibledatacolumn[col_st] - 2 + store_default.rowHeaderWidth;
                    freezenverticaldata = [store_default.visibledatacolumn[col_st], col_st + 1, 0, freezen_default.cutVolumn(store_default.visibledatacolumn, col_st + 1), left];
                  } else {
                    left = store_default.visibledatacolumn[col_st] - 2 - scrollLeft + store_default.rowHeaderWidth;
                    freezenverticaldata = [store_default.visibledatacolumn[col_st], col_st + 1, scrollLeft, freezen_default.cutVolumn(store_default.visibledatacolumn, col_st + 1), left];
                  }
                  freezen_default.saveFreezen(null, null, freezenverticaldata, left);
                  freezen_default.createFreezenVertical(freezenverticaldata, left);
                  freezen_default.createAssistCanvas();
                  luckysheetrefreshgrid();
                } else if (itemvalue2 == "freezenCancel") {
                  if (freezen_default.freezenverticaldata != null) {
                    freezen_default.cancelFreezenVertical();
                    freezen_default.createAssistCanvas();
                    luckysheetrefreshgrid();
                  }
                  if (freezen_default.freezenhorizontaldata != null) {
                    freezen_default.cancelFreezenHorizontal();
                    freezen_default.createAssistCanvas();
                    luckysheetrefreshgrid();
                  }
                  freezen_default.scrollAdapt();
                }
                setTimeout(function() {
                  luckysheetsizeauto();
                }, 0);
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft - 68, $(this).offset().top + 25, "lefttop");
          });
          $("#luckysheet-icon-autofilter").click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            if ($menuButton.length == 0) {
              const _locale = locale_default();
              const locale_sort = _locale.sort;
              const locale_filter = _locale.filter;
              let itemdata = [
                {"text": locale_sort.asc, "value": "asc", "example": '<i class="iconfont luckysheet-iconfont-shengxu" aria-hidden="true"></i>'},
                {"text": locale_sort.desc, "value": "desc", "example": '<i class="iconfont luckysheet-iconfont-jiangxu" aria-hidden="true"></i>'},
                {"text": locale_sort.custom + "...", "value": "diysort", "example": '<i class="iconfont luckysheet-iconfont-zidingyipaixu" aria-hidden="true"></i>'},
                {"text": "", "value": "split", "example": ""},
                {"text": locale_filter.filter, "value": "filter", "example": '<i class="iconfont luckysheet-iconfont-shaixuan2" aria-hidden="true"></i>'},
                {"text": locale_filter.clearFilter, "value": "clearfilter", "example": '<i class="iconfont luckysheet-iconfont-qingchushaixuan" aria-hidden="true"></i>'}
              ];
              let itemset = _this.createButtonMenu(itemdata);
              let menu = replaceHtml(_this.menu, {"id": "autofilter", "item": itemset, "subclass": "", "sub": ""});
              $("body").append(menu);
              $menuButton = $("#" + menuButtonId).width(150);
              $menuButton.find(".luckysheet-cols-menuitem").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                if (itemvalue2 == "diysort") {
                  $("#luckysheetorderby").click();
                } else if (itemvalue2 == "asc") {
                  sortSelection(true);
                } else if (itemvalue2 == "desc") {
                  sortSelection(false);
                } else if (itemvalue2 == "filter") {
                  if ($("#luckysheet-filter-options-sheet" + store_default.currentSheetIndex).length > 0) {
                    $("#luckysheet-filter-initial").click();
                  } else {
                    createFilter();
                  }
                } else if (itemvalue2 == "clearfilter") {
                  $("#luckysheet-filter-initial").click();
                }
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft, $(this).offset().top + 25, "lefttop");
          });
          $("#luckysheet-icon-seachmore").click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            const _locale = locale_default();
            const locale_findAndReplace = _locale.findAndReplace;
            if ($menuButton.length == 0) {
              let itemdata = [
                {"text": locale_findAndReplace.find + " ...", "value": "search", "example": '<i class="iconfont luckysheet-iconfont-sousuo" aria-hidden="true"></i>'},
                {"text": locale_findAndReplace.replace + " ...", "value": "replace", "example": '<i class="iconfont luckysheet-iconfont-tihuan" aria-hidden="true"></i>'},
                {"text": "", "value": "split", "example": ""},
                {"text": locale_findAndReplace.location + " ...", "value": "location", "example": '<i class="iconfont luckysheet-iconfont-dingwei" aria-hidden="true"></i>'},
                {"text": locale_findAndReplace.formula, "value": "locationFormula", "example": locale_findAndReplace.locationExample},
                {"text": locale_findAndReplace.date, "value": "locationConstantDate", "example": locale_findAndReplace.locationExample},
                {"text": locale_findAndReplace.number, "value": "locationConstantNumber", "example": locale_findAndReplace.locationExample},
                {"text": locale_findAndReplace.string, "value": "locationConstantString", "example": locale_findAndReplace.locationExample},
                {"text": locale_findAndReplace.error, "value": "locationConstantError", "example": locale_findAndReplace.locationExample},
                {"text": locale_findAndReplace.condition, "value": "locationCF", "example": locale_findAndReplace.locationExample},
                {"text": locale_findAndReplace.rowSpan, "value": "locationStepRow", "example": locale_findAndReplace.locationExample},
                {"text": locale_findAndReplace.columnSpan, "value": "locationStepColumn", "example": locale_findAndReplace.locationExample}
              ];
              let itemset = _this.createButtonMenu(itemdata);
              let menu = replaceHtml(_this.menu, {"id": "seachmore", "item": itemset, "subclass": "", "sub": ""});
              $("body").append(menu);
              $menuButton = $("#" + menuButtonId).width(180);
              $menuButton.find(".luckysheet-cols-menuitem").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                if (itemvalue2 == "search" || itemvalue2 == "replace") {
                  if (itemvalue2 == "search") {
                    searchReplace_default.createDialog(0);
                  } else if (itemvalue2 == "replace") {
                    searchReplace_default.createDialog(1);
                  }
                  searchReplace_default.init();
                  $("#luckysheet-search-replace #searchInput input").focus();
                } else if (itemvalue2 == "location") {
                  locationCell_default.createDialog();
                  locationCell_default.init();
                } else if (itemvalue2 == "locationFormula" || itemvalue2 == "locationConstantDate" || itemvalue2 == "locationConstantNumber" || itemvalue2 == "locationConstantString" || itemvalue2 == "locationConstantError" || itemvalue2 == "locationCF") {
                  let last = store_default.luckysheet_select_save[0];
                  let range2;
                  if (store_default.luckysheet_select_save.length == 0 || store_default.luckysheet_select_save.length == 1 && last.row[0] == last.row[1] && last.column[0] == last.column[1]) {
                    range2 = [{"row": [0, store_default.flowdata.length - 1], "column": [0, store_default.flowdata[0].length - 1]}];
                  } else {
                    range2 = $.extend(true, [], store_default.luckysheet_select_save);
                  }
                  if (itemvalue2 == "locationFormula") {
                    locationCell_default.apply(range2, "locationFormula", "all");
                  } else if (itemvalue2 == "locationConstantDate") {
                    locationCell_default.apply(range2, "locationConstant", "d");
                  } else if (itemvalue2 == "locationConstantNumber") {
                    locationCell_default.apply(range2, "locationConstant", "n");
                  } else if (itemvalue2 == "locationConstantString") {
                    locationCell_default.apply(range2, "locationConstant", "s,g");
                  } else if (itemvalue2 == "locationConstantError") {
                    locationCell_default.apply(range2, "locationConstant", "e");
                  } else if (itemvalue2 == "locationCF") {
                    locationCell_default.apply(range2, "locationCF");
                  }
                } else if (itemvalue2 == "locationStepRow") {
                  if (store_default.luckysheet_select_save.length == 0 || store_default.luckysheet_select_save.length == 1 && store_default.luckysheet_select_save[0].row[0] == store_default.luckysheet_select_save[0].row[1]) {
                    if (isEditMode()) {
                      alert(locale_findAndReplace.lessTwoRowTip);
                    } else {
                      tooltip_default.info("", locale_findAndReplace.lessTwoRowTip);
                    }
                    return;
                  }
                  let range2 = $.extend(true, [], store_default.luckysheet_select_save);
                  locationCell_default.apply(range2, "locationStepRow");
                } else if (itemvalue2 == "locationStepColumn") {
                  if (store_default.luckysheet_select_save.length == 0 || store_default.luckysheet_select_save.length == 1 && store_default.luckysheet_select_save[0].column[0] == store_default.luckysheet_select_save[0].column[1]) {
                    if (isEditMode()) {
                      alert(locale_findAndReplace.lessTwoColumnTip);
                    } else {
                      tooltip_default.info("", locale_findAndReplace.lessTwoColumnTip);
                    }
                    return;
                  }
                  let range2 = $.extend(true, [], store_default.luckysheet_select_save);
                  locationCell_default.apply(range2, "locationStepColumn");
                }
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft, $(this).offset().top + 25, "lefttop");
          });
          $("#luckysheet-icon-function").click(function() {
            _this.autoSelectionFormula("SUM");
          });
          $("#luckysheet-icon-function-menu").click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            const _locale = locale_default();
            const locale_formula = _locale.formula;
            if ($menuButton.length == 0) {
              let itemdata = [
                {"text": locale_formula.sum, "value": "SUM", "example": "SUM"},
                {"text": locale_formula.average, "value": "AVERAGE", "example": "AVERAGE"},
                {"text": locale_formula.count, "value": "COUNT", "example": "COUNT"},
                {"text": locale_formula.max, "value": "MAX", "example": "MAX"},
                {"text": locale_formula.min, "value": "MIN", "example": "MIN"},
                {"text": "", "value": "split", "example": ""},
                {"text": locale_formula.ifGenerate, "value": "if", "example": "IF"},
                {"text": locale_formula.find + " ...", "value": "formula", "example": ""}
              ];
              let itemset = _this.createButtonMenu(itemdata);
              let menu = replaceHtml(_this.menu, {"id": "function-menu", "item": itemset, "subclass": "", "sub": ""});
              $("body").append(menu);
              $menuButton = $("#" + menuButtonId).width(180);
              $menuButton.find(".luckysheet-cols-menuitem").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                if (itemvalue2 == "if") {
                  let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
                  let r2 = last["row_focus"] == null ? last["row"][0] : last["row_focus"];
                  let c2 = last["column_focus"] == null ? last["column"][0] : last["column_focus"];
                  if (!!store_default.flowdata[r2] && !!store_default.flowdata[r2][c2] && !!store_default.flowdata[r2][c2]["f"]) {
                    let fp = store_default.flowdata[r2][c2]["f"].toString();
                    if (fp.indexOf("=if(") != -1) {
                      ifFormulaGenerator_default.ifFormulaDialog(fp);
                    } else {
                      if (isEditMode()) {
                        alert(locale_formula.tipNotBelongToIf);
                      } else {
                        tooltip_default.info(locale_formula.tipNotBelongToIf, "");
                      }
                      return;
                    }
                  } else {
                    ifFormulaGenerator_default.ifFormulaDialog();
                  }
                  ifFormulaGenerator_default.init();
                } else if (itemvalue2 == "formula") {
                  if (store_default.luckysheet_select_save.length == 0) {
                    if (isEditMode()) {
                      alert(locale_formula.tipSelectCell);
                    } else {
                      tooltip_default.info(locale_formula.tipSelectCell, "");
                    }
                    return;
                  }
                  let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
                  let row_index = last["row_focus"], col_index = last["column_focus"];
                  luckysheetupdateCell(row_index, col_index, store_default.flowdata);
                  let cell = store_default.flowdata[row_index][col_index];
                  if (cell != null && cell.f != null) {
                    let functionStr = formula_default.getfunctionParam(cell.f);
                    if (functionStr.fn != null) {
                      insertFormula_default.formulaParmDialog(functionStr.fn, functionStr.param);
                    } else {
                      insertFormula_default.formulaListDialog();
                    }
                  } else {
                    $("#luckysheet-rich-text-editor").html('<span dir="auto" class="luckysheet-formula-text-color">=</span>');
                    $("#luckysheet-functionbox-cell").html($("#luckysheet-rich-text-editor").html());
                    insertFormula_default.formulaListDialog();
                  }
                  insertFormula_default.init();
                } else {
                  _this.autoSelectionFormula(itemvalue2);
                }
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft - 48, $(this).offset().top + 25, "lefttop");
          });
          $("#luckysheet-icon-bold").mousedown(function(e) {
            hideMenuByCancel(e);
            e.stopPropagation();
          }).click(function(e) {
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let flag = checkTheStatusOfTheSelectedCells("bl", 1);
            let foucsStatus = flag ? 0 : 1;
            _this.updateFormat(d, "bl", foucsStatus);
          });
          $("#luckysheet-icon-italic").mousedown(function(e) {
            hideMenuByCancel(e);
            e.stopPropagation();
          }).click(function() {
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let flag = checkTheStatusOfTheSelectedCells("it", 1);
            let foucsStatus = flag ? 0 : 1;
            _this.updateFormat(d, "it", foucsStatus);
          });
          $("#luckysheet-icon-strikethrough").mousedown(function(e) {
            hideMenuByCancel(e);
            e.stopPropagation();
          }).click(function() {
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let flag = checkTheStatusOfTheSelectedCells("cl", 1);
            let foucsStatus = flag ? 0 : 1;
            _this.updateFormat(d, "cl", foucsStatus);
          });
          $("#luckysheet-icon-underline").mousedown(function(e) {
            hideMenuByCancel(e);
            e.stopPropagation();
          }).click(function() {
            let d = editor_default.deepCopyFlowData(store_default.flowdata);
            let flag = checkTheStatusOfTheSelectedCells("un", 1);
            let foucsStatus = flag ? 0 : 1;
            _this.updateFormat(d, "un", foucsStatus);
          });
          $("#luckysheet-icon-conditionformat").click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            const conditionformat_text = locale_default().conditionformat;
            if ($menuButton.length == 0) {
              let itemdata = [
                {"text": conditionformat_text.highlightCellRules, "value": "highlightCellRule", "example": "more"},
                {"text": conditionformat_text.itemSelectionRules, "value": "projectSelectRule", "example": "more"},
                {"text": conditionformat_text.dataBar, "value": "dataBar", "example": "more"},
                {"text": conditionformat_text.colorGradation, "value": "colorGradation", "example": "more"},
                {"text": conditionformat_text.icons, "value": "icons", "example": ""},
                {"text": "", "value": "split", "example": ""},
                {"text": conditionformat_text.newRule, "value": "newRule", "example": ""},
                {"text": conditionformat_text.deleteRule, "value": "deleteRule", "example": "more"},
                {"text": conditionformat_text.manageRules, "value": "administerRule", "example": ""}
              ];
              let itemset = _this.createButtonMenu(itemdata);
              let menu = replaceHtml(_this.menu, {"id": "conditionformat", "item": itemset, "subclass": "", "sub": ""});
              let subitemdata = [
                {"text": conditionformat_text.greaterThan, "value": "greaterThan", "example": ">"},
                {"text": conditionformat_text.lessThan, "value": "lessThan", "example": "<"},
                {"text": conditionformat_text.between, "value": "betweenness", "example": "[]"},
                {"text": conditionformat_text.equal, "value": "equal", "example": "="},
                {"text": conditionformat_text.textContains, "value": "textContains", "example": "()"},
                {"text": conditionformat_text.occurrence, "value": "occurrenceDate", "example": conditionformat_text.yesterday},
                {"text": conditionformat_text.duplicateValue, "value": "duplicateValue", "example": "##"}
              ];
              let subitemset = _this.createButtonMenu(subitemdata);
              let submenu = replaceHtml(_this.menu, {"id": "highlightCellRule", "item": subitemset, "subclass": "luckysheet-menuButton-sub"});
              let subitemdata2 = [
                {"text": conditionformat_text.top10, "value": "top10", "example": conditionformat_text.top10},
                {"text": conditionformat_text.top10_percent, "value": "top10%", "example": conditionformat_text.top10_percent},
                {"text": conditionformat_text.last10, "value": "last10", "example": conditionformat_text.last10},
                {"text": conditionformat_text.last10_percent, "value": "last10%", "example": conditionformat_text.last10_percent},
                {"text": conditionformat_text.aboveAverage, "value": "AboveAverage", "example": conditionformat_text.above},
                {"text": conditionformat_text.belowAverage, "value": "SubAverage", "example": conditionformat_text.below}
              ];
              let subitemset2 = _this.createButtonMenu(subitemdata2);
              let submenu2 = replaceHtml(_this.menu, {"id": "projectSelectRule", "item": subitemset2, "subclass": "luckysheet-menuButton-sub"});
              let submenu3 = `<div id="luckysheet-icon-dataBar-menuButton" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-menuButton luckysheet-menuButton-sub luckysheet-mousedown-cancel" style="width: 126px;padding: 5px;top: 118.5px;left: 1321.48px;display: none;">
                                    <div itemvalue="0" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: 0 0;" title="${conditionformat_text.gradientDataBar_1}"></div>
                                    </div>
                                    <div itemvalue="1" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -38px 0;" title="${conditionformat_text.gradientDataBar_2}"></div>
                                    </div>
                                    <div itemvalue="2" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -76px 0;" title="${conditionformat_text.gradientDataBar_3}"></div>
                                    </div>
                                    <div itemvalue="3" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: 0 -36px;" title="${conditionformat_text.gradientDataBar_4}"></div>
                                    </div>
                                    <div itemvalue="4" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -38px -36px;" title="${conditionformat_text.gradientDataBar_5}"></div>
                                    </div>
                                    <div itemvalue="5" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -76px -36px;" title="${conditionformat_text.gradientDataBar_6}"></div>
                                    </div>
                                    <div itemvalue="6" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: 0 -72px;" title="${conditionformat_text.solidColorDataBar_1}"></div>
                                    </div>
                                    <div itemvalue="7" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -38px -72px;" title="${conditionformat_text.solidColorDataBar_2}"></div>
                                    </div>
                                    <div itemvalue="8" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -76px -72px;" title="${conditionformat_text.solidColorDataBar_3}"></div>
                                    </div>
                                    <div itemvalue="9" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: 0 -108px;" title="${conditionformat_text.solidColorDataBar_4}"></div>
                                    </div>
                                    <div itemvalue="10" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -38px -108px;" title="${conditionformat_text.solidColorDataBar_5}"></div>
                                    </div>
                                    <div itemvalue="11" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -76px -108px;" title="${conditionformat_text.solidColorDataBar_6}"></div>
                                    </div>
                                </div>`;
              let submenu4 = `<div id="luckysheet-icon-colorGradation-menuButton" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-menuButton luckysheet-menuButton-sub luckysheet-mousedown-cancel" style="width: 126px;padding: 5px;top: 143.5px;left: 1321.48px;display: none;">
                                    <div itemvalue="0" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: 0 0;" title="${conditionformat_text.colorGradation_1}"></div>
                                    </div>
                                    <div itemvalue="1" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -38px 0;" title="${conditionformat_text.colorGradation_2}"></div>
                                    </div>
                                    <div itemvalue="2" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -76px 0;" title="${conditionformat_text.colorGradation_3}"></div>
                                    </div>
                                    <div itemvalue="3" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -114px 0;" title="${conditionformat_text.colorGradation_4}"></div>
                                    </div>
                                    <div itemvalue="4" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: 0 -36px;" title="${conditionformat_text.colorGradation_5}"></div>
                                    </div>
                                    <div itemvalue="5" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -38px -36px;" title="${conditionformat_text.colorGradation_6}"></div>
                                    </div>
                                    <div itemvalue="6" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -76px -36px;" title="${conditionformat_text.colorGradation_7}"></div>
                                    </div>
                                    <div itemvalue="7" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -114px -36px;" title="${conditionformat_text.colorGradation_8}"></div>
                                    </div>
                                    <div itemvalue="8" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: 0 -72px;" title="${conditionformat_text.colorGradation_9}"></div>
                                    </div>
                                    <div itemvalue="9" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -38px -72px;" title="${conditionformat_text.colorGradation_10}"></div>
                                    </div>
                                    <div itemvalue="10" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -76px -72px;" title="${conditionformat_text.colorGradation_11}"></div>
                                    </div>
                                    <div itemvalue="11" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel" style="width: 28px; height: 26px;padding: 5px;float: left;">
                                        <div class="luckysheet-mousedown-cancel bgImgBox" style="background-position: -114px -72px;" title="${conditionformat_text.colorGradation_12}"></div>
                                    </div>
                                </div>`;
              let subitemdata6 = [
                {"text": conditionformat_text.deleteSheetRule, "value": "delSheet", "example": ""}
              ];
              let subitemset6 = _this.createButtonMenu(subitemdata6);
              let submenu6 = replaceHtml(_this.menu, {"id": "deleteRule", "item": subitemset6, "subclass": "luckysheet-menuButton-sub"});
              $("body").append(menu + submenu + submenu2 + submenu3 + submenu4 + submenu6);
              $menuButton = $("#" + menuButtonId).width(190);
              $("#luckysheet-icon-highlightCellRule-menuButton").width(160);
              $("#luckysheet-icon-projectSelectRule-menuButton").width(180);
              $menuButton.find(".luckysheet-cols-menuitem").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                if (itemvalue2 == "icons") {
                  if (store_default.luckysheet_select_save.length == 0) {
                    if (isEditMode()) {
                      alert(conditionformat_text.pleaseSelectRange);
                    } else {
                      tooltip_default.info(conditionformat_text.pleaseSelectRange, "");
                    }
                    return;
                  }
                  conditionformat_default.CFiconsDialog();
                  conditionformat_default.init();
                } else if (itemvalue2 == "newRule") {
                  if (store_default.luckysheet_select_save.length == 0) {
                    if (isEditMode()) {
                      alert(conditionformat_text.pleaseSelectRange);
                    } else {
                      tooltip_default.info(conditionformat_text.pleaseSelectRange, "");
                    }
                    return;
                  }
                  conditionformat_default.newConditionRuleDialog(0);
                  conditionformat_default.init();
                } else if (itemvalue2 == "administerRule") {
                  let loadSheetUrl = server_default.loadSheetUrl;
                  let file = getluckysheetfile();
                  if (loadSheetUrl != "" && loadSheetUrl != null) {
                    let sheetindex = [];
                    for (let i2 = 0; i2 < file.length; i2++) {
                      sheetindex.push(file[i2].index);
                    }
                    $.post(loadSheetUrl, {"gridKey": server_default.gridKey, "index": sheetindex.join(",")}, function(d) {
                      let dataset = new Function("return " + d)();
                      setTimeout(function() {
                        store_default.loadingObj.close();
                      }, 500);
                      for (let item2 in dataset) {
                        if (item2 == store_default.currentSheetIndex) {
                          continue;
                        }
                        let otherfile = file[getSheetIndex(item2)];
                        otherfile.celldata = dataset[item2.toString()];
                        otherfile["data"] = sheetmanage_default.buildGridData(otherfile);
                      }
                      setluckysheetfile(file);
                      conditionformat_default.fileClone = $.extend(true, [], file);
                      conditionformat_default.administerRuleDialog();
                      conditionformat_default.init();
                    });
                  } else {
                    conditionformat_default.fileClone = $.extend(true, [], file);
                    conditionformat_default.administerRuleDialog();
                    conditionformat_default.init();
                  }
                }
              });
              $(document).off("click.CFhighlightCellRule").on("click.CFhighlightCellRule", "#luckysheet-icon-highlightCellRule-menuButton .luckysheet-cols-menuitem", function() {
                $menuButton.hide();
                $("#luckysheet-icon-highlightCellRule-menuButton").hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                if (store_default.luckysheet_select_save.length == 0) {
                  if (isEditMode()) {
                    alert(conditionformat_text.pleaseSelectRange);
                  } else {
                    tooltip_default.info(conditionformat_text.pleaseSelectRange, "");
                  }
                  return;
                } else {
                  let textCellColorHtml = conditionformat_default.textCellColorHtml();
                  let title, content;
                  switch (itemvalue2) {
                    case "greaterThan":
                      title = conditionformat_text.conditionformat_greaterThan;
                      content = `<div class="box" data-itemvalue="greaterThan">
                                                <div class="boxTitleOne">${conditionformat_text.conditionformat_greaterThan_title}\uFF1A</div>
                                                <div class="inpbox range">
                                                    <input id="conditionVal" class="formulaInputFocus"/>
                                                    <i class="fa fa-table" aria-hidden="true" title="${conditionformat_text.selectCell}"></i>
                                                </div>
                                                <div style="margin: 5px 0;">${conditionformat_text.setAs}\uFF1A</div> 
                                                ${textCellColorHtml} 
                                            </div>`;
                      break;
                    case "lessThan":
                      title = conditionformat_text.conditionformat_lessThan;
                      content = `<div class="box" data-itemvalue="lessThan">
                                                <div class="boxTitleOne">${conditionformat_text.conditionformat_lessThan_title}\uFF1A</div>
                                                <div class="inpbox range">
                                                    <input id="conditionVal" class="formulaInputFocus"/>
                                                    <i class="fa fa-table" aria-hidden="true" title="${conditionformat_text.selectCell}"></i>
                                                </div>
                                                <div style="margin: 5px 0;">${conditionformat_text.setAs}\uFF1A</div>
                                                ${textCellColorHtml}
                                            </div>`;
                      break;
                    case "betweenness":
                      title = conditionformat_text.conditionformat_betweenness;
                      content = `<div class="box" data-itemvalue="betweenness">
                                                <div class="boxTitleOne">${conditionformat_text.conditionformat_betweenness_title}\uFF1A</div>
                                                <div style="height: 30px;line-height: 30px;">
                                                    <div class="inpbox2 range">
                                                        <input id="conditionVal" class="formulaInputFocus"/>
                                                        <i class="fa fa-table" aria-hidden="true" title="${conditionformat_text.selectCell}"></i>
                                                    </div>
                                                    <div style="float: left;height: 30px;line-height: 30px;margin: 0 5px;">${conditionformat_text.to}</div>
                                                    <div class="inpbox2 range">
                                                        <input id="conditionVal2" class="formulaInputFocus"/>
                                                        <i class="fa fa-table" aria-hidden="true" title="${conditionformat_text.selectCell}"></i>
                                                    </div>
                                                </div>
                                                <div style="margin: 5px 0;">${conditionformat_text.setAs}\uFF1A</div>
                                                ${textCellColorHtml}
                                            </div>`;
                      break;
                    case "equal":
                      title = conditionformat_text.conditionformat_equal;
                      content = `<div class="box" data-itemvalue="equal">
                                                <div class="boxTitleOne">${conditionformat_text.conditionformat_equal_title}\uFF1A</div>
                                                <div class="inpbox range">
                                                    <input id="conditionVal" class="formulaInputFocus"/>
                                                    <i class="fa fa-table" aria-hidden="true" title="${conditionformat_text.selectCell}"></i>
                                                </div>
                                                <div style="margin: 5px 0;">${conditionformat_text.setAs}\uFF1A</div>
                                                ${textCellColorHtml}
                                            </div>`;
                      break;
                    case "textContains":
                      title = conditionformat_text.conditionformat_textContains;
                      content = `<div class="box" data-itemvalue="textContains">
                                                <div class="boxTitleOne">${conditionformat_text.conditionformat_textContains_title}\uFF1A</div>
                                                <div class="inpbox range">
                                                    <input id="conditionVal" class="formulaInputFocus"/>
                                                    <i class="fa fa-table" aria-hidden="true" title="${conditionformat_text.selectCell}"></i>
                                                </div>
                                                <div style="margin: 5px 0;">${conditionformat_text.setAs}\uFF1A</div>
                                                ${textCellColorHtml}
                                            </div>`;
                      break;
                    case "occurrenceDate":
                      title = conditionformat_text.conditionformat_occurrenceDate;
                      content = `<div class="box" data-itemvalue="occurrenceDate">
                                                <div class="boxTitleOne">${conditionformat_text.conditionformat_occurrenceDate_title}\uFF1A</div>
                                                <div class="inpbox">
                                                    <input id="daterange-btn" class="formulaInputFocus" readonly="readonly" placeholder="${conditionformat_text.pleaseSelectADate}"/>
                                                </div>
                                                <div style="margin: 5px 0;">${conditionformat_text.setAs}\uFF1A</div>
                                                ${textCellColorHtml}
                                            </div>`;
                      break;
                    case "duplicateValue":
                      title = conditionformat_text.conditionformat_duplicateValue;
                      content = `<div class="box" data-itemvalue="duplicateValue">
                                                <div class="boxTitleOne">${conditionformat_text.conditionformat_duplicateValue_title}\uFF1A</div>
                                                <select id="conditionVal" class="selectbox">
                                                    <option value="0">${conditionformat_text.duplicateValue}</option>
                                                    <option value="1">${conditionformat_text.uniqueValue}</option>
                                                </select>
                                                <div style="margin:5px 0;">${conditionformat_text.setAs}\uFF1A</div>
                                                ${textCellColorHtml}
                                            </div>`;
                      break;
                  }
                  conditionformat_default.conditionformatDialog(title, content);
                }
              });
              $(document).off("click.CFprojectSelectRule").on("click.CFprojectSelectRule", "#luckysheet-icon-projectSelectRule-menuButton .luckysheet-cols-menuitem", function() {
                $menuButton.hide();
                $("#luckysheet-icon-projectSelectRule-menuButton").hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                if (store_default.luckysheet_select_save.length == 0) {
                  if (isEditMode()) {
                    alert(conditionformat_text.pleaseSelectRange);
                  } else {
                    tooltip_default.info(conditionformat_text.pleaseSelectRange, "");
                  }
                  return;
                } else {
                  let textCellColorHtml = conditionformat_default.textCellColorHtml();
                  let title, content;
                  switch (itemvalue2) {
                    case "top10":
                      title = conditionformat_text.conditionformat_top10;
                      content = `<div class="box" data-itemvalue="top10">
                                                <div class="boxTitleOne">${conditionformat_text.conditionformat_top10_title}\uFF1A</div>
                                                <div style="height: 30px;line-height: 30px;">
                                                    <div style="float: left;height: 30px;line-height: 30px;margin: 0 5px;">${conditionformat_text.top}</div>
                                                    <div class="inpbox2">
                                                        <input id="conditionVal" class="formulaInputFocus" type="number" value="10"/>
                                                    </div>
                                                    <div style="float: left;height: 30px;line-height: 30px;margin: 0 5px;">${conditionformat_text.oneself}</div>
                                                </div>
                                                <div style="margin: 5px 0;">${conditionformat_text.setAs}\uFF1A</div>
                                                ${textCellColorHtml}
                                            </div>`;
                      break;
                    case "top10%":
                      title = conditionformat_text.conditionformat_top10_percent;
                      content = `<div class="box" data-itemvalue="top10%">
                                                <div class="boxTitleOne">${conditionformat_text.conditionformat_top10_title}\uFF1A</div>
                                                <div style="height: 30px;line-height: 30px;">
                                                    <div style="float: left;height: 30px;line-height: 30px;margin: 0 5px;">${conditionformat_text.top}</div>
                                                    <div class="inpbox2">
                                                        <input id="conditionVal" class="formulaInputFocus" type="number" value="10"/>
                                                    </div>
                                                    <div style="float: left;height: 30px;line-height: 30px;margin: 0 5px;">%</div>
                                                </div>
                                                <div style="margin: 5px 0;">${conditionformat_text.setAs}\uFF1A</div>
                                                ${textCellColorHtml}
                                            </div>`;
                      break;
                    case "last10":
                      title = conditionformat_text.conditionformat_last10;
                      content = `<div class="box" data-itemvalue="last10">
                                                <div class="boxTitleOne">${conditionformat_text.conditionformat_last10_title}\uFF1A</div>
                                                <div style="height: 30px;line-height: 30px;">
                                                    <div style="float: left;height: 30px;line-height: 30px;margin: 0 5px;">${conditionformat_text.last}</div>
                                                    <div class="inpbox2">
                                                        <input id="conditionVal" class="formulaInputFocus" type="number" value="10"/>
                                                    </div>
                                                    <div style="float: left;height: 30px;line-height: 30px;margin: 0 5px;">${conditionformat_text.oneself}</div>
                                                </div>
                                                <div style="margin: 5px 0;">${conditionformat_text.setAs}\uFF1A</div>
                                                ${textCellColorHtml}
                                            </div>`;
                      break;
                    case "last10%":
                      title = conditionformat_text.conditionformat_last10_percent;
                      content = `<div class="box" data-itemvalue="last10%">
                                                <div class="boxTitleOne">${conditionformat_text.conditionformat_last10_title}\uFF1A</div>
                                                <div style="height: 30px;line-height: 30px;">
                                                    <div style="float: left;height: 30px;line-height: 30px;margin: 0 5px;">${conditionformat_text.last}</div>
                                                    <div class="inpbox2">
                                                        <input id="conditionVal" class="formulaInputFocus" type="number" value="10"/>
                                                    </div>
                                                    <div style="float: left;height: 30px;line-height: 30px;margin: 0 5px;">%</div>
                                                </div>
                                                <div style="margin:5px 0;">\u8BBE\u7F6E\u4E3A\uFF1A</div>
                                                ${textCellColorHtml}
                                            </div>`;
                      break;
                    case "AboveAverage":
                      title = conditionformat_text.conditionformat_AboveAverage;
                      content = `<div class="box" data-itemvalue="AboveAverage">
                                                <div class="boxTitleOne">${conditionformat_text.conditionformat_AboveAverage_title}\uFF1A</div>
                                                <div style="margin: 5px 0;">${conditionformat_text.setAsByArea}\uFF1A</div>
                                                ${textCellColorHtml}
                                            </div>`;
                      break;
                    case "SubAverage":
                      title = conditionformat_text.conditionformat_SubAverage;
                      content = `<div class="box" data-itemvalue="SubAverage">
                                                <div class="boxTitleOne">${conditionformat_text.conditionformat_SubAverage_title}\uFF1A</div>
                                                <div style="margin: 5px 0;">${conditionformat_text.setAsByArea}\uFF1A</div>
                                                ${textCellColorHtml}
                                            </div>`;
                      break;
                  }
                  conditionformat_default.conditionformatDialog(title, content);
                }
              });
              $(document).off("click.CFdataBar").on("click.CFdataBar", "#luckysheet-icon-dataBar-menuButton .luckysheet-cols-menuitem", function() {
                $menuButton.hide();
                $("#luckysheet-icon-dataBar-menuButton").hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                if (store_default.luckysheet_select_save.length > 0) {
                  let cellrange = $.extend(true, [], store_default.luckysheet_select_save);
                  let format = conditionformat_default.dataBarList[itemvalue2]["format"];
                  conditionformat_default.updateItem("dataBar", cellrange, format);
                }
              });
              $(document).off("click.CFcolorGradation").on("click.CFcolorGradation", "#luckysheet-icon-colorGradation-menuButton .luckysheet-cols-menuitem", function() {
                $menuButton.hide();
                $("#luckysheet-icon-colorGradation-menuButton").hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                if (store_default.luckysheet_select_save.length > 0) {
                  let cellrange = $.extend(true, [], store_default.luckysheet_select_save);
                  let format = conditionformat_default.colorGradationList[itemvalue2]["format"];
                  conditionformat_default.updateItem("colorGradation", cellrange, format);
                }
              });
              $(document).off("click.CFdeleteRule").on("click.CFdeleteRule", "#luckysheet-icon-deleteRule-menuButton .luckysheet-cols-menuitem", function() {
                $menuButton.hide();
                $("#luckysheet-icon-deleteRule-menuButton").hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                if (itemvalue2 == "delSheet") {
                  conditionformat_default.updateItem("delSheet");
                }
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft, $(this).offset().top + 25, "lefttop");
          });
          $("#luckysheet-icon-postil").click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            const locale_comment = locale_default().comment;
            $menuButton.remove();
            postil_default.removeActivePs();
            let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
            let row_index = last["row_focus"];
            if (row_index == null) {
              row_index = last["row"][0];
            }
            let col_index = last["column_focus"];
            if (col_index == null) {
              col_index = last["column"][0];
            }
            let itemdata;
            if (store_default.flowdata[row_index][col_index] != null && store_default.flowdata[row_index][col_index].ps != null) {
              itemdata = [
                {"text": locale_comment.edit, "value": "editPs", "example": ""},
                {"text": locale_comment.delete, "value": "delPs", "example": ""},
                {"text": "", "value": "split", "example": ""},
                {"text": locale_comment.showOne, "value": "showHidePs", "example": ""},
                {"text": locale_comment.showAll, "value": "showHideAllPs", "example": ""}
              ];
            } else {
              itemdata = [
                {"text": locale_comment.insert, "value": "newPs", "example": ""},
                {"text": "", "value": "split", "example": ""},
                {"text": locale_comment.showAll, "value": "showHideAllPs", "example": ""}
              ];
            }
            let itemset = _this.createButtonMenu(itemdata);
            let menu = replaceHtml(_this.menu, {"id": "postil", "item": itemset, "subclass": "", "sub": ""});
            $("body").append(menu);
            $menuButton = $("#" + menuButtonId).width(150);
            $menuButton.find(".luckysheet-cols-menuitem").click(function() {
              $menuButton.hide();
              luckysheetContainerFocus();
              let $t = $(this), itemvalue2 = $t.attr("itemvalue");
              if (itemvalue2 == "newPs") {
                postil_default.newPs(row_index, col_index);
              } else if (itemvalue2 == "editPs") {
                postil_default.editPs(row_index, col_index);
              } else if (itemvalue2 == "delPs") {
                postil_default.delPs(row_index, col_index);
              } else if (itemvalue2 == "showHidePs") {
                postil_default.showHidePs(row_index, col_index);
              } else if (itemvalue2 == "showHideAllPs") {
                postil_default.showHideAllPs();
              }
            });
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft, $(this).offset().top + 25, "lefttop");
          });
          $("#luckysheet-icon-protection").click(function() {
            let sheetFile = sheetmanage_default.getSheetByIndex();
            openProtectionModal(sheetFile);
          });
          $("#luckysheet-icon-print").click(function() {
            let menuButtonId = $(this).attr("id") + "-menuButton";
            let $menuButton = $("#" + menuButtonId);
            const _locale = locale_default();
            const locale_print = _locale.print;
            if ($menuButton.length == 0) {
              let itemdata = [
                {"text": locale_print.menuItemPrint, "value": "print", "example": '<i class="iconfont luckysheet-iconfont-dayin" aria-hidden="true"></i>'},
                {"text": "", "value": "split", "example": ""},
                {"text": locale_print.menuItemAreas, "value": "areas", "example": '<i class="iconfont luckysheet-iconfont-tihuan" aria-hidden="true"></i>'},
                {"text": locale_print.menuItemRows, "value": "rows", "example": '<i class="iconfont luckysheet-iconfont-zhuandao1" aria-hidden="true"></i>'},
                {"text": locale_print.menuItemColumns, "value": "columns", "example": '<i class="iconfont luckysheet-iconfont-dingwei" aria-hidden="true"></i>'}
              ];
              let itemset = _this.createButtonMenu(itemdata);
              let menu = replaceHtml(_this.menu, {"id": "print", "item": itemset, "subclass": "", "sub": ""});
              $("body").append(menu);
              $menuButton = $("#" + menuButtonId).width(180);
              $menuButton.find(".luckysheet-cols-menuitem").click(function() {
                $menuButton.hide();
                luckysheetContainerFocus();
                let $t = $(this), itemvalue2 = $t.attr("itemvalue");
                if (itemvalue2 == "print") {
                  alert("print");
                } else if (itemvalue2 == "areas" || itemvalue2 == "rows" || itemvalue2 == "columns") {
                  alert("areas");
                }
              });
            }
            let userlen = $(this).outerWidth();
            let tlen = $menuButton.outerWidth();
            let menuleft = $(this).offset().left;
            if (tlen > userlen && tlen + menuleft > $("#" + store_default.container).width()) {
              menuleft = menuleft - tlen + userlen;
            }
            mouseclickposition($menuButton, menuleft, $(this).offset().top + 25, "lefttop");
          });
          $("body").on("mouseover mouseleave", ".luckysheet-menuButton .luckysheet-cols-submenu", function(e) {
            let $t = $(this), attrid = $t.attr("itemvalue"), $attr = $("#luckysheet-icon-" + attrid + "-menuButton");
            if (e.type === "mouseover") {
              let $con = $t.parent();
              let winW = $(window).width(), winH = $(window).height();
              let menuW = $con.width(), attrH = $attr.height() + 25, attrW = $attr.width() + 5;
              let offset = $t.offset();
              let top = offset.top, left = offset.left + menuW;
              if (left + attrW > winW) {
                left = offset.left - attrW;
              }
              if (top + attrH > winH) {
                top = winH - attrH;
              }
              $attr.css({"top": top, "left": left}).show();
              _this.rightclickmenu = $t;
            } else {
              clearTimeout(_this.submenuhide[$attr.attr("id")]);
              _this.submenuhide[$attr.attr("id")] = setTimeout(function() {
                $attr.hide();
              }, 200);
            }
          }).on("mouseover mouseleave", ".luckysheet-menuButton-sub", function(e) {
            if (e.type === "mouseover") {
              _this.rightclickmenu.addClass("luckysheet-cols-menuitem-hover");
              clearTimeout(_this.submenuhide[$(this).attr("id")]);
            } else {
              _this.rightclickmenu.removeClass("luckysheet-cols-menuitem-hover");
              $(this).hide();
            }
          });
        },
        getQKBorder: function(width, type, color) {
          let bordertype = "";
          if (width.indexOf("pt") > -1) {
            width = parseFloat(width);
            if (width < 1) {
            } else if (width < 1.5) {
              bordertype = "Medium";
            } else {
              bordertype = "Thick";
            }
          } else {
            width = parseFloat(width);
            if (width < 2) {
            } else if (width < 3) {
              bordertype = "Medium";
            } else {
              bordertype = "Thick";
            }
          }
          let style = 0;
          type = type.toLowerCase();
          if (type == "double") {
            style = 2;
          } else if (type == "dotted") {
            if (bordertype == "Medium" || bordertype == "Thick") {
              style = 3;
            } else {
              style = 10;
            }
          } else if (type == "dashed") {
            if (bordertype == "Medium" || bordertype == "Thick") {
              style = 4;
            } else {
              style = 9;
            }
          } else if (type == "solid") {
            if (bordertype == "Medium") {
              style = 8;
            } else if (bordertype == "Thick") {
              style = 13;
            } else {
              style = 1;
            }
          }
          return [style, color];
        },
        updateFormatCell: function(d, attr, foucsStatus, row_st, row_ed, col_st, col_ed) {
          if (d == null || attr == null) {
            return;
          }
          if (attr == "ct") {
            for (let r2 = row_st; r2 <= row_ed; r2++) {
              if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][r2] != null) {
                continue;
              }
              for (let c2 = col_st; c2 <= col_ed; c2++) {
                let cell = d[r2][c2], value = null;
                if (getObjType(cell) == "object") {
                  value = d[r2][c2]["v"];
                } else {
                  value = d[r2][c2];
                }
                if (foucsStatus != "@" && isRealNum(value)) {
                  value = parseFloat(value);
                }
                let mask = update(foucsStatus, value);
                let type = "n";
                if (is_date(foucsStatus) || foucsStatus === 14 || foucsStatus === 15 || foucsStatus === 16 || foucsStatus === 17 || foucsStatus === 18 || foucsStatus === 19 || foucsStatus === 20 || foucsStatus === 21 || foucsStatus === 22 || foucsStatus === 45 || foucsStatus === 46 || foucsStatus === 47) {
                  type = "d";
                } else if (foucsStatus == "@" || foucsStatus === 49) {
                  type = "s";
                } else if (foucsStatus == "General" || foucsStatus === 0) {
                  type = isRealNum(value) ? "n" : "g";
                }
                if (getObjType(cell) == "object") {
                  d[r2][c2]["m"] = mask;
                  if (d[r2][c2]["ct"] == null) {
                    d[r2][c2]["ct"] = {};
                  }
                  d[r2][c2]["ct"]["fa"] = foucsStatus;
                  d[r2][c2]["ct"]["t"] = type;
                } else {
                  d[r2][c2] = {"ct": {"fa": foucsStatus, "t": type}, "v": value, "m": mask};
                }
              }
            }
          } else {
            if (attr == "ht") {
              if (foucsStatus == "left") {
                foucsStatus = "1";
              } else if (foucsStatus == "center") {
                foucsStatus = "0";
              } else if (foucsStatus == "right") {
                foucsStatus = "2";
              }
            } else if (attr == "vt") {
              if (foucsStatus == "top") {
                foucsStatus = "1";
              } else if (foucsStatus == "middle") {
                foucsStatus = "0";
              } else if (foucsStatus == "bottom") {
                foucsStatus = "2";
              }
            } else if (attr == "tb") {
              if (foucsStatus == "overflow") {
                foucsStatus = "1";
              } else if (foucsStatus == "clip") {
                foucsStatus = "0";
              } else if (foucsStatus == "wrap") {
                foucsStatus = "2";
              }
            } else if (attr == "tr") {
              if (foucsStatus == "none") {
                foucsStatus = "0";
              } else if (foucsStatus == "angleup") {
                foucsStatus = "1";
              } else if (foucsStatus == "angledown") {
                foucsStatus = "2";
              } else if (foucsStatus == "vertical") {
                foucsStatus = "3";
              } else if (foucsStatus == "rotation-up") {
                foucsStatus = "4";
              } else if (foucsStatus == "rotation-down") {
                foucsStatus = "5";
              }
            }
            for (let r2 = row_st; r2 <= row_ed; r2++) {
              if (store_default.config["rowhidden"] != null && store_default.config["rowhidden"][r2] != null) {
                continue;
              }
              for (let c2 = col_st; c2 <= col_ed; c2++) {
                let value = d[r2][c2];
                if (getObjType(value) == "object") {
                  updateInlineStringFormatOutside(value, attr, foucsStatus);
                  d[r2][c2][attr] = foucsStatus;
                } else {
                  d[r2][c2] = {v: value};
                  d[r2][c2][attr] = foucsStatus;
                }
              }
            }
          }
        },
        updateFormat: function(d, attr, foucsStatus) {
          let _this = this;
          if (!checkProtectionFormatCells(store_default.currentSheetIndex)) {
            return;
          }
          if (!checkIsAllowEdit()) {
            tooltip_default.info("", locale_default().pivotTable.errorNotAllowEdit);
            return;
          }
          let canvasElement = document.createElement("canvas");
          let canvas = canvasElement.getContext("2d");
          if (attr in inlineStyleAffectAttribute) {
            if (parseInt($("#luckysheet-input-box").css("top")) > 0) {
              let value = $("#luckysheet-input-box").text();
              if (value.substr(0, 1) != "=") {
                let cell = d[store_default.luckysheetCellUpdate[0]][store_default.luckysheetCellUpdate[1]];
                updateInlineStringFormat(cell, attr, foucsStatus, formula_default.rangeResizeTo);
              }
            }
          }
          let cfg = $.extend(true, {}, store_default.config);
          if (cfg["rowlen"] == null) {
            cfg["rowlen"] = {};
          }
          for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
            let row_st = store_default.luckysheet_select_save[s]["row"][0], row_ed = store_default.luckysheet_select_save[s]["row"][1];
            let col_st = store_default.luckysheet_select_save[s]["column"][0], col_ed = store_default.luckysheet_select_save[s]["column"][1];
            this.updateFormatCell(d, attr, foucsStatus, row_st, row_ed, col_st, col_ed);
            if (attr == "tb" || attr == "tr" || attr == "fs") {
              cfg = rowlenByRange(d, row_st, row_ed, cfg);
            }
          }
          let allParam = {};
          if (attr == "tb" || attr == "tr" || attr == "fs") {
            allParam = {
              "cfg": cfg,
              "RowlChange": true
            };
          }
          jfrefreshgrid(d, store_default.luckysheet_select_save, allParam, false);
        },
        updateFormat_mc: function(d, foucsStatus) {
          if (!checkIsAllowEdit()) {
            tooltip_default.info("", locale_default().pivotTable.errorNotAllowEdit);
            return;
          }
          let cfg = $.extend(true, {}, store_default.config);
          if (cfg["merge"] == null) {
            cfg["merge"] = {};
          }
          if (!checkProtectionNotEnable(store_default.currentSheetIndex)) {
            return;
          }
          if (foucsStatus == "mergeCancel") {
            for (let i2 = 0; i2 < store_default.luckysheet_select_save.length; i2++) {
              let range2 = store_default.luckysheet_select_save[i2];
              let r1 = range2["row"][0], r2 = range2["row"][1];
              let c1 = range2["column"][0], c2 = range2["column"][1];
              if (r1 == r2 && c1 == c2) {
                continue;
              }
              let fv = {};
              for (let r3 = r1; r3 <= r2; r3++) {
                for (let c3 = c1; c3 <= c2; c3++) {
                  let cell = d[r3][c3];
                  if (cell != null && cell.mc != null) {
                    let mc_r = cell.mc.r, mc_c = cell.mc.c;
                    if ("rs" in cell.mc) {
                      delete cell.mc;
                      delete cfg["merge"][mc_r + "_" + mc_c];
                      fv[mc_r + "_" + mc_c] = $.extend(true, {}, cell);
                    } else {
                      let cell_clone = JSON.parse(JSON.stringify(fv[mc_r + "_" + mc_c]));
                      delete cell_clone.v;
                      delete cell_clone.m;
                      delete cell_clone.ct;
                      delete cell_clone.f;
                      delete cell_clone.spl;
                      d[r3][c3] = cell_clone;
                    }
                  }
                }
              }
            }
          } else {
            let isHasMc = false;
            for (let i2 = 0; i2 < store_default.luckysheet_select_save.length; i2++) {
              let range2 = store_default.luckysheet_select_save[i2];
              let r1 = range2["row"][0], r2 = range2["row"][1];
              let c1 = range2["column"][0], c2 = range2["column"][1];
              for (let r3 = r1; r3 <= r2; r3++) {
                for (let c3 = c1; c3 <= c2; c3++) {
                  let cell = d[r3][c3];
                  if (getObjType(cell) == "object" && "mc" in cell) {
                    isHasMc = true;
                    break;
                  }
                }
              }
            }
            if (isHasMc) {
              for (let i2 = 0; i2 < store_default.luckysheet_select_save.length; i2++) {
                let range2 = store_default.luckysheet_select_save[i2];
                let r1 = range2["row"][0], r2 = range2["row"][1];
                let c1 = range2["column"][0], c2 = range2["column"][1];
                if (r1 == r2 && c1 == c2) {
                  continue;
                }
                let fv = {};
                for (let r3 = r1; r3 <= r2; r3++) {
                  for (let c3 = c1; c3 <= c2; c3++) {
                    let cell = d[r3][c3];
                    if (cell != null && cell.mc != null) {
                      let mc_r = cell.mc.r, mc_c = cell.mc.c;
                      if ("rs" in cell.mc) {
                        delete cell.mc;
                        delete cfg["merge"][mc_r + "_" + mc_c];
                        fv[mc_r + "_" + mc_c] = $.extend(true, {}, cell);
                      } else {
                        let cell_clone = JSON.parse(JSON.stringify(fv[mc_r + "_" + mc_c]));
                        delete cell_clone.v;
                        delete cell_clone.m;
                        delete cell_clone.ct;
                        delete cell_clone.f;
                        delete cell_clone.spl;
                        d[r3][c3] = cell_clone;
                      }
                    }
                  }
                }
              }
            } else {
              for (let i2 = 0; i2 < store_default.luckysheet_select_save.length; i2++) {
                let range2 = store_default.luckysheet_select_save[i2];
                let r1 = range2["row"][0], r2 = range2["row"][1];
                let c1 = range2["column"][0], c2 = range2["column"][1];
                if (r1 == r2 && c1 == c2) {
                  continue;
                }
                if (foucsStatus == "mergeAll") {
                  let fv = {}, isfirst = false;
                  for (let r3 = r1; r3 <= r2; r3++) {
                    for (let c3 = c1; c3 <= c2; c3++) {
                      let cell = d[r3][c3];
                      if (cell != null && (isInlineStringCT(cell.ct) || !isRealNull(cell.v) || cell.f != null) && !isfirst) {
                        fv = $.extend(true, {}, cell);
                        isfirst = true;
                      }
                      d[r3][c3] = {"mc": {"r": r1, "c": c1}};
                    }
                  }
                  d[r1][c1] = fv;
                  d[r1][c1].mc = {"r": r1, "c": c1, "rs": r2 - r1 + 1, "cs": c2 - c1 + 1};
                  cfg["merge"][r1 + "_" + c1] = {"r": r1, "c": c1, "rs": r2 - r1 + 1, "cs": c2 - c1 + 1};
                } else if (foucsStatus == "mergeV") {
                  for (let c3 = c1; c3 <= c2; c3++) {
                    let fv = {}, isfirst = false;
                    for (let r3 = r1; r3 <= r2; r3++) {
                      let cell = d[r3][c3];
                      if (cell != null && (!isRealNull(cell.v) || cell.f != null) && !isfirst) {
                        fv = $.extend(true, {}, cell);
                        isfirst = true;
                      }
                      d[r3][c3] = {"mc": {"r": r1, "c": c3}};
                    }
                    d[r1][c3] = fv;
                    d[r1][c3].mc = {"r": r1, "c": c3, "rs": r2 - r1 + 1, "cs": 1};
                    cfg["merge"][r1 + "_" + c3] = {"r": r1, "c": c3, "rs": r2 - r1 + 1, "cs": 1};
                  }
                } else if (foucsStatus == "mergeH") {
                  for (let r3 = r1; r3 <= r2; r3++) {
                    let fv = {}, isfirst = false;
                    for (let c3 = c1; c3 <= c2; c3++) {
                      let cell = d[r3][c3];
                      if (cell != null && (!isRealNull(cell.v) || cell.f != null) && !isfirst) {
                        fv = $.extend(true, {}, cell);
                        isfirst = true;
                      }
                      d[r3][c3] = {"mc": {"r": r3, "c": c1}};
                    }
                    d[r3][c1] = fv;
                    d[r3][c1].mc = {"r": r3, "c": c1, "rs": 1, "cs": c2 - c1 + 1};
                    cfg["merge"][r3 + "_" + c1] = {"r": r3, "c": c1, "rs": 1, "cs": c2 - c1 + 1};
                  }
                }
              }
            }
          }
          if (store_default.clearjfundo) {
            store_default.jfundo.length = 0;
            store_default.jfredo.push({
              "type": "mergeChange",
              "sheetIndex": store_default.currentSheetIndex,
              "data": store_default.flowdata,
              "curData": d,
              "range": $.extend(true, [], store_default.luckysheet_select_save),
              "config": $.extend(true, {}, store_default.config),
              "curConfig": cfg
            });
          }
          store_default.clearjfundo = false;
          jfrefreshgrid(d, store_default.luckysheet_select_save, {"cfg": cfg});
          store_default.clearjfundo = true;
        },
        borderfix: function(d, r2, c2) {
          let cell = d[r2][c2];
          let bg = null;
          if (cell == null) {
            return [-1, 0, 0, -1];
          } else if (d[r2][c2].bg == null || d[r2][c2].bg == "") {
            return [-1, 0, 0, -1];
          } else {
            return [-2, -1, 1, 0];
          }
        },
        changeMenuButtonDom: function(attr, foucsStatus, _locale) {
          let _this = this;
          if (_locale == null) {
            _locale = locale_default();
          }
          const locale_fontarray = _locale.fontarray;
          const locale_fontjson = _locale.fontjson;
          if (attr == "bl") {
            if (foucsStatus != "0") {
              $("#luckysheet-icon-bold").addClass("luckysheet-toolbar-button-hover");
            } else {
              $("#luckysheet-icon-bold").removeClass("luckysheet-toolbar-button-hover");
            }
          } else if (attr == "it") {
            if (foucsStatus != "0") {
              $("#luckysheet-icon-italic").addClass("luckysheet-toolbar-button-hover");
            } else {
              $("#luckysheet-icon-italic").removeClass("luckysheet-toolbar-button-hover");
            }
          } else if (attr == "cl") {
            if (foucsStatus != "0") {
              $("#luckysheet-icon-strikethrough").addClass("luckysheet-toolbar-button-hover");
            } else {
              $("#luckysheet-icon-strikethrough").removeClass("luckysheet-toolbar-button-hover");
            }
          } else if (attr == "un") {
            if (foucsStatus != "0") {
              $("#luckysheet-icon-underline").addClass("luckysheet-toolbar-button-hover");
            } else {
              $("#luckysheet-icon-underline").removeClass("luckysheet-toolbar-button-hover");
            }
          } else if (attr == "ff") {
            let menuButtonId = "luckysheet-icon-font-family-menuButton";
            let $menuButton = $("#" + menuButtonId);
            let itemname = locale_fontarray[0], itemvalue2 = 0;
            if (foucsStatus != null) {
              if (isdatatypemulti(foucsStatus)["num"]) {
                itemvalue2 = parseInt(foucsStatus);
                itemname = locale_fontarray[itemvalue2];
                if (itemname == null) {
                  itemvalue2 = _this.defualtFont[itemvalue2];
                  itemname = itemvalue2;
                  if (itemvalue2 != null) {
                    _this.addFontTolist(itemvalue2);
                  }
                }
              } else {
                foucsStatus = foucsStatus.replace(/"/g, "").replace(/'/g, "");
                itemvalue2 = foucsStatus;
                itemname = foucsStatus;
                _this.addFontTolist(itemvalue2);
              }
            }
            _this.focus($menuButton, itemvalue2);
            $("#luckysheet-icon-font-family").find(".luckysheet-toolbar-menu-button-caption").html(" " + itemname + " ");
          } else if (attr == "fs") {
            let $menuButton = $("#luckysheet-icon-font-size-menuButton");
            let itemvalue2 = foucsStatus, $input = $("#luckysheet-icon-font-size input");
            _this.focus($menuButton, itemvalue2);
            $("#luckysheet-icon-font-size").attr("itemvalue", itemvalue2);
            $input.val(itemvalue2);
          } else if (attr == "ht") {
            let $menuButton = $("#luckysheet-icon-align-menu-menuButton");
            let $t = $("luckysheet-icon-align"), itemvalue2 = "left";
            if (foucsStatus == "0") {
              itemvalue2 = "center";
            } else if (foucsStatus == "2") {
              itemvalue2 = "right";
            }
            _this.focus($menuButton, itemvalue2);
            const iconfontObject = iconfontObjects.align;
            let $icon = $("#luckysheet-icon-align").attr("type", itemvalue2).find(".luckysheet-icon-img-container");
            $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-align-" + itemvalue2 + iconfontObject[itemvalue2]);
            $menuButton.hide();
          } else if (attr == "vt") {
            let $menuButton = $("#luckysheet-icon-valign-menu-menuButton");
            let $t = $("luckysheet-icon-valign"), itemvalue2 = "bottom";
            if (foucsStatus == "1") {
              itemvalue2 = "top";
            } else if (foucsStatus == "0") {
              itemvalue2 = "middle";
            }
            _this.focus($menuButton, itemvalue2);
            const iconfontObject = iconfontObjects.align;
            let $icon = $("#luckysheet-icon-valign").attr("type", itemvalue2).find(".luckysheet-icon-img-container");
            $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-valign-" + itemvalue2 + iconfontObject[itemvalue2]);
            $menuButton.hide();
          } else if (attr == "tb") {
            let $menuButton = $("#luckysheet-icon-textwrap-menu-menuButton");
            let $t = $("luckysheet-icon-textwrap"), itemvalue2 = "clip";
            if (foucsStatus == "1") {
              itemvalue2 = "overflow";
            } else if (foucsStatus == "2") {
              itemvalue2 = "wrap";
            }
            _this.focus($menuButton, itemvalue2);
            const iconfontObject = iconfontObjects.textWrap;
            let $icon = $("#luckysheet-icon-textwrap").attr("type", itemvalue2).find(".luckysheet-icon-img-container");
            $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-textwrap-" + itemvalue2 + iconfontObject[itemvalue2]);
            $menuButton.hide();
          } else if (attr == "tr") {
            let $menuButton = $("#luckysheet-icon-rotation-menu-menuButton");
            let $t = $("luckysheet-icon-rotation"), itemvalue2 = "none";
            if (foucsStatus == "1") {
              itemvalue2 = "angleup";
            } else if (foucsStatus == "2") {
              itemvalue2 = "angledown";
            } else if (foucsStatus == "3") {
              itemvalue2 = "vertical";
            } else if (foucsStatus == "4") {
              itemvalue2 = "rotation-up";
            } else if (foucsStatus == "5") {
              itemvalue2 = "rotation-down";
            }
            _this.focus($menuButton, itemvalue2);
            const iconfontObject = iconfontObjects.rotation;
            let $icon = $("#luckysheet-icon-rotation").attr("type", itemvalue2).find(".luckysheet-icon-img-container");
            $icon.removeAttr("class").addClass("luckysheet-icon-img-container luckysheet-icon-img luckysheet-icon-rotation-" + itemvalue2 + iconfontObject[itemvalue2]);
            $menuButton.hide();
          } else if (attr == "ct") {
            let $menuButton = $("#luckysheet-icon-fmt-other");
            const _locale2 = locale_default();
            const locale_defaultFmt = _locale2.defaultFmt;
            if (!foucsStatus) {
              $menuButton.find(".luckysheet-toolbar-menu-button-caption").html(" " + locale_defaultFmt[0].text + " ");
              return;
            }
            const {fa} = foucsStatus;
            const format = locale_defaultFmt.find((f) => f.value === fa);
            if (format) {
              $menuButton.find(".luckysheet-toolbar-menu-button-caption").html(" " + format.text + " ");
            } else {
              const otherFormat = locale_defaultFmt.find((f) => f.value === "fmtOtherSelf");
              $menuButton.find(".luckysheet-toolbar-menu-button-caption").html(" " + otherFormat.text + " ");
            }
          }
        },
        inputMenuButtonFocus: function(focusTarget) {
          var w = window.getSelection();
          var range2 = w.getRangeAt(0);
          let startContainer = range2.startContainer;
          store_default.inlineStringEditRange = null;
          const _locale = locale_default();
          if (startContainer.parentNode.tagName == "SPAN") {
            let cssText = startContainer.parentNode.style.cssText;
            let stylelist = convertCssToStyleList(cssText);
            for (let key in stylelist) {
              this.changeMenuButtonDom(key, stylelist[key], _locale);
            }
          }
        },
        menuButtonFocus: function(d, r2, c2) {
          let _this = this;
          let foucsList = ["bl", "it", "cl", "ff", "ht", "vt", "fs", "tb", "tr", "ct", "un"];
          const _locale = locale_default();
          for (let i2 = 0; i2 < foucsList.length; i2++) {
            let attr = foucsList[i2];
            let foucsStatus = _this.checkstatus(d, r2, c2, attr);
            this.changeMenuButtonDom(attr, foucsStatus, _locale);
          }
        },
        checkstatus: function(d, r2, c2, a) {
          if (d == null || d[r2] == null) {
            console.warn("It's incorrect data", r2, c2);
            return null;
          }
          let foucsStatus = d[r2][c2];
          return checkstatusByCell(foucsStatus, a);
        },
        setLineDash: function(canvasborder, type, hv, m_st, m_ed, line_st, line_ed) {
          let borderType = {
            "0": "none",
            "1": "Thin",
            "2": "Hair",
            "3": "Dotted",
            "4": "Dashed",
            "5": "DashDot",
            "6": "DashDotDot",
            "7": "Double",
            "8": "Medium",
            "9": "MediumDashed",
            "10": "MediumDashDot",
            "11": "MediumDashDotDot",
            "12": "SlantedDashDot",
            "13": "Thick"
          };
          type = borderType[type.toString()];
          try {
            if (type == "Hair") {
              canvasborder.setLineDash([1, 2]);
            } else if (type.indexOf("DashDotDot") > -1) {
              canvasborder.setLineDash([2, 2, 5, 2, 2]);
            } else if (type.indexOf("DashDot") > -1) {
              canvasborder.setLineDash([2, 5, 2]);
            } else if (type.indexOf("Dotted") > -1) {
              canvasborder.setLineDash([2]);
            } else if (type.indexOf("Dashed") > -1) {
              canvasborder.setLineDash([3]);
            } else {
              canvasborder.setLineDash([0]);
            }
          } catch (e) {
            console.log(e);
          }
          canvasborder.beginPath();
          if (type.indexOf("Medium") > -1) {
            if (hv == "h") {
              canvasborder.moveTo(m_st, m_ed - 0.5);
              canvasborder.lineTo(line_st, line_ed - 0.5);
            } else {
              canvasborder.moveTo(m_st - 0.5, m_ed);
              canvasborder.lineTo(line_st - 0.5, line_ed);
            }
            canvasborder.lineWidth = 2;
          } else if (type == "Thick") {
            canvasborder.moveTo(m_st, m_ed);
            canvasborder.lineTo(line_st, line_ed);
            canvasborder.lineWidth = 3;
          } else {
            canvasborder.moveTo(m_st, m_ed);
            canvasborder.lineTo(line_st, line_ed);
            canvasborder.lineWidth = 1;
          }
        },
        moveMergeData: function(d, offset_r, offset_c) {
          if (isRealNull(d)) {
            return d;
          }
          let deleMC = [], insertMC = [], hasMC = false;
          for (let r2 = 0; r2 < d.length; r2++) {
            for (let c2 = 0; c2 < d[0].length; c2++) {
              let cell = d[r2][c2];
              if (getObjType(cell) == "object" && "mc" in cell) {
                if (cell.mc.rs != null) {
                  deleMC.push({
                    rs: cell.mc.rs,
                    cs: cell.mc.cs,
                    r: cell.mc.r,
                    c: cell.mc.c
                  });
                  insertMC.push({
                    rs: cell.mc.rs,
                    cs: cell.mc.cs,
                    r: cell.mc.r + offset_r,
                    c: cell.mc.c + offset_c
                  });
                  hasMC = true;
                }
                d[r2][c2].mc.r += offset_r;
                d[r2][c2].mc.c += offset_c;
              }
            }
          }
          return {"deleMC": deleMC, "insertMC": insertMC, "hasMC": hasMC};
        },
        getRangeInMerge: function(st_r, rlen, st_c, clen, sheetIndex) {
          let _this = this;
          let mergelist = [];
          let cfg = null;
          if (sheetIndex != null) {
            cfg = $.extend(true, {}, _this.getSheetConfig());
          } else {
            cfg = $.extend(true, {}, store_default.config);
          }
          if (cfg != null && cfg["merge"] != null) {
            for (let key in cfg["merge"]) {
              let mc = cfg["merge"][key];
              if (!(st_r + rlen - 1 < mc.r || st_r > mc.r + mc.rs - 1) && !(st_c + clen - 1 < mc.c || st_c > mc.c + mc.cs - 1)) {
                mergelist.push(mc);
              }
            }
          }
          return mergelist;
        },
        mergeborer: function(d, row_index, col_index) {
          if (d == null || d[row_index] == null) {
            console.warn("Merge info is null", row_index, col_index);
            return null;
          }
          let value = d[row_index][col_index];
          if (getObjType(value) == "object" && "mc" in value) {
            let margeMaindata = value["mc"];
            if (margeMaindata == null) {
              console.warn("Merge info is null", row_index, col_index);
              return null;
            }
            col_index = margeMaindata.c;
            row_index = margeMaindata.r;
            if (d[row_index][col_index] == null) {
              console.warn("Main merge Cell info is null", row_index, col_index);
              return null;
            }
            let col_rs = d[row_index][col_index].mc.cs;
            let row_rs = d[row_index][col_index].mc.rs;
            let margeMain = d[row_index][col_index].mc;
            let start_r, end_r, row, row_pre;
            for (let r2 = row_index; r2 < margeMain.rs + row_index; r2++) {
              if (r2 == 0) {
                start_r = -1;
              } else {
                start_r = store_default.visibledatarow[r2 - 1] - 1;
              }
              end_r = store_default.visibledatarow[r2];
              if (row_pre == null) {
                row_pre = start_r;
                row = end_r;
              } else {
                row += end_r - start_r - 1;
              }
            }
            let start_c, end_c, col, col_pre;
            for (let c2 = col_index; c2 < margeMain.cs + col_index; c2++) {
              if (c2 == 0) {
                start_c = 0;
              } else {
                start_c = store_default.visibledatacolumn[c2 - 1];
              }
              end_c = store_default.visibledatacolumn[c2];
              if (col_pre == null) {
                col_pre = start_c;
                col = end_c;
              } else {
                col += end_c - start_c;
              }
            }
            return {
              "row": [row_pre, row, row_index, row_index + row_rs - 1],
              "column": [col_pre, col, col_index, col_index + col_rs - 1]
            };
          } else {
            return null;
          }
        },
        mergeMoveData: {},
        mergeMoveMain: function(columnseleted, rowseleted, s, top, height, left, width) {
          let _this = this;
          let mergesetting = sheetmanage_default.getSheetMerge();
          if (mergesetting == null) {
            return;
          }
          let mcset = [];
          for (let key in mergesetting) {
            mcset.push(key);
          }
          if (rowseleted[0] > rowseleted[1]) {
            rowseleted[1] = rowseleted[0];
          }
          if (columnseleted[0] > columnseleted[1]) {
            columnseleted[1] = columnseleted[0];
          }
          let offloop = true;
          _this.mergeMoveData = {};
          while (offloop) {
            offloop = false;
            for (let i2 = 0; i2 < mcset.length; i2++) {
              let key = mcset[i2];
              let mc = mergesetting[key];
              if (key in _this.mergeMoveData) {
                continue;
              }
              let changeparam = _this.mergeMove(mc, columnseleted, rowseleted, s, top, height, left, width);
              if (changeparam != null) {
                _this.mergeMoveData[key] = mc;
                columnseleted = changeparam[0];
                rowseleted = changeparam[1];
                top = changeparam[2];
                height = changeparam[3];
                left = changeparam[4];
                width = changeparam[5];
                offloop = true;
              } else {
                delete _this.mergeMoveData[key];
              }
            }
          }
          return [columnseleted, rowseleted, top, height, left, width];
        },
        mergeMove: function(mc, columnseleted, rowseleted, s, top, height, left, width) {
          let _this = this;
          let row_st = mc.r, row_ed = mc.r + mc.rs - 1;
          let col_st = mc.c, col_ed = mc.c + mc.cs - 1;
          let ismatch = false;
          if (columnseleted[1] < columnseleted[0]) {
            columnseleted[0] = columnseleted[1];
          }
          if (rowseleted[1] < rowseleted[0]) {
            rowseleted[0] = rowseleted[1];
          }
          if (columnseleted[0] <= col_st && columnseleted[1] >= col_ed && rowseleted[0] <= row_st && rowseleted[1] >= row_ed || !(columnseleted[1] < col_st || columnseleted[0] > col_ed) && !(rowseleted[1] < row_st || rowseleted[0] > row_ed)) {
            let margeset = _this.mergeborer(store_default.flowdata, mc.r, mc.c);
            if (!!margeset) {
              let row = margeset.row[1], row_pre = margeset.row[0], row_index = margeset.row[2], col = margeset.column[1], col_pre = margeset.column[0], col_index = margeset.column[2];
              if (!(columnseleted[1] < col_st || columnseleted[0] > col_ed)) {
                if (rowseleted[0] <= row_ed && rowseleted[0] >= row_st) {
                  height += top - row_pre;
                  top = row_pre;
                  rowseleted[0] = row_st;
                }
                if (rowseleted[1] >= row_st && rowseleted[1] <= row_ed) {
                  if (s.row_focus >= row_st && s.row_focus <= row_ed) {
                    height = row - top;
                  } else {
                    height = row - top;
                  }
                  rowseleted[1] = row_ed;
                }
              }
              if (!(rowseleted[1] < row_st || rowseleted[0] > row_ed)) {
                if (columnseleted[0] <= col_ed && columnseleted[0] >= col_st) {
                  width += left - col_pre;
                  left = col_pre;
                  columnseleted[0] = col_st;
                }
                if (columnseleted[1] >= col_st && columnseleted[1] <= col_ed) {
                  if (s.column_focus >= col_st && s.column_focus <= col_ed) {
                    width = col - left;
                  } else {
                    width = col - left;
                  }
                  columnseleted[1] = col_ed;
                }
              }
              ismatch = true;
            }
          }
          if (ismatch) {
            return [columnseleted, rowseleted, top, height, left, width];
          } else {
            return null;
          }
        },
        getCellRealSize: function(d, cell_r, cell_c) {
          let _this = this;
          let width = store_default.defaultcollen;
          let height = store_default.defaultrowlen;
          let celldata = d[cell_r][cell_c];
          if (!!celldata && celldata["mc"] != null) {
            let mc = celldata["mc"];
            let margeset = _this.mergeborer(d, mc.r, mc.c);
            if (!!margeset) {
              let row = margeset.row[1];
              let row_pre = margeset.row[0];
              let row_index = margeset.row[2];
              let row_index_ed = margeset.row[3];
              let col = margeset.column[1];
              let col_pre = margeset.column[0];
              let col_index = margeset.column[2];
              let col_index_ed = margeset.column[3];
              width = col - col_pre - 1;
              height = row - row_pre - 1;
            }
          } else {
            let config = getluckysheetfile()[getSheetIndex(store_default.currentSheetIndex)]["config"];
            if (config["columnlen"] != null && config["columnlen"][cell_c] != null) {
              width = config["columnlen"][cell_c];
            }
            if (config["rowlen"] != null && config["rowlen"][cell_r] != null) {
              height = config["rowlen"][cell_r];
            }
          }
          return [width, height];
        },
        getTextHeightCache: {},
        getTextSize: function(text, font) {
          let fontarray = locale_default().fontarray;
          let f = font || "10pt " + fontarray[0];
          let _this = this;
          if (f in _this.getTextHeightCache) {
            return _this.getTextHeightCache[f];
          }
          if ($("#luckysheetTextSizeTest").length == 0) {
            $('<span id="luckysheetTextSizeTest" style="float:left;white-space:nowrap;visibility:hidden;margin:0;padding:0;">' + text + "</span>").appendTo($("body"));
          }
          let o = $("#luckysheetTextSizeTest").text(text).css({"font": f}), w = o.innerWidth(), h = o.innerHeight();
          _this.getTextHeightCache[f] = [w, h];
          return [w, h];
        },
        activeFormulaInput: function(row_index, col_index, rowh, columnh, formula, isnull) {
          let _this = this;
          if (isnull == null) {
            isnull = false;
          }
          luckysheetupdateCell(row_index, col_index, store_default.flowdata, true);
          if (isnull) {
            let formulaTxt2 = '<span dir="auto" class="luckysheet-formula-text-color">=</span><span dir="auto" class="luckysheet-formula-text-color">' + formula.toUpperCase() + '</span><span dir="auto" class="luckysheet-formula-text-color">(</span><span dir="auto" class="luckysheet-formula-text-color">)</span>';
            $("#luckysheet-rich-text-editor").html(formulaTxt2);
            let currSelection = window.getSelection();
            let $span = $("#luckysheet-rich-text-editor").find("span");
            formula_default.setCaretPosition($span.get($span.length - 2), 0, 1);
            return;
          }
          let row_pre = rowLocationByIndex(rowh[0])[0], row = rowLocationByIndex(rowh[1])[1], col_pre = colLocationByIndex(columnh[0])[0], col = colLocationByIndex(columnh[1])[1];
          let formulaTxt = '<span dir="auto" class="luckysheet-formula-text-color">=</span><span dir="auto" class="luckysheet-formula-text-color">' + formula.toUpperCase() + '</span><span dir="auto" class="luckysheet-formula-text-color">(</span><span class="luckysheet-formula-functionrange-cell" rangeindex="0" dir="auto" style="color:' + luckyColor[0] + ';">' + getRangetxt(store_default.currentSheetIndex, {"row": rowh, "column": columnh}, store_default.currentSheetIndex) + '</span><span dir="auto" class="luckysheet-formula-text-color">)</span>';
          $("#luckysheet-rich-text-editor").html(formulaTxt);
          formula_default.israngeseleciton();
          formula_default.rangestart = true;
          formula_default.rangedrag_column_start = false;
          formula_default.rangedrag_row_start = false;
          formula_default.rangechangeindex = 0;
          formula_default.rangeSetValue({"row": rowh, "column": columnh});
          formula_default.func_selectedrange = {
            "left": col_pre,
            "width": col - col_pre - 1,
            "top": row_pre,
            "height": row - row_pre - 1,
            "left_move": col_pre,
            "width_move": col - col_pre - 1,
            "top_move": row_pre,
            "height_move": row - row_pre - 1,
            "row": [row_index, row_index],
            "column": [col_index, col_index]
          };
          $("#luckysheet-formula-functionrange-select").css({"left": col_pre, "width": col - col_pre - 1, "top": row_pre, "height": row - row_pre - 1}).show();
          $("#luckysheet-formula-help-c").hide();
        },
        backFormulaInput: function(d, r2, c2, rowh, columnh, formula) {
          let _this = this;
          let f = "=" + formula.toUpperCase() + "(" + getRangetxt(store_default.currentSheetIndex, {"row": rowh, "column": columnh}, store_default.currentSheetIndex) + ")";
          let v = formula_default.execfunction(f, r2, c2);
          let value = {"v": v[1], "f": v[2]};
          setcellvalue(r2, c2, d, value);
          formula_default.execFunctionExist.push({"r": r2, "c": c2, "i": store_default.currentSheetIndex});
          server_default.historyParam(d, store_default.currentSheetIndex, {"row": [r2, r2], "column": [c2, c2]});
        },
        checkNoNullValue: function(cell) {
          let v = cell;
          if (getObjType(v) == "object") {
            v = v.v;
          }
          if (!isRealNull(v) && isdatatypemulti(v).num && (cell.ct == null || cell.ct.t == null || cell.ct.t == "n" || cell.ct.t == "g")) {
            return true;
          } else {
            return false;
          }
        },
        checkNoNullValueAll: function(cell) {
          let v = cell;
          if (getObjType(v) == "object") {
            v = v.v;
          }
          if (!isRealNull(v)) {
            return true;
          } else {
            return false;
          }
        },
        getNoNullValue: function(d, st_x, ed, type) {
          let _this = this;
          let hasValueSum = 0, hasValueStart = null;
          let nullNum = 0, nullTime = 0;
          for (let r2 = ed - 1; r2 >= 0; r2--) {
            let cell;
            if (type == "c") {
              cell = d[st_x][r2];
            } else {
              cell = d[r2][st_x];
            }
            if (_this.checkNoNullValue(cell)) {
              hasValueSum++;
              hasValueStart = r2;
            } else if (cell == null || cell.v == null || cell.v == "") {
              nullNum++;
              if (nullNum >= 40) {
                if (nullTime <= 0) {
                  nullTime = 1;
                } else {
                  break;
                }
              }
            } else {
              break;
            }
          }
          return hasValueStart;
        },
        singleFormulaInput: function(d, _index, fix, st_m, ed_m, formula, type, noNum, noNull) {
          let _this = this;
          if (type == null) {
            type = "r";
          }
          if (noNum == null) {
            noNum = true;
          }
          if (noNull == null) {
            noNull = true;
          }
          let isNull = true, isNum = false;
          for (let c2 = st_m; c2 <= ed_m; c2++) {
            let cell = null;
            if (type == "c") {
              cell = d[c2][fix];
            } else {
              cell = d[fix][c2];
            }
            if (_this.checkNoNullValue(cell)) {
              isNull = false;
              isNum = true;
            } else if (_this.checkNoNullValueAll(cell)) {
              isNull = false;
            }
          }
          if (isNull && noNull) {
            let st_r_r = _this.getNoNullValue(d, _index, fix, type);
            if (st_r_r == null) {
              if (type == "c") {
                _this.activeFormulaInput(_index, fix, null, null, formula, true);
              } else {
                _this.activeFormulaInput(fix, _index, null, null, formula, true);
              }
            } else {
              if (_index == st_m) {
                for (let c2 = st_m; c2 <= ed_m; c2++) {
                  let st_r_r2 = _this.getNoNullValue(d, c2, fix, type);
                  if (st_r_r2 == null) {
                    break;
                  }
                  if (type == "c") {
                    _this.backFormulaInput(d, c2, fix, [c2, c2], [st_r_r2, fix - 1], formula);
                  } else {
                    _this.backFormulaInput(d, fix, c2, [st_r_r2, fix - 1], [c2, c2], formula);
                  }
                }
              } else {
                for (let c2 = ed_m; c2 >= st_m; c2--) {
                  let st_r_r2 = _this.getNoNullValue(d, c2, fix, type);
                  if (st_r_r2 == null) {
                    break;
                  }
                  if (type == "c") {
                    _this.backFormulaInput(d, c2, fix, [c2, c2], [st_r_r2, fix - 1], formula);
                  } else {
                    _this.backFormulaInput(d, fix, c2, [st_r_r2, fix - 1], [c2, c2], formula);
                  }
                }
              }
            }
          } else if (isNum && noNum) {
            let cell = null;
            if (type == "c") {
              cell = d[ed_m + 1][fix];
            } else {
              cell = d[fix][ed_m + 1];
            }
            if (cell != null && cell.v != null && cell.v.toString().length > 0) {
              let c2 = ed_m + 1;
              if (type == "c") {
                cell = d[ed_m + 1][fix];
              } else {
                cell = d[fix][ed_m + 1];
              }
              while (cell != null && cell.v != null && cell.v.toString().length > 0) {
                c2++;
                let len = null;
                if (type == "c") {
                  len = d.length;
                } else {
                  len = d[0].length;
                }
                if (c2 >= len) {
                  return;
                }
                if (type == "c") {
                  cell = d[c2][fix];
                } else {
                  cell = d[fix][c2];
                }
              }
              if (type == "c") {
                _this.backFormulaInput(d, c2, fix, [st_m, ed_m], [fix, fix], formula);
              } else {
                _this.backFormulaInput(d, fix, c2, [fix, fix], [st_m, ed_m], formula);
              }
            } else {
              if (type == "c") {
                _this.backFormulaInput(d, ed_m + 1, fix, [st_m, ed_m], [fix, fix], formula);
              } else {
                _this.backFormulaInput(d, fix, ed_m + 1, [fix, fix], [st_m, ed_m], formula);
              }
            }
          } else {
            return true;
          }
        },
        autoSelectionFormula: function(formula) {
          let _this = this;
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          let nullfindnum = 40;
          let isfalse = true;
          formula_default.execFunctionExist = [];
          let execFormulaInput_c = function(d2, st_r, ed_r, st_c, ed_c, formula2) {
            let st_c_c = _this.getNoNullValue(d2, st_r, ed_c, "c");
            if (st_c_c == null) {
              _this.activeFormulaInput(st_r, st_c, null, null, formula2, true);
            } else {
              _this.activeFormulaInput(st_r, st_c, [st_r, ed_r], [st_c_c, ed_c - 1], formula2);
            }
          };
          let execFormulaInput = function(d2, st_r, ed_r, st_c, ed_c, formula2) {
            let st_r_c = _this.getNoNullValue(d2, st_c, ed_r, "r");
            if (st_r_c == null) {
              execFormulaInput_c(d2, st_r, ed_r, st_c, ed_c, formula2);
            } else {
              _this.activeFormulaInput(st_r, st_c, [st_r_c, ed_r - 1], [st_c, ed_c], formula2);
            }
          };
          for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
            let st_r = store_default.luckysheet_select_save[s].row[0], ed_r = store_default.luckysheet_select_save[s].row[1];
            let st_c = store_default.luckysheet_select_save[s].column[0], ed_c = store_default.luckysheet_select_save[s].column[1];
            let row_index = store_default.luckysheet_select_save[s].row_focus, col_index = store_default.luckysheet_select_save[s].column_focus;
            if (st_r == ed_r && st_c == ed_c) {
              if (ed_r - 1 < 0 && ed_c - 1 < 0) {
                _this.activeFormulaInput(st_r, st_c, null, null, formula, true);
                return;
              }
              if (ed_r - 1 >= 0 && _this.checkNoNullValue(d[ed_r - 1][st_c])) {
                execFormulaInput(d, st_r, ed_r, st_c, ed_c, formula);
              } else if (ed_c - 1 >= 0 && _this.checkNoNullValue(d[st_r][ed_c - 1])) {
                execFormulaInput_c(d, st_r, ed_r, st_c, ed_c, formula);
              } else {
                execFormulaInput(d, st_r, ed_r, st_c, ed_c, formula);
              }
            } else if (st_r == ed_r) {
              isfalse = _this.singleFormulaInput(d, col_index, st_r, st_c, ed_c, formula, "r");
            } else if (st_c == ed_c) {
              isfalse = _this.singleFormulaInput(d, row_index, st_c, st_r, ed_r, formula, "c");
            } else {
              let r_false = true;
              for (let r2 = st_r; r2 <= ed_r; r2++) {
                r_false = _this.singleFormulaInput(d, col_index, r2, st_c, ed_c, formula, "r", true, false) && r_false;
              }
              let c_false = true;
              for (let c2 = st_c; c2 <= ed_c; c2++) {
                c_false = _this.singleFormulaInput(d, row_index, c2, st_r, ed_r, formula, "c", true, false) && c_false;
              }
              isfalse = !!r_false && !!c_false;
            }
            isfalse = isfalse && isfalse;
          }
          if (!isfalse) {
            formula_default.execFunctionExist.reverse();
            formula_default.execFunctionGroup(null, null, null, null, d);
            jfrefreshgrid(d, store_default.luckysheet_select_save);
            clearTimeout(store_default.jfcountfuncTimeout);
            store_default.jfcountfuncTimeout = setTimeout(function() {
              countfunc();
            }, 500);
          }
        },
        getStyleByCell: function(d, r2, c2) {
          let _this = this;
          let style = "";
          let af_compute = alternateformat_default.getComputeMap();
          let checksAF = alternateformat_default.checksAF(r2, c2, af_compute);
          let cf_compute = conditionformat_default.getComputeMap();
          let checksCF = conditionformat_default.checksCF(r2, c2, cf_compute);
          const locale_fontarray = locale_default().fontarray;
          let cell = d[r2][c2];
          let ct = cell.ct, isInline = false;
          if (isInlineStringCell(cell)) {
            isInline = true;
          }
          for (let key in cell) {
            let value = _this.checkstatus(d, r2, c2, key);
            if (checksAF != null || checksCF != null && checksCF["cellColor"] != null) {
              if (checksCF != null && checksCF["cellColor"] != null) {
                style += "background: " + checksCF["cellColor"] + ";";
              } else if (checksAF != null) {
                style += "background: " + checksAF[1] + ";";
              }
            }
            if (getObjType(value) == "object") {
              continue;
            }
            if (key == "bg" || checksAF != null || checksCF != null && checksCF["cellColor"] != null) {
              if (checksCF != null && checksCF["cellColor"] != null) {
                style += "background: " + checksCF["cellColor"] + ";";
              } else if (checksAF != null) {
                style += "background: " + checksAF[1] + ";";
              } else {
                style += "background: " + value + ";";
              }
            }
            if (key == "ht" && value != "1") {
              if (value == "0") {
                style += "text-align: center;";
              } else if (value == "2") {
                style += "text-align: right;";
              }
            }
            if (key == "vt") {
              if (value == "0") {
                style += "vertical-align: middle;";
              } else if (value == "1") {
                style += "vertical-align: top;";
              } else if (value == "2") {
                style += "vertical-align: bottom;";
              }
            }
            if (key == "un" && value) {
              style += "text-decoration:underline;";
            }
          }
          if (!isInline) {
            style += getFontStyleByCell(cell, checksAF, checksCF);
          }
          return style;
        },
        fontSelectList: [],
        defualtFont: ["Times New Roman", "Arial", "Tahoma", "Verdana", "\u5FAE\u8F6F\u96C5\u9ED1", "\u5B8B\u4F53", "\u9ED1\u4F53", "\u6977\u4F53", "\u4EFF\u5B8B", "\u65B0\u5B8B\u4F53", "\u534E\u6587\u65B0\u9B4F", "\u534E\u6587\u884C\u6977", "\u534E\u6587\u96B6\u4E66"],
        addFontTolist: function(fontName) {
          fontName = fontName.replace(/"/g, "").replace(/'/g, "");
          let isNone = true;
          for (let a = 0; a < this.fontSelectList.length; a++) {
            let fItem = this.fontSelectList[a];
            if (fItem.value == fontName) {
              isNone = false;
              break;
            }
          }
          let _locale = locale_default();
          const locale_fontjson = _locale.fontjson;
          if (fontName in locale_fontjson) {
            isNone = false;
          }
          if (isNone) {
            let ret = {};
            ret.value = fontName;
            ret.index = this.fontSelectList.length;
            ret.type = "userDefined";
            ret.text = "<span class='luckysheet-mousedown-cancel' style='font-size:11px;font-family:" + fontName + "'>" + fontName + "</span>";
            ret.example = "";
            this.fontSelectList.push(ret);
            let $menuButton = $("#luckysheet-icon-font-family-menuButton");
            let itemset = this.createButtonMenu(this.fontSelectList);
            $menuButton.html(itemset);
          }
        },
        fontInitial: function(fontList) {
          let itemdata = [];
          const locale_fontarray = locale_default().fontarray;
          for (let a = 0; a < locale_fontarray.length; a++) {
            let fItem = locale_fontarray[a];
            let ret = {};
            ret.value = fItem;
            ret.index = a;
            ret.type = "inner";
            ret.text = "<span class='luckysheet-mousedown-cancel' style='font-size:11px;font-family:" + fItem + "'>" + fItem + "</span>";
            ret.example = "";
            itemdata.push(ret);
          }
          if (fontList != null) {
            for (let a = 0; a < fontList.length; a++) {
              let fItem = fontList[a];
              let ret = {};
              ret.value = fItem.fontName;
              ret.index = a;
              ret.type = "userDefined";
              ret.text = "<span class='luckysheet-mousedown-cancel' style='font-size:11px;font-family:" + fItem.fontName + "'>" + fItem.fontName + "</span>";
              ret.example = "";
              itemdata.push(ret);
              if (document.fonts && !document.fonts.check("12px " + fItem.fontName)) {
                if (fItem.url) {
                  const fontface = new FontFace(fItem.fontName, `url(${fItem.url})`);
                  document.fonts.add(fontface);
                  fontface.load();
                }
              }
            }
            document.fonts && document.fonts.ready.then(function() {
            });
          }
          this.fontSelectList = itemdata;
        }
      };
      menuButton_default = menuButton;
    }
  });

  // src/utils/util.js
  function common_extend(jsonbject1, jsonbject2) {
    let resultJsonObject = {};
    for (let attr in jsonbject1) {
      resultJsonObject[attr] = jsonbject1[attr];
    }
    for (let attr in jsonbject2) {
      if (jsonbject2[attr] == void 0) {
        continue;
      }
      resultJsonObject[attr] = jsonbject2[attr];
    }
    return resultJsonObject;
  }
  function replaceHtml(temp, dataarry) {
    return temp.replace(/\$\{([\w]+)\}/g, function(s1, s2) {
      let s = dataarry[s2];
      if (typeof s != "undefined") {
        return s;
      } else {
        return s1;
      }
    });
  }
  function getObjType(obj) {
    let toString2 = Object.prototype.toString;
    let map = {
      "[object Boolean]": "boolean",
      "[object Number]": "number",
      "[object String]": "string",
      "[object Function]": "function",
      "[object Array]": "array",
      "[object Date]": "date",
      "[object RegExp]": "regExp",
      "[object Undefined]": "undefined",
      "[object Null]": "null",
      "[object Object]": "object"
    };
    return map[toString2.call(obj)];
  }
  function getNowDateTime(format) {
    let now = new Date();
    let year = now.getFullYear();
    let month = now.getMonth();
    let date = now.getDate();
    let day = now.getDay();
    let hour = now.getHours();
    let minu = now.getMinutes();
    let sec = now.getSeconds();
    month = month + 1;
    if (month < 10)
      month = "0" + month;
    if (date < 10)
      date = "0" + date;
    if (hour < 10)
      hour = "0" + hour;
    if (minu < 10)
      minu = "0" + minu;
    if (sec < 10)
      sec = "0" + sec;
    let time = "";
    if (format == 1) {
      time = year + "-" + month + "-" + date;
    } else if (format == 2) {
      time = year + "-" + month + "-" + date + " " + hour + ":" + minu + ":" + sec;
    }
    return time;
  }
  function rgbTohex(color) {
    let rgb;
    if (color.indexOf("rgba") > -1) {
      rgb = color.replace("rgba(", "").replace(")", "").split(",");
    } else {
      rgb = color.replace("rgb(", "").replace(")", "").split(",");
    }
    let r2 = parseInt(rgb[0]);
    let g = parseInt(rgb[1]);
    let b = parseInt(rgb[2]);
    let hex = "#" + ((1 << 24) + (r2 << 16) + (g << 8) + b).toString(16).slice(1);
    return hex;
  }
  function ABCatNum(a) {
    if (a == null || a.length == 0) {
      return NaN;
    }
    var str = a.toLowerCase().split("");
    var num = 0;
    var al = str.length;
    var getCharNumber = function(charx) {
      return charx.charCodeAt() - 96;
    };
    var numout = 0;
    var charnum = 0;
    for (var i2 = 0; i2 < al; i2++) {
      charnum = getCharNumber(str[i2]);
      numout += charnum * Math.pow(26, al - i2 - 1);
    }
    ;
    if (numout == 0) {
      return NaN;
    }
    return numout - 1;
  }
  function chatatABC(n) {
    var orda = "a".charCodeAt(0);
    var ordz = "z".charCodeAt(0);
    var len = ordz - orda + 1;
    var s = "";
    while (n >= 0) {
      s = String.fromCharCode(n % len + orda) + s;
      n = Math.floor(n / len) - 1;
    }
    return s.toUpperCase();
  }
  function getByteLen(val, subLen) {
    if (subLen === 0) {
      return "";
    }
    if (val == null) {
      return 0;
    }
    let len = 0;
    for (let i2 = 0; i2 < val.length; i2++) {
      let a = val.charAt(i2);
      if (a.match(/[^\x00-\xff]/ig) != null) {
        len += 2;
      } else {
        len += 1;
      }
      if (isRealNum(subLen) && len === ~~subLen) {
        return val.substring(0, i2);
      }
    }
    return len;
  }
  function ArrayUnique(dataArr) {
    let result = [];
    let obj = {};
    if (dataArr.length > 0) {
      for (let i2 = 0; i2 < dataArr.length; i2++) {
        let item2 = dataArr[i2];
        if (!obj[item2]) {
          result.push(item2);
          obj[item2] = 1;
        }
      }
    }
    return result;
  }
  function luckysheetfontformat(format) {
    let fontarray = locale_default().fontarray;
    if (getObjType(format) == "object") {
      let font = "";
      if (format.it == "0" || format.it == null) {
        font += "normal ";
      } else {
        font += "italic ";
      }
      font += "normal ";
      if (format.bl == "0" || format.bl == null) {
        font += "normal ";
      } else {
        font += "bold ";
      }
      if (!format.fs) {
        font += store_default.defaultFontSize + "pt ";
      } else {
        font += Math.ceil(format.fs) + "pt ";
      }
      if (!format.ff) {
        font += fontarray[0] + ', "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif';
      } else {
        let fontfamily = null;
        let fontjson = locale_default().fontjson;
        if (isdatatypemulti(format.ff)["num"]) {
          fontfamily = fontarray[parseInt(format.ff)];
        } else {
          fontfamily = format.ff;
          fontfamily = fontfamily.replace(/"/g, "").replace(/'/g, "");
          if (fontfamily.indexOf(" ") > -1) {
            fontfamily = '"' + fontfamily + '"';
          }
          if (fontfamily != null && document.fonts && !document.fonts.check("12px " + fontfamily)) {
            menuButton_default.addFontTolist(fontfamily);
          }
        }
        if (fontfamily == null) {
          fontfamily = fontarray[0];
        }
        font += fontfamily + ', "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif';
      }
      return font;
    } else {
      return luckysheetdefaultFont();
    }
  }
  function showrightclickmenu($menu, x, y) {
    let winH = $(window).height(), winW = $(window).width();
    let menuW = $menu.width(), menuH = $menu.height();
    let top = y, left = x;
    if (x + menuW > winW) {
      left = x - menuW;
    }
    if (y + menuH > winH) {
      top = y - menuH;
    }
    if (top < 0) {
      top = 0;
    }
    $menu.css({"top": top, "left": left}).show();
  }
  function luckysheetactiveCell() {
    if (!!store_default.fullscreenmode) {
      setTimeout(function() {
        const input = document.getElementById("luckysheet-rich-text-editor");
        input.focus({preventScroll: true});
        $("#luckysheet-rich-text-editor").select();
      }, 50);
    }
  }
  function luckysheetContainerFocus() {
    document.getElementById(store_default.container).focus({preventScroll: true});
  }
  function numFormat2(num, type) {
    if (num == null || isNaN(parseFloat(num)) || hasChinaword(num) || num == -Infinity || num == Infinity) {
      return null;
    }
    let floatlen = 6, ismustfloat = false;
    if (type == null || type == "auto") {
      if (num < 1) {
        floatlen = 6;
      } else {
        floatlen = 1;
      }
    } else {
      if (isdatatype(type) == "num") {
        floatlen = parseInt(type);
        ismustfloat = true;
      } else {
        floatlen = 6;
      }
    }
    let format = "", value = null;
    for (let i2 = 0; i2 < floatlen; i2++) {
      format += "0";
    }
    if (!ismustfloat) {
      format = "[" + format + "]";
    }
    if (num >= 1e21) {
      value = parseFloat((0, import_numeral5.default)(num).value());
    } else {
      value = parseFloat((0, import_numeral5.default)(num).format("0." + format));
    }
    return value;
  }
  function numfloatlen(n) {
    if (n != null && !isNaN(parseFloat(n)) && !hasChinaword(n)) {
      let value = (0, import_numeral5.default)(n).value();
      let lens = value.toString().split(".");
      if (lens.length == 1) {
        lens = 0;
      } else {
        lens = lens[1].length;
      }
      return lens;
    } else {
      return null;
    }
  }
  function mouseclickposition($menu, x, y, p) {
    let winH = $(window).height(), winW = $(window).width();
    let menuW = $menu.width(), menuH = $menu.height();
    let top = y, left = x;
    if (p == null) {
      p = "lefttop";
    }
    if (p == "lefttop") {
      $menu.css({"top": y, "left": x}).show();
    } else if (p == "righttop") {
      $menu.css({"top": y, "left": x - menuW}).show();
    } else if (p == "leftbottom") {
      $menu.css({"bottom": winH - y - 12, "left": x}).show();
    } else if (p == "rightbottom") {
      $menu.css({"bottom": winH - y - 12, "left": x - menuW}).show();
    }
  }
  function $$(selector, context) {
    context = context || document;
    var elements = context.querySelectorAll(selector);
    return elements.length == 1 ? Array.prototype.slice.call(elements)[0] : Array.prototype.slice.call(elements);
  }
  function seriesLoadScripts(scripts, options, callback) {
    if (typeof scripts !== "object") {
      var scripts = [scripts];
    }
    var HEAD = document.getElementsByTagName("head")[0] || document.documentElement;
    var s = [];
    var last = scripts.length - 1;
    var recursiveLoad = function(i2) {
      s[i2] = document.createElement("script");
      s[i2].setAttribute("type", "text/javascript");
      s[i2].onload = s[i2].onreadystatechange = function() {
        if (true) {
          this.onload = this.onreadystatechange = null;
          this.parentNode.removeChild(this);
          if (i2 !== last) {
            recursiveLoad(i2 + 1);
          } else if (typeof callback === "function") {
            callback();
          }
          ;
        }
      };
      s[i2].setAttribute("src", scripts[i2]);
      if (typeof options === "object") {
        for (var attr in options) {
          s[i2].setAttribute(attr, options[attr]);
        }
      }
      HEAD.appendChild(s[i2]);
    };
    recursiveLoad(0);
  }
  function loadLink(url) {
    var doc = document;
    var link = doc.createElement("link");
    link.setAttribute("rel", "stylesheet");
    link.setAttribute("type", "text/css");
    link.setAttribute("href", url);
    var heads = doc.getElementsByTagName("head");
    if (heads.length) {
      heads[0].appendChild(link);
    } else {
      doc.documentElement.appendChild(link);
    }
  }
  function loadLinks(urls) {
    if (typeof urls !== "object") {
      urls = [urls];
    }
    if (urls.length) {
      urls.forEach((url) => {
        loadLink(url);
      });
    }
  }
  function transformRangeToAbsolute(txt1) {
    if (txt1 == null || txt1.length == 0) {
      return null;
    }
    let txtArray = txt1.split(",");
    let ret = "";
    for (let i2 = 0; i2 < txtArray.length; i2++) {
      let txt = txtArray[i2];
      let txtSplit = txt.split("!"), sheetName = "", rangeTxt = "";
      if (txtSplit.length > 1) {
        sheetName = txtSplit[0];
        rangeTxt = txtSplit[1];
      } else {
        rangeTxt = txtSplit[0];
      }
      let rangeTxtArray = rangeTxt.split(":");
      let rangeRet = "";
      for (let a = 0; a < rangeTxtArray.length; a++) {
        let t = rangeTxtArray[a];
        let row = t.replace(/[^0-9]/g, "");
        let col = t.replace(/[^A-Za-z]/g, "");
        let rangeTT = "";
        if (col != "") {
          rangeTT += "$" + col;
        }
        if (row != "") {
          rangeTT += "$" + row;
        }
        rangeRet += rangeTT + ":";
      }
      rangeRet = rangeRet.substr(0, rangeRet.length - 1);
      ret += sheetName + rangeRet + ",";
    }
    return ret.substr(0, ret.length - 1);
  }
  function openSelfModel(id, isshowMask = true) {
    let $t = $("#" + id).find(".luckysheet-modal-dialog-content").css("min-width", 300).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
    let winw = $(window).width(), winh = $(window).height();
    let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
    $t.css({
      "left": (winw + scrollLeft - myw) / 2,
      "top": (winh + scrollTop - myh) / 3
    }).show();
    if (isshowMask) {
      $("#luckysheet-modal-dialog-mask").show();
    }
  }
  function defineObjectReactive(obj, key, value, callback) {
    obj[key] = new Proxy(value, {
      set(target, property, val, receiver) {
        setTimeout(() => {
          callback(target, property, val, receiver);
        }, 0);
        return Reflect.set(target, property, val, receiver);
      }
    });
  }
  function defineBasicReactive(obj, key, value, callback) {
    Object.defineProperty(obj, key, {
      enumerable: true,
      configurable: false,
      get() {
        return value;
      },
      set(newValue) {
        if (value === newValue)
          return;
        console.log(`\u53D1\u73B0 ${key} \u5C5E\u6027 ${value} -> ${newValue}`);
        setTimeout(() => {
          callback(value, newValue);
        }, 0);
        value = newValue;
      }
    });
  }
  function arrayRemoveItem(array, item2) {
    array.some((curr, index2, arr) => {
      if (curr === item2) {
        arr.splice(index2, 1);
        return curr === item2;
      }
    });
  }
  function camel2split(camel) {
    return camel.replace(/([A-Z])/g, function(all2, group) {
      return "-" + group.toLowerCase();
    });
  }
  var import_numeral5, createProxy;
  var init_util = __esm({
    "src/utils/util.js"() {
      init_constant();
      init_menuButton();
      init_datecontroll();
      init_validate();
      init_store();
      init_locale();
      import_numeral5 = __toModule(require_numeral());
      createProxy = (data, k, callback) => {
        if (!data.hasOwnProperty(k)) {
          console.info("No %s in data", k);
          return;
        }
        ;
        if (getObjType(data) === "object") {
          if (getObjType(data[k]) === "object" || getObjType(data[k]) === "array") {
            defineObjectReactive(data, k, data[k], callback);
          } else {
            defineBasicReactive(data, k, data[k], callback);
          }
        }
      };
    }
  });

  // src/controllers/mobile.js
  function mobileinit() {
    store_default.cellMainSrollBarSize = 0;
    let luckysheet_touchmove_status = false, luckysheet_touchmove_startPos = {}, luckysheet_touchhandle_status = false, _scrollTimer = null;
    $(document).on("touchstart", "#luckysheet-grid-window-1", function(event2) {
      clearInterval(_scrollTimer);
      luckysheet_touchmove_status = true;
      let touch = event2.originalEvent.targetTouches[0];
      luckysheet_touchmove_startPos = {
        x: touch.pageX,
        y: touch.pageY,
        vy: 0,
        moveType: "y"
      };
    });
    $(document).on("touchmove", "#luckysheet-grid-window-1", function(event2) {
      if (event2.originalEvent.targetTouches.length > 1 || event2.scale && event2.scale !== 1) {
        return;
      }
      let touch = event2.originalEvent.targetTouches[0];
      if (luckysheet_touchmove_status) {
        let slideX = touch.pageX - luckysheet_touchmove_startPos.x;
        let slideY = touch.pageY - luckysheet_touchmove_startPos.y;
        luckysheet_touchmove_startPos.x = touch.pageX;
        luckysheet_touchmove_startPos.y = touch.pageY;
        let scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft();
        let scrollTop = $("#luckysheet-scrollbar-y").scrollTop();
        scrollLeft -= slideX;
        scrollTop -= slideY;
        if (scrollLeft < 0) {
          scrollLeft = 0;
        }
        if (scrollTop < 0) {
          scrollTop = 0;
        }
        $("#luckysheet-scrollbar-y").scrollTop(scrollTop);
        luckysheet_touchmove_startPos.vy_y = slideY;
        luckysheet_touchmove_startPos.scrollTop = scrollTop;
        $("#luckysheet-scrollbar-x").scrollLeft(scrollLeft);
        luckysheet_touchmove_startPos.vy_x = slideX;
        luckysheet_touchmove_startPos.scrollLeft = scrollLeft;
      } else if (luckysheet_touchhandle_status) {
        let mouse = mouseposition(touch.pageX, touch.pageY);
        let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
        let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
        let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
        let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
        let last = $.extend(true, {}, store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1]);
        let top = 0, height = 0, rowseleted = [];
        if (last.top > row_pre) {
          top = row_pre;
          height = last.top + last.height - row_pre;
          if (last.row[1] > last.row_focus) {
            last.row[1] = last.row_focus;
          }
          rowseleted = [row_index, last.row[1]];
        } else if (last.top == row_pre) {
          top = row_pre;
          height = last.top + last.height - row_pre;
          rowseleted = [row_index, last.row[0]];
        } else {
          top = last.top;
          height = row - last.top - 1;
          if (last.row[0] < last.row_focus) {
            last.row[0] = last.row_focus;
          }
          rowseleted = [last.row[0], row_index];
        }
        let left = 0, width = 0, columnseleted = [];
        if (last.left > col_pre) {
          left = col_pre;
          width = last.left + last.width - col_pre;
          if (last.column[1] > last.column_focus) {
            last.column[1] = last.column_focus;
          }
          columnseleted = [col_index, last.column[1]];
        } else if (last.left == col_pre) {
          left = col_pre;
          width = last.left + last.width - col_pre;
          columnseleted = [col_index, last.column[0]];
        } else {
          left = last.left;
          width = col - last.left - 1;
          if (last.column[0] < last.column_focus) {
            last.column[0] = last.column_focus;
          }
          columnseleted = [last.column[0], col_index];
        }
        let changeparam = menuButton_default.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width);
        if (changeparam != null) {
          columnseleted = changeparam[0];
          rowseleted = changeparam[1];
          top = changeparam[2];
          height = changeparam[3];
          left = changeparam[4];
          width = changeparam[5];
        }
        last["row"] = rowseleted;
        last["column"] = columnseleted;
        last["left_move"] = left;
        last["width_move"] = width;
        last["top_move"] = top;
        last["height_move"] = height;
        store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1] = last;
        selectHightlightShow();
        freezen_default.scrollFreezen();
      }
      event2.stopPropagation();
    });
    $(document).on("touchend", function(event2) {
      if (luckysheet_touchmove_status) {
        let vy_x = Math.abs(luckysheet_touchmove_startPos.vy_x), friction_x = ((vy_x >> 31) * 2 + 1) * 0.25;
        let vy_y = Math.abs(luckysheet_touchmove_startPos.vy_y), friction_y = ((vy_y >> 31) * 2 + 1) * 0.25;
        if (vy_x > 0 || vy_y > 0) {
          _scrollTimer = setInterval(function() {
            vy_x -= friction_x;
            vy_y -= friction_y;
            if (vy_x <= 0) {
              vy_x = 0;
            }
            if (vy_y <= 0) {
              vy_y = 0;
            }
            if (luckysheet_touchmove_startPos.vy_y > 0) {
              luckysheet_touchmove_startPos.scrollTop -= vy_y;
            } else {
              luckysheet_touchmove_startPos.scrollTop += vy_y;
            }
            $("#luckysheet-scrollbar-y").scrollTop(luckysheet_touchmove_startPos.scrollTop);
            if (luckysheet_touchmove_startPos.vy_x > 0) {
              luckysheet_touchmove_startPos.scrollLeft -= vy_x;
            } else {
              luckysheet_touchmove_startPos.scrollLeft += vy_x;
            }
            $("#luckysheet-scrollbar-x").scrollLeft(luckysheet_touchmove_startPos.scrollLeft);
            if (vy_x <= 0 && vy_y <= 0) {
              clearInterval(_scrollTimer);
            }
          }, 20);
        }
      }
      luckysheet_touchmove_status = false;
      luckysheet_touchhandle_status = false;
    });
    $(document).on("touchstart", ".luckysheet-cs-touchhandle", function(event2) {
      luckysheet_touchhandle_status = true;
      luckysheet_touchmove_status = false;
      event2.stopPropagation();
    });
    document.addEventListener("touchmove", function(event2) {
      event2.preventDefault();
    }, {
      passive: false
    });
  }
  var init_mobile = __esm({
    "src/controllers/mobile.js"() {
      init_location();
      init_select();
      init_menuButton();
      init_freezen();
      init_store();
    }
  });

  // src/controllers/splitColumn.js
  var luckysheetSplitColumn, splitColumn_default;
  var init_splitColumn = __esm({
    "src/controllers/splitColumn.js"() {
      init_util();
      init_constant();
      init_select();
      init_tooltip();
      init_editor();
      init_setdata();
      init_getdata();
      init_refresh();
      init_store();
      init_locale();
      luckysheetSplitColumn = {
        createDialog: function() {
          let _this = this;
          const _locale = locale_default();
          const locale_splitText = _locale.splitText;
          const locale_punctuation = _locale.punctuation;
          const locale_button = _locale.button;
          $("#luckysheet-modal-dialog-mask").show();
          $("#luckysheet-splitColumn-dialog").remove();
          let content = '<div class="box"><div class="boxTitle">' + locale_splitText.splitDelimiters + '</div><div class="boxMain"><div style="height: 22px;line-height: 22px;"><input id="splitColumn_type_01" type="checkbox"/><label for="splitColumn_type_01">' + locale_punctuation.tab + '</label></div><div style="height: 22px;line-height: 22px;"><input id="splitColumn_type_02" type="checkbox"/><label for="splitColumn_type_02">' + locale_punctuation.semicolon + '</label></div><div style="height: 22px;line-height: 22px;"><input id="splitColumn_type_03" type="checkbox"/><label for="splitColumn_type_03">' + locale_punctuation.comma + '</label></div><div style="height: 22px;line-height: 22px;"><input id="splitColumn_type_04" type="checkbox"/><label for="splitColumn_type_04">' + locale_punctuation.space + '</label></div><div style="height: 22px;line-height: 22px;"><input id="splitColumn_type_05" type="checkbox"/><label for="splitColumn_type_05">' + locale_splitText.splitOther + '</label><input type="text" class="formulaInputFocus" maxlength="1"/></div></div><div style="height: 22px;line-height: 22px;"><input id="splitColumn_type_06" type="checkbox"/><label for="splitColumn_type_06">' + locale_splitText.splitContinueSymbol + '</label></div><div class="boxTitle" style="margin-top: 10px;">' + locale_splitText.splitDataPreview + '</div><div class="boxMain" id="splitColumnData"></div></div>';
          $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-splitColumn-dialog",
            "addclass": "luckysheet-splitColumn-dialog",
            "title": locale_splitText.splitTextTitle,
            "content": content,
            "botton": '<button id="luckysheet-splitColumn-dialog-confirm" class="btn btn-primary">' + locale_button.confirm + '</button><button class="btn btn-default luckysheet-model-close-btn">' + locale_button.cancel + "</button>",
            "style": "z-index:100003"
          }));
          let $t = $("#luckysheet-splitColumn-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 400).end(), myh = $t.outerHeight(), myw = $t.outerWidth();
          let winw = $(window).width(), winh = $(window).height();
          let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
          $("#luckysheet-splitColumn-dialog").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3}).show();
          let dataArr = _this.getDataArr();
          _this.dataPreview(dataArr);
        },
        init: function() {
          let _this = this;
          const _locale = locale_default();
          const locale_splitText = _locale.splitText;
          $(document).off("change.SPCinpcheckbox").on("change.SPCcheckbox", "#luckysheet-splitColumn-dialog .box input[type='checkbox']", function() {
            let regStr = _this.getRegStr();
            let dataArr = _this.getDataArr(regStr);
            _this.dataPreview(dataArr);
          });
          $(document).off("keyup.SPCinptext").on("keyup.SPCinptext", "#luckysheet-splitColumn-dialog .box input[type='text']", function() {
            if ($(this).siblings("input[type='checkbox']").is(":checked")) {
              let regStr = _this.getRegStr();
              let dataArr = _this.getDataArr(regStr);
              _this.dataPreview(dataArr);
            }
          });
          $(document).off("click.SPCconfirm").on("click.SPCconfirm", "#luckysheet-splitColumn-dialog #luckysheet-splitColumn-dialog-confirm", function() {
            $("#luckysheet-modal-dialog-mask").hide();
            $("#luckysheet-splitColumn-dialog").hide();
            let regStr = _this.getRegStr();
            let dataArr = _this.getDataArr(regStr);
            let r2 = store_default.luckysheet_select_save[0].row[0];
            let c2 = store_default.luckysheet_select_save[0].column[0];
            if (dataArr[0].length == 1) {
              return;
            }
            let dataCover = false;
            for (let i2 = 0; i2 < dataArr.length; i2++) {
              for (let j = 1; j < dataArr[0].length; j++) {
                let cell = store_default.flowdata[r2 + i2][c2 + j];
                if (cell != null && cell.v != null) {
                  dataCover = true;
                  break;
                }
              }
            }
            if (dataCover) {
              let func1 = function() {
                _this.update(r2, c2, dataArr);
              };
              tooltip_default.confirm("", locale_splitText.splitConfirmToExe, func1);
            } else {
              _this.update(r2, c2, dataArr);
            }
          });
        },
        update: function(r2, c2, dataArr) {
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          for (let i2 = 0; i2 < dataArr.length; i2++) {
            for (let j = 0; j < dataArr[0].length; j++) {
              let v = dataArr[i2][j];
              setcellvalue(r2 + i2, c2 + j, d, v);
            }
          }
          let st_r = store_default.luckysheet_select_save[0].row[0], st_c = store_default.luckysheet_select_save[0].column[0];
          let range2 = [{"row": [st_r, st_r + dataArr.length - 1], "column": [st_c, st_c + dataArr[0].length - 1]}];
          jfrefreshgrid(d, range2);
          selectHightlightShow();
        },
        dataPreview: function(dataArr) {
          $("#luckysheet-splitColumn-dialog #splitColumnData").empty();
          let trHtml = "";
          for (let i2 = 0; i2 < dataArr.length; i2++) {
            let tdHtml = "";
            for (let j = 0; j < dataArr[0].length; j++) {
              tdHtml += "<td>" + dataArr[i2][j] + "</td>";
            }
            trHtml += "<tr>" + tdHtml + "</tr>";
          }
          let tableHtml = "<table>" + trHtml + "</table>";
          $("#luckysheet-splitColumn-dialog #splitColumnData").append(tableHtml);
        },
        getRegStr: function() {
          let regStr = "", mark = 0;
          $("#luckysheet-splitColumn-dialog .box input[type='checkbox']:checked").each(function(i2, e) {
            let $id = $(e).attr("id");
            if ($id == "splitColumn_type_01") {
              regStr += "\\t";
              mark++;
            } else if ($id == "splitColumn_type_02") {
              if (mark > 0) {
                regStr += "|";
              }
              regStr += ";";
              mark++;
            } else if ($id == "splitColumn_type_03") {
              if (mark > 0) {
                regStr += "|";
              }
              regStr += ",";
              mark++;
            } else if ($id == "splitColumn_type_04") {
              if (mark > 0) {
                regStr += "|";
              }
              regStr += "\\s";
              mark++;
            } else if ($id == "splitColumn_type_05") {
              let txt = $(e).siblings("input[type='text']").val().trim();
              if (txt != "") {
                if (mark > 0) {
                  regStr += "|";
                }
                regStr += txt;
              }
            } else if ($id == "splitColumn_type_06") {
              regStr = "[" + regStr + "]+";
            }
          });
          return regStr;
        },
        getDataArr: function(regStr) {
          let _this = this;
          let arr = [];
          let r1 = store_default.luckysheet_select_save[0].row[0];
          let r2 = store_default.luckysheet_select_save[0].row[1];
          let c2 = store_default.luckysheet_select_save[0].column[0];
          if (regStr != null && regStr != "") {
            let reg = new RegExp(regStr, "g");
            let dataArr = [];
            for (let r3 = r1; r3 <= r2; r3++) {
              let rowArr = [];
              let cell = store_default.flowdata[r3][c2];
              let value;
              if (cell != null && cell["m"] != null) {
                value = cell["m"];
              } else {
                value = getcellvalue(r3, c2, store_default.flowdata);
              }
              if (value == null) {
                value = "";
              }
              rowArr = value.toString().split(reg);
              dataArr.push(rowArr);
            }
            let rlen = dataArr.length;
            let clen = 0;
            for (let i2 = 0; i2 < rlen; i2++) {
              if (dataArr[i2].length > clen) {
                clen = dataArr[i2].length;
              }
            }
            arr = _this.getNullData(rlen, clen);
            for (let i2 = 0; i2 < arr.length; i2++) {
              for (let j = 0; j < arr[0].length; j++) {
                if (dataArr[i2][j] != null) {
                  arr[i2][j] = dataArr[i2][j];
                }
              }
            }
          } else {
            for (let r3 = r1; r3 <= r2; r3++) {
              let rowArr = [];
              let cell = store_default.flowdata[r3][c2];
              let value;
              if (cell != null && cell["m"] != null) {
                value = cell["m"];
              } else {
                value = getcellvalue(r3, c2, store_default.flowdata);
              }
              if (value == null) {
                value = "";
              }
              rowArr.push(value);
              arr.push(rowArr);
            }
          }
          return arr;
        },
        getNullData: function(rlen, clen) {
          let arr = [];
          for (let r2 = 0; r2 < rlen; r2++) {
            let rowArr = [];
            for (let c2 = 0; c2 < clen; c2++) {
              rowArr.push("");
            }
            arr.push(rowArr);
          }
          return arr;
        }
      };
      splitColumn_default = luckysheetSplitColumn;
    }
  });

  // src/controllers/cellFormat.js
  function initialCellFormatModelEvent() {
    const _locale = locale_default();
    const local_cellFormat = _locale.cellFormat;
    $("#luckysheet-cellFormat-confirm").click(function() {
      let locked = $("#luckysheet-protection-check-locked").is(":checked");
      let hidden = $("#luckysheet-protection-check-hidden").is(":checked");
      locked = locked == true ? 1 : 0;
      hidden = hidden == true ? 1 : 0;
      let d = recycleSeletion(function(cell, r2, c2, data) {
        if (cell == null) {
          setcellvalue(r2, c2, data, {
            lo: locked,
            hi: hidden
          });
        } else {
          cell.lo = locked;
          cell.hi = hidden;
        }
      }, function() {
        alert(local_cellFormat.sheetDataIsNullAlert);
      });
      jfrefreshgrid(d, void 0, void 0, false);
      $("#luckysheet-cellFormat-config").hide();
      $("#luckysheet-modal-dialog-mask").hide();
    });
  }
  function recycleSeletion(cycleFunction, dataIsNullFunction) {
    if (store_default.luckysheet_select_save != null && store_default.luckysheet_select_save.length > 0) {
      let sheetFile = sheetmanage_default.getSheetByIndex(), data = sheetFile.data;
      if (data != null) {
        for (let i2 = 0; i2 < store_default.luckysheet_select_save.length; i2++) {
          let selection2 = store_default.luckysheet_select_save[i2];
          let row = selection2.row, column = selection2.column;
          for (let r2 = row[0]; r2 <= row[1]; r2++) {
            for (let c2 = column[0]; c2 <= column[1]; c2++) {
              let cell;
              let margeset = menuButton_default.mergeborer(data, r2, c2);
              if (!!margeset) {
                let row_index = margeset.row[2];
                let col_index = margeset.column[2];
                cell = data[row_index][col_index];
              } else {
                cell = data[r2][c2];
              }
              cycleFunction(cell, r2, c2, data);
            }
          }
        }
      } else {
        dataIsNullFunction();
      }
      return data;
    }
  }
  function initialCellFormatModel() {
    if (isInitialCellFormatModel) {
      return;
    }
    isInitialCellFormatModel = true;
    const _locale = locale_default();
    const local_cellFormat = _locale.cellFormat;
    const locale_button = _locale.button;
    $("body").append(replaceHtml(modelHTML, {
      "id": "luckysheet-cellFormat-config",
      "addclass": "luckysheet-cellFormat-config",
      "title": local_cellFormat.cellFormatTitle,
      "content": `
            <div class="luckysheet-cellFormat-menu-c">
                <div class="luckysheet-cellFormat-menu luckysheet-cellFormat-menu-active" id="luckysheet-cellFormat-protection">
                    ${local_cellFormat.protection}
                </div>
            </div>
            <div id="luckysheet-cellFormat-protection-content" class="luckysheet-cellFormat-content">
                <div class="luckysheet-cellFormat-protection">
                    <p>
                        ${local_cellFormat.protectionTips}
                    </p>
                    <label for="luckysheet-protection-check-locked"><input id="luckysheet-protection-check-locked" name="luckysheet-protection-check-locked" type="checkbox">${local_cellFormat.locked}</label><span>\u90E8\u5206\u9009\u4E2D</span>
                    <br/>
                    <label for="luckysheet-protection-check-hidden"><input id="luckysheet-protection-check-hidden" name="luckysheet-protection-check-hidden" type="checkbox">${local_cellFormat.hidden}</label><span>\u5168\u90E8\u9009\u4E2D</span>
                </div>
            </div>
        `,
      "botton": `<button id="luckysheet-cellFormat-confirm" class="btn btn-primary">${locale_button.confirm}</button>
                    <button class="btn btn-default luckysheet-model-close-btn">${locale_button.cancel}</button>`,
      "style": "z-index:100003"
    }));
    initialCellFormatModelEvent();
  }
  function openCellFormatModel() {
    initialCellFormatModel();
    const _locale = locale_default();
    const local_cellFormat = _locale.cellFormat;
    const locale_button = _locale.button;
    $("#luckysheet-rightclick-menu").hide();
    if (!checkProtectionNotEnable(store_default.currentSheetIndex)) {
      return;
    }
    let locked = false, hidden = false;
    let lockedCount = 0, hiddenCount = 0, count = 0;
    if (store_default.luckysheet_select_save != null && store_default.luckysheet_select_save.length > 0) {
      recycleSeletion(function(cell) {
        if (cell == null || cell.lo == null || cell.lo == 1) {
          locked = true;
          lockedCount++;
        }
        if (cell != null && cell.hi == 1) {
          hidden = true;
          hiddenCount++;
        }
        count++;
      }, function() {
        locked = true;
      });
    } else {
      alert(local_cellFormat.selectionIsNullAlert);
      return;
    }
    let tipsLock = "", tipshidden = "";
    if (locked) {
      tipsLock = lockedCount == count ? local_cellFormat.tipsAll : local_cellFormat.tipsPart;
    }
    if (hidden) {
      tipshidden = hiddenCount == count ? local_cellFormat.tipsAll : local_cellFormat.tipsPart;
    }
    $("#luckysheet-protection-check-locked").prop("checked", locked).parent().next().html(tipsLock);
    $("#luckysheet-protection-check-hidden").prop("checked", hidden).parent().next().html(tipshidden);
    openSelfModel("luckysheet-cellFormat-config");
  }
  var isInitialCellFormatModel;
  var init_cellFormat = __esm({
    "src/controllers/cellFormat.js"() {
      init_store();
      init_util();
      init_constant();
      init_sheetmanage();
      init_menuButton();
      init_protection();
      init_refresh();
      init_locale();
      init_setdata();
      isInitialCellFormatModel = false;
    }
  });

  // src/global/scroll.js
  function luckysheetscrollevent(isadjust) {
    let $t = $("#luckysheet-cell-main");
    let scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft(), scrollTop = $("#luckysheet-scrollbar-y").scrollTop(), canvasHeight = $("#luckysheetTableContent").height();
    if (freezen_default.freezenhorizontaldata != null) {
      if (scrollTop < freezen_default.freezenhorizontaldata[2]) {
        scrollTop = freezen_default.freezenhorizontaldata[2];
        $("#luckysheet-scrollbar-y").scrollTop(scrollTop);
        return;
      }
    }
    if (freezen_default.freezenverticaldata != null) {
      if (scrollLeft < freezen_default.freezenverticaldata[2]) {
        scrollLeft = freezen_default.freezenverticaldata[2];
        $("#luckysheet-scrollbar-x").scrollLeft(scrollLeft);
        return;
      }
    }
    $("#luckysheet-cols-h-c").scrollLeft(scrollLeft);
    $("#luckysheet-rows-h").scrollTop(scrollTop);
    $t.scrollLeft(scrollLeft).scrollTop(scrollTop);
    $("#luckysheet-input-box-index").css({
      "left": $("#luckysheet-input-box").css("left"),
      "top": parseInt($("#luckysheet-input-box").css("top")) - 20 + "px",
      "z-index": $("#luckysheet-input-box").css("z-index")
    }).show();
    luckysheetrefreshgrid(scrollLeft, scrollTop);
    $("#luckysheet-bottom-controll-row").css("left", scrollLeft);
    if (freezen_default.freezenhorizontaldata != null || freezen_default.freezenverticaldata != null) {
      freezen_default.scrollAdapt();
    }
    if (!method_default.createHookFunction("scroll", {scrollLeft, scrollTop, canvasHeight})) {
      return;
    }
  }
  var init_scroll = __esm({
    "src/global/scroll.js"() {
      init_freezen();
      init_sheetSearch();
      init_refresh();
      init_store();
      init_method();
    }
  });

  // src/controllers/handler.js
  function luckysheetHandler() {
    const os = browser_default.detectOS(), isMobile = browser_default.mobilecheck();
    if (isMobile) {
      mobileinit();
    }
    if (!Date.now)
      Date.now = function() {
        return new Date().getTime();
      };
    (function() {
      "use strict";
      var vendors = ["webkit", "moz"];
      for (var i2 = 0; i2 < vendors.length && !window.requestAnimationFrame; ++i2) {
        var vp = vendors[i2];
        window.requestAnimationFrame = window[vp + "RequestAnimationFrame"];
        window.cancelAnimationFrame = window[vp + "CancelAnimationFrame"] || window[vp + "CancelRequestAnimationFrame"];
      }
      if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {
        var lastTime = 0;
        window.requestAnimationFrame = function(callback) {
          var now = Date.now();
          var nextTime = Math.max(lastTime + 16, now);
          return setTimeout(function() {
            callback(lastTime = nextTime);
          }, nextTime - now);
        };
        window.cancelAnimationFrame = clearTimeout;
      }
    })();
    $("#luckysheet-sheet-container-c").mousewheel(function(event2, delta) {
      let scrollNum = event2.deltaFactor < 40 ? 1 : event2.deltaFactor < 80 ? 2 : 3;
      let scrollLeft = $(this).scrollLeft();
      if (event2.deltaY != 0) {
        if (event2.deltaY < 0) {
          scrollLeft = scrollLeft + 10 * scrollNum;
        } else {
          scrollLeft = scrollLeft - 10 * scrollNum;
        }
      } else if (event2.deltaX != 0) {
        if (event2.deltaX > 0) {
          scrollLeft = scrollLeft + 10 * scrollNum;
        } else {
          scrollLeft = scrollLeft - 10 * scrollNum;
        }
      }
      $(this).scrollLeft(scrollLeft);
      event2.preventDefault();
    });
    $("#luckysheet-cell-main").scroll(function() {
    }).mousewheel(function(event2, delta) {
      event2.preventDefault();
    });
    const _locale = locale_default();
    const locale_drag2 = _locale.drag;
    const locale_info = _locale.info;
    let prev, mousewheelArrayUniqueTimeout;
    $("#luckysheet-grid-window-1").mousewheel(function(event2, delta) {
      let scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft(), scrollTop = $("#luckysheet-scrollbar-y").scrollTop();
      let visibledatacolumn_c = store_default.visibledatacolumn, visibledatarow_c = store_default.visibledatarow;
      if (freezen_default.freezenhorizontaldata != null) {
        visibledatarow_c = freezen_default.freezenhorizontaldata[3];
      }
      if (freezen_default.freezenverticaldata != null) {
        visibledatacolumn_c = freezen_default.freezenverticaldata[3];
      }
      clearTimeout(mousewheelArrayUniqueTimeout);
      if (store_default.visibledatacolumn_unique != null) {
        visibledatacolumn_c = store_default.visibledatacolumn_unique;
      } else {
        visibledatacolumn_c = ArrayUnique(visibledatacolumn_c);
        store_default.visibledatacolumn_unique = visibledatacolumn_c;
      }
      if (store_default.visibledatarow_unique != null) {
        visibledatarow_c = store_default.visibledatarow_unique;
      } else {
        visibledatarow_c = ArrayUnique(visibledatarow_c);
        store_default.visibledatarow_unique = visibledatarow_c;
      }
      let col_st = luckysheet_searcharray(visibledatacolumn_c, scrollLeft);
      let row_st = luckysheet_searcharray(visibledatarow_c, scrollTop);
      if (freezen_default.freezenhorizontaldata != null) {
        row_st = luckysheet_searcharray(visibledatarow_c, scrollTop + freezen_default.freezenhorizontaldata[0]);
      }
      let colscroll = 0;
      let rowscroll = 0;
      let scrollNum = event2.deltaFactor < 40 ? 1 : event2.deltaFactor < 80 ? 2 : 3;
      if (event2.deltaY != 0) {
        let row_ed, step = Math.round(scrollNum / store_default.zoomRatio);
        step = step < 1 ? 1 : step;
        if (event2.deltaY < 0) {
          row_ed = row_st + step;
          if (row_ed >= visibledatarow_c.length) {
            row_ed = visibledatarow_c.length - 1;
          }
        } else {
          row_ed = row_st - step;
          if (row_ed < 0) {
            row_ed = 0;
          }
        }
        rowscroll = row_ed == 0 ? 0 : visibledatarow_c[row_ed - 1];
        if (freezen_default.freezenhorizontaldata != null) {
          rowscroll -= freezen_default.freezenhorizontaldata[0];
        }
        $("#luckysheet-scrollbar-y").scrollTop(rowscroll);
      } else if (event2.deltaX != 0) {
        let col_ed;
        if (event2.deltaX > 0) {
          scrollLeft = scrollLeft + 20 * store_default.zoomRatio;
        } else {
          scrollLeft = scrollLeft - 20 * store_default.zoomRatio;
        }
        $("#luckysheet-scrollbar-x").scrollLeft(scrollLeft);
      }
      mousewheelArrayUniqueTimeout = setTimeout(() => {
        store_default.visibledatacolumn_unique = null;
        store_default.visibledatarow_unique = null;
      }, 500);
    });
    $("#luckysheet-scrollbar-x").scroll(function() {
      luckysheetscrollevent();
    }).mousewheel(function(event2, delta) {
      event2.preventDefault();
    });
    $("#luckysheet-scrollbar-y").scroll(function() {
      luckysheetscrollevent();
    }).mousewheel(function(event2, delta) {
      event2.preventDefault();
    });
    $(window).resize(function() {
      let luckysheetDocument = document.getElementById(store_default.container);
      if (luckysheetDocument) {
        luckysheetsizeauto();
      }
    });
    $("#luckysheet-rich-text-editor").mouseup(function(e) {
      menuButton_default.inputMenuButtonFocus(e.target);
    });
    $("#luckysheet-cell-main, #luckysheetTableContent").mousedown(function(event2) {
      if ($(event2.target).hasClass("luckysheet-mousedown-cancel")) {
        return;
      }
      hideUsername();
      $("#luckysheet-cell-selected").find(".luckysheet-cs-fillhandle").css("cursor", "default").end().find(".luckysheet-cs-draghandle").css("cursor", "default");
      $("#luckysheet-cell-main, #luckysheetTableContent, #luckysheet-sheettable_0").css("cursor", "default");
      postil_default.removeActivePs();
      if ($("#luckysheet-modal-dialog-activeImage").is(":visible") || $("#luckysheet-modal-dialog-cropping").is(":visible")) {
        imageCtrl_default.cancelActiveImgItem();
      }
      let mouse = mouseposition(event2.pageX, event2.pageY);
      if (mouse[0] >= store_default.cellmainWidth - store_default.cellMainSrollBarSize || mouse[1] >= store_default.cellmainHeight - store_default.cellMainSrollBarSize) {
        return;
      }
      let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
      let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
      if (freezen_default.freezenverticaldata != null && mouse[0] < freezen_default.freezenverticaldata[0] - freezen_default.freezenverticaldata[2]) {
        x = mouse[0] + freezen_default.freezenverticaldata[2];
      }
      if (freezen_default.freezenhorizontaldata != null && mouse[1] < freezen_default.freezenhorizontaldata[0] - freezen_default.freezenhorizontaldata[2]) {
        y = mouse[1] + freezen_default.freezenhorizontaldata[2];
      }
      let sheetFile = sheetmanage_default.getSheetByIndex();
      let luckysheetTableContent = $("#luckysheetTableContent").get(0).getContext("2d");
      let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
      let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
      let row_index_ed = row_index, col_index_ed = col_index;
      let margeset = menuButton_default.mergeborer(store_default.flowdata, row_index, col_index);
      if (!!margeset) {
        row = margeset.row[1];
        row_pre = margeset.row[0];
        row_index = margeset.row[2];
        row_index_ed = margeset.row[3];
        col = margeset.column[1];
        col_pre = margeset.column[0];
        col_index = margeset.column[2];
        col_index_ed = margeset.column[3];
      }
      if (!method_default.createHookFunction("cellMousedownBefore", store_default.flowdata[row_index][col_index], {
        r: row_index,
        c: col_index,
        "start_r": row_pre,
        "start_c": col_pre,
        "end_r": row,
        "end_c": col
      }, sheetFile, luckysheetTableContent)) {
        return;
      }
      dataVerificationCtrl_default.cellFocus(row_index, col_index, true);
      if (col_pre < $("#luckysheet-cell-main").scrollLeft()) {
        $("#luckysheet-scrollbar-x").scrollLeft(col_pre);
      }
      if (row_pre < $("#luckysheet-cell-main").scrollTop()) {
        $("#luckysheet-scrollbar-y").scrollTop(row_pre);
      }
      if (event2.which == "3") {
        $("#luckysheet-dataVerification-showHintBox").hide();
        let isright = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          if (store_default.luckysheet_select_save[s]["row"] != null && (row_index >= store_default.luckysheet_select_save[s]["row"][0] && row_index <= store_default.luckysheet_select_save[s]["row"][1] && col_index >= store_default.luckysheet_select_save[s]["column"][0] && col_index <= store_default.luckysheet_select_save[s]["column"][1])) {
            isright = true;
            break;
          }
        }
        if (isright) {
          return;
        }
      }
      if (store_default.flowdata[row_index] != null && store_default.flowdata[row_index][col_index] != null && store_default.flowdata[row_index][col_index].dd != null) {
        if (luckysheetConfigsetting_default.fireMousedown != null && getObjType(luckysheetConfigsetting_default.fireMousedown) == "function") {
          luckysheetConfigsetting_default.fireMousedown(store_default.flowdata[row_index][col_index].dd);
          return;
        }
      }
      if (hyperlinkCtrl_default.hyperlink && hyperlinkCtrl_default.hyperlink[row_index + "_" + col_index] && event2.which != "3") {
        hyperlinkCtrl_default.cellFocus(row_index, col_index);
        return;
      }
      store_default.luckysheet_scroll_status = true;
      let $input = $("#luckysheet-input-box");
      if (parseInt($input.css("top")) > 0) {
        if (formula_default.rangestart || formula_default.rangedrag_column_start || formula_default.rangedrag_row_start || formula_default.israngeseleciton()) {
          let rowseleted = [row_index, row_index_ed];
          let columnseleted = [col_index, col_index_ed];
          let left = col_pre;
          let width = col - col_pre - 1;
          let top = row_pre;
          let height = row - row_pre - 1;
          if (event2.shiftKey) {
            let last = formula_default.func_selectedrange;
            let top2 = 0, height2 = 0, rowseleted2 = [];
            if (last.top > row_pre) {
              top2 = row_pre;
              height2 = last.top + last.height - row_pre;
              if (last.row[1] > last.row_focus) {
                last.row[1] = last.row_focus;
              }
              rowseleted2 = [row_index, last.row[1]];
            } else if (last.top == row_pre) {
              top2 = row_pre;
              height2 = last.top + last.height - row_pre;
              rowseleted2 = [row_index, last.row[0]];
            } else {
              top2 = last.top;
              height2 = row - last.top - 1;
              if (last.row[0] < last.row_focus) {
                last.row[0] = last.row_focus;
              }
              rowseleted2 = [last.row[0], row_index];
            }
            let left2 = 0, width2 = 0, columnseleted2 = [];
            if (last.left > col_pre) {
              left2 = col_pre;
              width2 = last.left + last.width - col_pre;
              if (last.column[1] > last.column_focus) {
                last.column[1] = last.column_focus;
              }
              columnseleted2 = [col_index, last.column[1]];
            } else if (last.left == col_pre) {
              left2 = col_pre;
              width2 = last.left + last.width - col_pre;
              columnseleted2 = [col_index, last.column[0]];
            } else {
              left2 = last.left;
              width2 = col - last.left - 1;
              if (last.column[0] < last.column_focus) {
                last.column[0] = last.column_focus;
              }
              columnseleted2 = [last.column[0], col_index];
            }
            let changeparam = menuButton_default.mergeMoveMain(columnseleted2, rowseleted2, last, top2, height2, left2, width2);
            if (changeparam != null) {
              columnseleted2 = changeparam[0];
              rowseleted2 = changeparam[1];
              top2 = changeparam[2];
              height2 = changeparam[3];
              left2 = changeparam[4];
              width2 = changeparam[5];
            }
            luckysheet_count_show(left2, top2, width2, height2, rowseleted2, columnseleted2);
            last["row"] = rowseleted2;
            last["column"] = columnseleted2;
            last["left_move"] = left2;
            last["width_move"] = width2;
            last["top_move"] = top2;
            last["height_move"] = height2;
            formula_default.func_selectedrange = last;
          } else if (event2.ctrlKey && $("#luckysheet-rich-text-editor").find("span").last().text() != ",") {
            let vText = $("#luckysheet-rich-text-editor").text();
            if (vText[vText.length - 1] === ")") {
              vText = vText.substr(0, vText.length - 1);
            }
            if (vText.length > 0) {
              let lastWord = vText.substr(vText.length - 1, 1);
              if (lastWord != "," && lastWord != "=" && lastWord != "(") {
                vText += ",";
              }
            }
            if (vText.length > 0 && vText.substr(0, 1) == "=") {
              vText = formula_default.functionHTMLGenerate(vText);
              if (window.getSelection) {
                let currSelection = window.getSelection();
                formula_default.functionRangeIndex = [$(currSelection.anchorNode).parent().index(), currSelection.anchorOffset];
              } else {
                let textRange = document.selection.createRange();
                formula_default.functionRangeIndex = textRange;
              }
              $("#luckysheet-rich-text-editor").html(vText + ")");
              formula_default.canceFunctionrangeSelected();
              formula_default.createRangeHightlight();
            }
            formula_default.rangestart = false;
            formula_default.rangedrag_column_start = false;
            formula_default.rangedrag_row_start = false;
            $("#luckysheet-functionbox-cell").html(vText + ")");
            formula_default.rangeHightlightselected($("#luckysheet-rich-text-editor"));
            formula_default.israngeseleciton();
            formula_default.func_selectedrange = {
              "left": left,
              "width": width,
              "top": top,
              "height": height,
              "left_move": left,
              "width_move": width,
              "top_move": top,
              "height_move": height,
              "row": rowseleted,
              "column": columnseleted,
              "row_focus": row_index,
              "column_focus": col_index
            };
          } else {
            formula_default.func_selectedrange = {
              "left": left,
              "width": width,
              "top": top,
              "height": height,
              "left_move": left,
              "width_move": width,
              "top_move": top,
              "height_move": height,
              "row": rowseleted,
              "column": columnseleted,
              "row_focus": row_index,
              "column_focus": col_index
            };
          }
          formula_default.rangeSetValue({"row": rowseleted, "column": columnseleted});
          formula_default.rangestart = true;
          formula_default.rangedrag_column_start = false;
          formula_default.rangedrag_row_start = false;
          $("#luckysheet-formula-functionrange-select").css({
            "left": left,
            "width": width,
            "top": top,
            "height": height
          }).show();
          $("#luckysheet-formula-help-c").hide();
          luckysheet_count_show(left, top, width, height, rowseleted, columnseleted);
          setTimeout(function() {
            let currSelection = window.getSelection();
            let anchorOffset = currSelection.anchorNode;
            let $editor;
            if ($("#luckysheet-search-formula-parm").is(":visible") || $("#luckysheet-search-formula-parm-select").is(":visible")) {
              $editor = $("#luckysheet-rich-text-editor");
              formula_default.rangechangeindex = formula_default.data_parm_index;
            } else {
              $editor = $(anchorOffset).closest("div");
            }
            let $span = $editor.find("span[rangeindex='" + formula_default.rangechangeindex + "']");
            formula_default.setCaretPosition($span.get(0), 0, $span.html().length);
          }, 1);
          return;
        } else {
          formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
          store_default.luckysheet_select_status = true;
          if ($("#luckysheet-info").is(":visible")) {
            store_default.luckysheet_select_status = false;
          }
        }
      } else {
        if (checkProtectionSelectLockedOrUnLockedCells(row_index, col_index, store_default.currentSheetIndex)) {
          store_default.luckysheet_select_status = true;
        }
      }
      if ($("#luckysheet-multiRange-dialog").is(":visible")) {
        conditionformat_default.selectStatus = true;
        store_default.luckysheet_select_status = false;
        if (event2.shiftKey) {
          let last = conditionformat_default.selectRange[conditionformat_default.selectRange.length - 1];
          let top = 0, height = 0, rowseleted = [];
          if (last.top > row_pre) {
            top = row_pre;
            height = last.top + last.height - row_pre;
            if (last.row[1] > last.row_focus) {
              last.row[1] = last.row_focus;
            }
            rowseleted = [row_index, last.row[1]];
          } else if (last.top == row_pre) {
            top = row_pre;
            height = last.top + last.height - row_pre;
            rowseleted = [row_index, last.row[0]];
          } else {
            top = last.top;
            height = row - last.top - 1;
            if (last.row[0] < last.row_focus) {
              last.row[0] = last.row_focus;
            }
            rowseleted = [last.row[0], row_index];
          }
          let left = 0, width = 0, columnseleted = [];
          if (last.left > col_pre) {
            left = col_pre;
            width = last.left + last.width - col_pre;
            if (last.column[1] > last.column_focus) {
              last.column[1] = last.column_focus;
            }
            columnseleted = [col_index, last.column[1]];
          } else if (last.left == col_pre) {
            left = col_pre;
            width = last.left + last.width - col_pre;
            columnseleted = [col_index, last.column[0]];
          } else {
            left = last.left;
            width = col - last.left - 1;
            if (last.column[0] < last.column_focus) {
              last.column[0] = last.column_focus;
            }
            columnseleted = [last.column[0], col_index];
          }
          let changeparam = menuButton_default.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width);
          if (changeparam != null) {
            columnseleted = changeparam[0];
            rowseleted = changeparam[1];
            top = changeparam[2];
            height = changeparam[3];
            left = changeparam[4];
            width = changeparam[5];
          }
          last["row"] = rowseleted;
          last["column"] = columnseleted;
          last["left_move"] = left;
          last["width_move"] = width;
          last["top_move"] = top;
          last["height_move"] = height;
          conditionformat_default.selectRange[conditionformat_default.selectRange.length - 1] = last;
        } else if (event2.ctrlKey) {
          conditionformat_default.selectRange.push({
            "left": col_pre,
            "width": col - col_pre - 1,
            "top": row_pre,
            "height": row - row_pre - 1,
            "left_move": col_pre,
            "width_move": col - col_pre - 1,
            "top_move": row_pre,
            "height_move": row - row_pre - 1,
            "row": [row_index, row_index_ed],
            "column": [col_index, col_index_ed],
            "row_focus": row_index,
            "column_focus": col_index
          });
        } else {
          conditionformat_default.selectRange = [];
          conditionformat_default.selectRange.push({
            "left": col_pre,
            "width": col - col_pre - 1,
            "top": row_pre,
            "height": row - row_pre - 1,
            "left_move": col_pre,
            "width_move": col - col_pre - 1,
            "top_move": row_pre,
            "height_move": row - row_pre - 1,
            "row": [row_index, row_index_ed],
            "column": [col_index, col_index_ed],
            "row_focus": row_index,
            "column_focus": col_index
          });
        }
        selectionCopyShow(conditionformat_default.selectRange);
        let range2 = conditionformat_default.getTxtByRange(conditionformat_default.selectRange);
        $("#luckysheet-multiRange-dialog input").val(range2);
        return;
      } else {
        conditionformat_default.selectStatus = false;
        conditionformat_default.selectRange = [];
      }
      if ($("#luckysheet-singleRange-dialog").is(":visible")) {
        store_default.luckysheet_select_status = false;
        selectionCopyShow([{"row": [row_index, row_index], "column": [col_index, col_index]}]);
        let range2 = getRangetxt(store_default.currentSheetIndex, {"row": [row_index, row_index], "column": [col_index, col_index]}, store_default.currentSheetIndex);
        $("#luckysheet-singleRange-dialog input").val(range2);
        return;
      }
      if ($("#luckysheet-dataVerificationRange-dialog").is(":visible")) {
        dataVerificationCtrl_default.selectStatus = true;
        store_default.luckysheet_select_status = false;
        if (event2.shiftKey) {
          let last = dataVerificationCtrl_default.selectRange[dataVerificationCtrl_default.selectRange.length - 1];
          let top = 0, height = 0, rowseleted = [];
          if (last.top > row_pre) {
            top = row_pre;
            height = last.top + last.height - row_pre;
            if (last.row[1] > last.row_focus) {
              last.row[1] = last.row_focus;
            }
            rowseleted = [row_index, last.row[1]];
          } else if (last.top == row_pre) {
            top = row_pre;
            height = last.top + last.height - row_pre;
            rowseleted = [row_index, last.row[0]];
          } else {
            top = last.top;
            height = row - last.top - 1;
            if (last.row[0] < last.row_focus) {
              last.row[0] = last.row_focus;
            }
            rowseleted = [last.row[0], row_index];
          }
          let left = 0, width = 0, columnseleted = [];
          if (last.left > col_pre) {
            left = col_pre;
            width = last.left + last.width - col_pre;
            if (last.column[1] > last.column_focus) {
              last.column[1] = last.column_focus;
            }
            columnseleted = [col_index, last.column[1]];
          } else if (last.left == col_pre) {
            left = col_pre;
            width = last.left + last.width - col_pre;
            columnseleted = [col_index, last.column[0]];
          } else {
            left = last.left;
            width = col - last.left - 1;
            if (last.column[0] < last.column_focus) {
              last.column[0] = last.column_focus;
            }
            columnseleted = [last.column[0], col_index];
          }
          let changeparam = menuButton_default.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width);
          if (changeparam != null) {
            columnseleted = changeparam[0];
            rowseleted = changeparam[1];
            top = changeparam[2];
            height = changeparam[3];
            left = changeparam[4];
            width = changeparam[5];
          }
          last["row"] = rowseleted;
          last["column"] = columnseleted;
          last["left_move"] = left;
          last["width_move"] = width;
          last["top_move"] = top;
          last["height_move"] = height;
          dataVerificationCtrl_default.selectRange[dataVerificationCtrl_default.selectRange.length - 1] = last;
        } else {
          dataVerificationCtrl_default.selectRange = [];
          dataVerificationCtrl_default.selectRange.push({
            "left": col_pre,
            "width": col - col_pre - 1,
            "top": row_pre,
            "height": row - row_pre - 1,
            "left_move": col_pre,
            "width_move": col - col_pre - 1,
            "top_move": row_pre,
            "height_move": row - row_pre - 1,
            "row": [row_index, row_index_ed],
            "column": [col_index, col_index_ed],
            "row_focus": row_index,
            "column_focus": col_index
          });
        }
        selectionCopyShow(dataVerificationCtrl_default.selectRange);
        let range2 = dataVerificationCtrl_default.getTxtByRange(dataVerificationCtrl_default.selectRange);
        if (formula_default.rangetosheet != store_default.currentSheetIndex) {
          range2 = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].name + "!" + range2;
        }
        $("#luckysheet-dataVerificationRange-dialog input").val(range2);
        return;
      } else {
        dataVerificationCtrl_default.selectStatus = false;
        dataVerificationCtrl_default.selectRange = [];
      }
      if (ifFormulaGenerator_default.singleRangeFocus) {
        $("#luckysheet-ifFormulaGenerator-dialog .singRange").click();
      }
      if ($("#luckysheet-ifFormulaGenerator-singleRange-dialog").is(":visible")) {
        store_default.luckysheet_select_status = false;
        formula_default.rangestart = false;
        $("#luckysheet-formula-functionrange-select").css({
          "left": col_pre,
          "width": col - col_pre - 1,
          "top": row_pre,
          "height": row - row_pre - 1
        }).show();
        $("#luckysheet-formula-help-c").hide();
        let range2 = getRangetxt(store_default.currentSheetIndex, {"row": [row_index, row_index], "column": [col_index, col_index]}, store_default.currentSheetIndex);
        $("#luckysheet-ifFormulaGenerator-singleRange-dialog input").val(range2);
        return;
      }
      if ($("#luckysheet-ifFormulaGenerator-multiRange-dialog").is(":visible")) {
        store_default.luckysheet_select_status = false;
        formula_default.func_selectedrange = {
          "left": col_pre,
          "width": col - col_pre - 1,
          "top": row_pre,
          "height": row - row_pre - 1,
          "left_move": col_pre,
          "width_move": col - col_pre - 1,
          "top_move": row_pre,
          "height_move": row - row_pre - 1,
          "row": [row_index, row_index],
          "column": [col_index, col_index],
          "row_focus": row_index,
          "column_focus": col_index
        };
        formula_default.rangestart = true;
        $("#luckysheet-formula-functionrange-select").css({
          "left": col_pre,
          "width": col - col_pre - 1,
          "top": row_pre,
          "height": row - row_pre - 1
        }).show();
        $("#luckysheet-formula-help-c").hide();
        let range2 = getRangetxt(store_default.currentSheetIndex, {"row": [row_index, row_index], "column": [col_index, col_index]}, store_default.currentSheetIndex);
        $("#luckysheet-ifFormulaGenerator-multiRange-dialog input").val(range2);
        $("#luckysheet-row-count-show").hide();
        $("#luckysheet-column-count-show").hide();
        return;
      }
      if (store_default.luckysheet_select_status) {
        if (event2.shiftKey) {
          let last = $.extend(true, {}, store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1]);
          let top = 0, height = 0, rowseleted = [];
          if (last.top > row_pre) {
            top = row_pre;
            height = last.top + last.height - row_pre;
            if (last.row[1] > last.row_focus) {
              last.row[1] = last.row_focus;
            }
            rowseleted = [row_index, last.row[1]];
          } else if (last.top == row_pre) {
            top = row_pre;
            height = last.top + last.height - row_pre;
            rowseleted = [row_index, last.row[0]];
          } else {
            top = last.top;
            height = row - last.top - 1;
            if (last.row[0] < last.row_focus) {
              last.row[0] = last.row_focus;
            }
            rowseleted = [last.row[0], row_index];
          }
          let left = 0, width = 0, columnseleted = [];
          if (last.left > col_pre) {
            left = col_pre;
            width = last.left + last.width - col_pre;
            if (last.column[1] > last.column_focus) {
              last.column[1] = last.column_focus;
            }
            columnseleted = [col_index, last.column[1]];
          } else if (last.left == col_pre) {
            left = col_pre;
            width = last.left + last.width - col_pre;
            columnseleted = [col_index, last.column[0]];
          } else {
            left = last.left;
            width = col - last.left - 1;
            if (last.column[0] < last.column_focus) {
              last.column[0] = last.column_focus;
            }
            columnseleted = [last.column[0], col_index];
          }
          let changeparam = menuButton_default.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width);
          if (changeparam != null) {
            columnseleted = changeparam[0];
            rowseleted = changeparam[1];
            top = changeparam[2];
            height = changeparam[3];
            left = changeparam[4];
            width = changeparam[5];
          }
          last["row"] = rowseleted;
          last["column"] = columnseleted;
          last["left_move"] = left;
          last["width_move"] = width;
          last["top_move"] = top;
          last["height_move"] = height;
          store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1] = last;
          if ($("#luckysheet-alternateformat-rangeDialog").is(":visible")) {
            $("#luckysheet-alternateformat-rangeDialog input").val(getRangetxt(store_default.currentSheetIndex, store_default.luckysheet_select_save));
          }
          if (pivotTable_default.luckysheet_pivotTable_select_state) {
            $("#luckysheet-pivotTable-range-selection-input").val(store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].name + "!" + chatatABC(store_default.luckysheet_select_save[0]["column"][0]) + (store_default.luckysheet_select_save[0]["row"][0] + 1) + ":" + chatatABC(store_default.luckysheet_select_save[0]["column"][1]) + (store_default.luckysheet_select_save[0]["row"][1] + 1));
          }
        } else if (event2.ctrlKey) {
          store_default.luckysheet_select_save.push({
            "left": col_pre,
            "width": col - col_pre - 1,
            "top": row_pre,
            "height": row - row_pre - 1,
            "left_move": col_pre,
            "width_move": col - col_pre - 1,
            "top_move": row_pre,
            "height_move": row - row_pre - 1,
            "row": [row_index, row_index_ed],
            "column": [col_index, col_index_ed],
            "row_focus": row_index,
            "column_focus": col_index
          });
        } else {
          store_default.luckysheet_select_save.length = 0;
          store_default.luckysheet_select_save.push({
            "left": col_pre,
            "width": col - col_pre - 1,
            "top": row_pre,
            "height": row - row_pre - 1,
            "left_move": col_pre,
            "width_move": col - col_pre - 1,
            "top_move": row_pre,
            "height_move": row - row_pre - 1,
            "row": [row_index, row_index_ed],
            "column": [col_index, col_index_ed],
            "row_focus": row_index,
            "column_focus": col_index
          });
          menuButton_default.menuButtonFocus(store_default.flowdata, row_index, col_index);
          formula_default.fucntionboxshow(row_index, col_index);
        }
        selectHightlightShow();
        if (freezen_default.freezenhorizontaldata != null || freezen_default.freezenverticaldata != null) {
          freezen_default.scrollAdaptOfselect();
        }
        if (!browser_default.mobilecheck()) {
          luckysheetactiveCell();
        }
        server_default.saveParam("mv", store_default.currentSheetIndex, store_default.luckysheet_select_save);
      }
      if (alternateformat_default.rangefocus) {
        alternateformat_default.rangefocus = false;
        $("#luckysheet-alternateformat-range .fa-table").click();
      }
      $("#luckysheet-row-count-show, #luckysheet-column-count-show").hide();
      if (!isEditMode()) {
        hideAllNeedRangeShow();
      }
      pivotTable_default.pivotclick(row_index, col_index, store_default.currentSheetIndex);
      luckysheetContainerFocus();
      method_default.createHookFunction("cellMousedown", store_default.flowdata[row_index][col_index], {
        r: row_index,
        c: col_index,
        "start_r": row_pre,
        "start_c": col_pre,
        "end_r": row,
        "end_c": col
      }, sheetFile, luckysheetTableContent);
    }).mouseup(function(event2) {
      if (event2.which == "3") {
        if (!store_default.allowEdit) {
          return;
        }
        if (isEditMode()) {
          return;
        }
        let x = event2.pageX;
        let y = event2.pageY;
        let data = store_default.flowdata;
        let obj_s = store_default.luckysheet_select_save[0];
        const cellRightClickConfig = luckysheetConfigsetting_default.cellRightClickConfig;
        $("#luckysheet-cols-rows-data").show();
        $("#luckysheet-cols-rows-handleincell").show();
        $("#luckysheet-cols-rows-add, #luckysheet-cols-rows-shift").hide();
        $$("#luckysheet-cols-rows-data .luckysheet-menuseparator").style.display = "block";
        $$("#luckysheet-cols-rows-handleincell .luckysheet-menuseparator").style.display = "block";
        if (obj_s["row"] != null && obj_s["row"][0] == 0 && obj_s["row"][1] == store_default.flowdata.length - 1) {
          if (!cellRightClickConfig.copy && !cellRightClickConfig.copyAs && !cellRightClickConfig.paste && !cellRightClickConfig.insertColumn && !cellRightClickConfig.deleteColumn && !cellRightClickConfig.hideColumn && !cellRightClickConfig.columnWidth && !cellRightClickConfig.clear && !cellRightClickConfig.matrix && !cellRightClickConfig.sort && !cellRightClickConfig.filter && !cellRightClickConfig.chart && !cellRightClickConfig.image && !cellRightClickConfig.link && !cellRightClickConfig.data && !cellRightClickConfig.cellFormat) {
            return;
          }
          store_default.luckysheetRightHeadClickIs = "column";
          $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-word").text(locale_default().rightclick.column);
          $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-size").text(locale_default().rightclick.width);
          $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-left").text(locale_default().rightclick.left);
          $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-right").text(locale_default().rightclick.right);
          $("#luckysheet-cols-rows-add").show();
          $("#luckysheet-cols-rows-shift").hide();
          $("#luckysheet-cols-rows-handleincell").hide();
          store_default.luckysheet_cols_menu_status = true;
          $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "block";
          $$("#luckysheet-top-left-add-selected").style.display = cellRightClickConfig.insertColumn ? "block" : "none";
          $$("#luckysheet-bottom-right-add-selected").style.display = cellRightClickConfig.insertColumn ? "block" : "none";
          $$("#luckysheet-del-selected").style.display = cellRightClickConfig.deleteColumn ? "block" : "none";
          $$("#luckysheet-hide-selected").style.display = cellRightClickConfig.hideColumn ? "block" : "none";
          $$("#luckysheet-show-selected").style.display = cellRightClickConfig.hideColumn ? "block" : "none";
          $$("#luckysheet-column-row-width-selected").style.display = cellRightClickConfig.columnWidth ? "block" : "none";
          if (!cellRightClickConfig.copy && !cellRightClickConfig.copyAs && !cellRightClickConfig.paste) {
            $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "none";
            if (!cellRightClickConfig.insertColumn && !cellRightClickConfig.deleteColumn && !cellRightClickConfig.hideColumn && !cellRightClickConfig.columnWidth) {
              $$("#luckysheet-cols-rows-data .luckysheet-menuseparator").style.display = "none";
            }
          }
          if (!cellRightClickConfig.insertColumn && !cellRightClickConfig.deleteColumn && !cellRightClickConfig.hideColumn && !cellRightClickConfig.columnWidth) {
            $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "none";
          }
          let cfg = $.extend(true, {}, store_default.config);
          if (cfg["columnlen"] == null) {
            cfg["columnlen"] = {};
          }
          let first_collen = cfg["columnlen"][store_default.luckysheet_select_save[0].column[0]] == null ? store_default.defaultcollen : cfg["columnlen"][store_default.luckysheet_select_save[0].column[0]];
          let isSame = true;
          for (let i2 = 0; i2 < store_default.luckysheet_select_save.length; i2++) {
            let s = store_default.luckysheet_select_save[i2];
            let c1 = s.column[0], c2 = s.column[1];
            for (let c3 = c1; c3 <= c2; c3++) {
              let collen = cfg["columnlen"][c3] == null ? store_default.defaultcollen : cfg["columnlen"][c3];
              if (collen != first_collen) {
                isSame = false;
                break;
              }
            }
          }
          if (isSame) {
            $("#luckysheet-cols-rows-add").find("input[type='number'].rcsize").val(first_collen);
          } else {
            $("#luckysheet-cols-rows-add").find("input[type='number'].rcsize").val("");
          }
        } else if (obj_s["column"] != null && obj_s["column"][0] == 0 && obj_s["column"][1] == store_default.flowdata[0].length - 1) {
          if (!cellRightClickConfig.copy && !cellRightClickConfig.copyAs && !cellRightClickConfig.paste && !cellRightClickConfig.insertRow && !cellRightClickConfig.deleteRow && !cellRightClickConfig.hideRow && !cellRightClickConfig.rowHeight && !cellRightClickConfig.clear && !cellRightClickConfig.matrix && !cellRightClickConfig.sort && !cellRightClickConfig.filter && !cellRightClickConfig.chart && !cellRightClickConfig.image && !cellRightClickConfig.link && !cellRightClickConfig.data && !cellRightClickConfig.cellFormat) {
            return;
          }
          store_default.luckysheetRightHeadClickIs = "row";
          $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-word").text(locale_default().rightclick.row);
          $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-size").text(locale_default().rightclick.height);
          $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-left").text(locale_default().rightclick.top);
          $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-right").text(locale_default().rightclick.bottom);
          $("#luckysheet-cols-rows-add").show();
          $("#luckysheet-cols-rows-shift").hide();
          $("#luckysheet-cols-rows-handleincell").hide();
          store_default.luckysheet_cols_menu_status = true;
          $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "block";
          $$("#luckysheet-top-left-add-selected").style.display = cellRightClickConfig.insertRow ? "block" : "none";
          $$("#luckysheet-bottom-right-add-selected").style.display = cellRightClickConfig.insertRow ? "block" : "none";
          $$("#luckysheet-del-selected").style.display = cellRightClickConfig.deleteRow ? "block" : "none";
          $$("#luckysheet-hide-selected").style.display = cellRightClickConfig.hideRow ? "block" : "none";
          $$("#luckysheet-show-selected").style.display = cellRightClickConfig.hideRow ? "block" : "none";
          $$("#luckysheet-column-row-width-selected").style.display = cellRightClickConfig.rowHeight ? "block" : "none";
          if (!cellRightClickConfig.copy && !cellRightClickConfig.copyAs && !cellRightClickConfig.paste) {
            $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "none";
            if (!cellRightClickConfig.insertRow && !cellRightClickConfig.deleteRow && !cellRightClickConfig.hideRow && !cellRightClickConfig.rowHeight) {
              $$("#luckysheet-cols-rows-data .luckysheet-menuseparator").style.display = "none";
            }
          }
          if (!cellRightClickConfig.insertRow && !cellRightClickConfig.deleteRow && !cellRightClickConfig.hideRow && !cellRightClickConfig.rowHeight) {
            $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "none";
          }
          let cfg = $.extend(true, {}, store_default.config);
          if (cfg["rowlen"] == null) {
            cfg["rowlen"] = {};
          }
          let first_rowlen = cfg["rowlen"][store_default.luckysheet_select_save[0].row[0]] == null ? store_default.defaultrowlen : cfg["rowlen"][store_default.luckysheet_select_save[0].row[0]];
          let isSame = true;
          for (let i2 = 0; i2 < store_default.luckysheet_select_save.length; i2++) {
            let s = store_default.luckysheet_select_save[i2];
            let r1 = s.row[0], r2 = s.row[1];
            for (let r3 = r1; r3 <= r2; r3++) {
              let rowlen = cfg["rowlen"][r3] == null ? store_default.defaultrowlen : cfg["rowlen"][r3];
              if (rowlen != first_rowlen) {
                isSame = false;
                break;
              }
            }
          }
          if (isSame) {
            $("#luckysheet-cols-rows-add").find("input[type='number'].rcsize").val(first_rowlen);
          } else {
            $("#luckysheet-cols-rows-add").find("input[type='number'].rcsize").val("");
          }
        } else {
          if (!cellRightClickConfig.copy && !cellRightClickConfig.copyAs && !cellRightClickConfig.paste && !cellRightClickConfig.insertRow && !cellRightClickConfig.insertColumn && !cellRightClickConfig.deleteRow && !cellRightClickConfig.deleteColumn && !cellRightClickConfig.deleteCell && !cellRightClickConfig.clear && !cellRightClickConfig.matrix && !cellRightClickConfig.sort && !cellRightClickConfig.filter && !cellRightClickConfig.chart && !cellRightClickConfig.image && !cellRightClickConfig.link && !cellRightClickConfig.data && !cellRightClickConfig.cellFormat) {
            return;
          }
          if (!cellRightClickConfig.copy && !cellRightClickConfig.copyAs && !cellRightClickConfig.paste) {
            $$("#luckysheet-cols-rows-handleincell .luckysheet-menuseparator").style.display = "none";
            if (!cellRightClickConfig.insertRow && !cellRightClickConfig.insertColumn && !cellRightClickConfig.deleteRow && !cellRightClickConfig.deleteColumn && !cellRightClickConfig.deleteCell) {
              $$("#luckysheet-cols-rows-data .luckysheet-menuseparator").style.display = "none";
            }
          }
          if (!cellRightClickConfig.insertRow && !cellRightClickConfig.insertColumn && !cellRightClickConfig.deleteRow && !cellRightClickConfig.deleteColumn && !cellRightClickConfig.deleteCell) {
            $$("#luckysheet-cols-rows-handleincell .luckysheet-menuseparator").style.display = "none";
          }
        }
        if (!cellRightClickConfig.clear && !cellRightClickConfig.matrix && !cellRightClickConfig.sort && !cellRightClickConfig.filter && !cellRightClickConfig.chart && !cellRightClickConfig.image && !cellRightClickConfig.link && !cellRightClickConfig.data && !cellRightClickConfig.cellFormat) {
          $$("#luckysheet-cols-rows-data .luckysheet-menuseparator").style.display = "none";
        }
        showrightclickmenu($("#luckysheet-rightclick-menu"), x, y);
      }
      server_default.saveParam("mv", store_default.currentSheetIndex, store_default.luckysheet_select_save);
    }).dblclick(function(event2) {
      if ($(event2.target).hasClass("luckysheet-mousedown-cancel")) {
        return;
      }
      if (!store_default.allowEdit) {
        return;
      }
      if (parseInt($("#luckysheet-input-box").css("top")) > 0) {
        return;
      }
      let mouse = mouseposition(event2.pageX, event2.pageY);
      if (mouse[0] >= store_default.cellmainWidth - store_default.cellMainSrollBarSize || mouse[1] >= store_default.cellmainHeight - store_default.cellMainSrollBarSize) {
        return;
      }
      let scrollLeft = $("#luckysheet-cell-main").scrollLeft(), scrollTop = $("#luckysheet-cell-main").scrollTop();
      let x = mouse[0] + scrollLeft;
      let y = mouse[1] + scrollTop;
      if (freezen_default.freezenverticaldata != null && mouse[0] < freezen_default.freezenverticaldata[0] - freezen_default.freezenverticaldata[2]) {
        x = mouse[0] + freezen_default.freezenverticaldata[2];
      }
      if (freezen_default.freezenhorizontaldata != null && mouse[1] < freezen_default.freezenhorizontaldata[0] - freezen_default.freezenhorizontaldata[2]) {
        y = mouse[1] + freezen_default.freezenhorizontaldata[2];
      }
      let row_location = rowLocation(y), row_index = row_location[2];
      let col_location = colLocation(x), col_index = col_location[2];
      let margeset = menuButton_default.mergeborer(store_default.flowdata, row_index, col_index);
      if (!!margeset) {
        row_index = margeset.row[2];
        col_index = margeset.column[2];
      }
      if (pivotTable_default.isPivotRange(row_index, col_index)) {
        if ((pivotTable_default.filter == null || pivotTable_default.filter.length == 0) && (pivotTable_default.row == null || pivotTable_default.row.length == 0) && (pivotTable_default.column == null || pivotTable_default.column.length == 0) && (pivotTable_default.values == null || pivotTable_default.values.length == 0)) {
          return;
        }
        if (pivotTable_default.values == null || pivotTable_default.values.length == 0) {
          return;
        }
        if (row_index == 0 || col_index == 0) {
          return;
        }
        if (pivotTable_default.column != null && pivotTable_default.column.length > 0) {
          if (pivotTable_default.values.length >= 2 && pivotTable_default.showType == "column") {
            if (row_index <= pivotTable_default.column.length || col_index >= pivotTable_default.pivotDatas[0].length - pivotTable_default.values.length) {
              return;
            }
          } else {
            if (row_index <= pivotTable_default.column.length - 1 || col_index >= pivotTable_default.pivotDatas[0].length - 1) {
              return;
            }
          }
        }
        if (pivotTable_default.row != null && pivotTable_default.row.length > 0) {
          if (pivotTable_default.values.length >= 2 && pivotTable_default.showType == "row") {
            if (col_index <= pivotTable_default.row.length || row_index >= pivotTable_default.pivotDatas.length - pivotTable_default.values.length) {
              return;
            }
          } else {
            if (col_index <= pivotTable_default.row.length - 1 || row_index >= pivotTable_default.pivotDatas.length - 1) {
              return;
            }
          }
        }
        sheetmanage_default.addNewSheet(event2);
        pivotTable_default.drillDown(row_index, col_index);
        return;
      }
      if ($("#luckysheet-search-formula-parm").is(":visible") || $("#luckysheet-search-formula-parm-select").is(":visible")) {
        $("#luckysheet-cell-selected").hide();
      } else if ($("#luckysheet-conditionformat-dialog").is(":visible") || $("#luckysheet-administerRule-dialog").is(":visible") || $("#luckysheet-newConditionRule-dialog").is(":visible") || $("#luckysheet-editorConditionRule-dialog").is(":visible") || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
        return;
      } else if ($("#luckysheet-modal-dialog-slider-alternateformat").is(":visible") || $("#luckysheet-alternateformat-rangeDialog").is(":visible")) {
        return;
      } else {
        if (menuButton_default.luckysheetPaintModelOn) {
          menuButton_default.cancelPaintModel();
        }
        let column_focus = store_default.luckysheet_select_save[0]["column_focus"];
        let row_focus = store_default.luckysheet_select_save[0]["row_focus"];
        if (column_focus !== col_index || row_focus !== row_index) {
          row_index = row_focus;
          col_index = column_focus;
        }
        ;
        luckysheetupdateCell(row_index, col_index, store_default.flowdata);
        selectHightlightShow();
      }
    });
    document.getElementById("luckysheet-cell-main").addEventListener("drop", function(e) {
      e.preventDefault();
      e.stopPropagation();
      let files = e.dataTransfer.files;
      if (files.length == 1 && files[0].type.indexOf("image") > -1) {
        if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "editObjects")) {
          return;
        }
        imageCtrl_default.insertImg(files[0]);
      }
      handleCellDragStopEvent(e);
    }, false);
    document.getElementById("luckysheet-cell-main").addEventListener("dragover", function(e) {
      e.preventDefault();
      e.stopPropagation();
    }, false);
    function handleCellDragStopEvent(event2) {
      if (luckysheetConfigsetting_default && luckysheetConfigsetting_default.hook && luckysheetConfigsetting_default.hook.cellDragStop) {
        let mouse = mouseposition(event2.pageX, event2.pageY);
        let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
        let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
        let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
        let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
        let margeset = menuButton_default.mergeborer(store_default.flowdata, row_index, col_index);
        if (!!margeset) {
          row = margeset.row[1];
          row_pre = margeset.row[0];
          row_index = margeset.row[2];
          col = margeset.column[1];
          col_pre = margeset.column[0];
          col_index = margeset.column[2];
        }
        let sheetFile = sheetmanage_default.getSheetByIndex();
        let luckysheetTableContent = $("#luckysheetTableContent").get(0).getContext("2d");
        method_default.createHookFunction("cellDragStop", store_default.flowdata[row_index][col_index], {
          r: row_index,
          c: col_index,
          "start_r": row_pre,
          "start_c": col_pre,
          "end_r": row,
          "end_c": col
        }, sheetFile, luckysheetTableContent, event2);
      }
    }
    $(document).on("mousemove.luckysheetEvent", function(event2) {
      postil_default.overshow(event2);
      hyperlinkCtrl_default.overshow(event2);
      window.cancelAnimationFrame(store_default.jfautoscrollTimeout);
      if (luckysheetConfigsetting_default && luckysheetConfigsetting_default.hook && luckysheetConfigsetting_default.hook.sheetMousemove) {
        let mouse = mouseposition(event2.pageX, event2.pageY);
        let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
        let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
        let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
        let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
        let margeset = menuButton_default.mergeborer(store_default.flowdata, row_index, col_index);
        if (!!margeset) {
          row = margeset.row[1];
          row_pre = margeset.row[0];
          row_index = margeset.row[2];
          col = margeset.column[1];
          col_pre = margeset.column[0];
          col_index = margeset.column[2];
        }
        let sheetFile = sheetmanage_default.getSheetByIndex();
        let moveState = {
          functionResizeStatus: formula_default.functionResizeStatus,
          horizontalmoveState: !!freezen_default.horizontalmovestate,
          verticalmoveState: !!freezen_default.verticalmovestate,
          pivotTableMoveState: !!pivotTable_default && pivotTable_default.movestate,
          sheetMoveStatus: store_default.luckysheet_sheet_move_status,
          scrollStatus: !!store_default.luckysheet_scroll_status,
          selectStatus: !!store_default.luckysheet_select_status,
          rowsSelectedStatus: !!store_default.luckysheet_rows_selected_status,
          colsSelectedStatus: !!store_default.luckysheet_cols_selected_status,
          cellSelectedMove: !!store_default.luckysheet_cell_selected_move,
          cellSelectedExtend: !!store_default.luckysheet_cell_selected_extend,
          colsChangeSize: !!store_default.luckysheet_cols_change_size,
          rowsChangeSize: !!store_default.luckysheet_rows_change_size,
          chartMove: !!store_default.chartparam.luckysheetCurrentChartMove,
          chartResize: !!store_default.chartparam.luckysheetCurrentChartResize,
          rangeResize: !!formula_default.rangeResize,
          rangeMove: !!formula_default.rangeMove
        };
        let luckysheetTableContent = $("#luckysheetTableContent").get(0).getContext("2d");
        if (store_default.flowdata && store_default.flowdata[row_index]) {
          method_default.createHookFunction("sheetMousemove", store_default.flowdata[row_index][col_index], {
            r: row_index,
            c: col_index,
            "start_r": row_pre,
            "start_c": col_pre,
            "end_r": row,
            "end_c": col
          }, sheetFile, moveState, luckysheetTableContent);
        }
      }
      if (formula_default.functionResizeStatus) {
        let y = event2.pageY;
        let movepx = y - formula_default.functionResizeData.y;
        let mpx = formula_default.functionResizeData.calculatebarHeight + movepx;
        let winh = Math.round($(window).height() / 2);
        if (mpx <= 28) {
          if (mpx <= 20) {
            return;
          }
          mpx = 28;
        } else if (mpx >= winh) {
          if (mpx >= winh + 8) {
            return;
          }
          mpx = winh;
        }
        store_default.calculatebarHeight = mpx;
        $("#luckysheet-wa-calculate").css("height", store_default.calculatebarHeight - 2);
        $("#luckysheet-wa-calculate-size").css({"background": "#5e5e5e", "cursor": "ns-resize"});
        clearTimeout(formula_default.functionResizeTimeout);
        formula_default.functionResizeTimeout = setTimeout(function() {
          luckysheetsizeauto();
        }, 15);
      } else if (!!freezen_default.horizontalmovestate) {
        let mouse = mouseposition(event2.pageX, event2.pageY);
        let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
        let scrollTop = $("#luckysheet-cell-main").scrollTop();
        let x = mouse[0] + scrollLeft;
        let y = mouse[1] + scrollTop;
        let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
        let top = mouse[1] + store_default.columnHeaderHeight;
        if (top < store_default.columnHeaderHeight) {
          top = store_default.columnHeaderHeight;
        }
        if (top > freezen_default.windowHeight - 4) {
          top = freezen_default.windowHeight - 4;
        }
        $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-handle").css({"top": top});
        if (top + scrollTop - store_default.columnHeaderHeight >= row_pre + (row - row_pre) / 2) {
          top = row - 2 - scrollTop + store_default.columnHeaderHeight;
          freezen_default.freezenhorizontaldata = [row, row_index + 1, scrollTop, freezen_default.cutVolumn(store_default.visibledatarow, row_index + 1), top];
        } else {
          top = row_pre - 2 - scrollTop + store_default.columnHeaderHeight;
          freezen_default.freezenhorizontaldata = [row_pre, row_index, scrollTop, freezen_default.cutVolumn(store_default.visibledatarow, row_index), top];
        }
        $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-drop").css({"top": top});
        freezen_default.saveFreezen(freezen_default.freezenhorizontaldata, top, null, null);
      } else if (!!freezen_default.verticalmovestate) {
        let mouse = mouseposition(event2.pageX, event2.pageY);
        let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
        let scrollTop = $("#luckysheet-cell-main").scrollTop();
        let x = mouse[0] + scrollLeft;
        let y = mouse[1] + scrollTop;
        let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
        let left = mouse[0] + store_default.rowHeaderWidth;
        if (left < store_default.rowHeaderWidth) {
          left = store_default.rowHeaderWidth;
        }
        if (left > freezen_default.windowWidth - 4) {
          left = freezen_default.windowWidth - 4;
        }
        $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-handle").css({"left": left});
        if (left + scrollLeft - store_default.rowHeaderWidth >= col_pre + (col - col_pre) / 2) {
          left = col - 2 - scrollLeft + store_default.rowHeaderWidth;
          freezen_default.freezenverticaldata = [col, col_index + 1, scrollLeft, freezen_default.cutVolumn(store_default.visibledatacolumn, col_index + 1), left];
        } else {
          left = col_pre - 2 - scrollLeft + store_default.rowHeaderWidth;
          freezen_default.freezenverticaldata = [col_pre, col_index, scrollLeft, freezen_default.cutVolumn(store_default.visibledatacolumn, col_index), left];
        }
        $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-drop").css({"left": left});
        freezen_default.saveFreezen(null, null, freezen_default.freezenverticaldata, left);
        luckysheetsizeauto();
      } else if (!!pivotTable_default && pivotTable_default.movestate) {
        let x = event2.pageX, y = event2.pageY;
        $("#luckysheet-modal-dialog-slider-pivot-move").css({
          "left": x - pivotTable_default.movesave.width / 2,
          "top": y - pivotTable_default.movesave.height
        });
      } else if (store_default.luckysheet_sheet_move_status) {
        let scrollLeft = $("#luckysheet-sheet-container-c").scrollLeft();
        let x = event2.pageX + scrollLeft;
        if (Math.abs(event2.pageX - store_default.luckysheet_sheet_move_data.pageX) < 3) {
          return;
        }
        let winW = $("#luckysheet-sheet-container").width();
        let left = x - store_default.luckysheet_sheet_move_data.curleft - $("#luckysheet-sheet-container").offset().left;
        store_default.luckysheet_sheet_move_data.activeobject.css({"left": left});
        let row_index = luckysheet_searcharray(store_default.luckysheet_sheet_move_data.widthlist, left + store_default.luckysheet_sheet_move_data.curleft);
        store_default.luckysheet_sheet_move_data.cursorobject.css({"cursor": "move"});
        if (left - scrollLeft <= 6) {
          $("#luckysheet-sheets-leftscroll").click();
        }
        if (left - scrollLeft >= winW - 40) {
          $("#luckysheet-sheets-rightscroll").click();
        }
        if (row_index != store_default.luckysheet_sheet_move_data.curindex) {
          if (row_index == -1 && left > 0) {
            row_index = store_default.luckysheet_sheet_move_data.widthlist.length - 1;
            $("#luckysheet-sheets-item-clone").insertAfter($("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").eq(row_index));
          } else if (row_index == -1 && left <= 0) {
            $("#luckysheet-sheets-item-clone").insertBefore($("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").eq(0));
          } else {
            $("#luckysheet-sheets-item-clone").insertAfter($("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").eq(row_index));
          }
          store_default.luckysheet_sheet_move_data.widthlist = [];
          $("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").each(function(i2) {
            if (i2 == 0) {
              store_default.luckysheet_sheet_move_data.widthlist.push(parseInt($(this).outerWidth()));
            } else {
              store_default.luckysheet_sheet_move_data.widthlist.push(parseInt($(this).outerWidth()) + store_default.luckysheet_sheet_move_data.widthlist[i2 - 1]);
            }
          });
          store_default.luckysheet_sheet_move_data.curindex = $("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").index($("#luckysheet-sheets-item-clone"));
        }
      } else if (store_default.luckysheet_model_move_state) {
        let scrollTop = $(document).scrollTop(), scrollLeft = $(document).scrollLeft();
        let y = event2.pageY + scrollTop, x = event2.pageX + scrollLeft;
        let winH = $(window).height(), winW = $(window).width();
        let myh = store_default.luckysheet_model_move_obj.height(), myw = store_default.luckysheet_model_move_obj.width();
        let top = y - store_default.luckysheet_model_xy[1], left = x - store_default.luckysheet_model_xy[0];
        if (top < 0) {
          top = 0;
        }
        if (top + myh + 62 > winH) {
          top = winH - myh - 62;
        }
        if (left < 0) {
          left = 0;
        }
        if (left + myw + 86 > winW) {
          left = winW - myw - 86;
        }
        store_default.luckysheet_model_move_obj.css({"top": top, "left": left});
        event2.preventDefault();
      } else if (!!store_default.luckysheet_scroll_status || !!store_default.luckysheet_select_status || !!store_default.luckysheet_rows_selected_status || !!store_default.luckysheet_cols_selected_status || !!store_default.luckysheet_cell_selected_move || !!store_default.luckysheet_cell_selected_extend || !!store_default.luckysheet_cols_change_size || !!store_default.luckysheet_rows_change_size || !!store_default.chartparam.luckysheetCurrentChartMove || !!store_default.chartparam.luckysheetCurrentChartResize || !!formula_default.rangeResize || !!formula_default.rangeMove) {
        let mouseRender = function() {
          if (store_default.luckysheet_scroll_status && !store_default.luckysheet_cols_change_size && !store_default.luckysheet_rows_change_size) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let left = $("#luckysheet-scrollbar-x").scrollLeft(), top = $("#luckysheet-scrollbar-y").scrollTop();
            let x = mouse[0];
            let y = mouse[1];
            let winH = $("#luckysheet-cell-main").height() - 20 * store_default.zoomRatio, winW = $("#luckysheet-cell-main").width() - 60 * store_default.zoomRatio;
            if (y < 0 || y > winH) {
              let stop;
              if (y < 0) {
                stop = top + y / 2;
              } else {
                stop = top + (y - winH) / 2;
              }
              $("#luckysheet-scrollbar-y").scrollTop(stop);
            }
            if (x < 0 || x > winW) {
              let sleft;
              if (x < 0) {
                sleft = left + x / 2;
              } else {
                sleft = left + (x - winW) / 2;
              }
              $("#luckysheet-scrollbar-x").scrollLeft(sleft);
            }
          }
          if (store_default.luckysheet_select_status) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
            let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
            let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
            let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
            if (!checkProtectionSelectLockedOrUnLockedCells(row_index, col_index, store_default.currentSheetIndex)) {
              return;
            }
            let last = $.extend(true, {}, store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1]);
            let top = 0, height = 0, rowseleted = [];
            if (last.top > row_pre) {
              top = row_pre;
              height = last.top + last.height - row_pre;
              if (last.row[1] > last.row_focus) {
                last.row[1] = last.row_focus;
              }
              rowseleted = [row_index, last.row[1]];
            } else if (last.top == row_pre) {
              top = row_pre;
              height = last.top + last.height - row_pre;
              rowseleted = [row_index, last.row[0]];
            } else {
              top = last.top;
              height = row - last.top - 1;
              if (last.row[0] < last.row_focus) {
                last.row[0] = last.row_focus;
              }
              rowseleted = [last.row[0], row_index];
            }
            let left = 0, width = 0, columnseleted = [];
            if (last.left > col_pre) {
              left = col_pre;
              width = last.left + last.width - col_pre;
              if (last.column[1] > last.column_focus) {
                last.column[1] = last.column_focus;
              }
              columnseleted = [col_index, last.column[1]];
            } else if (last.left == col_pre) {
              left = col_pre;
              width = last.left + last.width - col_pre;
              columnseleted = [col_index, last.column[0]];
            } else {
              left = last.left;
              width = col - last.left - 1;
              if (last.column[0] < last.column_focus) {
                last.column[0] = last.column_focus;
              }
              columnseleted = [last.column[0], col_index];
            }
            let changeparam = menuButton_default.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width);
            if (changeparam != null) {
              columnseleted = changeparam[0];
              rowseleted = changeparam[1];
              top = changeparam[2];
              height = changeparam[3];
              left = changeparam[4];
              width = changeparam[5];
            }
            last["row"] = rowseleted;
            last["column"] = columnseleted;
            last["left_move"] = left;
            last["width_move"] = width;
            last["top_move"] = top;
            last["height_move"] = height;
            store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1] = last;
            selectHightlightShow();
            freezen_default.scrollFreezen();
            if ($("#luckysheet-alternateformat-rangeDialog").is(":visible")) {
              $("#luckysheet-alternateformat-rangeDialog input").val(getRangetxt(store_default.currentSheetIndex, store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1]));
            }
            if (pivotTable_default.luckysheet_pivotTable_select_state) {
              $("#luckysheet-pivotTable-range-selection-input").val(store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].name + "!" + chatatABC(store_default.luckysheet_select_save[0]["column"][0]) + (store_default.luckysheet_select_save[0]["row"][0] + 1) + ":" + chatatABC(store_default.luckysheet_select_save[0]["column"][1]) + (store_default.luckysheet_select_save[0]["row"][1] + 1));
            }
          } else if (conditionformat_default.selectStatus) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
            let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
            let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
            let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
            let last = conditionformat_default.selectRange[conditionformat_default.selectRange.length - 1];
            let top = 0, height = 0, rowseleted = [];
            if (last.top > row_pre) {
              top = row_pre;
              height = last.top + last.height - row_pre;
              if (last.row[1] > last.row_focus) {
                last.row[1] = last.row_focus;
              }
              rowseleted = [row_index, last.row[1]];
            } else if (last.top == row_pre) {
              top = row_pre;
              height = last.top + last.height - row_pre;
              rowseleted = [row_index, last.row[0]];
            } else {
              top = last.top;
              height = row - last.top - 1;
              if (last.row[0] < last.row_focus) {
                last.row[0] = last.row_focus;
              }
              rowseleted = [last.row[0], row_index];
            }
            let left = 0, width = 0, columnseleted = [];
            if (last.left > col_pre) {
              left = col_pre;
              width = last.left + last.width - col_pre;
              if (last.column[1] > last.column_focus) {
                last.column[1] = last.column_focus;
              }
              columnseleted = [col_index, last.column[1]];
            } else if (last.left == col_pre) {
              left = col_pre;
              width = last.left + last.width - col_pre;
              columnseleted = [col_index, last.column[0]];
            } else {
              left = last.left;
              width = col - last.left - 1;
              if (last.column[0] < last.column_focus) {
                last.column[0] = last.column_focus;
              }
              columnseleted = [last.column[0], col_index];
            }
            let changeparam = menuButton_default.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width);
            if (changeparam != null) {
              columnseleted = changeparam[0];
              rowseleted = changeparam[1];
              top = changeparam[2];
              height = changeparam[3];
              left = changeparam[4];
              width = changeparam[5];
            }
            last["row"] = rowseleted;
            last["column"] = columnseleted;
            last["left_move"] = left;
            last["width_move"] = width;
            last["top_move"] = top;
            last["height_move"] = height;
            conditionformat_default.selectRange[conditionformat_default.selectRange.length - 1] = last;
            selectionCopyShow(conditionformat_default.selectRange);
            let range2 = conditionformat_default.getTxtByRange(conditionformat_default.selectRange);
            $("#luckysheet-multiRange-dialog input").val(range2);
          } else if (dataVerificationCtrl_default.selectStatus) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
            let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
            let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
            let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
            let last = dataVerificationCtrl_default.selectRange[dataVerificationCtrl_default.selectRange.length - 1];
            let top = 0, height = 0, rowseleted = [];
            if (last.top > row_pre) {
              top = row_pre;
              height = last.top + last.height - row_pre;
              if (last.row[1] > last.row_focus) {
                last.row[1] = last.row_focus;
              }
              rowseleted = [row_index, last.row[1]];
            } else if (last.top == row_pre) {
              top = row_pre;
              height = last.top + last.height - row_pre;
              rowseleted = [row_index, last.row[0]];
            } else {
              top = last.top;
              height = row - last.top - 1;
              if (last.row[0] < last.row_focus) {
                last.row[0] = last.row_focus;
              }
              rowseleted = [last.row[0], row_index];
            }
            let left = 0, width = 0, columnseleted = [];
            if (last.left > col_pre) {
              left = col_pre;
              width = last.left + last.width - col_pre;
              if (last.column[1] > last.column_focus) {
                last.column[1] = last.column_focus;
              }
              columnseleted = [col_index, last.column[1]];
            } else if (last.left == col_pre) {
              left = col_pre;
              width = last.left + last.width - col_pre;
              columnseleted = [col_index, last.column[0]];
            } else {
              left = last.left;
              width = col - last.left - 1;
              if (last.column[0] < last.column_focus) {
                last.column[0] = last.column_focus;
              }
              columnseleted = [last.column[0], col_index];
            }
            let changeparam = menuButton_default.mergeMoveMain(columnseleted, rowseleted, last, top, height, left, width);
            if (changeparam != null) {
              columnseleted = changeparam[0];
              rowseleted = changeparam[1];
              top = changeparam[2];
              height = changeparam[3];
              left = changeparam[4];
              width = changeparam[5];
            }
            last["row"] = rowseleted;
            last["column"] = columnseleted;
            last["left_move"] = left;
            last["width_move"] = width;
            last["top_move"] = top;
            last["height_move"] = height;
            dataVerificationCtrl_default.selectRange[dataVerificationCtrl_default.selectRange.length - 1] = last;
            selectionCopyShow(dataVerificationCtrl_default.selectRange);
            let range2 = dataVerificationCtrl_default.getTxtByRange(dataVerificationCtrl_default.selectRange);
            if (formula_default.rangetosheet != store_default.currentSheetIndex) {
              range2 = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].name + "!" + range2;
            }
            $("#luckysheet-dataVerificationRange-dialog input").val(range2);
          } else if (formula_default.rangestart) {
            formula_default.rangedrag(event2);
          } else if (formula_default.rangedrag_row_start) {
            formula_default.rangedrag_row(event2);
          } else if (formula_default.rangedrag_column_start) {
            formula_default.rangedrag_column(event2);
          } else if (store_default.luckysheet_rows_selected_status) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let y = mouse[1] + $("#luckysheet-rows-h").scrollTop();
            if (y < 0) {
              return false;
            }
            let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
            let col_index = store_default.visibledatacolumn.length - 1, col = store_default.visibledatacolumn[col_index], col_pre = 0;
            let last = $.extend(true, {}, store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1]);
            let top = 0, height = 0, rowseleted = [];
            if (last.top > row_pre) {
              top = row_pre;
              height = last.top + last.height - row_pre;
              if (last.row[1] > last.row_focus) {
                last.row[1] = last.row_focus;
              }
              rowseleted = [row_index, last.row[1]];
            } else if (last.top == row_pre) {
              top = row_pre;
              height = last.top + last.height - row_pre;
              rowseleted = [row_index, last.row[0]];
            } else {
              top = last.top;
              height = row - last.top - 1;
              if (last.row[0] < last.row_focus) {
                last.row[0] = last.row_focus;
              }
              rowseleted = [last.row[0], row_index];
            }
            last["row"] = rowseleted;
            last["top_move"] = top;
            last["height_move"] = height;
            store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1] = last;
            selectHightlightShow();
            clearTimeout(store_default.countfuncTimeout);
            store_default.countfuncTimeout = setTimeout(function() {
              countfunc();
            }, 500);
          } else if (store_default.luckysheet_cols_selected_status) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let x = mouse[0] + $("#luckysheet-cols-h-c").scrollLeft();
            if (x < 0) {
              return false;
            }
            let row_index = store_default.visibledatarow.length - 1, row = store_default.visibledatarow[row_index], row_pre = 0;
            let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
            let last = $.extend(true, {}, store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1]);
            let left = 0, width = 0, columnseleted = [];
            if (last.left > col_pre) {
              left = col_pre;
              width = last.left + last.width - col_pre;
              if (last.column[1] > last.column_focus) {
                last.column[1] = last.column_focus;
              }
              columnseleted = [col_index, last.column[1]];
            } else if (last.left == col_pre) {
              left = col_pre;
              width = last.left + last.width - col_pre;
              columnseleted = [col_index, last.column[0]];
            } else {
              left = last.left;
              width = col - last.left - 1;
              if (last.column[0] < last.column_focus) {
                last.column[0] = last.column_focus;
              }
              columnseleted = [last.column[0], col_index];
            }
            last["column"] = columnseleted;
            last["left_move"] = left;
            last["width_move"] = width;
            store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1] = last;
            selectHightlightShow();
            clearTimeout(store_default.countfuncTimeout);
            store_default.countfuncTimeout = setTimeout(function() {
              countfunc();
            }, 500);
          } else if (store_default.luckysheet_cell_selected_move) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
            let scrollTop = $("#luckysheet-cell-main").scrollTop();
            let x = mouse[0] + scrollLeft;
            let y = mouse[1] + scrollTop;
            let winH = $(window).height() + scrollTop - store_default.sheetBarHeight - store_default.statisticBarHeight, winW = $(window).width() + scrollLeft;
            let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
            let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
            let row_index_original = store_default.luckysheet_cell_selected_move_index[0], col_index_original = store_default.luckysheet_cell_selected_move_index[1];
            let row_s = store_default.luckysheet_select_save[0]["row"][0] - row_index_original + row_index, row_e = store_default.luckysheet_select_save[0]["row"][1] - row_index_original + row_index;
            let col_s = store_default.luckysheet_select_save[0]["column"][0] - col_index_original + col_index, col_e = store_default.luckysheet_select_save[0]["column"][1] - col_index_original + col_index;
            if (row_s < 0 || y < 0) {
              row_s = 0;
              row_e = store_default.luckysheet_select_save[0]["row"][1] - store_default.luckysheet_select_save[0]["row"][0];
            }
            if (col_s < 0 || x < 0) {
              col_s = 0;
              col_e = store_default.luckysheet_select_save[0]["column"][1] - store_default.luckysheet_select_save[0]["column"][0];
            }
            if (row_e >= store_default.visibledatarow[store_default.visibledatarow.length - 1] || y > winH) {
              row_s = store_default.visibledatarow.length - 1 - store_default.luckysheet_select_save[0]["row"][1] + store_default.luckysheet_select_save[0]["row"][0];
              row_e = store_default.visibledatarow.length - 1;
            }
            if (col_e >= store_default.visibledatacolumn[store_default.visibledatacolumn.length - 1] || x > winW) {
              col_s = store_default.visibledatacolumn.length - 1 - store_default.luckysheet_select_save[0]["column"][1] + store_default.luckysheet_select_save[0]["column"][0];
              col_e = store_default.visibledatacolumn.length - 1;
            }
            col_pre = col_s - 1 == -1 ? 0 : store_default.visibledatacolumn[col_s - 1];
            col = store_default.visibledatacolumn[col_e];
            row_pre = row_s - 1 == -1 ? 0 : store_default.visibledatarow[row_s - 1];
            row = store_default.visibledatarow[row_e];
            $("#luckysheet-cell-selected-move").css({
              "left": col_pre,
              "width": col - col_pre - 2,
              "top": row_pre,
              "height": row - row_pre - 2,
              "display": "block"
            });
          } else if (store_default.luckysheet_cell_selected_extend) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let scrollLeft = $("#luckysheet-cell-main").scrollLeft() - 5;
            let scrollTop = $("#luckysheet-cell-main").scrollTop() - 5;
            let x = mouse[0] + scrollLeft;
            let y = mouse[1] + scrollTop;
            let winH = $(window).height() + scrollTop - store_default.sheetBarHeight - store_default.statisticBarHeight, winW = $(window).width() + scrollLeft;
            let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
            let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
            let row_index_original = store_default.luckysheet_cell_selected_extend_index[0], col_index_original = store_default.luckysheet_cell_selected_extend_index[1];
            let row_s = store_default.luckysheet_select_save[0]["row"][0], row_e = store_default.luckysheet_select_save[0]["row"][1];
            let col_s = store_default.luckysheet_select_save[0]["column"][0], col_e = store_default.luckysheet_select_save[0]["column"][1];
            if (row_s < 0 || y < 0) {
              row_s = 0;
              row_e = store_default.luckysheet_select_save[0]["row"][1] - store_default.luckysheet_select_save[0]["row"][0];
            }
            if (col_s < 0 || x < 0) {
              col_s = 0;
              col_e = store_default.luckysheet_select_save[0]["column"][1] - store_default.luckysheet_select_save[0]["column"][0];
            }
            if (row_e >= store_default.visibledatarow[store_default.visibledatarow.length - 1] || y > winH) {
              row_s = store_default.visibledatarow.length - 1 - store_default.luckysheet_select_save[0]["row"][1] + store_default.luckysheet_select_save[0]["row"][0];
              row_e = store_default.visibledatarow.length - 1;
            }
            if (col_e >= store_default.visibledatacolumn[store_default.visibledatacolumn.length - 1] || x > winW) {
              col_s = store_default.visibledatacolumn.length - 1 - store_default.luckysheet_select_save[0]["column"][1] + store_default.luckysheet_select_save[0]["column"][0];
              col_e = store_default.visibledatacolumn.length - 1;
            }
            let top = store_default.luckysheet_select_save[0].top_move, height = store_default.luckysheet_select_save[0].height_move;
            let left = store_default.luckysheet_select_save[0].left_move, width = store_default.luckysheet_select_save[0].width_move;
            if (Math.abs(row_index_original - row_index) > Math.abs(col_index_original - col_index)) {
              if (!(row_index >= row_s && row_index <= row_e)) {
                if (store_default.luckysheet_select_save[0].top_move >= row_pre) {
                  top = row_pre;
                  height = store_default.luckysheet_select_save[0].top_move + store_default.luckysheet_select_save[0].height_move - row_pre;
                } else {
                  top = store_default.luckysheet_select_save[0].top_move;
                  height = row - store_default.luckysheet_select_save[0].top_move - 1;
                }
              }
            } else {
              if (!(col_index >= col_s && col_index <= col_e)) {
                if (store_default.luckysheet_select_save[0].left_move >= col_pre) {
                  left = col_pre;
                  width = store_default.luckysheet_select_save[0].left_move + store_default.luckysheet_select_save[0].width_move - col_pre;
                } else {
                  left = store_default.luckysheet_select_save[0].left_move;
                  width = col - store_default.luckysheet_select_save[0].left_move - 1;
                }
              }
            }
            $("#luckysheet-cell-selected-extend").css({
              "left": left,
              "width": width,
              "top": top,
              "height": height,
              "display": "block"
            });
          } else if (store_default.luckysheet_cols_change_size) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let scrollLeft = $("#luckysheet-cols-h-c").scrollLeft();
            let x = mouse[0] + scrollLeft;
            let winW = $(window).width();
            let row_index = store_default.visibledatarow.length - 1, row = store_default.visibledatarow[row_index], row_pre = 0;
            let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
            if (x + 3 - store_default.luckysheet_cols_change_size_start[0] > 30 && x < winW + scrollLeft - 100) {
              $("#luckysheet-change-size-line").css({"left": x});
              $("#luckysheet-cols-change-size").css({"left": x - 2});
            }
          } else if (store_default.luckysheet_rows_change_size) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let scrollTop = $("#luckysheet-rows-h").scrollTop();
            let y = mouse[1] + scrollTop;
            let winH = $(window).height();
            let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
            if (y + 3 - store_default.luckysheet_rows_change_size_start[0] > 19 && y < winH + scrollTop - 200) {
              $("#luckysheet-change-size-line").css({"top": y});
              $("#luckysheet-rows-change-size").css({"top": y});
            }
          } else if (!!store_default.chartparam.luckysheetCurrentChartMove) {
            const mouse = mouseposition(event2.pageX, event2.pageY);
            const x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
            const y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
            const myh = store_default.chartparam.luckysheetCurrentChartMoveObj.height(), myw = store_default.chartparam.luckysheetCurrentChartMoveObj.width();
            let top = y - store_default.chartparam.luckysheetCurrentChartMoveXy[1], left = x - store_default.chartparam.luckysheetCurrentChartMoveXy[0];
            if (top < 0) {
              top = 0;
            }
            if (top + myh + 42 + 6 > store_default.chartparam.luckysheetCurrentChartMoveWinH) {
              top = store_default.chartparam.luckysheetCurrentChartMoveWinH - myh - 42 - 6;
            }
            if (left < 0) {
              left = 0;
            }
            if (left + myw + 22 + 36 > store_default.chartparam.luckysheetCurrentChartMoveWinW) {
              left = store_default.chartparam.luckysheetCurrentChartMoveWinW - myw - 22 - 36;
            }
            store_default.chartparam.luckysheetCurrentChartMoveObj.css({"top": top, "left": left});
            if (freezen_default.freezenhorizontaldata != null || freezen_default.freezenverticaldata != null) {
              freezen_default.scrollAdapt();
              const toffset = store_default.chartparam.luckysheetCurrentChartMoveObj.offset();
              const tpsition = store_default.chartparam.luckysheetCurrentChartMoveObj.position();
              store_default.chartparam.luckysheetCurrentChartMoveXy = [event2.pageX - toffset.left, event2.pageY - toffset.top, tpsition.left, tpsition.top, $("#luckysheet-scrollbar-x").scrollLeft(), $("#luckysheet-scrollbar-y").scrollTop()];
            }
          } else if (!!store_default.chartparam.luckysheetCurrentChartResize) {
            const scrollTop = $("#luckysheet-cell-main").scrollTop(), scrollLeft = $("#luckysheet-cell-main").scrollLeft();
            const mouse = mouseposition(event2.pageX, event2.pageY);
            const x = mouse[0] + scrollLeft;
            const y = mouse[1] + scrollTop;
            if (x < 0 || y < 0) {
              return false;
            }
            const myh = store_default.chartparam.luckysheetCurrentChartResizeObj.height(), myw = store_default.chartparam.luckysheetCurrentChartResizeObj.width();
            const topchange = y - store_default.chartparam.luckysheetCurrentChartResizeXy[1], leftchange = x - store_default.chartparam.luckysheetCurrentChartResizeXy[0];
            let top = store_default.chartparam.luckysheetCurrentChartResizeXy[5], height = store_default.chartparam.luckysheetCurrentChartResizeXy[3], left = store_default.chartparam.luckysheetCurrentChartResizeXy[4], width = store_default.chartparam.luckysheetCurrentChartResizeXy[2];
            if (store_default.chartparam.luckysheetCurrentChartResize == "lm" || store_default.chartparam.luckysheetCurrentChartResize == "lt" || store_default.chartparam.luckysheetCurrentChartResize == "lb") {
              left = x;
              width = store_default.chartparam.luckysheetCurrentChartResizeXy[2] - leftchange;
              if (left > store_default.chartparam.luckysheetCurrentChartResizeXy[2] + store_default.chartparam.luckysheetCurrentChartResizeXy[4] - 60) {
                left = store_default.chartparam.luckysheetCurrentChartResizeXy[2] + store_default.chartparam.luckysheetCurrentChartResizeXy[4] - 60;
                width = store_default.chartparam.luckysheetCurrentChartResizeXy[2] - (store_default.chartparam.luckysheetCurrentChartResizeXy[2] + store_default.chartparam.luckysheetCurrentChartResizeXy[4] - 60 - store_default.chartparam.luckysheetCurrentChartResizeXy[0]);
              } else if (left <= 0) {
                left = 0;
                width = store_default.chartparam.luckysheetCurrentChartResizeXy[2] + store_default.chartparam.luckysheetCurrentChartResizeXy[0];
              }
            }
            if (store_default.chartparam.luckysheetCurrentChartResize == "rm" || store_default.chartparam.luckysheetCurrentChartResize == "rt" || store_default.chartparam.luckysheetCurrentChartResize == "rb") {
              width = store_default.chartparam.luckysheetCurrentChartResizeXy[2] + leftchange;
              if (width < 60) {
                width = 60;
              } else if (width >= store_default.chartparam.luckysheetCurrentChartResizeWinW - store_default.chartparam.luckysheetCurrentChartResizeXy[4] - 22 - 36) {
                width = store_default.chartparam.luckysheetCurrentChartResizeWinW - store_default.chartparam.luckysheetCurrentChartResizeXy[4] - 22 - 36;
              }
            }
            if (store_default.chartparam.luckysheetCurrentChartResize == "mt" || store_default.chartparam.luckysheetCurrentChartResize == "lt" || store_default.chartparam.luckysheetCurrentChartResize == "rt") {
              top = y;
              height = store_default.chartparam.luckysheetCurrentChartResizeXy[3] - topchange;
              if (top > store_default.chartparam.luckysheetCurrentChartResizeXy[3] + store_default.chartparam.luckysheetCurrentChartResizeXy[5] - 60) {
                top = store_default.chartparam.luckysheetCurrentChartResizeXy[3] + store_default.chartparam.luckysheetCurrentChartResizeXy[5] - 60;
                height = store_default.chartparam.luckysheetCurrentChartResizeXy[3] - (store_default.chartparam.luckysheetCurrentChartResizeXy[3] + store_default.chartparam.luckysheetCurrentChartResizeXy[5] - 60 - store_default.chartparam.luckysheetCurrentChartResizeXy[1]);
              } else if (top <= 0) {
                top = 0;
                height = store_default.chartparam.luckysheetCurrentChartResizeXy[3] + store_default.chartparam.luckysheetCurrentChartResizeXy[1];
              }
            }
            if (store_default.chartparam.luckysheetCurrentChartResize == "mb" || store_default.chartparam.luckysheetCurrentChartResize == "lb" || store_default.chartparam.luckysheetCurrentChartResize == "rb") {
              height = store_default.chartparam.luckysheetCurrentChartResizeXy[3] + topchange;
              if (height < 60) {
                height = 60;
              } else if (height >= store_default.chartparam.luckysheetCurrentChartResizeWinH - store_default.chartparam.luckysheetCurrentChartResizeXy[5] - 42 - 6) {
                height = store_default.chartparam.luckysheetCurrentChartResizeWinH - store_default.chartparam.luckysheetCurrentChartResizeXy[5] - 42 - 6;
              }
            }
            const resizedata = {"top": top, "left": left, "height": height, "width": width};
            store_default.chartparam.luckysheetCurrentChartResizeObj.css(resizedata);
            store_default.resizeChart(store_default.chartparam.luckysheetCurrentChart);
          } else if (imageCtrl_default.move) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
            let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
            let imgItem = imageCtrl_default.images[imageCtrl_default.currentImgId];
            if (imgItem.isFixedPos) {
              x = event2.pageX;
              y = event2.pageY;
            }
            let myh = $("#luckysheet-modal-dialog-activeImage").height(), myw = $("#luckysheet-modal-dialog-activeImage").width();
            let top = y - imageCtrl_default.moveXY[1], left = x - imageCtrl_default.moveXY[0];
            let minTop = 0, maxTop = imageCtrl_default.currentWinH - myh - 42 - 6, minLeft = 0, maxLeft = imageCtrl_default.currentWinW - myw - 22 - 36;
            if (imgItem.isFixedPos) {
              minTop = store_default.infobarHeight + store_default.toolbarHeight + store_default.calculatebarHeight + store_default.columnHeaderHeight;
              maxTop = minTop + store_default.cellmainHeight - store_default.cellMainSrollBarSize - myh;
              minLeft = store_default.rowHeaderWidth;
              maxLeft = minLeft + store_default.cellmainWidth - store_default.cellMainSrollBarSize - myw;
            }
            if (top < minTop) {
              top = minTop;
            }
            if (top > maxTop) {
              top = maxTop;
            }
            if (left < minLeft) {
              left = minLeft;
            }
            if (left > maxLeft) {
              left = maxLeft;
            }
            $("#luckysheet-modal-dialog-activeImage").css({"left": left, "top": top});
          } else if (!!imageCtrl_default.resize) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
            let scrollTop = $("#luckysheet-cell-main").scrollTop();
            let x = mouse[0] + scrollLeft;
            let y = mouse[1] + scrollTop;
            if (x < 0 || y < 0) {
              return false;
            }
            let resizeXY = imageCtrl_default.resizeXY;
            let topchange = y - resizeXY[1], leftchange = x - resizeXY[0];
            let top = resizeXY[5], height = resizeXY[3], left = resizeXY[4], width = resizeXY[2];
            let resize2 = imageCtrl_default.resize;
            let imgItem = imageCtrl_default.images[imageCtrl_default.currentImgId];
            if (imgItem.isFixedPos) {
              let minTop = store_default.infobarHeight + store_default.toolbarHeight + store_default.calculatebarHeight + store_default.columnHeaderHeight;
              let minLeft = store_default.rowHeaderWidth;
              if (resize2 == "lt") {
                left = resizeXY[4] - resizeXY[6] + leftchange;
                if (left < minLeft) {
                  left = minLeft;
                }
                if (left > resizeXY[4] - resizeXY[6] + resizeXY[2] - 1) {
                  left = resizeXY[4] - resizeXY[6] + resizeXY[2] - 1;
                }
                width = resizeXY[4] - resizeXY[6] + resizeXY[2] - left;
                height = Math.round(width * (resizeXY[3] / resizeXY[2]));
                top = resizeXY[5] - resizeXY[7] + resizeXY[3] - height;
                if (top < minTop) {
                  top = minTop;
                  height = resizeXY[5] - resizeXY[7] + resizeXY[3] - top;
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                  left = resizeXY[4] - resizeXY[6] + resizeXY[2] - width;
                }
                if (top > resizeXY[5] - resizeXY[7] + resizeXY[3] - 1) {
                  top = resizeXY[5] - resizeXY[7] + resizeXY[3] - 1;
                  height = resizeXY[5] - resizeXY[7] + resizeXY[3] - top;
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                  left = resizeXY[4] - resizeXY[6] + resizeXY[2] - width;
                }
              } else if (resize2 == "lm") {
                left = resizeXY[4] - resizeXY[6] + leftchange;
                if (left < minLeft) {
                  left = minLeft;
                }
                if (left > resizeXY[4] - resizeXY[6] + resizeXY[2] - 1) {
                  left = resizeXY[4] - resizeXY[6] + resizeXY[2] - 1;
                }
                width = resizeXY[4] - resizeXY[6] + resizeXY[2] - left;
                top = resizeXY[5] - resizeXY[7];
                height = resizeXY[3];
              } else if (resize2 == "lb") {
                left = resizeXY[4] - resizeXY[6] + leftchange;
                if (left < minLeft) {
                  left = minLeft;
                }
                if (left > resizeXY[4] - resizeXY[6] + resizeXY[2] - 1) {
                  left = resizeXY[4] - resizeXY[6] + resizeXY[2] - 1;
                }
                width = resizeXY[4] - resizeXY[6] + resizeXY[2] - left;
                height = Math.round(width * (resizeXY[3] / resizeXY[2]));
                top = resizeXY[5] - resizeXY[7];
                if (height < 1) {
                  height = 1;
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                  left = resizeXY[4] - resizeXY[6] + resizeXY[2] - width;
                }
                if (height > minTop + store_default.cellmainHeight - store_default.cellMainSrollBarSize - top) {
                  height = minTop + store_default.cellmainHeight - store_default.cellMainSrollBarSize - top;
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                  left = resizeXY[4] - resizeXY[6] + resizeXY[2] - width;
                }
              } else if (resize2 == "rt") {
                left = resizeXY[4] - resizeXY[6];
                width = resizeXY[2] + leftchange;
                if (width < 1) {
                  width = 1;
                }
                if (width > minLeft + store_default.cellmainWidth - store_default.cellMainSrollBarSize - left) {
                  width = minLeft + store_default.cellmainWidth - store_default.cellMainSrollBarSize - left;
                }
                height = Math.round(width * (resizeXY[3] / resizeXY[2]));
                top = resizeXY[5] - resizeXY[7] + resizeXY[3] - height;
                if (top < minTop) {
                  top = minTop;
                  height = resizeXY[5] - resizeXY[7] + resizeXY[3] - top;
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                }
                if (top > resizeXY[5] - resizeXY[7] + resizeXY[3] - 1) {
                  top = resizeXY[5] - resizeXY[7] + resizeXY[3] - 1;
                  height = resizeXY[5] - resizeXY[7] + resizeXY[3] - top;
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                }
              } else if (resize2 == "rm") {
                left = resizeXY[4] - resizeXY[6];
                width = resizeXY[2] + leftchange;
                if (width < 1) {
                  width = 1;
                }
                if (width > minLeft + store_default.cellmainWidth - store_default.cellMainSrollBarSize - left) {
                  width = minLeft + store_default.cellmainWidth - store_default.cellMainSrollBarSize - left;
                }
                top = resizeXY[5] - resizeXY[7];
                height = resizeXY[3];
              } else if (resize2 == "rb") {
                left = resizeXY[4] - resizeXY[6];
                width = resizeXY[2] + leftchange;
                if (width < 1) {
                  width = 1;
                }
                if (width > minLeft + store_default.cellmainWidth - store_default.cellMainSrollBarSize - left) {
                  width = minLeft + store_default.cellmainWidth - store_default.cellMainSrollBarSize - left;
                }
                height = Math.round(width * (resizeXY[3] / resizeXY[2]));
                top = resizeXY[5] - resizeXY[7];
                if (height < 1) {
                  height = 1;
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                }
                if (height > minTop + store_default.cellmainHeight - store_default.cellMainSrollBarSize - top) {
                  height = minTop + store_default.cellmainHeight - store_default.cellMainSrollBarSize - top;
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                }
              } else if (resize2 == "mt") {
                left = resizeXY[4] - resizeXY[6];
                width = resizeXY[2];
                top = resizeXY[5] - resizeXY[7] + topchange;
                if (top < minTop) {
                  top = minTop;
                }
                if (top > resizeXY[5] - resizeXY[7] + resizeXY[3] - 1) {
                  top = resizeXY[5] - resizeXY[7] + resizeXY[3] - 1;
                }
                height = resizeXY[5] - resizeXY[7] + resizeXY[3] - top;
              } else if (resize2 == "mb") {
                left = resizeXY[4] - resizeXY[6];
                width = resizeXY[2];
                top = resizeXY[5] - resizeXY[7];
                height = resizeXY[3] + topchange;
                if (height < 1) {
                  height = 1;
                }
                if (height > minTop + store_default.cellmainHeight - store_default.cellMainSrollBarSize - top) {
                  height = minTop + store_default.cellmainHeight - store_default.cellMainSrollBarSize - top;
                }
              }
            } else {
              if (resize2 == "lt") {
                left = x;
                width = resizeXY[2] - leftchange;
                if (left > resizeXY[2] + resizeXY[4] - 1) {
                  left = resizeXY[2] + resizeXY[4] - 1;
                  width = resizeXY[2] + resizeXY[0] - (resizeXY[2] + resizeXY[4] - 1);
                } else if (left <= 0) {
                  left = 0;
                  width = resizeXY[2] + resizeXY[0];
                }
                height = Math.round(width * (resizeXY[3] / resizeXY[2]));
                top = resizeXY[3] + resizeXY[1] - height;
                if (top > resizeXY[3] + resizeXY[5] - 1) {
                  top = resizeXY[3] + resizeXY[5] - 1;
                  height = resizeXY[3] + resizeXY[1] - (resizeXY[3] + resizeXY[5] - 1);
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                  left = resizeXY[2] + resizeXY[0] - width;
                } else if (top <= 0) {
                  top = 0;
                  height = resizeXY[3] + resizeXY[1];
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                  left = resizeXY[2] + resizeXY[0] - width;
                }
              } else if (resize2 == "lm") {
                left = x;
                width = resizeXY[2] - leftchange;
                if (left > resizeXY[2] + resizeXY[4] - 1) {
                  left = resizeXY[2] + resizeXY[4] - 1;
                  width = resizeXY[2] + resizeXY[0] - (resizeXY[2] + resizeXY[4] - 1);
                } else if (left <= 0) {
                  left = 0;
                  width = resizeXY[2] + resizeXY[0];
                }
              } else if (resize2 == "lb") {
                left = x;
                width = resizeXY[2] - leftchange;
                if (left > resizeXY[2] + resizeXY[4] - 1) {
                  left = resizeXY[2] + resizeXY[4] - 1;
                  width = resizeXY[2] + resizeXY[0] - (resizeXY[2] + resizeXY[4] - 1);
                } else if (left <= 0) {
                  left = 0;
                  width = resizeXY[2] + resizeXY[0];
                }
                height = Math.round(width * (resizeXY[3] / resizeXY[2]));
                if (height < 1) {
                  height = 1;
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                  left = resizeXY[2] + resizeXY[0] - width;
                } else if (height >= imageCtrl_default.currentWinH - resizeXY[5] - 42 - 6) {
                  height = imageCtrl_default.currentWinH - resizeXY[5] - 42 - 6;
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                  left = resizeXY[2] + resizeXY[0] - width;
                }
              } else if (resize2 == "rt") {
                width = resizeXY[2] + leftchange;
                if (width < 1) {
                  width = 1;
                } else if (width >= imageCtrl_default.currentWinW - resizeXY[4] - 22 - 36) {
                  width = imageCtrl_default.currentWinW - resizeXY[4] - 22 - 36;
                }
                height = Math.round(width * (resizeXY[3] / resizeXY[2]));
                top = resizeXY[3] + resizeXY[1] - height;
                if (top > resizeXY[3] + resizeXY[5] - 1) {
                  top = resizeXY[3] + resizeXY[5] - 1;
                  height = resizeXY[3] + resizeXY[1] - (resizeXY[3] + resizeXY[5] - 1);
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                } else if (top <= 0) {
                  top = 0;
                  height = resizeXY[3] + resizeXY[1];
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                }
              } else if (resize2 == "rm") {
                width = resizeXY[2] + leftchange;
                if (width < 1) {
                  width = 1;
                } else if (width >= imageCtrl_default.currentWinW - resizeXY[4] - 22 - 36) {
                  width = imageCtrl_default.currentWinW - resizeXY[4] - 22 - 36;
                }
              } else if (resize2 == "rb") {
                width = resizeXY[2] + leftchange;
                if (width < 1) {
                  width = 1;
                } else if (width >= imageCtrl_default.currentWinW - resizeXY[4] - 22 - 36) {
                  width = imageCtrl_default.currentWinW - resizeXY[4] - 22 - 36;
                }
                height = Math.round(width * (resizeXY[3] / resizeXY[2]));
                if (height < 1) {
                  height = 1;
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                } else if (height >= imageCtrl_default.currentWinH - resizeXY[5] - 42 - 6) {
                  height = imageCtrl_default.currentWinH - resizeXY[5] - 42 - 6;
                  width = Math.round(height * (resizeXY[2] / resizeXY[3]));
                }
              } else if (resize2 == "mt") {
                top = y;
                height = resizeXY[3] - topchange;
                if (top > resizeXY[3] + resizeXY[5] - 1) {
                  top = resizeXY[3] + resizeXY[5] - 1;
                  height = resizeXY[3] + resizeXY[1] - (resizeXY[3] + resizeXY[5] - 1);
                } else if (top <= 0) {
                  top = 0;
                  height = resizeXY[3] + resizeXY[1];
                }
              } else if (resize2 == "mb") {
                height = resizeXY[3] + topchange;
                if (height < 1) {
                  height = 1;
                } else if (height >= imageCtrl_default.currentWinH - resizeXY[5] - 42 - 6) {
                  height = imageCtrl_default.currentWinH - resizeXY[5] - 42 - 6;
                }
              }
            }
            $("#luckysheet-modal-dialog-activeImage").css({
              "width": width,
              "height": height,
              "left": left,
              "top": top
            });
            let scaleX = width / imgItem.crop.width;
            let scaleY = height / imgItem.crop.height;
            let defaultWidth = Math.round(imgItem.default.width * scaleX);
            let defaultHeight = Math.round(imgItem.default.height * scaleY);
            let offsetLeft = Math.round(imgItem.crop.offsetLeft * scaleX);
            let offsetTop = Math.round(imgItem.crop.offsetTop * scaleY);
            $("#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-content").css({
              "background-size": defaultWidth + "px " + defaultHeight + "px",
              "background-position": -offsetLeft + "px " + -offsetTop + "px"
            });
          } else if (!!imageCtrl_default.cropChange) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
            let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
            if (x < 0 || y < 0) {
              return false;
            }
            let cropChangeXY = imageCtrl_default.cropChangeXY;
            let topchange = y - cropChangeXY[1], leftchange = x - cropChangeXY[0];
            let imgItem = imageCtrl_default.images[imageCtrl_default.currentImgId];
            let cropChange = imageCtrl_default.cropChange;
            let width, height, offsetLeft, offsetTop;
            if (cropChange == "lt") {
              offsetLeft = imgItem.crop.offsetLeft + leftchange;
              if (offsetLeft < 0) {
                offsetLeft = 0;
              }
              if (offsetLeft > imgItem.crop.width + imgItem.crop.offsetLeft - 1) {
                offsetLeft = imgItem.crop.width + imgItem.crop.offsetLeft - 1;
              }
              width = imgItem.crop.width + imgItem.crop.offsetLeft - offsetLeft;
              offsetTop = imgItem.crop.offsetTop + topchange;
              if (offsetTop < 0) {
                offsetTop = 0;
              }
              if (offsetTop > imgItem.crop.height + imgItem.crop.offsetTop - 1) {
                offsetTop = imgItem.crop.height + imgItem.crop.offsetTop - 1;
              }
              height = imgItem.crop.height + imgItem.crop.offsetTop - offsetTop;
            } else if (cropChange == "lm") {
              offsetLeft = imgItem.crop.offsetLeft + leftchange;
              if (offsetLeft < 0) {
                offsetLeft = 0;
              }
              if (offsetLeft > imgItem.crop.width + imgItem.crop.offsetLeft - 1) {
                offsetLeft = imgItem.crop.width + imgItem.crop.offsetLeft - 1;
              }
              width = imgItem.crop.width + imgItem.crop.offsetLeft - offsetLeft;
              offsetTop = imgItem.crop.offsetTop;
              height = imgItem.crop.height;
            } else if (cropChange == "lb") {
              offsetLeft = imgItem.crop.offsetLeft + leftchange;
              if (offsetLeft < 0) {
                offsetLeft = 0;
              }
              if (offsetLeft > imgItem.crop.width + imgItem.crop.offsetLeft - 1) {
                offsetLeft = imgItem.crop.width + imgItem.crop.offsetLeft - 1;
              }
              width = imgItem.crop.width + imgItem.crop.offsetLeft - offsetLeft;
              offsetTop = imgItem.crop.offsetTop;
              height = imgItem.crop.height + topchange;
              if (height < 1) {
                height = 1;
              }
              if (height > imgItem.default.height - offsetTop) {
                height = imgItem.default.height - offsetTop;
              }
            } else if (cropChange == "rt") {
              offsetLeft = imgItem.crop.offsetLeft;
              width = imgItem.crop.width + leftchange;
              if (width < 1) {
                width = 1;
              }
              if (width > imgItem.default.width - offsetLeft) {
                width = imgItem.default.width - offsetLeft;
              }
              offsetTop = imgItem.crop.offsetTop + topchange;
              if (offsetTop < 0) {
                offsetTop = 0;
              }
              if (offsetTop > imgItem.crop.height + imgItem.crop.offsetTop - 1) {
                offsetTop = imgItem.crop.height + imgItem.crop.offsetTop - 1;
              }
              height = imgItem.crop.height + imgItem.crop.offsetTop - offsetTop;
            } else if (cropChange == "rm") {
              offsetLeft = imgItem.crop.offsetLeft;
              width = imgItem.crop.width + leftchange;
              if (width < 1) {
                width = 1;
              }
              if (width > imgItem.default.width - offsetLeft) {
                width = imgItem.default.width - offsetLeft;
              }
              offsetTop = imgItem.crop.offsetTop;
              height = imgItem.crop.height;
            } else if (cropChange == "rb") {
              offsetLeft = imgItem.crop.offsetLeft;
              width = imgItem.crop.width + leftchange;
              if (width < 1) {
                width = 1;
              }
              if (width > imgItem.default.width - offsetLeft) {
                width = imgItem.default.width - offsetLeft;
              }
              offsetTop = imgItem.crop.offsetTop;
              height = imgItem.crop.height + topchange;
              if (height < 1) {
                height = 1;
              }
              if (height > imgItem.default.height - offsetTop) {
                height = imgItem.default.height - offsetTop;
              }
            } else if (cropChange == "mt") {
              offsetLeft = imgItem.crop.offsetLeft;
              width = imgItem.crop.width;
              offsetTop = imgItem.crop.offsetTop + topchange;
              if (offsetTop < 0) {
                offsetTop = 0;
              }
              if (offsetTop > imgItem.crop.height + imgItem.crop.offsetTop - 1) {
                offsetTop = imgItem.crop.height + imgItem.crop.offsetTop - 1;
              }
              height = imgItem.crop.height + imgItem.crop.offsetTop - offsetTop;
            } else if (cropChange == "mb") {
              offsetLeft = imgItem.crop.offsetLeft;
              width = imgItem.crop.width;
              offsetTop = imgItem.crop.offsetTop;
              height = imgItem.crop.height + topchange;
              if (height < 1) {
                height = 1;
              }
              if (height > imgItem.default.height - offsetTop) {
                height = imgItem.default.height - offsetTop;
              }
            }
            let left = imgItem.default.left + offsetLeft;
            let top = imgItem.default.top + offsetTop;
            if (imgItem.isFixedPos) {
              left = imgItem.fixedLeft + offsetLeft;
              top = imgItem.fixedTop + offsetTop;
            }
            $("#luckysheet-modal-dialog-cropping").show().css({
              "width": width,
              "height": height,
              "left": left,
              "top": top
            });
            let imageUrlHandle = store_default.toJsonOptions && store_default.toJsonOptions["imageUrlHandle"];
            let imgSrc = typeof imageUrlHandle === "function" ? imageUrlHandle(imgItem.src) : imgItem.src;
            $("#luckysheet-modal-dialog-cropping .cropping-mask").css({
              "width": imgItem.default.width,
              "height": imgItem.default.height,
              "background-image": "url(" + imgSrc + ")",
              "left": -offsetLeft,
              "top": -offsetTop
            });
            $("#luckysheet-modal-dialog-cropping .cropping-content").css({
              "background-image": "url(" + imgSrc + ")",
              "background-size": imgItem.default.width + "px " + imgItem.default.height + "px",
              "background-position": -offsetLeft + "px " + -offsetTop + "px"
            });
            imageCtrl_default.cropChangeObj = {
              width,
              height,
              offsetLeft,
              offsetTop
            };
          } else if (postil_default.move) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
            let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
            let myh = postil_default.currentObj.outerHeight(), myw = postil_default.currentObj.outerWidth();
            let top = y - postil_default.moveXY[1], left = x - postil_default.moveXY[0];
            if (top < 0) {
              top = 0;
            }
            if (top + myh + 42 + 6 > postil_default.currentWinH) {
              top = postil_default.currentWinH - myh - 42 - 6;
            }
            if (left < 0) {
              left = 0;
            }
            if (left + myw + 22 + 36 > postil_default.currentWinW) {
              left = postil_default.currentWinW - myw - 22 - 36;
            }
            postil_default.currentObj.css({"left": left, "top": top});
          } else if (!!postil_default.resize) {
            let mouse = mouseposition(event2.pageX, event2.pageY);
            let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
            let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
            if (x < 0 || y < 0) {
              return false;
            }
            let resizeXY = postil_default.resizeXY;
            let topchange = y - resizeXY[1], leftchange = x - resizeXY[0];
            let top = resizeXY[5], height = resizeXY[3], left = resizeXY[4], width = resizeXY[2];
            let resize2 = postil_default.resize;
            if (resize2 == "lm" || resize2 == "lt" || resize2 == "lb") {
              left = x;
              width = resizeXY[2] - leftchange;
              if (left > resizeXY[2] + resizeXY[4] - 60) {
                left = resizeXY[2] + resizeXY[4] - 60;
                width = resizeXY[2] - (resizeXY[2] + resizeXY[4] - 60 - resizeXY[0]);
              } else if (left <= 0) {
                left = 0;
                width = resizeXY[2] + resizeXY[0];
              }
            }
            if (resize2 == "rm" || resize2 == "rt" || resize2 == "rb") {
              width = resizeXY[2] + leftchange;
              if (width < 60) {
                width = 60;
              } else if (width >= postil_default.currentWinW - resizeXY[4] - 22 - 36) {
                width = postil_default.currentWinW - resizeXY[4] - 22 - 36;
              }
            }
            if (resize2 == "mt" || resize2 == "lt" || resize2 == "rt") {
              top = y;
              height = resizeXY[3] - topchange;
              if (top > resizeXY[3] + resizeXY[5] - 60) {
                top = resizeXY[3] + resizeXY[5] - 60;
                height = resizeXY[3] - (resizeXY[3] + resizeXY[5] - 60 - resizeXY[1]);
              } else if (top <= 0) {
                top = 0;
                height = resizeXY[3] + resizeXY[1];
              }
            }
            if (resize2 == "mb" || resize2 == "lb" || resize2 == "rb") {
              height = resizeXY[3] + topchange;
              if (height < 60) {
                height = 60;
              } else if (height >= postil_default.currentWinH - resizeXY[5] - 42 - 6) {
                height = postil_default.currentWinH - resizeXY[5] - 42 - 6;
              }
            }
            postil_default.currentObj.css({"width": width, "height": height, "left": left, "top": top});
          } else if (!!formula_default.rangeResize) {
            formula_default.rangeResizeDraging(event2, formula_default.rangeResizeObj, formula_default.rangeResizexy, formula_default.rangeResize, formula_default.rangeResizeWinW, formula_default.rangeResizeWinH, store_default.ch_width, store_default.rh_height);
          } else if (!!formula_default.rangeMove) {
            formula_default.rangeMoveDraging(event2, formula_default.rangeMovexy, formula_default.rangeMoveObj.data("range"), formula_default.rangeMoveObj, store_default.sheetBarHeight, store_default.statisticBarHeight);
          } else if (!!store_default.chart_selection.rangeResize) {
            store_default.chart_selection.rangeResizeDraging(event2, store_default.sheetBarHeight, store_default.statisticBarHeight);
          } else if (!!store_default.chart_selection.rangeMove) {
            store_default.chart_selection.rangeMoveDraging(event2, store_default.sheetBarHeight, store_default.statisticBarHeight);
          }
          store_default.jfautoscrollTimeout = window.requestAnimationFrame(mouseRender);
        };
        if (store_default.luckysheet_select_status) {
          clearTimeout(store_default.countfuncTimeout);
          store_default.countfuncTimeout = setTimeout(function() {
            countfunc();
          }, 500);
        }
        store_default.jfautoscrollTimeout = window.requestAnimationFrame(mouseRender);
      }
    });
    $(document).on("mouseup.luckysheetEvent", function(event2) {
      if (luckysheetConfigsetting_default && luckysheetConfigsetting_default.hook && luckysheetConfigsetting_default.hook.sheetMouseup) {
        let mouse = mouseposition(event2.pageX, event2.pageY);
        let x2 = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
        let y2 = mouse[1] + $("#luckysheet-cell-main").scrollTop();
        let row_location = rowLocation(y2), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
        let col_location = colLocation(x2), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
        let margeset = menuButton_default.mergeborer(store_default.flowdata, row_index, col_index);
        if (!!margeset) {
          row = margeset.row[1];
          row_pre = margeset.row[0];
          row_index = margeset.row[2];
          col = margeset.column[1];
          col_pre = margeset.column[0];
          col_index = margeset.column[2];
        }
        let sheetFile = sheetmanage_default.getSheetByIndex();
        let moveState = {
          functionResizeStatus: formula_default.functionResizeStatus,
          horizontalmoveState: !!freezen_default.horizontalmovestate,
          verticalmoveState: !!freezen_default.verticalmovestate,
          pivotTableMoveState: !!pivotTable_default && pivotTable_default.movestate,
          sheetMoveStatus: store_default.luckysheet_sheet_move_status,
          scrollStatus: !!store_default.luckysheet_scroll_status,
          selectStatus: !!store_default.luckysheet_select_status,
          rowsSelectedStatus: !!store_default.luckysheet_rows_selected_status,
          colsSelectedStatus: !!store_default.luckysheet_cols_selected_status,
          cellSelectedMove: !!store_default.luckysheet_cell_selected_move,
          cellSelectedExtend: !!store_default.luckysheet_cell_selected_extend,
          colsChangeSize: !!store_default.luckysheet_cols_change_size,
          rowsChangeSize: !!store_default.luckysheet_rows_change_size,
          chartMove: !!store_default.chartparam.luckysheetCurrentChartMove,
          chartResize: !!store_default.chartparam.luckysheetCurrentChartResize,
          rangeResize: !!formula_default.rangeResize,
          rangeMove: !!formula_default.rangeMove
        };
        let luckysheetTableContent = $("#luckysheetTableContent").get(0).getContext("2d");
        method_default.createHookFunction("sheetMouseup", store_default.flowdata[row_index][col_index], {
          r: row_index,
          c: col_index,
          "start_r": row_pre,
          "start_c": col_pre,
          "end_r": row,
          "end_c": col
        }, sheetFile, moveState, luckysheetTableContent);
      }
      if (store_default.luckysheet_select_status) {
        clearTimeout(store_default.countfuncTimeout);
        store_default.countfuncTimeout = setTimeout(function() {
          countfunc();
        }, 0);
        if (menuButton_default.luckysheetPaintModelOn) {
          selection_default.pasteHandlerOfPaintModel(store_default.luckysheet_copy_save);
          if (menuButton_default.luckysheetPaintSingle) {
            menuButton_default.cancelPaintModel();
          }
        }
      }
      store_default.luckysheet_select_status = false;
      window.cancelAnimationFrame(store_default.jfautoscrollTimeout);
      store_default.luckysheet_scroll_status = false;
      $("#luckysheet-cell-selected").find(".luckysheet-cs-fillhandle").css("cursor", "crosshair").end().find(".luckysheet-cs-draghandle").css("cursor", "move");
      $("#luckysheet-cell-main, #luckysheetTableContent, #luckysheet-sheettable_0").css("cursor", "default");
      store_default.luckysheet_rows_selected_status = false;
      store_default.luckysheet_cols_selected_status = false;
      store_default.luckysheet_model_move_state = false;
      if (formula_default.functionResizeStatus) {
        formula_default.functionResizeStatus = false;
        $("#luckysheet-wa-calculate-size").removeAttr("style");
      }
      if (!!freezen_default.horizontalmovestate) {
        freezen_default.horizontalmovestate = false;
        $("#luckysheet-freezebar-horizontal").removeClass("luckysheet-freezebar-active");
        $("#luckysheet-freezebar-horizontal").find(".luckysheet-freezebar-horizontal-handle").css("cursor", "-webkit-grab");
        if (freezen_default.freezenhorizontaldata[4] <= store_default.columnHeaderHeight) {
          freezen_default.cancelFreezenHorizontal();
        }
        freezen_default.createAssistCanvas();
        luckysheetrefreshgrid();
      }
      if (!!freezen_default.verticalmovestate) {
        freezen_default.verticalmovestate = false;
        $("#luckysheet-freezebar-vertical").removeClass("luckysheet-freezebar-active");
        $("#luckysheet-freezebar-vertical").find(".luckysheet-freezebar-vertical-handle").css("cursor", "-webkit-grab");
        if (freezen_default.freezenverticaldata[4] <= store_default.rowHeaderWidth) {
          freezen_default.cancelFreezenVertical();
        }
        freezen_default.createAssistCanvas();
        luckysheetrefreshgrid();
      }
      if (!!pivotTable_default && pivotTable_default.movestate) {
        $("#luckysheet-modal-dialog-slider-pivot-move").remove();
        pivotTable_default.movestate = false;
        $("#luckysheet-modal-dialog-pivotTable-list, #luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").css("cursor", "default");
        if (pivotTable_default.movesave.containerid != "luckysheet-modal-dialog-pivotTable-list") {
          let $cur = $(event2.target).closest(".luckysheet-modal-dialog-slider-config-list");
          if ($cur.length == 0) {
            if (pivotTable_default.movesave.containerid == "luckysheet-modal-dialog-config-value") {
              pivotTable_default.resetOrderby(pivotTable_default.movesave.obj);
            }
            pivotTable_default.movesave.obj.remove();
            pivotTable_default.showvaluecolrow();
            $("#luckysheet-modal-dialog-pivotTable-list").find(".luckysheet-modal-dialog-slider-list-item").each(function() {
              $(this).find(".luckysheet-slider-list-item-selected").find("i").remove();
            });
            $("#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value").find(".luckysheet-modal-dialog-slider-config-item").each(function() {
              let index2 = $(this).data("index");
              $("#luckysheet-modal-dialog-pivotTable-list").find(".luckysheet-modal-dialog-slider-list-item").each(function() {
                let $seleted = $(this).find(".luckysheet-slider-list-item-selected");
                if ($(this).data("index") == index2 && $seleted.find("i").length == 0) {
                  $seleted.append('<i class="fa fa-check luckysheet-mousedown-cancel"></i>');
                }
              });
            });
            pivotTable_default.refreshPivotTable();
          }
        }
      }
      if (store_default.luckysheet_sheet_move_status) {
        store_default.luckysheet_sheet_move_status = false;
        store_default.luckysheet_sheet_move_data.activeobject.insertBefore($("#luckysheet-sheets-item-clone"));
        store_default.luckysheet_sheet_move_data.activeobject.removeAttr("style");
        $("#luckysheet-sheets-item-clone").remove();
        store_default.luckysheet_sheet_move_data.cursorobject.css({"cursor": "pointer"});
        store_default.luckysheet_sheet_move_data = {};
        sheetmanage_default.reOrderAllSheet();
      }
      clearTimeout(store_default.chartparam.luckysheetCurrentChartMoveTimeout);
      if (!!store_default.chartparam.luckysheetCurrentChartMove) {
        store_default.chartparam.luckysheetCurrentChartMove = false;
        if (store_default.chartparam.luckysheetInsertChartTosheetChange) {
          var myTop = store_default.chartparam.luckysheetCurrentChartMoveObj.css("top"), myLeft = store_default.chartparam.luckysheetCurrentChartMoveObj.css("left"), scrollLeft = $("#luckysheet-cell-main").scrollLeft(), scrollTop = $("#luckysheet-cell-main").scrollTop();
          var x = store_default.chartparam.luckysheetCurrentChartMoveXy[2];
          var y = store_default.chartparam.luckysheetCurrentChartMoveXy[3];
          var scrollLeft1 = store_default.chartparam.luckysheetCurrentChartMoveXy[4];
          var scrollTop1 = store_default.chartparam.luckysheetCurrentChartMoveXy[5];
          var chart_id = store_default.chartparam.luckysheetCurrentChartMoveObj.find(".luckysheet-modal-dialog-content").attr("id");
          store_default.jfredo.push({"type": "moveChart", "chart_id": chart_id, "sheetIndex": store_default.currentSheetIndex, "myTop": myTop, "myLeft": myLeft, "scrollTop": scrollTop, "scrollLeft": scrollLeft, "x": x, "y": y, "scrollTop1": scrollTop1, "scrollLeft1": scrollLeft1});
        }
      }
      if (!!store_default.chartparam.luckysheetCurrentChartResize) {
        store_default.chartparam.luckysheetCurrentChartResize = null;
        if (store_default.chartparam.luckysheetInsertChartTosheetChange) {
          var myHeight = store_default.chartparam.luckysheetCurrentChartResizeObj.height(), myWidth = store_default.chartparam.luckysheetCurrentChartResizeObj.width(), scrollLeft = $("#luckysheet-cell-main").scrollLeft(), scrollTop = $("#luckysheet-cell-main").scrollTop();
          var myTop = store_default.chartparam.luckysheetCurrentChartMoveObj.css("top"), myLeft = store_default.chartparam.luckysheetCurrentChartMoveObj.css("left");
          var chart_id = store_default.chartparam.luckysheetCurrentChartResizeObj.find(".luckysheet-modal-dialog-content").attr("id");
          var myWidth1 = store_default.chartparam.luckysheetCurrentChartResizeXy[2];
          var myHeight1 = store_default.chartparam.luckysheetCurrentChartResizeXy[3];
          var x = store_default.chartparam.luckysheetCurrentChartResizeXy[4];
          var y = store_default.chartparam.luckysheetCurrentChartResizeXy[5];
          var scrollLeft1 = store_default.chartparam.luckysheetCurrentChartResizeXy[6];
          var scrollTop1 = store_default.chartparam.luckysheetCurrentChartResizeXy[7];
          store_default.jfredo.push({"type": "resizeChart", "chart_id": chart_id, "sheetIndex": store_default.currentSheetIndex, "myTop": myTop, "myLeft": myLeft, "myHeight": myHeight, "myWidth": myWidth, "scrollTop": scrollTop, "scrollLeft": scrollLeft, "x": x, "y": y, "myWidth1": myWidth1, "myHeight1": myHeight1, "scrollTop1": scrollTop1, "scrollLeft1": scrollLeft1});
        }
      }
      if (!!formula_default.rangeResize) {
        formula_default.rangeResizeDragged(event2, formula_default.rangeResizeObj, formula_default.rangeResize, formula_default.rangeResizexy, formula_default.rangeResizeWinW, formula_default.rangeResizeWinH);
      }
      if (imageCtrl_default.move) {
        imageCtrl_default.moveImgItem();
      }
      if (imageCtrl_default.resize) {
        imageCtrl_default.resizeImgItem();
      }
      if (imageCtrl_default.cropChange) {
        imageCtrl_default.cropChangeImgItem();
      }
      if (postil_default.move) {
        postil_default.move = false;
        let ps_id = postil_default.currentObj.closest(".luckysheet-postil-show").attr("id");
        let ps_r = ps_id.split("luckysheet-postil-show_")[1].split("_")[0];
        let ps_c = ps_id.split("luckysheet-postil-show_")[1].split("_")[1];
        let d = editor_default.deepCopyFlowData(store_default.flowdata);
        let rc = [];
        d[ps_r][ps_c].ps.left = postil_default.currentObj.position().left;
        d[ps_r][ps_c].ps.top = postil_default.currentObj.position().top;
        d[ps_r][ps_c].ps.value = postil_default.currentObj.find(".formulaInputFocus").html().replaceAll("<div>", "\n").replaceAll(/<(.*)>.*?|<(.*) \/>/g, "").trim();
        rc.push(ps_r + "_" + ps_c);
        postil_default.ref(d, rc);
        $("#" + ps_id).remove();
        if (d[ps_r][ps_c].ps.isshow) {
          postil_default.buildPs(ps_r, ps_c, d[ps_r][ps_c].ps);
          $("#" + ps_id).addClass("luckysheet-postil-show-active");
          $("#" + ps_id).find(".luckysheet-postil-dialog-resize").show();
        } else {
          postil_default.editPs(ps_r, ps_c);
        }
      }
      if (!!postil_default.resize) {
        postil_default.resize = null;
        let ps_id = postil_default.currentObj.closest(".luckysheet-postil-show").attr("id");
        let ps_r = ps_id.split("luckysheet-postil-show_")[1].split("_")[0];
        let ps_c = ps_id.split("luckysheet-postil-show_")[1].split("_")[1];
        let d = editor_default.deepCopyFlowData(store_default.flowdata);
        let rc = [];
        d[ps_r][ps_c].ps.left = postil_default.currentObj.position().left;
        d[ps_r][ps_c].ps.top = postil_default.currentObj.position().top;
        d[ps_r][ps_c].ps.width = postil_default.currentObj.outerWidth();
        d[ps_r][ps_c].ps.height = postil_default.currentObj.outerHeight();
        d[ps_r][ps_c].ps.value = postil_default.currentObj.find(".formulaInputFocus").html().replaceAll("<div>", "\n").replaceAll(/<(.*)>.*?|<(.*) \/>/g, "").trim();
        rc.push(ps_r + "_" + ps_c);
        postil_default.ref(d, rc);
        $("#" + ps_id).remove();
        if (d[ps_r][ps_c].ps.isshow) {
          postil_default.buildPs(ps_r, ps_c, d[ps_r][ps_c].ps);
          $("#" + ps_id).addClass("luckysheet-postil-show-active");
          $("#" + ps_id).find(".luckysheet-postil-dialog-resize").show();
        } else {
          postil_default.editPs(ps_r, ps_c);
        }
      }
      if (store_default.luckysheet_rows_change_size) {
        store_default.luckysheet_rows_change_size = false;
        $("#luckysheet-change-size-line").hide();
        $("#luckysheet-rows-change-size").css("opacity", 0);
        $("#luckysheet-sheettable, #luckysheet-rows-h, #luckysheet-rows-h canvas").css("cursor", "default");
        let mouse = mouseposition(event2.pageX, event2.pageY);
        let scrollTop2 = $("#luckysheet-rows-h").scrollTop();
        let y2 = mouse[1] + scrollTop2;
        let winH = $(window).height();
        let row_location = rowLocation(y2), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
        let size = y2 + 3 - store_default.luckysheet_rows_change_size_start[0];
        if (y2 + 3 - store_default.luckysheet_rows_change_size_start[0] < 19) {
          size = 19;
        }
        if (y2 >= winH - 200 + scrollTop2) {
          size = winH - 200 - store_default.luckysheet_rows_change_size_start[0] + scrollTop2;
        }
        let cfg = $.extend(true, {}, store_default.config);
        if (cfg["rowlen"] == null) {
          cfg["rowlen"] = {};
        }
        if (cfg["customHeight"] == null) {
          cfg["customHeight"] = {};
        }
        cfg["customHeight"][store_default.luckysheet_rows_change_size_start[1]] = 1;
        const changeRowIndex = store_default.luckysheet_rows_change_size_start[1];
        let changeRowSelected = false;
        if (store_default["luckysheet_select_save"].length > 0) {
          store_default["luckysheet_select_save"].filter((select) => select.row_select).some((select) => {
            if (changeRowIndex >= select.row[0] && changeRowIndex <= select.row[1]) {
              changeRowSelected = true;
            }
            return changeRowSelected;
          });
        }
        if (changeRowSelected) {
          store_default["luckysheet_select_save"].filter((select) => select.row_select).forEach((select) => {
            for (let r2 = select.row[0]; r2 <= select.row[1]; r2++) {
              cfg["rowlen"][r2] = Math.ceil(size / store_default.zoomRatio);
            }
          });
        } else {
          cfg["rowlen"][store_default.luckysheet_rows_change_size_start[1]] = Math.ceil(size / store_default.zoomRatio);
        }
        let images = imageCtrl_default.moveChangeSize("row", store_default.luckysheet_rows_change_size_start[1], size);
        if (store_default.clearjfundo) {
          store_default.jfundo.length = 0;
          store_default.jfredo.push({
            "type": "resize",
            "ctrlType": "resizeR",
            "sheetIndex": store_default.currentSheetIndex,
            "config": $.extend(true, {}, store_default.config),
            "curconfig": $.extend(true, {}, cfg),
            "images": $.extend(true, {}, imageCtrl_default.images),
            "curImages": $.extend(true, {}, images)
          });
        }
        store_default.config = cfg;
        store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
        server_default.saveParam("cg", store_default.currentSheetIndex, cfg["rowlen"], {"k": "rowlen"});
        store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].images = images;
        server_default.saveParam("all", store_default.currentSheetIndex, images, {"k": "images"});
        imageCtrl_default.images = images;
        imageCtrl_default.allImagesShow();
        jfrefreshgrid_rhcw(store_default.flowdata.length, null);
      }
      if (store_default.luckysheet_cols_change_size) {
        store_default.luckysheet_cols_change_size = false;
        $("#luckysheet-change-size-line").hide();
        $("#luckysheet-cols-change-size").css("opacity", 0);
        $("#luckysheet-sheettable, #luckysheet-cols-h-c, .luckysheet-cols-h-cells, .luckysheet-cols-h-cells canvas").css("cursor", "default");
        let mouse = mouseposition(event2.pageX, event2.pageY);
        let scrollLeft2 = $("#luckysheet-cols-h-c").scrollLeft();
        let x2 = mouse[0] + scrollLeft2;
        let winW = $(window).width();
        let row_index = store_default.visibledatarow.length - 1, row = store_default.visibledatarow[row_index], row_pre = 0;
        let col_location = colLocation(x2), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
        let size = x2 + 3 - store_default.luckysheet_cols_change_size_start[0];
        let firstcolumnlen = store_default.defaultcollen;
        if (store_default.config["columnlen"] != null && store_default.config["columnlen"][store_default.luckysheet_cols_change_size_start[1]] != null) {
          firstcolumnlen = store_default.config["columnlen"][store_default.luckysheet_cols_change_size_start[1]];
        }
        if (Math.abs(size - firstcolumnlen) < 3) {
          return;
        }
        if (x2 + 3 - store_default.luckysheet_cols_change_size_start[0] < 30) {
          size = 30;
        }
        if (x2 >= winW - 100 + scrollLeft2) {
          size = winW - 100 - store_default.luckysheet_cols_change_size_start[0] + scrollLeft2;
        }
        let cfg = $.extend(true, {}, store_default.config);
        if (cfg["columnlen"] == null) {
          cfg["columnlen"] = {};
        }
        if (cfg["customWidth"] == null) {
          cfg["customWidth"] = {};
        }
        cfg["customWidth"][store_default.luckysheet_cols_change_size_start[1]] = 1;
        const changeColumnIndex = store_default.luckysheet_cols_change_size_start[1];
        let changeColumnSelected = false;
        if (store_default["luckysheet_select_save"].length > 0) {
          store_default["luckysheet_select_save"].filter((select) => select.column_select).some((select) => {
            if (changeColumnIndex >= select.column[0] && changeColumnIndex <= select.column[1]) {
              changeColumnSelected = true;
            }
            return changeColumnSelected;
          });
        }
        if (changeColumnSelected) {
          store_default["luckysheet_select_save"].filter((select) => select.column_select).forEach((select) => {
            for (let r2 = select.column[0]; r2 <= select.column[1]; r2++) {
              cfg["columnlen"][r2] = Math.ceil(size / store_default.zoomRatio);
            }
          });
        } else {
          cfg["columnlen"][store_default.luckysheet_cols_change_size_start[1]] = Math.ceil(size / store_default.zoomRatio);
        }
        let images = imageCtrl_default.moveChangeSize("column", store_default.luckysheet_cols_change_size_start[1], size);
        if (store_default.clearjfundo) {
          store_default.jfundo.length = 0;
          store_default.jfredo.push({
            "type": "resize",
            "ctrlType": "resizeC",
            "sheetIndex": store_default.currentSheetIndex,
            "config": $.extend(true, {}, store_default.config),
            "curconfig": $.extend(true, {}, cfg),
            "images": $.extend(true, {}, imageCtrl_default.images),
            "curImages": $.extend(true, {}, images)
          });
        }
        store_default.config = cfg;
        store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
        server_default.saveParam("cg", store_default.currentSheetIndex, cfg["columnlen"], {"k": "columnlen"});
        store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].images = images;
        server_default.saveParam("all", store_default.currentSheetIndex, images, {"k": "images"});
        imageCtrl_default.images = images;
        imageCtrl_default.allImagesShow();
        jfrefreshgrid_rhcw(null, store_default.flowdata[0].length);
        setTimeout(function() {
          luckysheetrefreshgrid();
        }, 1);
      }
      if (formula_default.rangeMove) {
        formula_default.rangeMoveDragged(formula_default.rangeMoveObj);
      }
      if (store_default.luckysheet_cell_selected_move) {
        $("#luckysheet-cell-selected-move").hide();
        store_default.luckysheet_cell_selected_move = false;
        let mouse = mouseposition(event2.pageX, event2.pageY);
        if (!checkProtectionLockedRangeList(store_default.luckysheet_select_save, store_default.currentSheetIndex)) {
          return;
        }
        let scrollLeft2 = $("#luckysheet-cell-main").scrollLeft();
        let scrollTop2 = $("#luckysheet-cell-main").scrollTop();
        let x2 = mouse[0] + scrollLeft2;
        let y2 = mouse[1] + scrollTop2;
        let winH = $(window).height() + scrollTop2 - store_default.sheetBarHeight - store_default.statisticBarHeight, winW = $(window).width() + scrollLeft2;
        let row_index = rowLocation(y2)[2];
        let col_index = colLocation(x2)[2];
        let row_index_original = store_default.luckysheet_cell_selected_move_index[0], col_index_original = store_default.luckysheet_cell_selected_move_index[1];
        if (row_index == row_index_original && col_index == col_index_original) {
          return;
        }
        let d = editor_default.deepCopyFlowData(store_default.flowdata);
        let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
        let data = getdatabyselection(last);
        let cfg = $.extend(true, {}, store_default.config);
        if (cfg["merge"] == null) {
          cfg["merge"] = {};
        }
        if (cfg["rowlen"] == null) {
          cfg["rowlen"] = {};
        }
        if (hasPartMC(cfg, last["row"][0], last["row"][1], last["column"][0], last["column"][1])) {
          if (isEditMode()) {
            alert(locale_drag2.noMerge);
          } else {
            tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', locale_drag2.noMerge);
          }
          return;
        }
        let row_s = last["row"][0] - row_index_original + row_index, row_e = last["row"][1] - row_index_original + row_index;
        let col_s = last["column"][0] - col_index_original + col_index, col_e = last["column"][1] - col_index_original + col_index;
        if (!checkProtectionLockedRangeList([{row: [row_s, row_e], column: [col_s, col_e]}], store_default.currentSheetIndex)) {
          return;
        }
        if (row_s < 0 || y2 < 0) {
          row_s = 0;
          row_e = last["row"][1] - last["row"][0];
        }
        if (col_s < 0 || x2 < 0) {
          col_s = 0;
          col_e = last["column"][1] - last["column"][0];
        }
        if (row_e >= store_default.visibledatarow[store_default.visibledatarow.length - 1] || y2 > winH) {
          row_s = store_default.visibledatarow.length - 1 - last["row"][1] + last["row"][0];
          row_e = store_default.visibledatarow.length - 1;
        }
        if (col_e >= store_default.visibledatacolumn[store_default.visibledatacolumn.length - 1] || x2 > winW) {
          col_s = store_default.visibledatacolumn.length - 1 - last["column"][1] + last["column"][0];
          col_e = store_default.visibledatacolumn.length - 1;
        }
        if (hasPartMC(cfg, row_s, row_e, col_s, col_e)) {
          if (isEditMode()) {
            alert(locale_drag2.noMerge);
          } else {
            tooltip_default.info('<i class="fa fa-exclamation-triangle"></i>', locale_drag2.noMerge);
          }
          return;
        }
        let borderInfoCompute = getBorderInfoCompute(store_default.currentSheetIndex);
        let RowlChange = null;
        for (let r2 = last["row"][0]; r2 <= last["row"][1]; r2++) {
          if (r2 in cfg["rowlen"]) {
            RowlChange = true;
          }
          for (let c2 = last["column"][0]; c2 <= last["column"][1]; c2++) {
            let cell = d[r2][c2];
            if (getObjType(cell) == "object" && "mc" in cell) {
              if (cell["mc"].r + "_" + cell["mc"].c in cfg["merge"]) {
                delete cfg["merge"][cell["mc"].r + "_" + cell["mc"].c];
              }
            }
            d[r2][c2] = null;
          }
        }
        if (cfg["borderInfo"] && cfg["borderInfo"].length > 0) {
          let borderInfo = [];
          for (let i2 = 0; i2 < cfg["borderInfo"].length; i2++) {
            let bd_rangeType = cfg["borderInfo"][i2].rangeType;
            if (bd_rangeType == "range") {
              let bd_range = cfg["borderInfo"][i2].range;
              let bd_emptyRange = [];
              for (let j = 0; j < bd_range.length; j++) {
                bd_emptyRange = bd_emptyRange.concat(conditionformat_default.CFSplitRange(bd_range[j], {"row": last["row"], "column": last["column"]}, {"row": [row_s, row_e], "column": [col_s, col_e]}, "restPart"));
              }
              cfg["borderInfo"][i2].range = bd_emptyRange;
              borderInfo.push(cfg["borderInfo"][i2]);
            } else if (bd_rangeType == "cell") {
              let bd_r = cfg["borderInfo"][i2].value.row_index;
              let bd_c = cfg["borderInfo"][i2].value.col_index;
              if (!(bd_r >= last["row"][0] && bd_r <= last["row"][1] && bd_c >= last["column"][0] && bd_c <= last["column"][1])) {
                borderInfo.push(cfg["borderInfo"][i2]);
              }
            }
          }
          cfg["borderInfo"] = borderInfo;
        }
        let offsetMC = {};
        for (let r2 = 0; r2 < data.length; r2++) {
          for (let c2 = 0; c2 < data[0].length; c2++) {
            if (borderInfoCompute[r2 + last["row"][0] + "_" + (c2 + last["column"][0])]) {
              let bd_obj = {
                "rangeType": "cell",
                "value": {
                  "row_index": r2 + row_s,
                  "col_index": c2 + col_s,
                  "l": borderInfoCompute[r2 + last["row"][0] + "_" + (c2 + last["column"][0])].l,
                  "r": borderInfoCompute[r2 + last["row"][0] + "_" + (c2 + last["column"][0])].r,
                  "t": borderInfoCompute[r2 + last["row"][0] + "_" + (c2 + last["column"][0])].t,
                  "b": borderInfoCompute[r2 + last["row"][0] + "_" + (c2 + last["column"][0])].b
                }
              };
              if (cfg["borderInfo"] == null) {
                cfg["borderInfo"] = [];
              }
              cfg["borderInfo"].push(bd_obj);
            }
            let value = "";
            if (data[r2] != null && data[r2][c2] != null) {
              value = data[r2][c2];
            }
            if (getObjType(value) == "object" && "mc" in value) {
              let mc = $.extend(true, {}, value["mc"]);
              if ("rs" in value["mc"]) {
                offsetMC[mc.r + "_" + mc.c] = [r2 + row_s, c2 + col_s];
                value["mc"].r = r2 + row_s;
                value["mc"].c = c2 + col_s;
                cfg["merge"][r2 + row_s + "_" + (c2 + col_s)] = value["mc"];
              } else {
                value["mc"].r = offsetMC[mc.r + "_" + mc.c][0];
                value["mc"].c = offsetMC[mc.r + "_" + mc.c][1];
              }
            }
            d[r2 + row_s][c2 + col_s] = value;
          }
        }
        if (RowlChange) {
          cfg = rowlenByRange(d, last["row"][0], last["row"][1], cfg);
          cfg = rowlenByRange(d, row_s, row_e, cfg);
        }
        let cdformat = $.extend(true, [], store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)]["luckysheet_conditionformat_save"]);
        if (cdformat != null && cdformat.length > 0) {
          for (let i2 = 0; i2 < cdformat.length; i2++) {
            let cdformat_cellrange = cdformat[i2].cellrange;
            let emptyRange = [];
            for (let j = 0; j < cdformat_cellrange.length; j++) {
              let range3 = conditionformat_default.CFSplitRange(cdformat_cellrange[j], {"row": last["row"], "column": last["column"]}, {"row": [row_s, row_e], "column": [col_s, col_e]}, "allPart");
              emptyRange = emptyRange.concat(range3);
            }
            cdformat[i2].cellrange = emptyRange;
          }
        }
        let rf;
        if (store_default.luckysheet_select_save[0].row_focus == store_default.luckysheet_select_save[0].row[0]) {
          rf = row_s;
        } else {
          rf = row_e;
        }
        let cf;
        if (store_default.luckysheet_select_save[0].column_focus == store_default.luckysheet_select_save[0].column[0]) {
          cf = col_s;
        } else {
          cf = col_e;
        }
        let range2 = [];
        range2.push({"row": last["row"], "column": last["column"]});
        range2.push({"row": [row_s, row_e], "column": [col_s, col_e]});
        last["row"] = [row_s, row_e];
        last["column"] = [col_s, col_e];
        last["row_focus"] = rf;
        last["column_focus"] = cf;
        let allParam = {
          "cfg": cfg,
          "RowlChange": RowlChange,
          "cdformat": cdformat
        };
        jfrefreshgrid(d, range2, allParam);
        selectHightlightShow();
        $("#luckysheet-sheettable").css("cursor", "default");
        clearTimeout(store_default.countfuncTimeout);
        store_default.countfuncTimeout = setTimeout(function() {
          countfunc();
        }, 500);
      }
      if (store_default.chart_selection.rangeMove) {
        store_default.chart_selection.rangeMoveDragged();
      }
      if (!!store_default.chart_selection.rangeResize) {
        store_default.chart_selection.rangeResizeDragged();
      }
      if (store_default.luckysheet_cell_selected_extend) {
        store_default.luckysheet_cell_selected_extend = false;
        $("#luckysheet-cell-selected-extend").hide();
        if (!checkProtectionLockedRangeList(store_default.luckysheet_select_save, store_default.currentSheetIndex)) {
          return;
        }
        let mouse = mouseposition(event2.pageX, event2.pageY);
        let scrollLeft2 = $("#luckysheet-cell-main").scrollLeft();
        let scrollTop2 = $("#luckysheet-cell-main").scrollTop();
        let x2 = mouse[0] + scrollLeft2 - 5;
        let y2 = mouse[1] + scrollTop2 - 5;
        let winH = $(window).height() + scrollTop2 - store_default.sheetBarHeight - store_default.statisticBarHeight, winW = $(window).width() + scrollLeft2;
        let row_location = rowLocation(y2), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
        let col_location = colLocation(x2), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
        let row_index_original = store_default.luckysheet_cell_selected_extend_index[0], col_index_original = store_default.luckysheet_cell_selected_extend_index[1];
        let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
        let row_s = last["row"][0], row_e = last["row"][1];
        let col_s = last["column"][0], col_e = last["column"][1];
        if (row_s < 0 || y2 < 0) {
          row_s = 0;
          row_e = last["row"][1] - last["row"][0];
        }
        if (col_s < 0 || x2 < 0) {
          col_s = 0;
          col_e = last["column"][1] - last["column"][0];
        }
        if (row_e >= store_default.visibledatarow[store_default.visibledatarow.length - 1] || y2 > winH) {
          row_s = store_default.visibledatarow.length - 1 - last["row"][1] + last["row"][0];
          row_e = store_default.visibledatarow.length - 1;
        }
        if (col_e >= store_default.visibledatacolumn[store_default.visibledatacolumn.length - 1] || x2 > winW) {
          col_s = store_default.visibledatacolumn.length - 1 - last["column"][1] + last["column"][0];
          col_e = store_default.visibledatacolumn.length - 1;
        }
        dropCell_default.copyRange = {"row": $.extend(true, [], last["row"]), "column": $.extend(true, [], last["column"])};
        let typeItemHide = dropCell_default.typeItemHide();
        if (!typeItemHide[0] && !typeItemHide[1] && !typeItemHide[2] && !typeItemHide[3] && !typeItemHide[4] && !typeItemHide[5] && !typeItemHide[6]) {
          dropCell_default.applyType = "0";
        } else {
          dropCell_default.applyType = "1";
        }
        if (Math.abs(row_index_original - row_index) > Math.abs(col_index_original - col_index)) {
          if (!(row_index >= row_s && row_index <= row_e)) {
            if (store_default.luckysheet_select_save[0].top_move >= row_pre) {
              dropCell_default.applyRange = {"row": [row_index, last["row"][0] - 1], "column": last["column"]};
              dropCell_default.direction = "up";
              row_s -= last["row"][0] - row_index;
              if (pivotTable_default.isPivotRange(row_s, col_e)) {
                tooltip_default.info(locale_drag2.affectPivot, "");
                return;
              }
            } else {
              dropCell_default.applyRange = {"row": [last["row"][1] + 1, row_index], "column": last["column"]};
              dropCell_default.direction = "down";
              row_e += row_index - last["row"][1];
              if (pivotTable_default.isPivotRange(row_e, col_e)) {
                tooltip_default.info(locale_drag2.affectPivot, "");
                return;
              }
            }
          } else {
            return;
          }
        } else {
          if (!(col_index >= col_s && col_index <= col_e)) {
            if (store_default.luckysheet_select_save[0].left_move >= col_pre) {
              dropCell_default.applyRange = {"row": last["row"], "column": [col_index, last["column"][0] - 1]};
              dropCell_default.direction = "left";
              col_s -= last["column"][0] - col_index;
              if (pivotTable_default.isPivotRange(row_e, col_s)) {
                tooltip_default.info(locale_drag2.affectPivot, "");
                return;
              }
            } else {
              dropCell_default.applyRange = {"row": last["row"], "column": [last["column"][1] + 1, col_index]};
              dropCell_default.direction = "right";
              col_e += col_index - last["column"][1];
              if (pivotTable_default.isPivotRange(row_e, col_e)) {
                tooltip_default.info(locale_drag2.affectPivot, "");
                return;
              }
            }
          } else {
            return;
          }
        }
        if (store_default.config["merge"] != null) {
          let hasMc = false;
          for (let r2 = last["row"][0]; r2 <= last["row"][1]; r2++) {
            for (let c2 = last["column"][0]; c2 <= last["column"][1]; c2++) {
              let cell = store_default.flowdata[r2][c2];
              if (cell != null && cell.mc != null) {
                hasMc = true;
                break;
              }
            }
          }
          if (hasMc) {
            if (isEditMode()) {
              alert(locale_drag2.noMerge);
            } else {
              tooltip_default.info(locale_drag2.noMerge, "");
            }
            return;
          }
          for (let r2 = row_s; r2 <= row_e; r2++) {
            for (let c2 = col_s; c2 <= col_e; c2++) {
              let cell = store_default.flowdata[r2][c2];
              if (cell != null && cell.mc != null) {
                hasMc = true;
                break;
              }
            }
          }
          if (hasMc) {
            if (isEditMode()) {
              alert(locale_drag2.noMerge);
            } else {
              tooltip_default.info(locale_drag2.noMerge, "");
            }
            return;
          }
        }
        last["row"] = [row_s, row_e];
        last["column"] = [col_s, col_e];
        dropCell_default.update();
        dropCell_default.createIcon();
        $("#luckysheet-cell-selected-move").hide();
        $("#luckysheet-sheettable").css("cursor", "default");
        clearTimeout(store_default.countfuncTimeout);
        store_default.countfuncTimeout = setTimeout(function() {
          countfunc();
        }, 500);
      }
    });
    $(".luckysheet-grid-container, #luckysheet-rightclick-menu").on("contextmenu", function(e) {
      e.preventDefault();
    });
    $("#luckysheet-cell-main div.luckysheet-cs-draghandle").mousedown(function(event2) {
      if (isEditMode() || store_default.allowEdit === false) {
        return;
      }
      $("#luckysheet-cell-selected").find(".luckysheet-cs-fillhandle").css("cursor", "move").end().find(".luckysheet-cs-draghandle").css("cursor", "move");
      $("#luckysheet-cell-main, #luckysheetTableContent, #luckysheet-sheettable_0").css("cursor", "move");
      store_default.luckysheet_cell_selected_move = true;
      store_default.luckysheet_scroll_status = true;
      let mouse = mouseposition(event2.pageX, event2.pageY);
      let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
      let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
      let row_location = rowLocation(y), row_pre = row_location[0], row = row_location[1], row_index = row_location[2];
      let col_location = colLocation(x), col_pre = col_location[0], col = col_location[1], col_index = col_location[2];
      store_default.luckysheet_cell_selected_move_index = [row_index, col_index];
      $("#luckysheet-cell-selected-move").css({
        "left": col_pre,
        "width": col - col_pre - 1,
        "top": row_pre,
        "height": row - row_pre - 1,
        "display": "block"
      });
      event2.stopPropagation();
    });
    $("#luckysheet-cell-main div.luckysheet-cs-fillhandle").mousedown(function(event2) {
      if (isEditMode() || store_default.allowEdit === false) {
        return;
      }
      $("#luckysheet-cell-selected").find(".luckysheet-cs-fillhandle").css("cursor", "crosshair").end().find(".luckysheet-cs-draghandle").css("cursor", "crosshair");
      $("#luckysheet-cell-main, #luckysheetTableContent, #luckysheet-sheettable_0").css("cursor", "crosshair");
      store_default.luckysheet_cell_selected_extend_time = setTimeout(function() {
        store_default.luckysheet_cell_selected_extend = true;
        store_default.luckysheet_scroll_status = true;
        let mouse = mouseposition(event2.pageX, event2.pageY);
        let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft() - 5;
        let y = mouse[1] + $("#luckysheet-cell-main").scrollTop() - 5;
        let row_location = rowLocation(y), row_pre = row_location[0], row = row_location[1], row_index = row_location[2];
        let col_location = colLocation(x), col_pre = col_location[0], col = col_location[1], col_index = col_location[2];
        store_default.luckysheet_cell_selected_extend_index = [row_index, col_index];
        $("#luckysheet-cell-selected-extend").css({
          "left": col_pre,
          "width": col - col_pre - 1,
          "top": row_pre,
          "height": row - row_pre - 1,
          "display": "block"
        });
      }, 100);
      event2.stopPropagation();
    }).click(function() {
      clearTimeout(store_default.luckysheet_cell_selected_extend_time);
      event.stopPropagation();
    }).dblclick(function() {
      let last = store_default.luckysheet_select_save[0];
      let r0 = last.row[0], r1 = last.row[1], c0 = last.column[0], c1 = last.column[1];
      if (pivotTable_default.isPivotRange(r0, c0)) {
        return;
      }
      let dropCellState = false;
      let step = 0;
      for (let r2 = r1 + 1; r2 < store_default.flowdata.length; r2++) {
        if (c0 - 1 >= 0 && c1 + 1 < store_default.flowdata[0].length) {
          let cell1 = store_default.flowdata[r2][c0 - 1];
          let cell2 = store_default.flowdata[r2][c1 + 1];
          if (r2 == r1 + 1) {
            if ((cell1 == null || isRealNull(cell1.v)) && (cell2 == null || isRealNull(cell2.v))) {
              dropCellState = false;
              break;
            } else {
              dropCellState = true;
              step++;
            }
          } else {
            if ((cell1 == null || isRealNull(cell1.v)) && (cell2 == null || isRealNull(cell2.v))) {
              break;
            }
            step++;
          }
        } else if (c0 - 1 >= 0) {
          let cell = store_default.flowdata[r2][c0 - 1];
          if (r2 == r1 + 1) {
            if (cell == null || isRealNull(cell.v)) {
              dropCellState = false;
              break;
            } else {
              dropCellState = true;
              step++;
            }
          } else {
            if (cell == null || isRealNull(cell.v)) {
              break;
            }
            step++;
          }
        } else if (c1 + 1 < store_default.flowdata[0].length) {
          let cell = store_default.flowdata[r2][c1 + 1];
          if (r2 == r1 + 1) {
            if (cell == null || isRealNull(cell.v)) {
              dropCellState = false;
              break;
            } else {
              dropCellState = true;
              step++;
            }
          } else {
            if (cell == null || isRealNull(cell.v)) {
              break;
            }
            step++;
          }
        }
      }
      if (!dropCellState || step == 0) {
        event.stopPropagation();
        return;
      }
      dropCell_default.copyRange = {"row": [r0, r1], "column": [c0, c1]};
      let typeItemHide = dropCell_default.typeItemHide();
      if (!typeItemHide[0] && !typeItemHide[1] && !typeItemHide[2] && !typeItemHide[3] && !typeItemHide[4] && !typeItemHide[5] && !typeItemHide[6]) {
        dropCell_default.applyType = "0";
      } else {
        dropCell_default.applyType = "1";
      }
      dropCell_default.applyRange = {"row": [r1 + 1, r1 + step], "column": [c0, c1]};
      dropCell_default.direction = "down";
      store_default.luckysheet_select_save = [{"row": [r0, r1 + step], "column": [c0, c1]}];
      dropCell_default.update();
      dropCell_default.createIcon();
      $("#luckysheet-cell-selected-move").hide();
      $("#luckysheet-sheettable").css("cursor", "default");
      clearTimeout(store_default.countfuncTimeout);
      store_default.countfuncTimeout = setTimeout(function() {
        countfunc();
      }, 500);
      event.stopPropagation();
    });
    $("#luckysheet-bottom-add-row, #luckysheet-bottom-add-row-input, #luckysheet-bottom-return-top").on("mousedown dblclick mouseup", function(e) {
      e.stopPropagation();
    });
    $("#luckysheet-bottom-add-row").on("click", function(e) {
      $("#luckysheet-rightclick-menu").hide();
      luckysheetContainerFocus();
      let $t = $(this), value = $("#luckysheet-bottom-add-row-input").val();
      if (value == "") {
        value = luckysheetConfigsetting_default.addRowCount || 100;
      }
      if (isNaN(parseInt(value))) {
        if (isEditMode()) {
          alert(locale_info.tipInputNumber);
        } else {
          tooltip_default.info("error", locale_info.tipInputNumber);
        }
        return;
      }
      value = parseInt(value);
      if (value < 1 || value > 100) {
        if (isEditMode()) {
          alert(locale_info.tipInputNumberLimit);
        } else {
          tooltip_default.info("error", locale_info.tipInputNumberLimit);
        }
        return;
      }
      luckysheetextendtable("row", store_default.flowdata.length - 1, value);
    });
    $("#luckysheet-bottom-return-top").on("click", function(e) {
      $("#luckysheet-scrollbar-y").scrollTop(0);
    });
    $("#luckysheet-copy-btn, #luckysheet-cols-copy-btn, #luckysheet-paste-btn-title").click(function(event2) {
      $(this).parent().hide();
      if (store_default.config["merge"] != null) {
        let has_PartMC = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
          if (has_PartMC) {
            break;
          }
        }
        if (has_PartMC) {
          if (isEditMode()) {
            alert(locale_drag2.noPartMerge);
          } else {
            tooltip_default.info(locale_drag2.noPartMerge, "");
          }
          return;
        }
      }
      let cdformat = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].luckysheet_conditionformat_save;
      if (store_default.luckysheet_select_save.length > 1 && cdformat != null && cdformat.length > 0) {
        let hasCF = false;
        let cf_compute = conditionformat_default.getComputeMap();
        label:
          for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
            if (hasCF) {
              break;
            }
            let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
            let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
            for (let r3 = r1; r3 <= r2; r3++) {
              for (let c3 = c1; c3 <= c2; c3++) {
                if (conditionformat_default.checksCF(r3, c3, cf_compute) != null) {
                  hasCF = true;
                  continue label;
                }
              }
            }
          }
        if (hasCF) {
          if (isEditMode()) {
            alert(locale_drag2.noMulti);
          } else {
            tooltip_default.info(locale_drag2.noMulti, "");
          }
          return;
        }
      }
      if (store_default.luckysheet_select_save.length > 1) {
        let isSameRow = true, str_r = store_default.luckysheet_select_save[0].row[0], end_r = store_default.luckysheet_select_save[0].row[1];
        let isSameCol = true, str_c = store_default.luckysheet_select_save[0].column[0], end_c = store_default.luckysheet_select_save[0].column[1];
        for (let s = 1; s < store_default.luckysheet_select_save.length; s++) {
          if (store_default.luckysheet_select_save[s].row[0] != str_r || store_default.luckysheet_select_save[s].row[1] != end_r) {
            isSameRow = false;
          }
          if (store_default.luckysheet_select_save[s].column[0] != str_c || store_default.luckysheet_select_save[s].column[1] != end_c) {
            isSameCol = false;
          }
        }
        if (!isSameRow && !isSameCol || selectIsOverlap()) {
          if (isEditMode()) {
            alert(locale_drag2.noMulti);
          } else {
            tooltip_default.info(locale_drag2.noMulti, "");
          }
          return;
        }
      }
      selection_default.copy(event2);
    });
    $("#luckysheet-copy-paste, #luckysheet-cols-paste-btn, #luckysheet-paste-btn-title").click(function(event2) {
      selection_default.paste(event2, "btn");
      $(this).parent().hide();
    });
    $("#luckysheet-chart-btn-title").click(function() {
      createLuckyChart();
    });
    $("#luckysheetdatavisual").click(function() {
      createLuckyChart();
      $("#luckysheet-rightclick-menu").hide();
    });
    $("#luckysheet-pivot-btn-title").click(function(e) {
      if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "usePivotTablereports")) {
        return;
      }
      pivotTable_default.createPivotTable(e);
    });
    $("#luckysheet-chart-btn-screenshot").click(function() {
      const locale_screenshot = _locale.screenshot;
      if (store_default.luckysheet_select_save.length == 0) {
        if (isEditMode()) {
          alert(locale_screenshot.screenshotTipNoSelection);
        } else {
          tooltip_default.info(locale_screenshot.screenshotTipTitle, locale_screenshot.screenshotTipNoSelection);
        }
        return;
      }
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_screenshot.screenshotTipHasMulti);
        } else {
          tooltip_default.info(locale_screenshot.screenshotTipTitle, locale_screenshot.screenshotTipHasMulti);
        }
        return;
      }
      if (store_default.config["merge"] != null) {
        let has_PartMC = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
          if (has_PartMC) {
            break;
          }
        }
        if (has_PartMC) {
          if (isEditMode()) {
            alert(locale_screenshot.screenshotTipHasMerge);
          } else {
            tooltip_default.info(locale_screenshot.screenshotTipTitle, locale_screenshot.screenshotTipHasMerge);
          }
          return;
        }
      }
      let st_r = store_default.luckysheet_select_save[0].row[0], ed_r = store_default.luckysheet_select_save[0].row[1];
      let st_c = store_default.luckysheet_select_save[0].column[0], ed_c = store_default.luckysheet_select_save[0].column[1];
      let scrollHeight, rh_height;
      if (st_r - 1 < 0) {
        scrollHeight = 0;
        rh_height = store_default.visibledatarow[ed_r];
      } else {
        scrollHeight = store_default.visibledatarow[st_r - 1];
        rh_height = store_default.visibledatarow[ed_r] - store_default.visibledatarow[st_r - 1];
      }
      let scrollWidth, ch_width;
      if (st_c - 1 < 0) {
        scrollWidth = 0;
        ch_width = store_default.visibledatacolumn[ed_c];
      } else {
        scrollWidth = store_default.visibledatacolumn[st_c - 1];
        ch_width = store_default.visibledatacolumn[ed_c] - store_default.visibledatacolumn[st_c - 1];
      }
      let newCanvas = $("<canvas>").attr({
        width: Math.ceil(ch_width * store_default.devicePixelRatio),
        height: Math.ceil(rh_height * store_default.devicePixelRatio)
      }).css({width: ch_width, height: rh_height});
      luckysheetDrawMain(scrollWidth, scrollHeight, ch_width, rh_height, 1, 1, null, null, newCanvas);
      let ctx_newCanvas = newCanvas.get(0).getContext("2d");
      ctx_newCanvas.beginPath();
      ctx_newCanvas.moveTo(0, 0);
      ctx_newCanvas.lineTo(0, store_default.devicePixelRatio * rh_height);
      ctx_newCanvas.lineWidth = store_default.devicePixelRatio * 2;
      ctx_newCanvas.strokeStyle = luckysheetdefaultstyle.strokeStyle;
      ctx_newCanvas.stroke();
      ctx_newCanvas.closePath();
      ctx_newCanvas.beginPath();
      ctx_newCanvas.moveTo(0, 0);
      ctx_newCanvas.lineTo(store_default.devicePixelRatio * ch_width, 0);
      ctx_newCanvas.lineWidth = store_default.devicePixelRatio * 2;
      ctx_newCanvas.strokeStyle = luckysheetdefaultstyle.strokeStyle;
      ctx_newCanvas.stroke();
      ctx_newCanvas.closePath();
      let image = new Image();
      let url = newCanvas.get(0).toDataURL("image/png");
      image.src = url;
      if (ch_width > rh_height) {
        image.style.width = "100%";
      } else {
        image.style.height = "100%";
      }
      let maxHeight = $(window).height() - 200;
      tooltip_default.screenshot(locale_screenshot.screenshotTipSuccess, '<div id="luckysheet-confirm-screenshot-save" style="height:' + maxHeight + 'px;overflow:auto;"></div>', url);
      $("#luckysheet-confirm-screenshot-save").append(image);
      newCanvas.remove();
    });
    $(document).on("click.luckysheetEvent", "a.download", function() {
      let dataURI = $("#luckysheet-confirm-screenshot-save img").attr("src");
      const locale_screenshot = _locale.screenshot;
      let binStr = atob(dataURI.split(",")[1]), len = binStr.length, arr = new Uint8Array(len);
      for (let i2 = 0; i2 < len; i2++) {
        arr[i2] = binStr.charCodeAt(i2);
      }
      let blob = new Blob([arr]);
      let element = document.createElement("a");
      element.setAttribute("href", URL.createObjectURL(blob));
      element.setAttribute("download", locale_screenshot.screenshotImageName + ".png");
      element.style.display = "none";
      document.body.appendChild(element);
      element.click();
      let clickHandler;
      element.addEventListener("click", clickHandler = function() {
        requestAnimationFrame(function() {
          URL.revokeObjectURL(element.href);
        });
        element.removeAttribute("href");
        element.removeEventListener("click", clickHandler);
      });
      document.body.removeChild(element);
    });
    $("#luckysheet-splitColumn-btn-title").click(function() {
      if (!checkProtectionNotEnable(store_default.currentSheetIndex)) {
        return;
      }
      if (store_default.luckysheet_select_save == null || store_default.luckysheet_select_save.length == 0) {
        return;
      }
      const locale_splitText = _locale.splitText;
      if (store_default.luckysheet_select_save.length > 1) {
        tooltip_default.info(locale_splitText.tipNoMulti, "");
        return;
      }
      if (store_default.luckysheet_select_save[0].column[0] != store_default.luckysheet_select_save[0].column[1]) {
        tooltip_default.info(locale_splitText.tipNoMultiColumn, "");
        return;
      }
      splitColumn_default.createDialog();
      splitColumn_default.init();
    });
    $("#luckysheet-insertImg-btn-title").click(function() {
      if (!checkIsAllowEdit()) {
        tooltip_default.info("", locale_default().pivotTable.errorNotAllowEdit);
        return;
      }
      if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "editObjects")) {
        return;
      }
      $("#luckysheet-imgUpload").click();
    });
    $("#luckysheetInsertImage").click(function() {
      if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "editObjects")) {
        return;
      }
      $("#luckysheet-imgUpload").click();
      $("#luckysheet-rightclick-menu").hide();
    });
    $("#luckysheet-imgUpload").click(function(e) {
      e.stopPropagation();
    });
    $("#luckysheet-imgUpload").on("change", function(e) {
      if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "editObjects", false)) {
        return;
      }
      let file = e.currentTarget.files[0];
      imageCtrl_default.insertImg(file);
    });
    $("#luckysheet-insertLink-btn-title").click(function() {
      if (!checkIsAllowEdit()) {
        tooltip_default.info("", locale_default().pivotTable.errorNotAllowEdit);
        return;
      }
      if (!checkProtectionNotEnable(store_default.currentSheetIndex)) {
        return;
      }
      if (store_default.luckysheet_select_save == null || store_default.luckysheet_select_save.length == 0) {
        return;
      }
      hyperlinkCtrl_default.createDialog();
      hyperlinkCtrl_default.init();
    });
    $("#luckysheetInsertLink").click(function() {
      $("#luckysheet-insertLink-btn-title").click();
      $("#luckysheet-rightclick-menu").hide();
    });
    $("#luckysheet-dataVerification-btn-title").click(function() {
      if (!checkProtectionNotEnable(store_default.currentSheetIndex)) {
        return;
      }
      if (store_default.luckysheet_select_save == null || store_default.luckysheet_select_save.length == 0) {
        return;
      }
      dataVerificationCtrl_default.createDialog();
      dataVerificationCtrl_default.init();
    });
    $("#luckysheetDataVerification").click(function() {
      $("#luckysheet-dataVerification-btn-title").click();
      $("#luckysheet-rightclick-menu").hide();
    });
    $("#luckysheetCellFormatRightClickMenu").click(function() {
      openCellFormatModel();
    });
    $("#luckysheet-freezen-btn-horizontal").click(function() {
      if ($.trim($(this).text()) == locale_default().freezen.freezenCancel) {
        freezen_default.saveFrozen("freezenCancel");
        if (freezen_default.freezenverticaldata != null) {
          freezen_default.cancelFreezenVertical();
          freezen_default.createAssistCanvas();
          luckysheetrefreshgrid();
        }
        if (freezen_default.freezenhorizontaldata != null) {
          freezen_default.cancelFreezenHorizontal();
          freezen_default.createAssistCanvas();
          luckysheetrefreshgrid();
        }
        freezen_default.scrollAdapt();
        $("#luckysheet-icon-freezen-menu-menuButton").find(".fa.fa-check").remove();
      } else {
        freezen_default.saveFrozen("freezenRow");
        if (freezen_default.freezenverticaldata != null) {
          freezen_default.cancelFreezenVertical();
          freezen_default.createAssistCanvas();
          luckysheetrefreshgrid();
        }
        if (freezen_default.freezenhorizontaldata == null) {
          freezen_default.createFreezenHorizontal();
          freezen_default.createAssistCanvas();
        }
      }
    });
    $("#luckysheet-freezen-btn-vertical").click(function() {
      if (freezen_default.freezenverticaldata != null) {
        freezen_default.saveFrozen("freezenCancel");
        freezen_default.cancelFreezenVertical();
        luckysheetrefreshgrid();
      } else {
        freezen_default.saveFrozen("freezenColumn");
        freezen_default.createFreezenVertical();
      }
      freezen_default.createAssistCanvas();
    });
    $("#luckysheet-rightclick-menu input").on("keydown", function(e) {
      e.stopPropagation();
    });
    $("#luckysheet-modal-dialog-mask").on("click dbclick mousedown mousemove mouseup", function(e) {
      e.stopPropagation();
      e.preventDefault();
    });
    let copychange = function() {
      if (document.hidden || document.webkitHidden || document.msHidden) {
        store_default.iscopyself = false;
      }
    };
    $(document).on("visibilitychange.luckysheetEvent webkitvisibilitychange.luckysheetEvent msvisibilitychange.luckysheetEvent", copychange).on("mouseleave.luckysheetEvent", function() {
      store_default.iscopyself = false;
    }).on("mousedown.luckysheetEvent", function(event2) {
      postil_default.removeActivePs();
      hideMenuByCancel(event2);
      if ($(event2.target).closest("#luckysheet-wa-editor").length > 0 && parseInt($("#luckysheet-input-box").css("top")) > 0) {
        formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
        luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
      }
    });
    $("#luckysheet-left-top").click(function(event2) {
      if (!checkProtectionAllSelected(store_default.currentSheetIndex)) {
        return;
      }
      $("#luckysheet-wa-functionbox-confirm").click();
      store_default.luckysheet_select_status = false;
      store_default.luckysheet_select_save = [{"row": [0, store_default.flowdata.length - 1], "column": [0, store_default.flowdata[0].length - 1], "row_focus": 0, "column_focus": 0, row_select: true, column_select: true}];
      selectHightlightShow();
      clearTimeout(store_default.countfuncTimeout);
      store_default.countfuncTimeout = setTimeout(function() {
        countfunc();
      }, 500);
      server_default.saveParam("mv", store_default.currentSheetIndex, store_default.luckysheet_select_save);
      event2.stopPropagation();
    });
    $("#luckysheet-icon-undo").click(function(event2) {
      if ($(this).hasClass("disabled")) {
        return;
      }
      controlHistory_default.redo(event2);
    });
    $("#luckysheet-icon-redo").click(function(event2) {
      if ($(this).hasClass("disabled")) {
        return;
      }
      controlHistory_default.undo(event2);
    });
    $(document).on("mousedown.luckysheetEvent", "div.luckysheet-modal-dialog", function(e) {
      if (!$(e.target).is(".luckysheet-modal-dialog")) {
        return;
      }
      store_default.luckysheet_model_move_state = true;
      store_default.luckysheet_model_move_obj = $(e.currentTarget);
      let toffset = store_default.luckysheet_model_move_obj.offset();
      store_default.luckysheet_model_xy = [e.pageX - toffset.left, e.pageY - toffset.top];
    });
    $(document).on("click.luckysheetEvent", ".luckysheet-modal-dialog-title-close, .luckysheet-model-close-btn", function(e) {
      if ($("#textcolorselect").is(":visible") || $("#cellcolorselect").is(":visible")) {
        $("#luckysheet-conditionformat-dialog").show();
      }
      $(e.currentTarget).parents(".luckysheet-modal-dialog").hide();
      $("#luckysheet-modal-dialog-mask").hide();
      if ($(this).parents(".luckysheet-modal-dialog").hasClass("luckysheet-search-formula")) {
        formula_default.dontupdate();
        luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
      }
      if ($(this).parents(".luckysheet-modal-dialog").hasClass("luckysheet-search-formula-parm")) {
        formula_default.dontupdate();
        luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
      }
      if ($(this).parents(".luckysheet-modal-dialog").hasClass("luckysheet-search-formula-parm-select")) {
        formula_default.dontupdate();
        luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
      }
      luckysheetContainerFocus();
    });
    $("#luckysheet_info_detail_title").click(function() {
      window.open(luckysheetConfigsetting_default.myFolderUrl, "_self");
    });
    $("#luckysheet-chart-rangeShow").on("mousedown.chartRangeShowMove", ".luckysheet-chart-rangeShow-move", function(event2) {
      store_default.chart_selection.rangeMove = true;
      store_default.luckysheet_scroll_status = true;
      store_default.chart_selection.rangeMoveObj = $(this).parent();
      let chart_json = store_default.currentChart;
      let $id = $(this).parent().attr("id");
      if ($id == "luckysheet-chart-rangeShow-content") {
        let row_s = chart_json.rangeArray[0].row[0] + chart_json.rangeSplitArray.content.row[0];
        let col_s = chart_json.rangeArray[0].column[0] + chart_json.rangeSplitArray.content.column[0];
        store_default.chart_selection.rangeMoveIndex = [row_s, col_s];
      } else if ($id == "luckysheet-chart-rangeShow-rowtitle") {
        let row_s = chart_json.rangeArray[0].row[0] + chart_json.rangeSplitArray.rowtitle.row[0];
        let col_s = chart_json.rangeArray[0].column[0] + chart_json.rangeSplitArray.rowtitle.column[0];
        store_default.chart_selection.rangeMoveIndex = [row_s, col_s];
      } else if ($id == "luckysheet-chart-rangeShow-coltitle") {
        let row_s = chart_json.rangeArray[0].row[0] + chart_json.rangeSplitArray.coltitle.row[0];
        let col_s = chart_json.rangeArray[0].column[0] + chart_json.rangeSplitArray.coltitle.column[0];
        store_default.chart_selection.rangeMoveIndex = [row_s, col_s];
      }
      let mouse = mouseposition(event2.pageX, event2.pageY);
      let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
      let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
      let type = $(this).data("type");
      if (type == "top") {
        y += 3;
      } else if (type == "right") {
        x -= 3;
      } else if (type == "bottom") {
        y -= 3;
      } else if (type == "left") {
        x += 3;
      }
      let row_index = rowLocation(y)[2];
      let col_index = colLocation(x)[2];
      store_default.chart_selection.rangeMovexy = [row_index, col_index];
      event2.stopPropagation();
    });
    $("#luckysheet-chart-rangeShow").on("mousedown.chartRangeShowResize", ".luckysheet-chart-rangeShow-resize", function(event2) {
      store_default.chart_selection.rangeResize = $(this).data("type");
      store_default.luckysheet_scroll_status = true;
      store_default.chart_selection.rangeResizeObj = $(this).parent();
      let chart_json = store_default.currentChart;
      let row_s;
      let row_e;
      let col_s;
      let col_e;
      let $id = $(this).parent().attr("id");
      if ($id == "luckysheet-chart-rangeShow-content") {
        if (chart_json.rangeRowCheck.exits) {
          row_s = chart_json.rangeArray[0].row[0] + chart_json.rangeSplitArray.content.row[0];
          row_e = chart_json.rangeArray[0].row[0] + chart_json.rangeSplitArray.content.row[1];
        } else {
          row_s = chart_json.rangeSplitArray.content.row[0];
          row_e = chart_json.rangeSplitArray.content.row[0];
        }
        if (chart_json.rangeColCheck.exits) {
          col_s = chart_json.rangeArray[0].column[0] + chart_json.rangeSplitArray.content.column[0];
          col_e = chart_json.rangeArray[0].column[0] + chart_json.rangeSplitArray.content.column[1];
        } else {
          col_s = chart_json.rangeSplitArray.content.column[0];
          col_e = chart_json.rangeSplitArray.content.column[1];
        }
        store_default.chart_selection.rangeResizeIndex = {"row": [row_s, row_e], "column": [col_s, col_e]};
      } else if ($id == "luckysheet-chart-rangeShow-rowtitle") {
        let row_s2 = chart_json.rangeArray[0].row[0] + chart_json.rangeSplitArray.rowtitle.row[0];
        let row_e2 = chart_json.rangeArray[0].row[0] + chart_json.rangeSplitArray.rowtitle.row[1];
        let col_s2 = chart_json.rangeArray[0].column[0] + chart_json.rangeSplitArray.rowtitle.column[0];
        let col_e2 = chart_json.rangeArray[0].column[0] + chart_json.rangeSplitArray.rowtitle.column[1];
        store_default.chart_selection.rangeResizeIndex = {"row": [row_s2, row_e2], "column": [col_s2, col_e2]};
      } else if ($id == "luckysheet-chart-rangeShow-coltitle") {
        let row_s2 = chart_json.rangeArray[0].row[0] + chart_json.rangeSplitArray.coltitle.row[0];
        let row_e2 = chart_json.rangeArray[0].row[0] + chart_json.rangeSplitArray.coltitle.row[1];
        let col_s2 = chart_json.rangeArray[0].column[0] + chart_json.rangeSplitArray.coltitle.column[0];
        let col_e2 = chart_json.rangeArray[0].column[0] + chart_json.rangeSplitArray.coltitle.column[1];
        store_default.chart_selection.rangeResizeIndex = {"row": [row_s2, row_e2], "column": [col_s2, col_e2]};
      }
      let mouse = mouseposition(event2.pageX, event2.pageY);
      let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
      let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
      if (store_default.chart_selection.rangeResize == "lt") {
        x += 3;
        y += 3;
      } else if (store_default.chart_selection.rangeResize == "lb") {
        x += 3;
        y -= 3;
      } else if (store_default.chart_selection.rangeResize == "rt") {
        x -= 3;
        y += 3;
      } else if (store_default.chart_selection.rangeResize == "rb") {
        x -= 3;
        y -= 3;
      }
      let row_index = rowLocation(y)[2];
      let col_index = colLocation(x)[2];
      store_default.chart_selection.rangeResizexy = [row_index, col_index];
      event2.stopPropagation();
    });
    $("#luckysheet-wa-calculate-size").mousedown(function(e) {
      let y = e.pageY;
      formula_default.functionResizeData.y = y;
      formula_default.functionResizeStatus = true;
      formula_default.functionResizeData.calculatebarHeight = store_default.calculatebarHeight;
      if (formula_default.rangetosheet != null) {
        formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
      }
    });
    menuButton_default.initialMenuButton();
    let dpi_x = document.getElementById("testdpidiv").offsetWidth * store_default.devicePixelRatio;
    let dpi_y = document.getElementById("testdpidiv").offsetHeight * store_default.devicePixelRatio;
    $(document).on("paste.luckysheetEvent", function(e) {
      if (isEditMode()) {
        return;
      }
      if (selection_default.isPasteAction) {
        $("#luckysheet-rich-text-editor").blur();
        selection_default.isPasteAction = false;
        let clipboardData = window.clipboardData;
        if (!clipboardData) {
          clipboardData = e.originalEvent.clipboardData;
        }
        let txtdata = clipboardData.getData("text/html") || clipboardData.getData("text/plain");
        let isEqual = true;
        if (txtdata.indexOf("luckysheet_copy_action_table") > -1 && store_default.luckysheet_copy_save["copyRange"] != null && store_default.luckysheet_copy_save["copyRange"].length > 0) {
          let cpDataArr = [];
          let reg = new RegExp("<tr.*?>(.*?)</tr>", "gs");
          let reg2 = new RegExp("<td.*?>(.*?)</td>", "gs");
          let regArr = txtdata.match(reg) || [];
          for (let i2 = 0; i2 < regArr.length; i2++) {
            let cpRowArr = [];
            let reg2Arr = regArr[i2].match(reg2);
            if (reg2Arr != null) {
              for (let j = 0; j < reg2Arr.length; j++) {
                let cpValue = reg2Arr[j].replace(/<td.*?>/gs, "").replace(/<\/td>/gs, "");
                cpRowArr.push(cpValue);
              }
            }
            cpDataArr.push(cpRowArr);
          }
          let copy_r1 = store_default.luckysheet_copy_save["copyRange"][0].row[0], copy_r2 = store_default.luckysheet_copy_save["copyRange"][0].row[1], copy_c1 = store_default.luckysheet_copy_save["copyRange"][0].column[0], copy_c2 = store_default.luckysheet_copy_save["copyRange"][0].column[1];
          let copy_index = store_default.luckysheet_copy_save["dataSheetIndex"];
          let d;
          if (copy_index == store_default.currentSheetIndex) {
            d = editor_default.deepCopyFlowData(store_default.flowdata);
          } else {
            d = store_default.luckysheetfile[getSheetIndex(copy_index)].data;
          }
          for (let r2 = copy_r1; r2 <= copy_r2; r2++) {
            if (r2 - copy_r1 > cpDataArr.length - 1) {
              break;
            }
            for (let c2 = copy_c1; c2 <= copy_c2; c2++) {
              let cell = d[r2][c2];
              let isInlineStr = false;
              if (cell != null && cell.mc != null && cell.mc.rs == null) {
                continue;
              }
              let v;
              if (cell != null) {
                if (cell.ct != null && cell.ct.fa.indexOf("w") > -1) {
                  v = d[r2][c2].v;
                } else {
                  v = d[r2][c2].m;
                }
              } else {
                v = "";
              }
              if (v == null && d[r2][c2] && d[r2][c2].ct && d[r2][c2].ct.t == "inlineStr") {
                v = d[r2][c2].ct.s.map((val) => val.v).join("");
                isInlineStr = true;
              }
              if (v == null) {
                v = "";
              }
              if (isInlineStr) {
                const cpData = $(cpDataArr[r2 - copy_r1][c2 - copy_c1]).text().replace(/\s|\n/g, " ");
                const storeValue = v.replace(/\n/g, "").replace(/\s/g, " ");
                if (cpData != storeValue) {
                  isEqual = false;
                  break;
                }
              } else {
                if (cpDataArr[r2 - copy_r1][c2 - copy_c1] != v) {
                  isEqual = false;
                  break;
                }
              }
            }
          }
        }
        const locale_fontjson = locale_default().fontjson;
        if (!method_default.createHookFunction("rangePasteBefore", store_default.luckysheet_select_save, txtdata)) {
          return;
        }
        if (txtdata.indexOf("luckysheet_copy_action_table") > -1 && store_default.luckysheet_copy_save["copyRange"] != null && store_default.luckysheet_copy_save["copyRange"].length > 0 && isEqual) {
          if (store_default.luckysheet_paste_iscut) {
            store_default.luckysheet_paste_iscut = false;
            selection_default.pasteHandlerOfCutPaste(store_default.luckysheet_copy_save);
            selection_default.clearcopy(e);
          } else {
            selection_default.pasteHandlerOfCopyPaste(store_default.luckysheet_copy_save);
          }
        } else if (txtdata.indexOf("luckysheet_copy_action_image") > -1) {
          imageCtrl_default.pasteImgItem();
        } else {
          let $content;
          try {
            $content = $("#luckysheet-copy-content").html(txtdata);
          } catch (e2) {
          }
          if ($content && ($content.find("table").length !== 0 || $content.children("span[data-sheets-value]").length === 1)) {
            if ($content.find("table").length === 0) {
              const td = $content.children("span[data-sheets-value]")[0].outerHTML.replace(/^<span/, "<td").replace(/<\/span>$/, "</td>");
              $content.html("<table><tbody><tr>" + td + "</tr></tbody></table>");
            }
            let data = new Array($content.find("table tr").length);
            let colLen = 0;
            const cellElements = "th, td";
            $content.find("table tr").eq(0).find(cellElements).each(function() {
              let colspan = parseInt($(this).attr("colspan"));
              if (isNaN(colspan)) {
                colspan = 1;
              }
              colLen += colspan;
            });
            for (let i2 = 0; i2 < data.length; i2++) {
              data[i2] = new Array(colLen);
            }
            let r2 = 0;
            let borderInfo = {};
            $content.find("table tr").each(function() {
              let $tr = $(this);
              let c2 = 0;
              $tr.find(cellElements).each(function() {
                let $td = $(this);
                let cell = {};
                const originalFormula = $td.attr("data-sheets-formula");
                const originalText = $td.text();
                if (originalFormula && originalFormula.startsWith("=")) {
                  const address = store_default.luckysheet_select_save[0];
                  const rowIndex = address.row[0] + r2;
                  const columnIndex = address.column[0] + c2;
                  const translatedFormula = originalFormula.replace(/([^a-zA-Z0-9])R(\[?)(-?[0-9]+)\]?C(\[?)(-?[0-9]+)\]?/g, function(_, prefix, rowRefRelative, rowRef, columnRefRelative, columnRef) {
                    return [
                      prefix,
                      columnRefRelative ? chatatABC(columnIndex + +columnRef) : `$${chatatABC(+columnRef - 1)}`,
                      rowRefRelative ? rowIndex + +rowRef + 1 : `$${rowRef}`
                    ].join("");
                  }).replace(/\bTRUE\b/g, "true").replace(/\bFALSE\b/g, "false");
                  const v = formula_default.execfunction(translatedFormula, rowIndex, columnIndex);
                  cell.f = v[2];
                  cell.v = v[1];
                  cell.ct = genarate(originalText)[1];
                  if (cell.ct && cell.ct.fa) {
                    cell.m = update(cell.ct.fa, cell.v);
                  }
                } else if (originalText.trim().length === 0) {
                  cell.v = null;
                  cell.m = "";
                } else {
                  let mask = genarate(originalText);
                  cell.v = mask[2];
                  cell.ct = mask[1];
                  cell.m = mask[0];
                }
                let bg = $td.css("background-color");
                if (bg == "rgba(0, 0, 0, 0)") {
                  bg = null;
                }
                cell.bg = bg;
                let bl = $td.css("font-weight");
                if (bl == 400 || bl == "normal") {
                  cell.bl = 0;
                } else {
                  cell.bl = 1;
                }
                let un = $td.css("text-decoration");
                if (un.indexOf("underline") != -1) {
                  cell.un = 1;
                }
                let it = $td.css("font-style");
                if (it == "normal") {
                  cell.it = 0;
                } else {
                  cell.it = 1;
                }
                let ff = $td.css("font-family");
                let ffs = ff.split(",");
                for (let i2 = 0; i2 < ffs.length; i2++) {
                  let fa = $.trim(ffs[i2].toLowerCase());
                  fa = locale_fontjson[fa];
                  if (fa == null) {
                    cell.ff = 0;
                  } else {
                    cell.ff = fa;
                    break;
                  }
                }
                let fs = Math.round(parseInt($td.css("font-size")) * 72 / 96);
                cell.fs = fs;
                let fc = $td.css("color");
                cell.fc = fc;
                let ht = $td.css("text-align");
                if (ht == "center") {
                  cell.ht = 0;
                } else if (ht == "right") {
                  cell.ht = 2;
                } else {
                  cell.ht = 1;
                }
                let vt = $td.css("vertical-align");
                if (vt == "middle") {
                  cell.vt = 0;
                } else if (vt == "top" || vt == "text-top") {
                  cell.vt = 1;
                } else {
                  cell.vt = 2;
                }
                while (c2 < colLen && data[r2][c2] != null) {
                  c2++;
                }
                if (c2 == colLen) {
                  return true;
                }
                if (data[r2][c2] == null) {
                  data[r2][c2] = cell;
                  let rowspan = parseInt($td.attr("rowspan"));
                  let colspan = parseInt($td.attr("colspan"));
                  if (isNaN(rowspan)) {
                    rowspan = 1;
                  }
                  if (isNaN(colspan)) {
                    colspan = 1;
                  }
                  let r_ab = store_default.luckysheet_select_save[0]["row"][0] + r2;
                  let c_ab = store_default.luckysheet_select_save[0]["column"][0] + c2;
                  for (let rp = 0; rp < rowspan; rp++) {
                    for (let cp = 0; cp < colspan; cp++) {
                      if (rp == 0) {
                        let bt = $td.css("border-top");
                        if (bt != null && bt.length > 0 && bt.substr(0, 3).toLowerCase() != "0px") {
                          let width = $td.css("border-top-width");
                          let type = $td.css("border-top-style");
                          let color = $td.css("border-top-color");
                          let borderconfig = menuButton_default.getQKBorder(width, type, color);
                          if (borderInfo[r2 + rp + "_" + (c2 + cp)] == null) {
                            borderInfo[r2 + rp + "_" + (c2 + cp)] = {};
                          }
                          borderInfo[r2 + rp + "_" + (c2 + cp)].t = {"style": borderconfig[0], "color": borderconfig[1]};
                        }
                      }
                      if (rp == rowspan - 1) {
                        let bb = $td.css("border-bottom");
                        if (bb != null && bb.length > 0 && bb.substr(0, 3).toLowerCase() != "0px") {
                          let width = $td.css("border-bottom-width");
                          let type = $td.css("border-bottom-style");
                          let color = $td.css("border-bottom-color");
                          let borderconfig = menuButton_default.getQKBorder(width, type, color);
                          if (borderInfo[r2 + rp + "_" + (c2 + cp)] == null) {
                            borderInfo[r2 + rp + "_" + (c2 + cp)] = {};
                          }
                          borderInfo[r2 + rp + "_" + (c2 + cp)].b = {"style": borderconfig[0], "color": borderconfig[1]};
                        }
                      }
                      if (cp == 0) {
                        let bl2 = $td.css("border-left");
                        if (bl2 != null && bl2.length > 0 && bl2.substr(0, 3).toLowerCase() != "0px") {
                          let width = $td.css("border-left-width");
                          let type = $td.css("border-left-style");
                          let color = $td.css("border-left-color");
                          let borderconfig = menuButton_default.getQKBorder(width, type, color);
                          if (borderInfo[r2 + rp + "_" + (c2 + cp)] == null) {
                            borderInfo[r2 + rp + "_" + (c2 + cp)] = {};
                          }
                          borderInfo[r2 + rp + "_" + (c2 + cp)].l = {"style": borderconfig[0], "color": borderconfig[1]};
                        }
                      }
                      if (cp == colspan - 1) {
                        let br = $td.css("border-right");
                        if (br != null && br.length > 0 && br.substr(0, 3).toLowerCase() != "0px") {
                          let width = $td.css("border-right-width");
                          let type = $td.css("border-right-style");
                          let color = $td.css("border-right-color");
                          let borderconfig = menuButton_default.getQKBorder(width, type, color);
                          if (borderInfo[r2 + rp + "_" + (c2 + cp)] == null) {
                            borderInfo[r2 + rp + "_" + (c2 + cp)] = {};
                          }
                          borderInfo[r2 + rp + "_" + (c2 + cp)].r = {"style": borderconfig[0], "color": borderconfig[1]};
                        }
                      }
                      if (rp == 0 && cp == 0) {
                        continue;
                      }
                      data[r2 + rp][c2 + cp] = {"mc": {"r": r_ab, "c": c_ab}};
                    }
                  }
                  if (rowspan > 1 || colspan > 1) {
                    let first = {"rs": rowspan, "cs": colspan, "r": r_ab, "c": c_ab};
                    data[r2][c2].mc = first;
                  }
                }
                c2++;
                if (c2 == colLen) {
                  return true;
                }
              });
              r2++;
            });
            store_default.luckysheet_selection_range = [];
            selection_default.pasteHandler(data, borderInfo);
          } else if (clipboardData.files.length == 1 && clipboardData.files[0].type.indexOf("image") > -1) {
            imageCtrl_default.insertImg(clipboardData.files[0]);
            return;
          } else {
            txtdata = clipboardData.getData("text/plain");
            selection_default.pasteHandler(txtdata);
          }
          $("#luckysheet-copy-content").empty();
        }
      } else if ($(e.target).closest("#luckysheet-rich-text-editor").length > 0) {
        e.preventDefault();
        let clipboardData = window.clipboardData;
        if (!clipboardData) {
          clipboardData = e.originalEvent.clipboardData;
        }
        let text = clipboardData.getData("text/plain");
        document.execCommand("insertText", false, text);
      }
    });
    if (luckysheetConfigsetting_default.enablePage) {
      $("#luckysheet-bottom-page-next").click(function() {
        let queryExps = luckysheetConfigsetting_default.pageInfo.queryExps;
        let reportId = luckysheetConfigsetting_default.pageInfo.reportId;
        let fields = luckysheetConfigsetting_default.pageInfo.fields;
        let mobile = luckysheetConfigsetting_default.pageInfo.mobile;
        let frezon = luckysheetConfigsetting_default.pageInfo.frezon;
        let currentPage = luckysheetConfigsetting_default.pageInfo.currentPage;
        let totalPage = luckysheetConfigsetting_default.pageInfo.totalPage;
        let pageUrl = luckysheetConfigsetting_default.pageInfo.pageUrl;
        method_default.addDataAjax({
          "queryExps": queryExps,
          "reportId": reportId,
          "fields": fields,
          "mobile": mobile,
          "frezon": frezon,
          "pageIndex": currentPage,
          "currentPage": currentPage
        }, store_default.currentSheetIndex, pageUrl, function() {
          luckysheetConfigsetting_default.pageInfo.currentPage++;
          if (luckysheetConfigsetting_default.pageInfo.totalPage == luckysheetConfigsetting_default.pageInfo.currentPage) {
            $("#luckysheet-bottom-page-next").hide();
            let pageInfoFull = replaceHtml(locale_info.pageInfoFull, {
              total: luckysheetConfigsetting_default.total,
              totalPage: luckysheetConfigsetting_default.pageInfo.totalPage
            });
            $("#luckysheet-bottom-page-info").html(pageInfoFull);
          } else {
            let pageInfo = replaceHtml(locale_info.pageInfo, {
              total: luckysheetConfigsetting_default.total,
              totalPage: luckysheetConfigsetting_default.pageInfo.totalPage,
              currentPage: luckysheetConfigsetting_default.pageInfo.currentPage
            });
            $("#luckysheet-bottom-page-info").html(pageInfo);
          }
        });
      }).mousedown(function(e) {
        e.stopPropagation();
      });
    }
    $("#luckysheet-bottom-bottom-top").click(function() {
      $("#luckysheet-scrollbar-y").scrollTop(0);
    }).mousedown(function(e) {
      e.stopPropagation();
    });
    $("#luckysheet-wa-editor,#luckysheet-icon-morebtn-div,.luckysheet-toolbar-button").click(function(e) {
      if (this.id != "luckysheet-icon-paintformat" && menuButton_default.luckysheetPaintModelOn) {
        menuButton_default.cancelPaintModel();
      }
    });
  }
  function hideUsername() {
    let $showEle = $$(".luckysheet-multipleRange-show");
    if ($showEle.length === void 0) {
      $showEle = [$showEle];
    }
    $showEle.forEach((ele) => {
      const id = ele.id.replace("luckysheet-multipleRange-show-", "");
      if (store_default.cooperativeEdit.usernameTimeout["user" + id] === null) {
        $$(".username", ele).style.display = "none";
      }
    });
  }
  var init_handler = __esm({
    "src/controllers/handler.js"() {
      init_mobile();
      init_luckysheetConfigsetting();
      init_freezen();
      init_pivotTable();
      init_dropCell();
      init_postil();
      init_imageCtrl();
      init_hyperlinkCtrl();
      init_dataVerificationCtrl();
      init_menuButton();
      init_conditionformat();
      init_alternateformat();
      init_ifFormulaGenerator();
      init_sheetmanage();
      init_server();
      init_updateCell();
      init_sheetSearch();
      init_resize();
      init_sheetMove();
      init_select();
      init_selection();
      init_controlHistory();
      init_splitColumn();
      init_cursorPos();
      init_constant();
      init_protection();
      init_cellFormat();
      init_util();
      init_get();
      init_location();
      init_getRowlen();
      init_validate();
      init_count();
      init_browser();
      init_formula();
      init_extend();
      init_scroll();
      init_refresh();
      init_getdata();
      init_tooltip();
      init_editor();
      init_format();
      init_method();
      init_border();
      init_draw();
      init_locale();
      init_store();
      init_plugin();
    }
  });

  // src/controllers/matrixOperation.js
  function initialMatrixOperation() {
    const locale_drag2 = locale_default().drag;
    $("#luckysheet-copy-json-head").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      if (store_default.config["merge"] != null) {
        let has_PartMC = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
          if (has_PartMC) {
            break;
          }
        }
        if (has_PartMC) {
          if (isEditMode()) {
            alert(locale_drag2.noPartMerge);
          } else {
            tooltip_default.info(locale_drag2.noPartMerge, "");
          }
          return;
        }
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      let arr = [];
      if (getdata.length == 0) {
        return;
      }
      if (getdata.length == 1) {
        let obj = {};
        for (let i2 = 0; i2 < getdata[0].length; i2++) {
          obj[getcellvalue(0, i2, getdata)] = "";
        }
        arr.push(obj);
      } else {
        for (let r2 = 1; r2 < getdata.length; r2++) {
          let obj = {};
          for (let c2 = 0; c2 < getdata[0].length; c2++) {
            if (getcellvalue(0, c2, getdata) == void 0) {
              obj[""] = getcellvalue(r2, c2, getdata);
            } else {
              obj[getcellvalue(0, c2, getdata)] = getcellvalue(r2, c2, getdata);
            }
          }
          arr.push(obj);
        }
      }
      selection_default.copybyformat(event2, JSON.stringify(arr));
    });
    $("#luckysheet-copy-json-nohead").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      if (store_default.config["merge"] != null) {
        let has_PartMC = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
          if (has_PartMC) {
            break;
          }
        }
        if (has_PartMC) {
          if (isEditMode()) {
            alert(locale_drag2.noPartMerge);
          } else {
            tooltip_default.info(locale_drag2.noPartMerge, "");
          }
          return;
        }
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      let arr = [];
      if (getdata.length == 0) {
        return;
      }
      let st = store_default.luckysheet_select_save[0]["column"][0];
      for (let r2 = 0; r2 < getdata.length; r2++) {
        let obj = {};
        for (let c2 = 0; c2 < getdata[0].length; c2++) {
          obj[chatatABC(c2 + st)] = getcellvalue(r2, c2, getdata);
        }
        arr.push(obj);
      }
      selection_default.copybyformat(event2, JSON.stringify(arr));
    });
    $("#luckysheet-copy-array1").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      if (store_default.config["merge"] != null) {
        let has_PartMC = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
          if (has_PartMC) {
            break;
          }
        }
        if (has_PartMC) {
          if (isEditMode()) {
            alert(locale_drag2.noPartMerge);
          } else {
            tooltip_default.info(locale_drag2.noPartMerge, "");
          }
          return;
        }
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      let arr = [];
      if (getdata.length == 0) {
        return;
      }
      for (let r2 = 0; r2 < getdata.length; r2++) {
        for (let c2 = 0; c2 < getdata[0].length; c2++) {
          arr.push(getcellvalue(r2, c2, getdata));
        }
      }
      selection_default.copybyformat(event2, JSON.stringify(arr));
    });
    $("#luckysheet-copy-array2").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      if (store_default.config["merge"] != null) {
        let has_PartMC = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
          if (has_PartMC) {
            break;
          }
        }
        if (has_PartMC) {
          if (isEditMode()) {
            alert(locale_drag2.noPartMerge);
          } else {
            tooltip_default.info(locale_drag2.noPartMerge, "");
          }
          return;
        }
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      let arr = [];
      if (getdata.length == 0) {
        return;
      }
      for (let r2 = 0; r2 < getdata.length; r2++) {
        let a = [];
        for (let c2 = 0; c2 < getdata[0].length; c2++) {
          a.push(getcellvalue(r2, c2, getdata));
        }
        arr.push(a);
      }
      selection_default.copybyformat(event2, JSON.stringify(arr));
    });
    $("#luckysheet-copy-arraymore-confirm").click(function(event2) {
      if (event2.target.nodeName === "INPUT") {
        return;
      }
      $("body .luckysheet-cols-menu").hide();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      if (store_default.config["merge"] != null) {
        let has_PartMC = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
          if (has_PartMC) {
            break;
          }
        }
        if (has_PartMC) {
          if (isEditMode()) {
            alert(locale_drag2.noPartMerge);
          } else {
            tooltip_default.info(locale_drag2.noPartMerge, "");
          }
          return;
        }
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      let arr = [];
      if (getdata.length == 0) {
        return;
      }
      for (let r2 = 0; r2 < getdata.length; r2++) {
        for (let c2 = 0; c2 < getdata[0].length; c2++) {
          arr.push(getdata[r2][c2]);
        }
      }
      let row = $("#luckysheet-copy-arraymore-row").val(), col = $("#luckysheet-copy-arraymore-col").val();
      if (row == "" && col == "") {
        selection_default.copybyformat(event2, JSON.stringify(arr));
        $("body .luckysheet-cols-menu").hide();
        return;
      }
      if (row == "") {
        row = 1;
      } else {
        row = parseInt(row);
        if (row == null) {
          row = 1;
        }
      }
      if (col == "") {
        col = 1;
      } else {
        col = parseInt(col);
        if (col == null) {
          col = 1;
        }
      }
      if (row.toString() == "NaN" || col.toString() == "NaN") {
        if (isEditMode()) {
          alert(locale_drag2.inputCorrect);
        } else {
          tooltip_default.info(locale_drag2.inputCorrect, "");
        }
        return;
      }
      if (row < 1 || col < 1) {
        if (isEditMode()) {
          alert(locale_drag2.notLessOne);
        } else {
          tooltip_default.info(locale_drag2.notLessOne, "");
        }
        return;
      }
      let arrlen = arr.length, i2 = 0, ret = [];
      for (let r2 = 0; r2 < row; r2++) {
        let a = [];
        for (let c2 = 0; c2 < col; c2++) {
          a.push(arr[i2++]);
          if (i2 >= arrlen) {
            selection_default.copybyformat(event2, JSON.stringify(ret));
            $("body .luckysheet-cols-menu").hide();
            return;
          }
        }
        ret.push(a);
      }
      selection_default.copybyformat(event2, JSON.stringify(ret));
    });
    $("#luckysheet-copy-diagonal").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      if (store_default.config["merge"] != null) {
        let has_PartMC = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
          if (has_PartMC) {
            break;
          }
        }
        if (has_PartMC) {
          if (isEditMode()) {
            alert(locale_drag2.noPartMerge);
          } else {
            tooltip_default.info(locale_drag2.noPartMerge, "");
          }
          return;
        }
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      let arr = [];
      if (getdata.length == 0) {
        return;
      }
      let clen = getdata[0].length;
      for (let r2 = 0; r2 < getdata.length; r2++) {
        if (r2 >= clen) {
          break;
        }
        arr.push(getdata[r2][r2]);
      }
      selection_default.copybyformat(event2, JSON.stringify(arr));
    });
    $("#luckysheet-copy-antidiagonal").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      if (store_default.config["merge"] != null) {
        let has_PartMC = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
          if (has_PartMC) {
            break;
          }
        }
        if (has_PartMC) {
          if (isEditMode()) {
            alert(locale_drag2.noPartMerge);
          } else {
            tooltip_default.info(locale_drag2.noPartMerge, "");
          }
          return;
        }
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      let arr = [];
      if (getdata.length == 0) {
        return;
      }
      let clen = getdata[0].length;
      for (let r2 = 0; r2 < getdata.length; r2++) {
        if (r2 >= clen) {
          break;
        }
        arr.push(getdata[r2][clen - r2 - 1]);
      }
      selection_default.copybyformat(event2, JSON.stringify(arr));
    });
    $("#luckysheet-copy-diagonaloffset").click(function(event2) {
      if (event2.target.nodeName === "INPUT") {
        return;
      }
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      if (store_default.config["merge"] != null) {
        let has_PartMC = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
          if (has_PartMC) {
            break;
          }
        }
        if (has_PartMC) {
          if (isEditMode()) {
            alert(locale_drag2.noPartMerge);
          } else {
            tooltip_default.info(locale_drag2.noPartMerge, "");
          }
          return;
        }
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      let arr = [];
      if (getdata.length == 0) {
        return;
      }
      let clen = getdata[0].length, offset = parseInt($("#luckysheet-copy-diagonaloffset-value").val());
      if (offset.toString() == "NaN") {
        if (isEditMode()) {
          alert(locale_drag2.inputCorrect);
        } else {
          tooltip_default.info(locale_drag2.inputCorrect, "");
        }
        return;
      }
      if (offset < 0) {
        if (isEditMode()) {
          alert(locale_drag2.offsetColumnLessZero);
        } else {
          tooltip_default.info(locale_drag2.offsetColumnLessZero, "");
        }
        return;
      }
      if (offset == null) {
        offset = 1;
      }
      for (let r2 = 0; r2 < getdata.length; r2++) {
        if (r2 + offset >= clen) {
          break;
        }
        arr.push(getdata[r2][r2 + offset]);
      }
      selection_default.copybyformat(event2, JSON.stringify(arr));
    });
    $("#luckysheet-copy-boolvalue").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      if (store_default.config["merge"] != null) {
        let has_PartMC = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
          if (has_PartMC) {
            break;
          }
        }
        if (has_PartMC) {
          if (isEditMode()) {
            alert(locale_drag2.noPartMerge);
          } else {
            tooltip_default.info(locale_drag2.noPartMerge, "");
          }
          return;
        }
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      let arr = [];
      if (getdata.length == 0) {
        return;
      }
      for (let r2 = 0; r2 < getdata.length; r2++) {
        let a = [];
        for (let c2 = 0; c2 < getdata[0].length; c2++) {
          let bool = false;
          let v;
          if (getObjType(getdata[r2][c2]) == "object") {
            v = getdata[r2][c2].v;
          } else {
            v = getdata[r2][c2];
          }
          if (v == null || v == "") {
            bool = false;
          } else {
            v = parseInt(v);
            if (v == null || v > 0) {
              bool = true;
            } else {
              bool = false;
            }
          }
          a.push(bool);
        }
        arr.push(a);
      }
      selection_default.copybyformat(event2, JSON.stringify(arr));
    });
    $("#luckysheet-matrix-turn-up").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      if (getdata.length == 0) {
        return;
      }
      let arr = [];
      for (let r2 = getdata.length - 1; r2 >= 0; r2--) {
        let a = [];
        for (let c2 = 0; c2 < getdata[0].length; c2++) {
          let value = "";
          if (getdata[r2] != null && getdata[r2][c2] != null) {
            value = getdata[r2][c2];
          }
          a.push(value);
        }
        arr.push(a);
      }
      editor_default.controlHandler(arr);
    });
    $("#luckysheet-matrix-turn-left").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      if (getdata.length == 0) {
        return;
      }
      let arr = [];
      for (let r2 = 0; r2 < getdata.length; r2++) {
        let a = [];
        for (let c2 = getdata[0].length - 1; c2 >= 0; c2--) {
          let value = "";
          if (getdata[r2] != null && getdata[r2][c2] != null) {
            value = getdata[r2][c2];
          }
          a.push(value);
        }
        arr.push(a);
      }
      editor_default.controlHandler(arr);
    });
    $("#luckysheet-matrix-turn-cw").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      if (getdata.length == 0) {
        return;
      }
      let arr = [];
      for (let c2 = 0; c2 < getdata[0].length; c2++) {
        let a = [];
        for (let r2 = getdata.length - 1; r2 >= 0; r2--) {
          let value = "";
          if (getdata[r2] != null && getdata[r2][c2] != null) {
            value = getdata[r2][c2];
          }
          a.push(value);
        }
        arr.push(a);
      }
      editor_default.controlHandlerD(arr);
    });
    $("#luckysheet-matrix-turn-anticw").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      if (getdata.length == 0) {
        return;
      }
      let arr = [];
      for (let c2 = getdata[0].length - 1; c2 >= 0; c2--) {
        let a = [];
        for (let r2 = 0; r2 < getdata.length; r2++) {
          let value = "";
          if (getdata[r2] != null && getdata[r2][c2] != null) {
            value = getdata[r2][c2];
          }
          a.push(value);
        }
        arr.push(a);
      }
      editor_default.controlHandlerD(arr);
    });
    $("#luckysheet-matrix-turn-trans").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      if (getdata.length == 0) {
        return;
      }
      let arr = [];
      for (let c2 = 0; c2 < getdata[0].length; c2++) {
        let a = [];
        for (let r2 = 0; r2 < getdata.length; r2++) {
          let value = "";
          if (getdata[r2] != null && getdata[r2][c2] != null) {
            value = getdata[r2][c2];
          }
          a.push(value);
        }
        arr.push(a);
      }
      editor_default.controlHandlerD(arr);
    });
    let jfnqrt2 = function(x, p) {
      if (x == 0)
        return 0;
      let x0, x1;
      x0 = x;
      x1 = (p - 1) * x0 / p + x / (Math.pow(x0, p - 1) * p);
      while (Math.abs(x1 - x0) > 1e-6) {
        x0 = x1;
        x1 = (p - 1) * x0 / p + x / (Math.pow(x0, p - 1) * p);
      }
      return x1;
    };
    $("#luckysheet-matrix-cal-confirm").click(function(event2) {
      if (event2.target.nodeName === "INPUT" || event2.target.nodeName === "SELECT") {
        return;
      }
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      if (getdata.length == 0) {
        return;
      }
      let caltype = $("#luckysheet-matrix-cal-type").val(), calvalue = parseInt($("#luckysheet-matrix-cal-value").val());
      if (calvalue.toString() == "NaN") {
        if (isEditMode()) {
          alert(locale_drag2.inputCorrect);
        } else {
          tooltip_default.info(locale_drag2.inputCorrect, "");
        }
        return;
      }
      if (calvalue == null) {
        calvalue = 2;
      }
      let arr = [];
      for (let r2 = 0; r2 < getdata.length; r2++) {
        let a = [];
        for (let c2 = 0; c2 < getdata[0].length; c2++) {
          let value = "";
          if (getdata[r2] != null && getdata[r2][c2] != null) {
            value = getdata[r2][c2];
            if (parseInt(value) != null && getdata[r2][c2].ct != void 0 && getdata[r2][c2].ct.t == "n") {
              if (caltype == "minus") {
                value.v = value.v - calvalue;
              } else if (caltype == "multiply") {
                value.v = value.v * calvalue;
              } else if (caltype == "divided") {
                value.v = numFormat2(value.v / calvalue, 4);
              } else if (caltype == "power") {
                value.v = Math.pow(value.v, calvalue);
              } else if (caltype == "root") {
                if (calvalue == 2) {
                  value.v = numFormat2(Math.sqrt(value.v), 4);
                } else if (calvalue == 3 && Math.cbrt) {
                  value.v = numFormat2(Math.cbrt(value.v), 4);
                } else {
                  value.v = numFormat2(jfnqrt2(value.v, calvalue), 4);
                }
              } else if (caltype == "log") {
                value.v = numFormat2(Math.log(value.v) * 1e4 / Math.log(Math.abs(calvalue)), 4);
              } else {
                value.v = value.v + calvalue;
              }
              if (value.v == null) {
                value.m = "";
              } else {
                value.m = value.v.toString();
              }
            }
          }
          a.push(value);
        }
        arr.push(a);
      }
      editor_default.controlHandler(arr);
    });
    $("#luckysheet-matrix-delezero-row").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      if (getdata.length == 0) {
        return;
      }
      let arr = [];
      let getdatalen = getdata[0].length;
      for (let r2 = 0; r2 < getdata.length; r2++) {
        let a = [], stdel = true, eddel = true;
        for (let c2 = 0; c2 < getdatalen; c2++) {
          let value = "";
          if (getdata[r2] != null && getdata[r2][c2] != null) {
            value = getdata[r2][c2];
            if ((value.v == "0" || value.v == 0) && stdel) {
              continue;
            } else {
              stdel = false;
            }
          }
          a.push(value);
        }
        let a12 = [];
        if (a.length == getdatalen) {
          a12 = a;
        } else {
          for (let c2 = a.length - 1; c2 >= 0; c2--) {
            let value = "";
            if (a[c2] != null) {
              value = a[c2];
              if ((value.v == "0" || value.v == 0) && eddel) {
                continue;
              } else {
                eddel = false;
              }
            }
            a12.unshift(value);
          }
          let l = getdatalen - a12.length;
          for (let c1 = 0; c1 < l; c1++) {
            a12.push("");
          }
        }
        arr.push(a12);
      }
      editor_default.controlHandler(arr);
    });
    $("#luckysheet-matrix-delezero-column").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      if (getdata.length == 0) {
        return;
      }
      let arr = [];
      let getdatalen = getdata.length, collen = getdata[0].length;
      for (let c2 = 0; c2 < collen; c2++) {
        let a = [], stdel = true, eddel = true;
        for (let r2 = 0; r2 < getdatalen; r2++) {
          let value = "";
          if (getdata[r2] != null && getdata[r2][c2] != null) {
            value = getdata[r2][c2];
            if ((value.v == "0" || value.v == 0) && stdel) {
              continue;
            } else {
              stdel = false;
            }
          }
          a.push(value);
        }
        let a12 = [];
        if (a.length == getdatalen) {
          a12 = a;
        } else {
          for (let r2 = a.length - 1; r2 >= 0; r2--) {
            let value = "";
            if (a[r2] != null) {
              value = a[r2];
              if ((value.v == "0" || value.v == 0) && eddel) {
                continue;
              } else {
                eddel = false;
              }
            }
            a12.unshift(value);
          }
          let l = getdatalen - a12.length;
          for (let r1 = 0; r1 < l; r1++) {
            a12.push("");
          }
        }
        arr.push(a12);
      }
      let arr1 = [];
      for (let c2 = 0; c2 < arr[0].length; c2++) {
        let a = [];
        for (let r2 = 0; r2 < arr.length; r2++) {
          let value = "";
          if (arr[r2] != null && arr[r2][c2] != null) {
            value = arr[r2][c2];
          }
          a.push(value);
        }
        arr1.push(a);
      }
      editor_default.controlHandler(arr1);
    });
    $("#luckysheet-matrix-delerpt-row").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      if (getdata.length == 0) {
        return;
      }
      let arr = [];
      let getdatalen = getdata[0].length;
      for (let r2 = 0; r2 < getdata.length; r2++) {
        let a = [], repeat = {};
        for (let c2 = 0; c2 < getdatalen; c2++) {
          let value = null;
          if (getdata[r2] != null && getdata[r2][c2] != null) {
            value = getdata[r2][c2];
            if (value.v in repeat) {
              repeat[value.v].push(value);
            } else {
              repeat[value.v] = [];
              repeat[value.v].push(value);
            }
          }
        }
        for (let c2 = 0; c2 < getdatalen; c2++) {
          let value = null;
          if (getdata[r2] != null && getdata[r2][c2] != null) {
            value = getdata[r2][c2];
            if (repeat[value.v].length == 1) {
              a.push(value);
            }
          }
        }
        let l = getdatalen - a.length;
        for (let c1 = 0; c1 < l; c1++) {
          a.push(null);
        }
        arr.push(a);
      }
      editor_default.controlHandler(arr);
    });
    $("#luckysheet-matrix-delerpt-column").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      let getdata = getdatabyselection(store_default.luckysheet_select_save[0]);
      if (getdata.length == 0) {
        return;
      }
      let arr = [];
      let getdatalen = getdata.length, collen = getdata[0].length;
      for (let c2 = 0; c2 < collen; c2++) {
        let a = [], repeat = {};
        for (let r2 = 0; r2 < getdatalen; r2++) {
          let value = null;
          if (getdata[r2] != null && getdata[r2][c2] != null) {
            value = getdata[r2][c2];
            if (value.v in repeat) {
              repeat[value.v].push(value);
            } else {
              repeat[value.v] = [];
              repeat[value.v].push(value);
            }
          }
        }
        for (let r2 = 0; r2 < getdatalen; r2++) {
          let value = null;
          if (getdata[r2] != null && getdata[r2][c2] != null) {
            value = getdata[r2][c2];
            if (repeat[value.v].length == 1) {
              a.push(value);
            }
          }
        }
        a1 = a;
        let l = getdatalen - a1.length;
        for (let r1 = 0; r1 < l; r1++) {
          a1.push(null);
        }
        arr.push(a1);
      }
      let arr1 = [];
      for (let c2 = 0; c2 < arr[0].length; c2++) {
        let a = [];
        for (let r2 = 0; r2 < arr.length; r2++) {
          let value = null;
          if (arr[r2] != null && arr[r2][c2] != null) {
            value = arr[r2][c2];
          }
          a.push(value);
        }
        arr1.push(a);
      }
      editor_default.controlHandler(arr1);
    });
  }
  var init_matrixOperation = __esm({
    "src/controllers/matrixOperation.js"() {
      init_selection();
      init_util();
      init_validate();
      init_getdata();
      init_tooltip();
      init_editor();
      init_locale();
      init_store();
    }
  });

  // src/controllers/sheetBar.js
  function showsheetconfigmenu() {
    if (!isInitialSheetConfig) {
      isInitialSheetConfig = true;
      const _locale = locale_default();
      let locale_toolbar = _locale.toolbar;
      $("#luckysheetsheetconfigcolorur").spectrum({
        showPalette: true,
        preferredFormat: "hex",
        clickoutFiresChange: false,
        showInitial: true,
        showInput: true,
        flat: true,
        hideAfterPaletteSelect: false,
        showSelectionPalette: true,
        maxPaletteSize: 10,
        cancelText: _locale.sheetconfig.cancelText,
        chooseText: _locale.sheetconfig.chooseText,
        togglePaletteMoreText: locale_toolbar.toolMore,
        togglePaletteLessText: locale_toolbar.toolLess,
        clearText: locale_toolbar.clearText,
        noColorSelectedText: locale_toolbar.noColorSelectedText,
        palette: [["rgb(0, 0, 0)", "rgb(67, 67, 67)", "rgb(102, 102, 102)", "rgb(204, 204, 204)", "rgb(217, 217, 217)", "rgb(255, 255, 255)"], ["rgb(152, 0, 0)", "rgb(255, 0, 0)", "rgb(255, 153, 0)", "rgb(255, 255, 0)", "rgb(0, 255, 0)", "rgb(0, 255, 255)", "rgb(74, 134, 232)", "rgb(0, 0, 255)", "rgb(153, 0, 255)", "rgb(255, 0, 255)"], ["rgb(230, 184, 175)", "rgb(244, 204, 204)", "rgb(252, 229, 205)", "rgb(255, 242, 204)", "rgb(217, 234, 211)", "rgb(208, 224, 227)", "rgb(201, 218, 248)", "rgb(207, 226, 243)", "rgb(217, 210, 233)", "rgb(234, 209, 220)"], ["rgb(221, 126, 107)", "rgb(234, 153, 153)", "rgb(249, 203, 156)", "rgb(255, 229, 153)", "rgb(182, 215, 168)", "rgb(162, 196, 201)", "rgb(164, 194, 244)", "rgb(159, 197, 232)", "rgb(180, 167, 214)", "rgb(213, 166, 189)"], ["rgb(204, 65, 37)", "rgb(224, 102, 102)", "rgb(246, 178, 107)", "rgb(255, 217, 102)", "rgb(147, 196, 125)", "rgb(118, 165, 175)", "rgb(109, 158, 235)", "rgb(111, 168, 220)", "rgb(142, 124, 195)", "rgb(194, 123, 160)"], ["rgb(166, 28, 0)", "rgb(204, 0, 0)", "rgb(230, 145, 56)", "rgb(241, 194, 50)", "rgb(106, 168, 79)", "rgb(69, 129, 142)", "rgb(60, 120, 216)", "rgb(61, 133, 198)", "rgb(103, 78, 167)", "rgb(166, 77, 121)"], ["rgb(91, 15, 0)", "rgb(102, 0, 0)", "rgb(120, 63, 4)", "rgb(127, 96, 0)", "rgb(39, 78, 19)", "rgb(12, 52, 61)", "rgb(28, 69, 135)", "rgb(7, 55, 99)", "rgb(32, 18, 77)", "rgb(76, 17, 48)"], ["#c1232b", "#27727b", "#fcce10", "#e87c25", "#b5c334", "#fe8463", "#9bca63", "#fad860", "#f3a43b", "#60c0dd", "#d7504b", "#c6e579", "#f4e001", "#f0805a", "#26c0c0", "#c12e34", "#e6b600", "#0098d9", "#2b821d", "#005eaa", "#339ca8", "#cda819", "#32a487", "#3fb1e3", "#6be6c1", "#626c91", "#a0a7e6", "#c4ebad", "#96dee8"]],
        change: function(color) {
          let $input = $(this);
          if (color != null) {
            color = color.toHexString();
          } else {
            color = "rgb(0, 0, 0)";
          }
          let oldcolor = null;
          if (luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").length > 0) {
            oldcolor = luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").css("background-color");
          }
          luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").remove();
          luckysheetcurrentSheetitem.append('<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + color + ';"></div>');
          let index3 = getSheetIndex(store_default.currentSheetIndex);
          store_default.luckysheetfile[index3].color = color;
          server_default.saveParam("all", store_default.currentSheetIndex, color, {"k": "color"});
          if (store_default.clearjfundo) {
            let redo2 = {};
            redo2["type"] = "sheetColor";
            redo2["sheetIndex"] = store_default.currentSheetIndex;
            redo2["oldcolor"] = oldcolor;
            redo2["color"] = color;
            store_default.jfundo.length = 0;
            store_default.jfredo.push(redo2);
          }
        }
      });
      $("#luckysheetsheetconfigcolorreset").click(function() {
        let oldcolor = null;
        if (luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").length > 0) {
          oldcolor = luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").css("background-color");
        }
        luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").remove();
        let index3 = getSheetIndex(store_default.currentSheetIndex);
        store_default.luckysheetfile[index3].color = null;
        server_default.saveParam("all", store_default.currentSheetIndex, null, {"k": "color"});
        if (store_default.clearjfundo) {
          let redo2 = {};
          redo2["type"] = "sheetColor";
          redo2["sheetIndex"] = store_default.currentSheetIndex;
          redo2["oldcolor"] = oldcolor;
          redo2["color"] = null;
          store_default.jfundo.length = 0;
          store_default.jfredo.push(redo2);
        }
      });
    }
    let index2 = getSheetIndex(store_default.currentSheetIndex);
    if (store_default.luckysheetfile[index2].color != null && store_default.luckysheetfile[index2].color.length > 0) {
      $("#luckysheetsheetconfigcolorur").spectrum("set", store_default.luckysheetfile[index2].color);
    }
    $("#luckysheetsheetconfigcolorur").parent().find("span, div, button, input, a").addClass("luckysheet-mousedown-cancel");
    const config = luckysheetConfigsetting_default.sheetRightClickConfig;
    if (Object.values(config).every((ele) => !ele)) {
      return;
    }
    setTimeout(function() {
      mouseclickposition($("#luckysheet-rightclick-sheet-menu"), luckysheetcurrentSheetitem.offset().left + luckysheetcurrentSheetitem.width(), luckysheetcurrentSheetitem.offset().top - 18, "leftbottom");
    }, 1);
  }
  function initialSheetBar() {
    const _locale = locale_default();
    const locale_sheetconfig = _locale.sheetconfig;
    isInitialSheetConfig = false;
    $("#luckysheet-sheet-area").on("mousedown", "div.luckysheet-sheets-item", function(e) {
      if (isEditMode()) {
        return;
      }
      let $t = $(this), $cur = $(e.target), $item = $cur.closest(".luckysheet-sheets-item");
      if (e.which == "3") {
        setTimeout(() => {
          luckysheetsheetrightclick($t, $cur, e);
          luckysheetcurrentSheetitem = $item;
          showsheetconfigmenu();
          return;
        }, 0);
      }
      if ($item.hasClass("luckysheet-sheets-item-active") && $item.find(".luckysheet-sheets-item-name").attr("contenteditable") == "false") {
        jfdbclicklagTimeout = setTimeout(function() {
          store_default.luckysheet_sheet_move_status = true;
          store_default.luckysheet_sheet_move_data = {};
          store_default.luckysheet_sheet_move_data.widthlist = [];
          $("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").each(function(i2) {
            if (i2 == 0) {
              store_default.luckysheet_sheet_move_data.widthlist.push(parseInt($(this).outerWidth()));
            } else {
              store_default.luckysheet_sheet_move_data.widthlist.push(parseInt($(this).outerWidth()) + store_default.luckysheet_sheet_move_data.widthlist[i2 - 1]);
            }
          });
          store_default.luckysheet_sheet_move_data.curindex = $("#luckysheet-sheet-area div.luckysheet-sheets-item").index($item);
          let x = e.pageX;
          store_default.luckysheet_sheet_move_data.curleft = x - $item.offset().left;
          store_default.luckysheet_sheet_move_data.pageX = x;
          store_default.luckysheet_sheet_move_data.activeobject = $item;
          store_default.luckysheet_sheet_move_data.cursorobject = $cur;
          let $itemclone = $item.clone().css("visibility", "hidden").attr("id", "luckysheet-sheets-item-clone");
          $item.after($itemclone);
          $item.css({"position": "absolute", "opacity": 0.8, "cursor": "move", "transition": "initial", "z-index": 10});
        }, 200);
      }
    }).on("click", "div.luckysheet-sheets-item", function(e) {
      if (isEditMode()) {
        return;
      }
      let $t = $(this), $cur = $(e.target);
      luckysheetsheetrightclick($t, $cur, e);
      server_default.keepHighLightBox();
    });
    let luckysheetsheetnameeditor = function($t) {
      if (store_default.allowEdit === false) {
        return;
      }
      $t.attr("contenteditable", "true").addClass("luckysheet-mousedown-cancel").data("oldtxt", $t.text());
      setTimeout(function() {
        selectTextDom($t.get(0));
      }, 1);
    };
    $("#luckysheet-sheet-area").on("dblclick", "span.luckysheet-sheets-item-name", function(e) {
      luckysheetsheetnameeditor($(this));
    });
    let compositionFlag = true;
    $("#luckysheet-sheet-area").on("compositionstart", "span.luckysheet-sheets-item-name", () => compositionFlag = false);
    $("#luckysheet-sheet-area").on("compositionend", "span.luckysheet-sheets-item-name", () => compositionFlag = true);
    $("#luckysheet-sheet-area").on("input", "span.luckysheet-sheets-item-name", function() {
      if (store_default.allowEdit === false) {
        return;
      }
      if (store_default.limitSheetNameLength === false) {
        return;
      }
      let maxLength = store_default.defaultSheetNameMaxLength;
      if (maxLength === 0) {
        return;
      }
      setTimeout(() => {
        if (compositionFlag) {
          if ($(this).text().length >= maxLength) {
            setTimeout(() => {
              $(this).text($(this).text().substring(0, maxLength));
              let range2 = window.getSelection();
              range2.selectAllChildren(this);
              range2.collapseToEnd();
            }, 0);
          }
        }
      }, 0);
    });
    $("#luckysheet-sheet-area").on("blur", "span.luckysheet-sheets-item-name", function(e) {
      if (store_default.allowEdit === false) {
        return;
      }
      let $t = $(this);
      let txt = $t.text(), oldtxt = $t.data("oldtxt");
      if ($(this).text().length === 0) {
        tooltip_default.info("", locale_sheetconfig.sheetNamecannotIsEmptyError);
        $t.text(oldtxt).attr("contenteditable", "false");
        return;
      }
      if (txt.length > 31 || txt.charAt(0) == "'" || txt.charAt(txt.length - 1) == "'" || /[：\:\\\/？\?\*\[\]]+/.test(txt)) {
        tooltip_default.info("", locale_sheetconfig.sheetNameSpecCharError);
        $t.text(oldtxt).attr("contenteditable", "false");
        return;
      }
      let index2 = getSheetIndex(store_default.currentSheetIndex);
      for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
        if (index2 != i2 && store_default.luckysheetfile[i2].name == txt) {
          if (isEditMode()) {
            alert(locale_sheetconfig.tipNameRepeat);
          } else {
            tooltip_default.info("", locale_sheetconfig.tipNameRepeat);
          }
          $t.text(oldtxt).attr("contenteditable", "false");
          return;
        }
      }
      sheetmanage_default.sheetArrowShowAndHide();
      store_default.luckysheetfile[index2].name = txt;
      server_default.saveParam("all", store_default.currentSheetIndex, txt, {"k": "name"});
      $t.attr("contenteditable", "false").removeClass("luckysheet-mousedown-cancel");
      if (store_default.clearjfundo) {
        let redo2 = {};
        redo2["type"] = "sheetName";
        redo2["sheetIndex"] = store_default.currentSheetIndex;
        redo2["oldtxt"] = oldtxt;
        redo2["txt"] = txt;
        store_default.jfundo.length = 0;
        store_default.jfredo.push(redo2);
      }
      method_default.createHookFunction("sheetEditNameAfter", {
        i: store_default.luckysheetfile[index2].index,
        oldName: oldtxt,
        newName: txt
      });
    });
    $("#luckysheet-sheet-area").on("keydown", "span.luckysheet-sheets-item-name", function(e) {
      if (store_default.allowEdit === false) {
        return;
      }
      let kcode = e.keyCode;
      let $t = $(this);
      if (kcode == keycode.ENTER) {
        let index2 = getSheetIndex(store_default.currentSheetIndex);
        oldSheetFileName = store_default.luckysheetfile[index2].name || oldSheetFileName;
        store_default.luckysheetfile[index2].name = $t.text();
        $t.attr("contenteditable", "false");
      }
    });
    $("#luckysheetsheetconfigrename").click(function() {
      var $name = luckysheetcurrentSheetitem.find("span.luckysheet-sheets-item-name");
      if (!method_default.createHookFunction("sheetEditNameBefore", {i: luckysheetcurrentSheetitem.data("index"), name: $name.text()})) {
        return;
      }
      luckysheetsheetnameeditor(luckysheetcurrentSheetitem.find("span.luckysheet-sheets-item-name"));
      $("#luckysheet-input-box").removeAttr("style");
      $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
    });
    $("#luckysheetsheetconfigshow").click(function() {
      $("#luckysheet-sheets-m").click();
      $("#luckysheet-input-box").removeAttr("style");
      $("#luckysheet-rightclick-sheet-menu").hide();
    });
    $("#luckysheetsheetconfigmoveleft").click(function() {
      if (luckysheetcurrentSheetitem.prevAll(":visible").length > 0) {
        luckysheetcurrentSheetitem.insertBefore(luckysheetcurrentSheetitem.prevAll(":visible").eq(0));
        sheetmanage_default.reOrderAllSheet();
      }
      $("#luckysheet-input-box").removeAttr("style");
      $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
    });
    $("#luckysheetsheetconfigmoveright").click(function() {
      if (luckysheetcurrentSheetitem.nextAll(":visible").length > 0) {
        luckysheetcurrentSheetitem.insertAfter(luckysheetcurrentSheetitem.nextAll(":visible").eq(0));
        sheetmanage_default.reOrderAllSheet();
      }
      $("#luckysheet-input-box").removeAttr("style");
      $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
    });
    $("#luckysheetsheetconfigdelete").click(function(e) {
      $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
      if ($("#luckysheet-sheet-container-c .luckysheet-sheets-item:visible").length <= 1) {
        if (isEditMode()) {
          alert(locale_sheetconfig.noMoreSheet);
        } else {
          tooltip_default.info(locale_sheetconfig.noMoreSheet, "");
        }
        return;
      }
      let index2 = getSheetIndex(store_default.currentSheetIndex);
      tooltip_default.confirm(locale_sheetconfig.confirmDelete + "\u3010" + store_default.luckysheetfile[index2].name + "\u3011\uFF1F", "<span style='color:#9e9e9e;font-size:12px;'>" + locale_sheetconfig.redoDelete + "</span>", function() {
        sheetmanage_default.deleteSheet(luckysheetcurrentSheetitem.data("index"));
      }, null);
      $("#luckysheet-input-box").removeAttr("style");
    });
    $("#luckysheetsheetconfigcopy").click(function(e) {
      sheetmanage_default.copySheet(luckysheetcurrentSheetitem.data("index"), e);
      $("#luckysheet-input-box").removeAttr("style");
      $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
    });
    $("#luckysheetsheetconfighide").click(function() {
      if ($("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").length == 1) {
        if (isEditMode()) {
          alert(locale_sheetconfig.noHide);
        } else {
          tooltip_default.info("", locale_sheetconfig.noHide);
        }
        return;
      }
      sheetmanage_default.setSheetHide(luckysheetcurrentSheetitem.data("index"));
      $("#luckysheet-input-box").removeAttr("style");
      $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
    });
    $("#luckysheet-sheets-add").click(function(e) {
      if (parseInt($("#luckysheet-input-box").css("top")) > 0) {
        formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
      }
      sheetmanage_default.addNewSheet(e);
      sheetmanage_default.locationSheet();
      $("#luckysheet-input-box").removeAttr("style");
    });
    let sheetscrollani = null, sheetscrollstart = 0, sheetscrollend = 0, sheetscrollstep = 150;
    $("#luckysheet-sheets-leftscroll").click(function() {
      let $c = $("#luckysheet-sheet-container-c");
      sheetscrollstart = $c.scrollLeft();
      sheetscrollend = $c.scrollLeft() - sheetscrollstep;
      if (sheetscrollend <= 0) {
        $("#luckysheet-sheet-container .docs-sheet-fade-left").hide();
      }
      $("#luckysheet-sheet-container .docs-sheet-fade-right").show();
      clearInterval(sheetscrollani);
      sheetscrollani = setInterval(function() {
        sheetscrollstart -= 4;
        $c.scrollLeft(sheetscrollstart);
        if (sheetscrollstart <= sheetscrollend) {
          clearInterval(sheetscrollani);
        }
      }, 1);
    });
    $("#luckysheet-sheets-rightscroll").click(function() {
      let $c = $("#luckysheet-sheet-container-c");
      sheetscrollstart = $c.scrollLeft();
      sheetscrollend = $c.scrollLeft() + sheetscrollstep;
      if (sheetscrollstart > 0) {
        $("#luckysheet-sheet-container .docs-sheet-fade-right").hide();
      }
      $("#luckysheet-sheet-container .docs-sheet-fade-left").show();
      clearInterval(sheetscrollani);
      sheetscrollani = setInterval(function() {
        sheetscrollstart += 4;
        $c.scrollLeft(sheetscrollstart);
        if (sheetscrollstart >= sheetscrollend) {
          clearInterval(sheetscrollani);
        }
      }, 1);
    });
    let initialOpenSheet = true;
    $("#luckysheet-sheets-m").click(function(e) {
      if (parseInt($("#luckysheet-input-box").css("top")) > 0) {
        formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
      }
      $("#luckysheet-sheet-list").html("");
      let item2 = "";
      for (let i2 = 0; i2 < store_default.luckysheetfile.length; i2++) {
        let f = store_default.luckysheetfile[i2], icon = "", style = "";
        if (f["status"] == 1) {
          icon = '<i class="fa fa-check" aria-hidden="true"></i>';
        }
        if (f["hide"] == 1) {
          icon = '<i class="fa fa-low-vision" aria-hidden="true"></i>';
          style += "color:#BBBBBB;";
        }
        if (f["color"] != null && f["color"].length > 0) {
          style += "border-right:4px solid " + f["color"] + ";";
        }
        item2 += replaceHtml(sheetselectlistitemHTML, {"index": f["index"], "name": f["name"], "icon": icon, "style": style});
      }
      if (initialOpenSheet) {
        $("#" + store_default.container).append(replaceHtml(sheetselectlistHTML, {"item": item2}));
        $("#luckysheet-sheet-list").on("click", ".luckysheet-cols-menuitem", function(e2) {
          if (isEditMode()) {
            alert(locale_sheetconfig.chartEditNoOpt);
            return;
          }
          let $item = $(this), index2 = $item.data("index");
          if ($item.data("index") != store_default.currentSheetIndex) {
            sheetmanage_default.setSheetShow(index2);
            sheetmanage_default.locationSheet();
          }
          server_default.keepHighLightBox();
        });
        initialOpenSheet = false;
      } else {
        $("#luckysheet-sheet-list").html(item2);
      }
      let $t = $("#luckysheet-sheet-list");
      let left = $(this).offset().left - $("#" + store_default.container).offset().left;
      let bottom = $(this).height() + $("#luckysheet-sta-content").height() + 12;
      $t.css({left: left + "px", bottom: bottom + "px"}).show();
      $("#luckysheet-input-box").removeAttr("style");
    });
    if (luckysheetConfigsetting_default.pager) {
      pagerInit(luckysheetConfigsetting_default.pager);
    }
  }
  var isInitialSheetConfig, luckysheetcurrentSheetitem, jfdbclicklagTimeout, oldSheetFileName, luckysheetsheetrightclick;
  var init_sheetBar = __esm({
    "src/controllers/sheetBar.js"() {
      init_sheetmanage();
      init_server();
      init_constant();
      init_util();
      init_get();
      init_validate();
      init_formula();
      init_cleargridelement();
      init_tooltip();
      init_cursorPos();
      init_locale();
      init_store();
      init_luckysheetConfigsetting();
      init_api();
      init_method();
      isInitialSheetConfig = false;
      luckysheetcurrentSheetitem = null;
      jfdbclicklagTimeout = null;
      oldSheetFileName = "";
      luckysheetsheetrightclick = function($t, $cur, e) {
        clearTimeout(jfdbclicklagTimeout);
        if ($cur.hasClass("luckysheet-sheets-item-name") && $cur.attr("contenteditable") == "true") {
          return;
        }
        if (formula_default.rangestart || formula_default.rangedrag_column_start || formula_default.rangedrag_row_start || formula_default.israngeseleciton()) {
          setTimeout(function() {
            formula_default.setCaretPosition(formula_default.rangeSetValueTo.get(0), 0, formula_default.rangeSetValueTo.text().length);
            formula_default.createRangeHightlight();
            $("#luckysheet-input-box-index").find(".luckysheet-input-box-index-sheettxt").remove().end().prepend("<span class='luckysheet-input-box-index-sheettxt'>" + sheetmanage_default.getSheetName(formula_default.rangetosheet) + "!</span>").show();
            $("#luckysheet-input-box-index").css({"left": $("#luckysheet-input-box").css("left"), "top": parseInt($("#luckysheet-input-box").css("top")) - 20 + "px", "z-index": $("#luckysheet-input-box").css("z-index")});
          }, 1);
        } else {
          if (parseInt($("#luckysheet-input-box").css("top")) > 0) {
            formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
          }
          $("#luckysheet-input-box").removeAttr("style");
          $("#luckysheet-formula-functionrange .luckysheet-formula-functionrange-highlight").remove();
        }
        $("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active");
        $t.addClass("luckysheet-sheets-item-active");
        cleargridelement(e);
        sheetmanage_default.changeSheet($t.data("index"));
        $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
        if ($cur.hasClass("luckysheet-sheets-item-menu") || $cur.hasClass("fa-sort-desc") || e.which == "3") {
          luckysheetcurrentSheetitem = $cur.closest(".luckysheet-sheets-item");
          showsheetconfigmenu();
        }
      };
    }
  });

  // src/controllers/formulaBar.js
  function formulaBarInitial() {
    const _locale = locale_default();
    const locale_formula = _locale.formula;
    $("#luckysheet-functionbox-cell").focus(function() {
      if (isEditMode()) {
        return;
      }
      if (store_default.luckysheet_select_save.length > 0) {
        let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
        let row_index = last["row_focus"], col_index = last["column_focus"];
        luckysheetupdateCell(row_index, col_index, store_default.flowdata, null, true);
        formula_default.rangeResizeTo = $("#luckysheet-functionbox-cell");
      }
    }).keydown(function(event2) {
      if (isEditMode()) {
        return;
      }
      let ctrlKey = event2.ctrlKey;
      let altKey = event2.altKey;
      let shiftKey = event2.shiftKey;
      let kcode = event2.keyCode;
      let $inputbox = $("#luckysheet-input-box");
      if (kcode == keycode.ENTER && parseInt($inputbox.css("top")) > 0) {
        if ($("#luckysheet-formula-search-c").is(":visible") && formula_default.searchFunctionCell != null) {
          formula_default.searchFunctionEnter($("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active"));
        } else {
          formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
          store_default.luckysheet_select_save = [{"row": [store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[0]], "column": [store_default.luckysheetCellUpdate[1], store_default.luckysheetCellUpdate[1]], "row_focus": store_default.luckysheetCellUpdate[0], "column_focus": store_default.luckysheetCellUpdate[1]}];
          luckysheetMoveHighlightCell("down", 1, "rangeOfSelect");
          $("#luckysheet-rich-text-editor").focus();
        }
        event2.preventDefault();
      } else if (kcode == keycode.ESC && parseInt($inputbox.css("top")) > 0) {
        formula_default.dontupdate();
        luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
        $("#luckysheet-rich-text-editor").focus();
        event2.preventDefault();
      } else if (kcode == keycode.F4 && parseInt($inputbox.css("top")) > 0) {
        formula_default.setfreezonFuc(event2);
        event2.preventDefault();
      } else if (kcode == keycode.UP && parseInt($inputbox.css("top")) > 0) {
        if ($("#luckysheet-formula-search-c").is(":visible")) {
          let $up = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active").prev();
          if ($up.length == 0) {
            $up = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").last();
          }
          $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").removeClass("luckysheet-formula-search-item-active");
          $up.addClass("luckysheet-formula-search-item-active");
          event2.preventDefault();
        }
      } else if (kcode == keycode.DOWN && parseInt($inputbox.css("top")) > 0) {
        if ($("#luckysheet-formula-search-c").is(":visible")) {
          let $up = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active").next();
          if ($up.length == 0) {
            $up = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").first();
          }
          $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").removeClass("luckysheet-formula-search-item-active");
          $up.addClass("luckysheet-formula-search-item-active");
          event2.preventDefault();
        }
      } else if (kcode == keycode.LEFT && parseInt($inputbox.css("top")) > 0) {
        formula_default.rangeHightlightselected($("#luckysheet-functionbox-cell"));
      } else if (kcode == keycode.RIGHT && parseInt($inputbox.css("top")) > 0) {
        formula_default.rangeHightlightselected($("#luckysheet-functionbox-cell"));
      } else if (!(kcode >= 112 && kcode <= 123 || kcode <= 46 || kcode == 144 || kcode == 108 || event2.ctrlKey || event2.altKey || event2.shiftKey && (kcode == 37 || kcode == 38 || kcode == 39 || kcode == 40)) || kcode == 8 || kcode == 32 || kcode == 46 || event2.ctrlKey && kcode == 86) {
        formula_default.functionInputHanddler($("#luckysheet-rich-text-editor"), $("#luckysheet-functionbox-cell"), kcode);
      }
    }).click(function() {
      if (isEditMode()) {
        return;
      }
      formula_default.rangeHightlightselected($("#luckysheet-functionbox-cell"));
    });
    $("#luckysheet-wa-functionbox-cancel").click(function() {
      if (!$(this).hasClass("luckysheet-wa-calculate-active")) {
        return;
      }
      if ($("#luckysheet-search-formula-parm").is(":visible")) {
        $("#luckysheet-search-formula-parm").hide();
      }
      if ($("#luckysheet-search-formula-parm-select").is(":visible")) {
        $("#luckysheet-search-formula-parm-select").hide();
      }
      formula_default.dontupdate();
      luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
    });
    $("#luckysheet-wa-functionbox-confirm").click(function() {
      if (!$(this).hasClass("luckysheet-wa-calculate-active")) {
        return;
      }
      if ($("#luckysheet-search-formula-parm").is(":visible")) {
        $("#luckysheet-search-formula-parm").hide();
      }
      if ($("#luckysheet-search-formula-parm-select").is(":visible")) {
        $("#luckysheet-search-formula-parm-select").hide();
      }
      formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
      luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
    });
    $("#luckysheet-wa-functionbox-fx").click(function() {
      if (store_default.luckysheet_select_save.length == 0) {
        if (isEditMode()) {
          alert(locale_formula.tipSelectCell);
        } else {
          tooltip_default.info(locale_formula.tipSelectCell, "");
        }
        return;
      }
      let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
      let row_index = last["row_focus"], col_index = last["column_focus"];
      luckysheetupdateCell(row_index, col_index, store_default.flowdata);
      let cell = store_default.flowdata[row_index][col_index];
      if (cell != null && cell.f != null) {
        let functionStr = formula_default.getfunctionParam(cell.f);
        if (functionStr.fn != null) {
          insertFormula_default.formulaParmDialog(functionStr.fn, functionStr.param);
        } else {
          insertFormula_default.formulaListDialog();
        }
      } else {
        $("#luckysheet-rich-text-editor").html('<span dir="auto" class="luckysheet-formula-text-color">=</span>');
        $("#luckysheet-functionbox-cell").html($("#luckysheet-rich-text-editor").html());
        insertFormula_default.formulaListDialog();
      }
      insertFormula_default.init();
    });
    $("#luckysheet-formula-functionrange").on("mousedown", ".luckysheet-copy", function(event2) {
      formula_default.rangeMove = true;
      store_default.luckysheet_scroll_status = true;
      formula_default.rangeMoveObj = $(this).parent();
      formula_default.rangeMoveIndex = $(this).parent().attr("rangeindex");
      let mouse = mouseposition(event2.pageX, event2.pageY);
      let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
      let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
      $("#luckysheet-formula-functionrange-highlight-" + formula_default.rangeMoveIndex).find(".luckysheet-selection-copy-hc").css("opacity", 0.13);
      let type = $(this).data("type");
      if (type == "top") {
        y += 3;
      } else if (type == "right") {
        x -= 3;
      } else if (type == "bottom") {
        y -= 3;
      } else if (type == "left") {
        x += 3;
      }
      let row_index = rowLocation(y)[2];
      let col_index = colLocation(x)[2];
      formula_default.rangeMovexy = [row_index, col_index];
      $("#luckysheet-sheettable").css("cursor", "move");
      event2.stopPropagation();
    });
    $("#luckysheet-formula-functionrange").on("mousedown", ".luckysheet-highlight", function(event2) {
      formula_default.rangeResize = $(this).data("type");
      formula_default.rangeResizeIndex = $(this).parent().attr("rangeindex");
      let mouse = mouseposition(event2.pageX, event2.pageY), scrollLeft = $("#luckysheet-cell-main").scrollLeft(), scrollTop = $("#luckysheet-cell-main").scrollTop();
      let x = mouse[0] + scrollLeft;
      let y = mouse[1] + scrollTop;
      formula_default.rangeResizeObj = $(this).parent();
      $("#luckysheet-formula-functionrange-highlight-" + formula_default.rangeResizeIndex).find(".luckysheet-selection-copy-hc").css("opacity", 0.13);
      if (formula_default.rangeResize == "lt") {
        x += 3;
        y += 3;
      } else if (formula_default.rangeResize == "lb") {
        x += 3;
        y -= 3;
      } else if (formula_default.rangeResize == "rt") {
        x -= 3;
        y += 3;
      } else if (formula_default.rangeResize == "rb") {
        x -= 3;
        y -= 3;
      }
      let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
      let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
      let position = formula_default.rangeResizeObj.position();
      formula_default.rangeResizexy = [
        col_pre,
        row_pre,
        formula_default.rangeResizeObj.width(),
        formula_default.rangeResizeObj.height(),
        position.left + scrollLeft,
        position.top + scrollTop,
        col,
        row
      ];
      formula_default.rangeResizeWinH = $("#luckysheet-cell-main")[0].scrollHeight;
      formula_default.rangeResizeWinW = $("#luckysheet-cell-main")[0].scrollWidth;
      store_default.luckysheet_scroll_status = true;
      event2.stopPropagation();
    });
  }
  var init_formulaBar = __esm({
    "src/controllers/formulaBar.js"() {
      init_menuButton();
      init_updateCell();
      init_constant();
      init_sheetMove();
      init_insertFormula();
      init_location();
      init_validate();
      init_formula();
      init_tooltip();
      init_locale();
      init_store();
    }
  });

  // src/controllers/rowColumnOperation.js
  function rowColumnOperationInitial() {
    $("#luckysheet-rows-h").mousedown(function(event2) {
      if (!checkProtectionAllSelected(store_default.currentSheetIndex)) {
        return;
      }
      postil_default.removeActivePs();
      if ($("#luckysheet-modal-dialog-activeImage").is(":visible") || $("#luckysheet-modal-dialog-cropping").is(":visible")) {
        imageCtrl_default.cancelActiveImgItem();
      }
      let mouse = mouseposition(event2.pageX, event2.pageY);
      let y = mouse[1] + $("#luckysheet-rows-h").scrollTop();
      let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
      let col_index = store_default.visibledatacolumn.length - 1, col = store_default.visibledatacolumn[col_index], col_pre = 0;
      $("#luckysheet-rightclick-menu").hide();
      $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
      if (event2.which == "3") {
        let isright = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let obj_s = store_default.luckysheet_select_save[s];
          if (obj_s["row"] != null && (row_index >= obj_s["row"][0] && row_index <= obj_s["row"][1]) && (obj_s["column"][0] == 0 && obj_s["column"][1] == store_default.flowdata[0].length - 1)) {
            isright = true;
            break;
          }
        }
        if (isright) {
          return;
        }
      }
      let top = row_pre, height = row - row_pre - 1;
      let rowseleted = [row_index, row_index];
      store_default.luckysheet_scroll_status = true;
      let $input = $("#luckysheet-input-box");
      if (parseInt($input.css("top")) > 0) {
        if (formula_default.rangestart || formula_default.rangedrag_column_start || formula_default.rangedrag_row_start || formula_default.israngeseleciton() || $("#luckysheet-ifFormulaGenerator-multiRange-dialog").is(":visible")) {
          let changeparam = menuButton_default.mergeMoveMain([0, col_index], rowseleted, {"row_focus": row_index, "column_focus": 0}, top, height, col_pre, col);
          if (changeparam != null) {
            rowseleted = changeparam[1];
            top = changeparam[2];
            height = changeparam[3];
          }
          if (event2.shiftKey) {
            let last = formula_default.func_selectedrange;
            let top2 = 0, height2 = 0, rowseleted2 = [];
            if (last.top > row_pre) {
              top2 = row_pre;
              height2 = last.top + last.height - row_pre;
              if (last.row[1] > last.row_focus) {
                last.row[1] = last.row_focus;
              }
              rowseleted2 = [row_index, last.row[1]];
            } else if (last.top == row_pre) {
              top2 = row_pre;
              height2 = last.top + last.height - row_pre;
              rowseleted2 = [row_index, last.row[0]];
            } else {
              top2 = last.top;
              height2 = row - last.top - 1;
              if (last.row[0] < last.row_focus) {
                last.row[0] = last.row_focus;
              }
              rowseleted2 = [last.row[0], row_index];
            }
            let changeparam2 = menuButton_default.mergeMoveMain([0, col_index], rowseleted2, {"row_focus": row_index, "column_focus": 0}, top2, height2, col_pre, col);
            if (changeparam2 != null) {
              rowseleted2 = changeparam2[1];
              top2 = changeparam2[2];
              height2 = changeparam2[3];
            }
            last["row"] = rowseleted2;
            last["top_move"] = top2;
            last["height_move"] = height2;
            formula_default.func_selectedrange = last;
          } else if (event2.ctrlKey && $("#luckysheet-rich-text-editor").find("span").last().text() != ",") {
            let vText = $("#luckysheet-rich-text-editor").text() + ",";
            if (vText.length > 0 && vText.substr(0, 1) == "=") {
              vText = formula_default.functionHTMLGenerate(vText);
              if (window.getSelection) {
                let currSelection = window.getSelection();
                formula_default.functionRangeIndex = [$(currSelection.anchorNode).parent().index(), currSelection.anchorOffset];
              } else {
                let textRange = document.selection.createRange();
                formula_default.functionRangeIndex = textRange;
              }
              $("#luckysheet-rich-text-editor").html(vText);
              formula_default.canceFunctionrangeSelected();
              formula_default.createRangeHightlight();
            }
            formula_default.rangestart = false;
            formula_default.rangedrag_column_start = false;
            formula_default.rangedrag_row_start = false;
            $("#luckysheet-functionbox-cell").html(vText);
            formula_default.rangeHightlightselected($("#luckysheet-rich-text-editor"));
            formula_default.israngeseleciton();
            formula_default.func_selectedrange = {
              "left": colLocationByIndex(0)[0],
              "width": colLocationByIndex(0)[1] - colLocationByIndex(0)[0] - 1,
              "top": top,
              "height": height,
              "left_move": col_pre,
              "width_move": col - col_pre - 1,
              "top_move": top,
              "height_move": height,
              "row": rowseleted,
              "column": [0, col_index],
              "row_focus": row_index,
              "column_focus": 0
            };
          } else {
            formula_default.func_selectedrange = {
              "left": colLocationByIndex(0)[0],
              "width": colLocationByIndex(0)[1] - colLocationByIndex(0)[0] - 1,
              "top": top,
              "height": height,
              "left_move": col_pre,
              "width_move": col - col_pre - 1,
              "top_move": top,
              "height_move": height,
              "row": rowseleted,
              "column": [0, col_index],
              "row_focus": row_index,
              "column_focus": 0
            };
          }
          if (formula_default.rangestart || formula_default.rangedrag_column_start || formula_default.rangedrag_row_start || formula_default.israngeseleciton()) {
            formula_default.rangeSetValue({"row": rowseleted, "column": [null, null]});
          } else if ($("#luckysheet-ifFormulaGenerator-multiRange-dialog").is(":visible")) {
            let range2 = getRangetxt(store_default.currentSheetIndex, {"row": rowseleted, "column": [0, col_index]}, store_default.currentSheetIndex);
            $("#luckysheet-ifFormulaGenerator-multiRange-dialog input").val(range2);
          }
          formula_default.rangedrag_row_start = true;
          formula_default.rangestart = false;
          formula_default.rangedrag_column_start = false;
          $("#luckysheet-formula-functionrange-select").css({
            "left": col_pre,
            "width": col - col_pre - 1,
            "top": top,
            "height": height
          }).show();
          $("#luckysheet-formula-help-c").hide();
          luckysheet_count_show(col_pre, top, col - col_pre - 1, height, rowseleted, [0, col_index]);
          setTimeout(function() {
            let currSelection = window.getSelection();
            let anchorOffset = currSelection.anchorNode;
            let $editor;
            if ($("#luckysheet-search-formula-parm").is(":visible") || $("#luckysheet-search-formula-parm-select").is(":visible")) {
              $editor = $("#luckysheet-rich-text-editor");
              formula_default.rangechangeindex = formula_default.data_parm_index;
            } else {
              $editor = $(anchorOffset).closest("div");
            }
            let $span = $editor.find("span[rangeindex='" + formula_default.rangechangeindex + "']");
            formula_default.setCaretPosition($span.get(0), 0, $span.html().length);
          }, 1);
          return;
        } else {
          formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
          store_default.luckysheet_rows_selected_status = true;
        }
      } else {
        store_default.luckysheet_rows_selected_status = true;
      }
      if (store_default.luckysheet_rows_selected_status) {
        if (event2.shiftKey) {
          let last = $.extend(true, {}, store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1]);
          let top2 = 0, height2 = 0, rowseleted2 = [];
          if (last.top > row_pre) {
            top2 = row_pre;
            height2 = last.top + last.height - row_pre;
            if (last.row[1] > last.row_focus) {
              last.row[1] = last.row_focus;
            }
            rowseleted2 = [row_index, last.row[1]];
          } else if (last.top == row_pre) {
            top2 = row_pre;
            height2 = last.top + last.height - row_pre;
            rowseleted2 = [row_index, last.row[0]];
          } else {
            top2 = last.top;
            height2 = row - last.top - 1;
            if (last.row[0] < last.row_focus) {
              last.row[0] = last.row_focus;
            }
            rowseleted2 = [last.row[0], row_index];
          }
          last["row"] = rowseleted2;
          last["top_move"] = top2;
          last["height_move"] = height2;
          store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1] = last;
        } else if (event2.ctrlKey) {
          store_default.luckysheet_select_save.push({
            "left": colLocationByIndex(0)[0],
            "width": colLocationByIndex(0)[1] - colLocationByIndex(0)[0] - 1,
            "top": top,
            "height": height,
            "left_move": col_pre,
            "width_move": col - col_pre - 1,
            "top_move": top,
            "height_move": height,
            "row": rowseleted,
            "column": [0, col_index],
            "row_focus": row_index,
            "column_focus": 0,
            "row_select": true
          });
        } else {
          store_default.luckysheet_select_save.length = 0;
          store_default.luckysheet_select_save.push({
            "left": colLocationByIndex(0)[0],
            "width": colLocationByIndex(0)[1] - colLocationByIndex(0)[0] - 1,
            "top": top,
            "height": height,
            "left_move": col_pre,
            "width_move": col - col_pre - 1,
            "top_move": top,
            "height_move": height,
            "row": rowseleted,
            "column": [0, col_index],
            "row_focus": row_index,
            "column_focus": 0,
            "row_select": true
          });
        }
        selectHightlightShow();
        server_default.saveParam("mv", store_default.currentSheetIndex, store_default.luckysheet_select_save);
      }
      selectHelpboxFill();
      setTimeout(function() {
        clearTimeout(store_default.countfuncTimeout);
        countfunc();
      }, 101);
    }).mousemove(function(event2) {
      if (store_default.luckysheet_rows_selected_status || store_default.luckysheet_rows_change_size || store_default.luckysheet_select_status) {
        $("#luckysheet-rows-h-hover").hide();
        return;
      }
      let mouse = mouseposition(event2.pageX, event2.pageY);
      let y = mouse[1] + $("#luckysheet-rows-h").scrollTop();
      let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
      $("#luckysheet-rows-h-hover").css({"top": row_pre, "height": row - row_pre - 1, "display": "block"});
      if (y < row - 1 && y >= row - 5) {
        $("#luckysheet-rows-change-size").css({"top": row - 3, "opacity": 0});
      } else {
        $("#luckysheet-rows-change-size").css("opacity", 0);
      }
    }).mouseleave(function(event2) {
      $("#luckysheet-rows-h-hover").hide();
      $("#luckysheet-rows-change-size").css("opacity", 0);
    }).mouseup(function(event2) {
      if (event2.which == 3) {
        if (!checkIsAllowEdit()) {
          return;
        }
        if (isEditMode()) {
          return;
        }
        $("#luckysheet-cols-rows-shift").hide();
        store_default.luckysheetRightHeadClickIs = "row";
        $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-word").text(locale_default().rightclick.row);
        $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-size").text(locale_default().rightclick.height);
        $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-left").text(locale_default().rightclick.top);
        $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-right").text(locale_default().rightclick.bottom);
        $("#luckysheet-cols-rows-add").show();
        $("#luckysheet-cols-rows-data").show();
        $("#luckysheet-cols-rows-shift").hide();
        $("#luckysheet-cols-rows-handleincell").hide();
        $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "block";
        $$("#luckysheet-cols-rows-data .luckysheet-menuseparator").style.display = "block";
        const cellRightClickConfig = luckysheetConfigsetting_default.cellRightClickConfig;
        if (!cellRightClickConfig.copy && !cellRightClickConfig.copyAs && !cellRightClickConfig.paste && !cellRightClickConfig.insertRow && !cellRightClickConfig.deleteRow && !cellRightClickConfig.hideRow && !cellRightClickConfig.rowHeight && !cellRightClickConfig.clear && !cellRightClickConfig.matrix && !cellRightClickConfig.sort && !cellRightClickConfig.filter && !cellRightClickConfig.chart && !cellRightClickConfig.image && !cellRightClickConfig.link && !cellRightClickConfig.data && !cellRightClickConfig.cellFormat) {
          return;
        }
        $$("#luckysheet-top-left-add-selected").style.display = cellRightClickConfig.insertRow ? "block" : "none";
        $$("#luckysheet-bottom-right-add-selected").style.display = cellRightClickConfig.insertRow ? "block" : "none";
        $$("#luckysheet-del-selected").style.display = cellRightClickConfig.deleteRow ? "block" : "none";
        $$("#luckysheet-hide-selected").style.display = cellRightClickConfig.hideRow ? "block" : "none";
        $$("#luckysheet-show-selected").style.display = cellRightClickConfig.hideRow ? "block" : "none";
        $$("#luckysheet-column-row-width-selected").style.display = cellRightClickConfig.rowHeight ? "block" : "none";
        if (!cellRightClickConfig.copy && !cellRightClickConfig.copyAs && !cellRightClickConfig.paste) {
          $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "none";
          if (!cellRightClickConfig.insertRow && !cellRightClickConfig.deleteRow && !cellRightClickConfig.hideRow && !cellRightClickConfig.rowHeight) {
            $$("#luckysheet-cols-rows-data .luckysheet-menuseparator").style.display = "none";
          }
        }
        if (!cellRightClickConfig.insertRow && !cellRightClickConfig.deleteRow && !cellRightClickConfig.hideRow && !cellRightClickConfig.rowHeight) {
          $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "none";
        }
        if (!cellRightClickConfig.clear && !cellRightClickConfig.matrix && !cellRightClickConfig.sort && !cellRightClickConfig.filter && !cellRightClickConfig.chart && !cellRightClickConfig.image && !cellRightClickConfig.link && !cellRightClickConfig.data && !cellRightClickConfig.cellFormat) {
          $$("#luckysheet-cols-rows-data .luckysheet-menuseparator").style.display = "none";
        }
        showrightclickmenu($("#luckysheet-rightclick-menu"), $(this).offset().left + 46, event2.pageY);
        store_default.luckysheet_cols_menu_status = true;
        let cfg = $.extend(true, {}, store_default.config);
        if (cfg["rowlen"] == null) {
          cfg["rowlen"] = {};
        }
        let first_rowlen = cfg["rowlen"][store_default.luckysheet_select_save[0].row[0]] == null ? store_default.defaultrowlen : cfg["rowlen"][store_default.luckysheet_select_save[0].row[0]];
        let isSame = true;
        for (let i2 = 0; i2 < store_default.luckysheet_select_save.length; i2++) {
          let s = store_default.luckysheet_select_save[i2];
          let r1 = s.row[0], r2 = s.row[1];
          for (let r3 = r1; r3 <= r2; r3++) {
            let rowlen = cfg["rowlen"][r3] == null ? store_default.defaultrowlen : cfg["rowlen"][r3];
            if (rowlen != first_rowlen) {
              isSame = false;
              break;
            }
          }
        }
        if (isSame) {
          $("#luckysheet-cols-rows-add").find("input[type='number'].rcsize").val(first_rowlen);
        } else {
          $("#luckysheet-cols-rows-add").find("input[type='number'].rcsize").val("");
        }
      }
    });
    $("#luckysheet-cols-h-c").mousedown(function(event2) {
      if (!checkProtectionAllSelected(store_default.currentSheetIndex)) {
        return;
      }
      postil_default.removeActivePs();
      if ($("#luckysheet-modal-dialog-activeImage").is(":visible") || $("#luckysheet-modal-dialog-cropping").is(":visible")) {
        imageCtrl_default.cancelActiveImgItem();
      }
      let mouse = mouseposition(event2.pageX, event2.pageY);
      let x = mouse[0] + $(this).scrollLeft();
      let row_index = store_default.visibledatarow.length - 1, row = store_default.visibledatarow[row_index], row_pre = 0;
      let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
      store_default.orderbyindex = col_index;
      $("#luckysheet-rightclick-menu").hide();
      $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
      $("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
      if (event2.which == "3") {
        let isright = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let obj_s = store_default.luckysheet_select_save[s];
          if (obj_s["column"] != null && (col_index >= obj_s["column"][0] && col_index <= obj_s["column"][1]) && (obj_s["row"][0] == 0 && obj_s["row"][1] == store_default.flowdata.length - 1)) {
            isright = true;
            break;
          }
        }
        if (isright) {
          return;
        }
      }
      let left = col_pre, width = col - col_pre - 1;
      let columnseleted = [col_index, col_index];
      store_default.luckysheet_scroll_status = true;
      let $input = $("#luckysheet-input-box");
      if (parseInt($input.css("top")) > 0) {
        if (formula_default.rangestart || formula_default.rangedrag_column_start || formula_default.rangedrag_row_start || formula_default.israngeseleciton() || $("#luckysheet-ifFormulaGenerator-multiRange-dialog").is(":visible")) {
          let changeparam = menuButton_default.mergeMoveMain(columnseleted, [0, row_index], {"row_focus": 0, "column_focus": col_index}, row_pre, row, left, width);
          if (changeparam != null) {
            columnseleted = changeparam[0];
            left = changeparam[4];
            width = changeparam[5];
          }
          if (event2.shiftKey) {
            let last = formula_default.func_selectedrange;
            let left2 = 0, width2 = 0, columnseleted2 = [];
            if (last.left > col_pre) {
              left2 = col_pre;
              width2 = last.left + last.width - col_pre;
              if (last.column[1] > last.column_focus) {
                last.column[1] = last.column_focus;
              }
              columnseleted2 = [col_index, last.column[1]];
            } else if (last.left == col_pre) {
              left2 = col_pre;
              width2 = last.left + last.width - col_pre;
              columnseleted2 = [col_index, last.column[0]];
            } else {
              left2 = last.left;
              width2 = col - last.left - 1;
              if (last.column[0] < last.column_focus) {
                last.column[0] = last.column_focus;
              }
              columnseleted2 = [last.column[0], col_index];
            }
            let changeparam2 = menuButton_default.mergeMoveMain(columnseleted2, [0, row_index], {"row_focus": 0, "column_focus": col_index}, row_pre, row, left2, width2);
            if (changeparam2 != null) {
              columnseleted2 = changeparam2[0];
              left2 = changeparam2[4];
              width2 = changeparam2[5];
            }
            last["column"] = columnseleted2;
            last["left_move"] = left2;
            last["width_move"] = width2;
            formula_default.func_selectedrange = last;
          } else if (event2.ctrlKey && $("#luckysheet-rich-text-editor").find("span").last().text() != ",") {
            let vText = $("#luckysheet-rich-text-editor").text() + ",";
            if (vText.length > 0 && vText.substr(0, 1) == "=") {
              vText = formula_default.functionHTMLGenerate(vText);
              if (window.getSelection) {
                let currSelection = window.getSelection();
                formula_default.functionRangeIndex = [$(currSelection.anchorNode).parent().index(), currSelection.anchorOffset];
              } else {
                let textRange = document.selection.createRange();
                formula_default.functionRangeIndex = textRange;
              }
              $("#luckysheet-rich-text-editor").html(vText);
              formula_default.canceFunctionrangeSelected();
              formula_default.createRangeHightlight();
            }
            formula_default.rangestart = false;
            formula_default.rangedrag_column_start = false;
            formula_default.rangedrag_row_start = false;
            $("#luckysheet-functionbox-cell").html(vText);
            formula_default.rangeHightlightselected($("#luckysheet-rich-text-editor"));
            formula_default.israngeseleciton();
            formula_default.func_selectedrange = {
              "left": left,
              "width": width,
              "top": rowLocationByIndex(0)[0],
              "height": rowLocationByIndex(0)[1] - rowLocationByIndex(0)[0] - 1,
              "left_move": left,
              "width_move": width,
              "top_move": row_pre,
              "height_move": row - row_pre - 1,
              "row": [0, row_index],
              "column": columnseleted,
              "row_focus": 0,
              "column_focus": col_index
            };
          } else {
            formula_default.func_selectedrange = {
              "left": left,
              "width": width,
              "top": rowLocationByIndex(0)[0],
              "height": rowLocationByIndex(0)[1] - rowLocationByIndex(0)[0] - 1,
              "left_move": left,
              "width_move": width,
              "top_move": row_pre,
              "height_move": row - row_pre - 1,
              "row": [0, row_index],
              "column": columnseleted,
              "row_focus": 0,
              "column_focus": col_index
            };
          }
          if (formula_default.rangestart || formula_default.rangedrag_column_start || formula_default.rangedrag_row_start || formula_default.israngeseleciton()) {
            formula_default.rangeSetValue({"row": [null, null], "column": columnseleted});
          } else if ($("#luckysheet-ifFormulaGenerator-multiRange-dialog").is(":visible")) {
            let range2 = getRangetxt(store_default.currentSheetIndex, {"row": [0, row_index], "column": columnseleted}, store_default.currentSheetIndex);
            $("#luckysheet-ifFormulaGenerator-multiRange-dialog input").val(range2);
          }
          formula_default.rangedrag_column_start = true;
          formula_default.rangestart = false;
          formula_default.rangedrag_row_start = false;
          $("#luckysheet-formula-functionrange-select").css({
            "left": left,
            "width": width,
            "top": row_pre,
            "height": row - row_pre - 1
          }).show();
          $("#luckysheet-formula-help-c").hide();
          luckysheet_count_show(left, row_pre, width, row - row_pre - 1, [0, row_index], columnseleted);
          return;
        } else {
          formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
          store_default.luckysheet_cols_selected_status = true;
        }
      } else {
        store_default.luckysheet_cols_selected_status = true;
      }
      if (store_default.luckysheet_cols_selected_status) {
        if (event2.shiftKey) {
          let last = $.extend(true, {}, store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1]);
          let left2 = 0, width2 = 0, columnseleted2 = [];
          if (last.left > col_pre) {
            left2 = col_pre;
            width2 = last.left + last.width - col_pre;
            if (last.column[1] > last.column_focus) {
              last.column[1] = last.column_focus;
            }
            columnseleted2 = [col_index, last.column[1]];
          } else if (last.left == col_pre) {
            left2 = col_pre;
            width2 = last.left + last.width - col_pre;
            columnseleted2 = [col_index, last.column[0]];
          } else {
            left2 = last.left;
            width2 = col - last.left - 1;
            if (last.column[0] < last.column_focus) {
              last.column[0] = last.column_focus;
            }
            columnseleted2 = [last.column[0], col_index];
          }
          last["column"] = columnseleted2;
          last["left_move"] = left2;
          last["width_move"] = width2;
          store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1] = last;
        } else if (event2.ctrlKey) {
          store_default.luckysheet_select_save.push({
            "left": left,
            "width": width,
            "top": rowLocationByIndex(0)[0],
            "height": rowLocationByIndex(0)[1] - rowLocationByIndex(0)[0] - 1,
            "left_move": left,
            "width_move": width,
            "top_move": row_pre,
            "height_move": row - row_pre - 1,
            "row": [0, row_index],
            "column": columnseleted,
            "row_focus": 0,
            "column_focus": col_index,
            "column_select": true
          });
        } else {
          store_default.luckysheet_select_save.length = 0;
          store_default.luckysheet_select_save.push({
            "left": left,
            "width": width,
            "top": rowLocationByIndex(0)[0],
            "height": rowLocationByIndex(0)[1] - rowLocationByIndex(0)[0] - 1,
            "left_move": left,
            "width_move": width,
            "top_move": row_pre,
            "height_move": row - row_pre - 1,
            "row": [0, row_index],
            "column": columnseleted,
            "row_focus": 0,
            "column_focus": col_index,
            "column_select": true
          });
        }
        selectHightlightShow();
        server_default.saveParam("mv", store_default.currentSheetIndex, store_default.luckysheet_select_save);
      }
      selectHelpboxFill();
      setTimeout(function() {
        clearTimeout(store_default.countfuncTimeout);
        countfunc();
      }, 101);
      if (store_default.luckysheet_cols_menu_status) {
        $("#luckysheet-rightclick-menu").hide();
        $("#luckysheet-cols-h-hover").hide();
        $("#luckysheet-cols-menu-btn").hide();
        store_default.luckysheet_cols_menu_status = false;
      }
      event2.stopPropagation();
    }).mousemove(function(event2) {
      if (store_default.luckysheet_cols_selected_status || store_default.luckysheet_select_status) {
        $("#luckysheet-cols-h-hover").hide();
        $("#luckysheet-cols-menu-btn").hide();
        return;
      }
      if (store_default.luckysheet_cols_menu_status || store_default.luckysheet_cols_change_size) {
        return;
      }
      let mouse = mouseposition(event2.pageX, event2.pageY);
      let x = mouse[0] + $("#luckysheet-cols-h-c").scrollLeft();
      let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
      $("#luckysheet-cols-h-hover").css({"left": col_pre, "width": col - col_pre - 1, "display": "block"});
      $("#luckysheet-cols-menu-btn").css({"left": col - 19, "display": "block"});
      $("#luckysheet-cols-change-size").css({"left": col - 5});
      if (x < col && x >= col - 5) {
        $("#luckysheet-cols-change-size").css({"opacity": 0});
        $("#luckysheet-cols-menu-btn").hide();
      } else {
        $("#luckysheet-change-size-line").hide();
        $("#luckysheet-cols-change-size").css("opacity", 0);
      }
    }).mouseleave(function(event2) {
      if (store_default.luckysheet_cols_menu_status || store_default.luckysheet_cols_change_size) {
        return;
      }
      $("#luckysheet-cols-h-hover").hide();
      $("#luckysheet-cols-menu-btn").hide();
      $("#luckysheet-cols-change-size").css("opacity", 0);
    }).mouseup(function(event2) {
      if (event2.which == 3) {
        if (!checkIsAllowEdit()) {
          return;
        }
        if (isEditMode()) {
          return;
        }
        store_default.luckysheetRightHeadClickIs = "column";
        $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-word").text(locale_default().rightclick.column);
        $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-size").text(locale_default().rightclick.width);
        $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-left").text(locale_default().rightclick.left);
        $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-right").text(locale_default().rightclick.right);
        $("#luckysheet-cols-rows-add").show();
        $("#luckysheet-cols-rows-data").show();
        $("#luckysheet-cols-rows-shift").hide();
        $("#luckysheet-cols-rows-handleincell").hide();
        $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "block";
        $$("#luckysheet-cols-rows-data .luckysheet-menuseparator").style.display = "block";
        const cellRightClickConfig = luckysheetConfigsetting_default.cellRightClickConfig;
        if (!cellRightClickConfig.copy && !cellRightClickConfig.copyAs && !cellRightClickConfig.paste && !cellRightClickConfig.insertColumn && !cellRightClickConfig.deleteColumn && !cellRightClickConfig.hideColumn && !cellRightClickConfig.columnWidth && !cellRightClickConfig.clear && !cellRightClickConfig.matrix && !cellRightClickConfig.sort && !cellRightClickConfig.filter && !cellRightClickConfig.chart && !cellRightClickConfig.image && !cellRightClickConfig.link && !cellRightClickConfig.data && !cellRightClickConfig.cellFormat) {
          return;
        }
        $$("#luckysheet-top-left-add-selected").style.display = cellRightClickConfig.insertColumn ? "block" : "none";
        $$("#luckysheet-bottom-right-add-selected").style.display = cellRightClickConfig.insertColumn ? "block" : "none";
        $$("#luckysheet-del-selected").style.display = cellRightClickConfig.deleteColumn ? "block" : "none";
        $$("#luckysheet-hide-selected").style.display = cellRightClickConfig.hideColumn ? "block" : "none";
        $$("#luckysheet-show-selected").style.display = cellRightClickConfig.hideColumn ? "block" : "none";
        $$("#luckysheet-column-row-width-selected").style.display = cellRightClickConfig.columnWidth ? "block" : "none";
        if (!cellRightClickConfig.copy && !cellRightClickConfig.copyAs && !cellRightClickConfig.paste) {
          $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "none";
          if (!cellRightClickConfig.insertColumn && !cellRightClickConfig.deleteColumn && !cellRightClickConfig.hideColumn && !cellRightClickConfig.columnWidth) {
            $$("#luckysheet-cols-rows-data .luckysheet-menuseparator").style.display = "none";
          }
        }
        if (!cellRightClickConfig.insertColumn && !cellRightClickConfig.deleteColumn && !cellRightClickConfig.hideColumn && !cellRightClickConfig.columnWidth) {
          $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "none";
        }
        if (!cellRightClickConfig.clear && !cellRightClickConfig.matrix && !cellRightClickConfig.sort && !cellRightClickConfig.filter && !cellRightClickConfig.chart && !cellRightClickConfig.image && !cellRightClickConfig.link && !cellRightClickConfig.data && !cellRightClickConfig.cellFormat) {
          $$("#luckysheet-cols-rows-data .luckysheet-menuseparator").style.display = "none";
        }
        showrightclickmenu($("#luckysheet-rightclick-menu"), event2.pageX, $(this).offset().top + 18);
        store_default.luckysheet_cols_menu_status = true;
        let cfg = $.extend(true, {}, store_default.config);
        if (cfg["columnlen"] == null) {
          cfg["columnlen"] = {};
        }
        let first_collen = cfg["columnlen"][store_default.luckysheet_select_save[0].column[0]] == null ? store_default.defaultcollen : cfg["columnlen"][store_default.luckysheet_select_save[0].column[0]];
        let isSame = true;
        for (let i2 = 0; i2 < store_default.luckysheet_select_save.length; i2++) {
          let s = store_default.luckysheet_select_save[i2];
          let c1 = s.column[0], c2 = s.column[1];
          for (let c3 = c1; c3 <= c2; c3++) {
            let collen = cfg["columnlen"][c3] == null ? store_default.defaultcollen : cfg["columnlen"][c3];
            if (collen != first_collen) {
              isSame = false;
              break;
            }
          }
        }
        if (isSame) {
          $("#luckysheet-cols-rows-add").find("input[type='number'].rcsize").val(first_collen);
        } else {
          $("#luckysheet-cols-rows-add").find("input[type='number'].rcsize").val("");
        }
      }
    });
    $("#luckysheet-rows-change-size").mousedown(function(event2) {
      if (!checkIsAllowEdit()) {
        return;
      }
      postil_default.removeActivePs();
      if ($("#luckysheet-modal-dialog-activeImage").is(":visible") || $("#luckysheet-modal-dialog-cropping").is(":visible")) {
        imageCtrl_default.cancelActiveImgItem();
      }
      $("#luckysheet-input-box").hide();
      $("#luckysheet-rows-change-size").css({"opacity": 1});
      let mouse = mouseposition(event2.pageX, event2.pageY);
      let y = mouse[1] + $("#luckysheet-rows-h").scrollTop();
      let scrollLeft = $("#luckysheet-cell-main").scrollLeft();
      let winW = $("#luckysheet-cell-main").width();
      let row_location = rowLocation(y), row = row_location[1], row_pre = row_location[0], row_index = row_location[2];
      store_default.luckysheet_rows_change_size = true;
      store_default.luckysheet_scroll_status = true;
      $("#luckysheet-change-size-line").css({
        "height": "1px",
        "border-width": "0 0px 1px 0",
        "top": row - 3,
        "left": 0,
        "width": scrollLeft + winW,
        "display": "block",
        "cursor": "ns-resize"
      });
      $("#luckysheet-sheettable, #luckysheet-rows-h, #luckysheet-rows-h canvas").css("cursor", "ns-resize");
      store_default.luckysheet_rows_change_size_start = [row_pre, row_index];
      $("#luckysheet-rightclick-menu").hide();
      $("#luckysheet-rows-h-hover").hide();
      $("#luckysheet-cols-menu-btn").hide();
      event2.stopPropagation();
    });
    $("#luckysheet-cols-change-size").mousedown(function(event2) {
      if (!checkIsAllowEdit()) {
        return;
      }
      postil_default.removeActivePs();
      if ($("#luckysheet-modal-dialog-activeImage").is(":visible") || $("#luckysheet-modal-dialog-cropping").is(":visible")) {
        imageCtrl_default.cancelActiveImgItem();
      }
      $("#luckysheet-input-box").hide();
      $("#luckysheet-cols-change-size").css({"opacity": 1});
      let mouse = mouseposition(event2.pageX, event2.pageY);
      let scrollLeft = $("#luckysheet-cols-h-c").scrollLeft();
      let scrollTop = $("#luckysheet-cell-main").scrollTop();
      let winH = $("#luckysheet-cell-main").height();
      let x = mouse[0] + scrollLeft;
      let row_index = store_default.visibledatarow.length - 1, row = store_default.visibledatarow[row_index], row_pre = 0;
      let col_location = colLocation(x), col = col_location[1], col_pre = col_location[0], col_index = col_location[2];
      store_default.luckysheet_cols_change_size = true;
      store_default.luckysheet_scroll_status = true;
      $("#luckysheet-change-size-line").css({
        "height": winH + scrollTop,
        "border-width": "0 1px 0 0",
        "top": 0,
        "left": col - 3,
        "width": "1px",
        "display": "block",
        "cursor": "ew-resize"
      });
      $("#luckysheet-sheettable, #luckysheet-cols-h-c, .luckysheet-cols-h-cells, .luckysheet-cols-h-cells canvas").css("cursor", "ew-resize");
      store_default.luckysheet_cols_change_size_start = [col_pre, col_index];
      $("#luckysheet-rightclick-menu").hide();
      $("#luckysheet-cols-h-hover").hide();
      $("#luckysheet-cols-menu-btn").hide();
      store_default.luckysheet_cols_dbclick_times = 0;
      event2.stopPropagation();
    }).dblclick(function() {
      luckysheetcolsdbclick();
    });
    $("#luckysheet-cols-menu-btn").click(function(event2) {
      if (!checkIsAllowEdit()) {
        tooltip_default.info("", locale_default().pivotTable.errorNotAllowEdit);
        return;
      }
      let $menu = $("#luckysheet-rightclick-menu");
      let offset = $(this).offset();
      $("#luckysheet-cols-rows-shift").show();
      store_default.luckysheetRightHeadClickIs = "column";
      $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-word").text(locale_default().rightclick.column);
      $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-left").text(locale_default().rightclick.left);
      $("#luckysheet-rightclick-menu .luckysheet-cols-rows-shift-right").text(locale_default().rightclick.right);
      $("#luckysheet-cols-rows-add").show();
      $("#luckysheet-cols-rows-data").hide();
      $("#luckysheet-cols-rows-shift").show();
      $("#luckysheet-cols-rows-handleincell").hide();
      $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "block";
      $$("#luckysheet-cols-rows-shift .luckysheet-menuseparator").style.display = "block";
      const cellRightClickConfig = luckysheetConfigsetting_default.cellRightClickConfig;
      if (!cellRightClickConfig.copy && !cellRightClickConfig.copyAs && !cellRightClickConfig.paste && !cellRightClickConfig.insertColumn && !cellRightClickConfig.deleteColumn && !cellRightClickConfig.hideColumn && !cellRightClickConfig.columnWidth && !cellRightClickConfig.sort) {
        return;
      }
      $$("#luckysheet-top-left-add-selected").style.display = cellRightClickConfig.insertColumn ? "block" : "none";
      $$("#luckysheet-bottom-right-add-selected").style.display = cellRightClickConfig.insertColumn ? "block" : "none";
      $$("#luckysheet-del-selected").style.display = cellRightClickConfig.deleteColumn ? "block" : "none";
      $$("#luckysheet-hide-selected").style.display = cellRightClickConfig.hideColumn ? "block" : "none";
      $$("#luckysheet-show-selected").style.display = cellRightClickConfig.hideColumn ? "block" : "none";
      $$("#luckysheet-column-row-width-selected").style.display = cellRightClickConfig.columnWidth ? "block" : "none";
      if (!cellRightClickConfig.copy && !cellRightClickConfig.copyAs && !cellRightClickConfig.paste) {
        $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "none";
        if (!cellRightClickConfig.insertColumn && !cellRightClickConfig.deleteColumn && !cellRightClickConfig.hideColumn && !cellRightClickConfig.columnWidth) {
          $$("#luckysheet-cols-rows-shift .luckysheet-menuseparator").style.display = "none";
        }
      }
      if (!cellRightClickConfig.insertColumn && !cellRightClickConfig.deleteColumn && !cellRightClickConfig.hideColumn && !cellRightClickConfig.columnWidth) {
        $$("#luckysheet-cols-rows-add .luckysheet-menuseparator").style.display = "none";
      }
      if (!cellRightClickConfig.sort) {
        $$("#luckysheet-cols-rows-shift .luckysheet-menuseparator").style.display = "none";
      }
      showrightclickmenu($menu, offset.left, offset.top + 18);
      store_default.luckysheet_cols_menu_status = true;
    });
    $("#luckysheet-top-left-add-selected").click(function(event2) {
      if (event2.target.nodeName === "INPUT") {
        return;
      }
      $("#luckysheet-rightclick-menu").hide();
      luckysheetContainerFocus();
      const _locale = locale_default();
      const locale_drag2 = _locale.drag;
      const locale_info = _locale.info;
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      let $t = $(this), value = $t.find("input").val();
      if (!isRealNum(value)) {
        if (isEditMode()) {
          alert(locale_info.tipInputNumber);
        } else {
          tooltip_default.info(locale_info.tipInputNumber, "");
        }
        return;
      }
      value = parseInt(value);
      if (value < 1 || value > 100) {
        if (isEditMode()) {
          alert(locale_info.tipInputNumberLimit);
        } else {
          tooltip_default.info(locale_info.tipInputNumberLimit, "");
        }
        return;
      }
      let st_index = store_default.luckysheet_select_save[0][store_default.luckysheetRightHeadClickIs][0];
      if (!method_default.createHookFunction("rowInsertBefore", st_index, value, "lefttop")) {
        return;
      }
      luckysheetextendtable(store_default.luckysheetRightHeadClickIs, st_index, value, "lefttop");
    });
    $("#luckysheetColsRowsHandleAdd_row").click(function(event2) {
      $("#luckysheet-rightclick-menu").hide();
      luckysheetContainerFocus();
      if (store_default.allowEdit === false) {
        return;
      }
      let st_index = store_default.luckysheet_select_save[0].row[0];
      if (!method_default.createHookFunction("rowInsertBefore", st_index, 1, "lefttop")) {
        return;
      }
      luckysheetextendtable("row", st_index, 1, "lefttop");
    });
    $("#luckysheetColsRowsHandleAdd_column").click(function(event2) {
      $("#luckysheet-rightclick-menu").hide();
      luckysheetContainerFocus();
      if (store_default.allowEdit === false) {
        return;
      }
      let st_index = store_default.luckysheet_select_save[0].column[0];
      luckysheetextendtable("column", st_index, 1, "lefttop");
    });
    $(".luckysheetColsRowsHandleAdd_custom").click(function(clickEvent) {
      $("#luckysheet-rightclick-menu").hide();
      const cellRightClickConfig = luckysheetConfigsetting_default.cellRightClickConfig;
      const rowIndex = store_default.luckysheet_select_save[0].row[0];
      const columnIndex = store_default.luckysheet_select_save[0].column[0];
      if (cellRightClickConfig.customs[Number(clickEvent.currentTarget.dataset.index)]) {
        try {
          cellRightClickConfig.customs[Number(clickEvent.currentTarget.dataset.index)].onClick(clickEvent, event, {rowIndex, columnIndex});
        } catch (e) {
          console.error("custom click error", e);
        }
      }
    });
    $("#luckysheet-bottom-right-add-selected").click(function(event2) {
      if (event2.target.nodeName === "INPUT") {
        return;
      }
      $("#luckysheet-rightclick-menu").hide();
      luckysheetContainerFocus();
      const _locale = locale_default();
      const locale_drag2 = _locale.drag;
      const locale_info = _locale.info;
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      let $t = $(this), value = $t.find("input").val();
      if (!isRealNum(value)) {
        if (isEditMode()) {
          alert(locale_info.tipInputNumber);
        } else {
          tooltip_default.info(locale_info.tipInputNumber, "");
        }
        return;
      }
      value = parseInt(value);
      if (value < 1 || value > 100) {
        if (isEditMode()) {
          alert(locale_info.tipInputNumberLimit);
        } else {
          tooltip_default.info(locale_info.tipInputNumberLimit, "");
        }
        return;
      }
      let st_index = store_default.luckysheet_select_save[0][store_default.luckysheetRightHeadClickIs][1];
      if (!method_default.createHookFunction("rowInsertBefore", st_index, value, "rightbottom")) {
        return;
      }
      luckysheetextendtable(store_default.luckysheetRightHeadClickIs, st_index, value, "rightbottom");
    });
    $("#luckysheet-del-selected, #luckysheet-del-selected_t").click(function(event2) {
      $("#luckysheet-rightclick-menu").hide();
      luckysheetContainerFocus();
      const locale_drag2 = locale_default().drag;
      if (store_default.luckysheet_select_save.length > 1) {
        if (store_default.luckysheetRightHeadClickIs == "row") {
          if (isEditMode()) {
            alert(locale_drag2.noMulti);
          } else {
            tooltip_default.info(locale_drag2.noMulti, "");
          }
        } else if (store_default.luckysheetRightHeadClickIs == "column") {
          if (isEditMode()) {
            alert(locale_drag2.noMulti);
          } else {
            tooltip_default.info(locale_drag2.noMulti, "");
          }
        }
        return;
      }
      let st_index = store_default.luckysheet_select_save[0][store_default.luckysheetRightHeadClickIs][0], ed_index = store_default.luckysheet_select_save[0][store_default.luckysheetRightHeadClickIs][1];
      if (!method_default.createHookFunction("rowDeleteBefore", st_index, ed_index)) {
        return;
      }
      luckysheetdeletetable(store_default.luckysheetRightHeadClickIs, st_index, ed_index);
    });
    $("#luckysheet-delRows").click(function(event2) {
      $("#luckysheet-rightclick-menu").hide();
      luckysheetContainerFocus();
      const locale_drag2 = locale_default().drag;
      if (store_default.luckysheet_select_save.length > 1) {
        if (store_default.luckysheetRightHeadClickIs == "row") {
          if (isEditMode()) {
            alert(locale_drag2.noMulti);
          } else {
            tooltip_default.info(locale_drag2.noMulti, "");
          }
        } else if (store_default.luckysheetRightHeadClickIs == "column") {
          if (isEditMode()) {
            alert(locale_drag2.noMulti);
          } else {
            tooltip_default.info(locale_drag2.noMulti, "");
          }
        }
        return;
      }
      let st_index = store_default.luckysheet_select_save[0].row[0], ed_index = store_default.luckysheet_select_save[0].row[1];
      if (!method_default.createHookFunction("rowDeleteBefore", st_index, ed_index)) {
        return;
      }
      luckysheetdeletetable("row", st_index, ed_index);
    });
    $("#luckysheet-delCols").click(function(event2) {
      $("#luckysheet-rightclick-menu").hide();
      luckysheetContainerFocus();
      const locale_drag2 = locale_default().drag;
      if (store_default.luckysheet_select_save.length > 1) {
        if (store_default.luckysheetRightHeadClickIs == "row") {
          if (isEditMode()) {
            alert(locale_drag2.noMulti);
          } else {
            tooltip_default.info(locale_drag2.noMulti, "");
          }
        } else if (store_default.luckysheetRightHeadClickIs == "column") {
          if (isEditMode()) {
            alert(locale_drag2.noMulti);
          } else {
            tooltip_default.info(locale_drag2.noMulti, "");
          }
        }
        return;
      }
      let st_index = store_default.luckysheet_select_save[0].column[0], ed_index = store_default.luckysheet_select_save[0].column[1];
      luckysheetdeletetable("column", st_index, ed_index);
    });
    $("#luckysheet-hide-selected").click(function(event2) {
      $("#luckysheet-rightclick-menu").hide();
      luckysheetContainerFocus();
      const locale_drag2 = locale_default().drag;
      if (store_default.luckysheet_select_save.length > 1) {
        if (store_default.luckysheetRightHeadClickIs == "row") {
          if (isEditMode()) {
            alert(locale_drag2.noMulti);
          } else {
            tooltip_default.info(locale_drag2.noMulti, "");
          }
        } else if (store_default.luckysheetRightHeadClickIs == "column") {
          if (isEditMode()) {
            alert(locale_drag2.noMulti);
          } else {
            tooltip_default.info(locale_drag2.noMulti, "");
          }
        }
        return;
      }
      if (store_default.luckysheetRightHeadClickIs == "row") {
        if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "formatRows")) {
          return;
        }
        let cfg = $.extend(true, {}, store_default.config);
        if (cfg["rowhidden"] == null) {
          cfg["rowhidden"] = {};
        }
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          for (let r3 = r1; r3 <= r2; r3++) {
            cfg["rowhidden"][r3] = 0;
          }
        }
        if (store_default.clearjfundo) {
          let redo2 = {};
          redo2["type"] = "showHidRows";
          redo2["sheetIndex"] = store_default.currentSheetIndex;
          redo2["config"] = $.extend(true, {}, store_default.config);
          redo2["curconfig"] = cfg;
          store_default.jfundo.length = 0;
          store_default.jfredo.push(redo2);
        }
        store_default.config = cfg;
        store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
        server_default.saveParam("cg", store_default.currentSheetIndex, cfg["rowhidden"], {"k": "rowhidden"});
        jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
      } else if (store_default.luckysheetRightHeadClickIs == "column") {
        if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "formatColumns")) {
          return;
        }
        let cfg = $.extend(true, {}, store_default.config);
        if (cfg["colhidden"] == null) {
          cfg["colhidden"] = {};
        }
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          for (let c3 = c1; c3 <= c2; c3++) {
            cfg["colhidden"][c3] = 0;
          }
        }
        if (store_default.clearjfundo) {
          let redo2 = {};
          redo2["type"] = "showHidCols";
          redo2["sheetIndex"] = store_default.currentSheetIndex;
          redo2["config"] = $.extend(true, {}, store_default.config);
          redo2["curconfig"] = cfg;
          store_default.jfundo.length = 0;
          store_default.jfredo.push(redo2);
        }
        store_default.config = cfg;
        store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
        server_default.saveParam("cg", store_default.currentSheetIndex, cfg["colhidden"], {"k": "colhidden"});
        jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
      }
    });
    $("#luckysheet-show-selected").click(function(event2) {
      $("#luckysheet-rightclick-menu").hide();
      luckysheetContainerFocus();
      const locale_drag2 = locale_default().drag;
      if (store_default.luckysheet_select_save.length > 1) {
        if (store_default.luckysheetRightHeadClickIs == "row") {
          if (isEditMode()) {
            alert(locale_drag2.noMulti);
          } else {
            tooltip_default.info(locale_drag2.noMulti, "");
          }
        } else if (store_default.luckysheetRightHeadClickIs == "column") {
          if (isEditMode()) {
            alert(locale_drag2.noMulti);
          } else {
            tooltip_default.info(locale_drag2.noMulti, "");
          }
        }
        return;
      }
      if (store_default.luckysheetRightHeadClickIs == "row") {
        if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "formatRows")) {
          return;
        }
        let cfg = $.extend(true, {}, store_default.config);
        if (cfg["rowhidden"] == null) {
          return;
        }
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          for (let r3 = r1; r3 <= r2; r3++) {
            delete cfg["rowhidden"][r3];
          }
        }
        if (store_default.clearjfundo) {
          let redo2 = {};
          redo2["type"] = "showHidRows";
          redo2["sheetIndex"] = store_default.currentSheetIndex;
          redo2["config"] = $.extend(true, {}, store_default.config);
          redo2["curconfig"] = cfg;
          store_default.jfundo.length = 0;
          store_default.jfredo.push(redo2);
        }
        store_default.config = cfg;
        store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
        server_default.saveParam("cg", store_default.currentSheetIndex, cfg["rowhidden"], {"k": "rowhidden"});
        jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
      } else if (store_default.luckysheetRightHeadClickIs == "column") {
        if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "formatColumns")) {
          return;
        }
        let cfg = $.extend(true, {}, store_default.config);
        if (cfg["colhidden"] == null) {
          return;
        }
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          for (let c3 = c1; c3 <= c2; c3++) {
            delete cfg["colhidden"][c3];
          }
        }
        if (store_default.clearjfundo) {
          let redo2 = {};
          redo2["type"] = "showHidCols";
          redo2["sheetIndex"] = store_default.currentSheetIndex;
          redo2["config"] = $.extend(true, {}, store_default.config);
          redo2["curconfig"] = cfg;
          store_default.jfundo.length = 0;
          store_default.jfredo.push(redo2);
        }
        store_default.config = cfg;
        store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
        server_default.saveParam("cg", store_default.currentSheetIndex, cfg["colhidden"], {"k": "colhidden"});
        jfrefreshgrid_rhcw(store_default.flowdata.length, store_default.flowdata[0].length);
      }
    });
    $("#luckysheet-delCellsMoveLeft").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      const locale_drag2 = locale_default().drag;
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      let str = store_default.luckysheet_select_save[0].row[0], edr = store_default.luckysheet_select_save[0].row[1], stc = store_default.luckysheet_select_save[0].column[0], edc = store_default.luckysheet_select_save[0].column[1];
      luckysheetDeleteCell("moveLeft", str, edr, stc, edc);
    });
    $("#luckysheet-delCellsMoveUp").click(function(event2) {
      $("body .luckysheet-cols-menu").hide();
      luckysheetContainerFocus();
      const locale_drag2 = locale_default().drag;
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_drag2.noMulti);
        } else {
          tooltip_default.info(locale_drag2.noMulti, "");
        }
        return;
      }
      let str = store_default.luckysheet_select_save[0].row[0], edr = store_default.luckysheet_select_save[0].row[1], stc = store_default.luckysheet_select_save[0].column[0], edc = store_default.luckysheet_select_save[0].column[1];
      luckysheetDeleteCell("moveUp", str, edr, stc, edc);
    });
    $("#luckysheet-delete-text").click(function() {
      if (!checkProtectionLockedRangeList(store_default.luckysheet_select_save, store_default.currentSheetIndex)) {
        return;
      }
      $("#luckysheet-rightclick-menu").hide();
      luckysheetContainerFocus();
      if (store_default.allowEdit === false) {
        return;
      }
      if (store_default.luckysheet_select_save.length > 0) {
        let d = editor_default.deepCopyFlowData(store_default.flowdata);
        let has_PartMC = false;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          if (hasPartMC(store_default.config, r1, r2, c1, c2)) {
            has_PartMC = true;
            break;
          }
        }
        if (has_PartMC) {
          const locale_drag2 = locale_default().drag;
          if (isEditMode()) {
            alert(locale_drag2.noPartMerge);
          } else {
            tooltip_default.info(locale_drag2.noPartMerge, "");
          }
          return;
        }
        const file = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)];
        const hyperlink = file.hyperlink && $.extend(true, {}, file.hyperlink);
        let hyperlinkUpdated;
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
          let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
          for (let r3 = r1; r3 <= r2; r3++) {
            for (let c3 = c1; c3 <= c2; c3++) {
              if (pivotTable_default.isPivotRange(r3, c3)) {
                continue;
              }
              if (getObjType(d[r3][c3]) == "object") {
                delete d[r3][c3]["m"];
                delete d[r3][c3]["v"];
                if (d[r3][c3]["f"] != null) {
                  delete d[r3][c3]["f"];
                  formula_default.delFunctionGroup(r3, c3, store_default.currentSheetIndex);
                  delete d[r3][c3]["spl"];
                }
                if (d[r3][c3]["ct"] != null && d[r3][c3]["ct"].t == "inlineStr") {
                  delete d[r3][c3]["ct"];
                }
              } else {
                d[r3][c3] = null;
              }
              if (hyperlink == null ? void 0 : hyperlink[`${r3}_${c3}`]) {
                delete hyperlink[`${r3}_${c3}`];
                hyperlinkUpdated = true;
              }
            }
          }
        }
        jfrefreshgrid(d, store_default.luckysheet_select_save, hyperlinkUpdated && {hyperlink});
        $("#luckysheet-rich-text-editor").html("");
      }
    });
    $("#luckysheet-column-row-width-selected").click(function(event2) {
      if (event2.target.nodeName === "INPUT") {
        return;
      }
      $("#luckysheet-rightclick-menu").hide();
      luckysheetContainerFocus();
      let size = parseInt($(this).closest(".luckysheet-cols-menuitem").find("input[type='number']").val().trim());
      const locale_info = locale_default().info;
      if (isNaN(size)) {
        tooltip_default.info("\u53EA\u5141\u8BB8\u4F7F\u7528\u6570\u5B57\u6765\u8BBE\u7F6E\u884C\u5217\u7684\u5BBD\u9AD8!", "");
        return;
      }
      let cfg = $.extend(true, {}, store_default.config);
      let type;
      let images = null;
      if (store_default.luckysheetRightHeadClickIs == "row") {
        if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "formatRows")) {
          return;
        }
        if (size < 0 || size > 545) {
          if (isEditMode()) {
            alert(locale_info.tipRowHeightLimit);
          } else {
            tooltip_default.info(locale_info.tipRowHeightLimit, "");
          }
          return;
        }
        type = "resizeR";
        if (cfg["rowlen"] == null) {
          cfg["rowlen"] = {};
        }
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let r1 = store_default.luckysheet_select_save[s].row[0];
          let r2 = store_default.luckysheet_select_save[s].row[1];
          for (let r3 = r1; r3 <= r2; r3++) {
            cfg["rowlen"][r3] = size;
            images = imageCtrl_default.moveChangeSize("row", r3, size);
          }
        }
      } else if (store_default.luckysheetRightHeadClickIs == "column") {
        if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "formatColumns")) {
          return;
        }
        if (size < 0 || size > 2038) {
          if (isEditMode()) {
            alert(locale_info.tipColumnWidthLimit);
          } else {
            tooltip_default.info(locale_info.tipColumnWidthLimit, "");
          }
          return;
        }
        type = "resizeC";
        if (cfg["columnlen"] == null) {
          cfg["columnlen"] = {};
        }
        for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
          let c1 = store_default.luckysheet_select_save[s].column[0];
          let c2 = store_default.luckysheet_select_save[s].column[1];
          for (let c3 = c1; c3 <= c2; c3++) {
            cfg["columnlen"][c3] = size;
            images = imageCtrl_default.moveChangeSize("column", c3, size);
          }
        }
      }
      if (store_default.clearjfundo) {
        store_default.jfundo.length = 0;
        store_default.jfredo.push({
          "type": "resize",
          "ctrlType": type,
          "sheetIndex": store_default.currentSheetIndex,
          "config": $.extend(true, {}, store_default.config),
          "curconfig": $.extend(true, {}, cfg),
          "images": $.extend(true, {}, imageCtrl_default.images),
          "curImages": $.extend(true, {}, images)
        });
      }
      store_default.config = cfg;
      store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].config = store_default.config;
      store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].images = images;
      server_default.saveParam("all", store_default.currentSheetIndex, images, {"k": "images"});
      imageCtrl_default.images = images;
      imageCtrl_default.allImagesShow();
      if (store_default.luckysheetRightHeadClickIs == "row") {
        server_default.saveParam("cg", store_default.currentSheetIndex, cfg["rowlen"], {"k": "rowlen"});
        jfrefreshgrid_rhcw(store_default.flowdata.length, null);
      } else if (store_default.luckysheetRightHeadClickIs == "column") {
        server_default.saveParam("cg", store_default.currentSheetIndex, cfg["columnlen"], {"k": "columnlen"});
        jfrefreshgrid_rhcw(null, store_default.flowdata[0].length);
      }
    });
  }
  function luckysheetcolsdbclick() {
    store_default.luckysheet_cols_change_size = false;
    $("#luckysheet-change-size-line").hide();
    $("#luckysheet-cols-change-size").css("opacity", 0);
    $("#luckysheet-sheettable, #luckysheet-cols-h-c, .luckysheet-cols-h-cells, .luckysheet-cols-h-cells canvas").css("cursor", "default");
    let mouse = mouseposition(event.pageX, event.pageY);
    let scrollLeft = $("#luckysheet-cols-h-c").scrollLeft();
    let x = mouse[0] + scrollLeft;
    let colIndex = colLocation(x)[2];
    let d = editor_default.deepCopyFlowData(store_default.flowdata);
    let canvas = $("#luckysheetTableContent").get(0).getContext("2d");
    let cfg = $.extend(true, {}, store_default.config);
    if (cfg["columnlen"] == null) {
      cfg["columnlen"] = {};
    }
    let matchColumn = {};
    let scrollTop = $("#luckysheet-cell-main").scrollTop(), drawHeight = store_default.luckysheetTableContentHW[1];
    let dataset_row_st = luckysheet_searcharray(store_default.visibledatarow, scrollTop);
    let dataset_row_ed = luckysheet_searcharray(store_default.visibledatarow, scrollTop + drawHeight);
    dataset_row_ed += dataset_row_ed - dataset_row_st;
    if (dataset_row_ed >= d.length) {
      dataset_row_ed = d.length - 1;
    }
    for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
      let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
      if (colIndex < c1 || colIndex > c2) {
        if (colIndex in matchColumn) {
          continue;
        }
        let currentColLen = store_default.defaultcollen;
        for (let r2 = dataset_row_st; r2 <= dataset_row_ed; r2++) {
          let cell = d[r2][colIndex];
          if (cell == null || isRealNull(cell.v) && !isInlineStringCell(cell)) {
            continue;
          }
          let cellWidth = colLocationByIndex(colIndex)[1] - colLocationByIndex(colIndex)[0] - 2;
          let textInfo = getCellTextInfo(cell, canvas, {
            r: r2,
            c: colIndex,
            cellWidth
          });
          let computeRowlen = 0;
          if (textInfo != null) {
            computeRowlen = textInfo.textWidthAll;
          }
          if (computeRowlen + 6 > currentColLen) {
            currentColLen = computeRowlen + 6;
          }
        }
        if (currentColLen != store_default.defaultcollen) {
          cfg["columnlen"][colIndex] = currentColLen;
          if (cfg["customWidth"]) {
            delete cfg["customWidth"][colIndex];
          }
        }
        matchColumn[colIndex] = 1;
      } else {
        for (let c3 = c1; c3 <= c2; c3++) {
          if (c3 in matchColumn) {
            continue;
          }
          let currentColLen = store_default.defaultcollen;
          for (let r2 = dataset_row_st; r2 <= dataset_row_ed; r2++) {
            let cell = d[r2][c3];
            if (cell == null || isRealNull(cell.v) && !isInlineStringCell(cell)) {
              continue;
            }
            let cellWidth = colLocationByIndex(c3)[1] - colLocationByIndex(c3)[0] - 2;
            let textInfo = getCellTextInfo(cell, canvas, {
              r: r2,
              c: c3,
              cellWidth
            });
            let computeRowlen = 0;
            if (textInfo != null) {
              computeRowlen = textInfo.textWidthAll;
            }
            if (computeRowlen + 6 > currentColLen) {
              currentColLen = computeRowlen + 6;
            }
          }
          if (currentColLen != store_default.defaultcollen) {
            cfg["columnlen"][c3] = currentColLen;
            if (cfg["customWidth"]) {
              delete cfg["customWidth"][c3];
            }
          }
          matchColumn[c3] = 1;
        }
      }
    }
    jfrefreshgridall(store_default.flowdata[0].length, store_default.flowdata.length, store_default.flowdata, cfg, store_default.luckysheet_select_save, "resizeC", "columnlen");
  }
  var init_rowColumnOperation = __esm({
    "src/controllers/rowColumnOperation.js"() {
      init_pivotTable();
      init_postil();
      init_imageCtrl();
      init_menuButton();
      init_server();
      init_method();
      init_select();
      init_util();
      init_get();
      init_location();
      init_validate();
      init_count();
      init_formula();
      init_extend();
      init_refresh();
      init_getdata();
      init_tooltip();
      init_editor();
      init_locale();
      init_getRowlen();
      init_sheetSearch();
      init_inlineString();
      init_protection();
      init_store();
      init_luckysheetConfigsetting();
    }
  });

  // src/controllers/keyboard.js
  function formulaMoveEvent(dir, ctrlKey, shiftKey, event2) {
    if ($("#luckysheet-formula-search-c").is(":visible") && (dir == "up" || dir == "down")) {
      let $obj;
      if (dir == "down") {
        $obj = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active").next();
        if ($obj.length == 0) {
          $obj = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").first();
        }
      } else if (dir == "up") {
        $obj = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active").prev();
        if ($obj.length == 0) {
          $obj = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").last();
        }
      }
      $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").removeClass("luckysheet-formula-search-item-active");
      $obj.addClass("luckysheet-formula-search-item-active");
      event2.preventDefault();
    } else {
      if ($("#luckysheet-formula-functionrange-select").is(":visible")) {
        if (ctrlKey && shiftKey) {
          luckysheetMoveHighlightRange2(dir, "rangeOfFormula");
        } else if (ctrlKey) {
          luckysheetMoveHighlightCell2(dir, "rangeOfFormula");
        } else if (shiftKey) {
          let dir_n = dir, step = 1;
          if (dir == "up") {
            dir_n = "down";
            step = -1;
          }
          if (dir == "left") {
            dir_n = "right";
            step = -1;
          }
          luckysheetMoveHighlightRange(dir_n, step, "rangeOfFormula");
        } else {
          let dir_n = dir, step = 1;
          if (dir == "up") {
            dir_n = "down";
            step = -1;
          }
          if (dir == "left") {
            dir_n = "right";
            step = -1;
          }
          luckysheetMoveHighlightCell(dir_n, step, "rangeOfFormula");
        }
        event2.preventDefault();
      } else if (formula_default.israngeseleciton()) {
        let anchor = $(window.getSelection().anchorNode);
        if (anchor.parent().next().text() == null || anchor.parent().next().text() == "") {
          let vText = $("#luckysheet-input-box #luckysheet-input-box-index").text();
          let range2 = formula_default.getcellrange(vText);
          if (range2 == null) {
            range2 = formula_default.getcellrange($("#luckysheet-input-box-index").text());
          }
          let r1 = range2["row"][0], r2 = range2["row"][1];
          let c1 = range2["column"][0], c2 = range2["column"][1];
          let row = store_default.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : store_default.visibledatarow[r1 - 1];
          let col = store_default.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : store_default.visibledatacolumn[c1 - 1];
          formula_default.func_selectedrange = {
            "left": col_pre,
            "width": col - col_pre - 1,
            "top": row_pre,
            "height": row - row_pre - 1,
            "left_move": col_pre,
            "width_move": col - col_pre - 1,
            "top_move": row_pre,
            "height_move": row - row_pre - 1,
            "row": [r1, r2],
            "column": [c1, c2],
            "row_focus": r1,
            "column_focus": c1
          };
          formula_default.rangeSetValue({"row": [r1, r2], "column": [c1, c2]});
          formula_default.rangestart = true;
          formula_default.rangedrag_column_start = false;
          formula_default.rangedrag_row_start = false;
          if (ctrlKey && shiftKey) {
            luckysheetMoveHighlightRange2(dir, "rangeOfFormula");
          } else if (ctrlKey) {
            luckysheetMoveHighlightCell2(dir, "rangeOfFormula");
          } else if (shiftKey) {
            let dir_n = dir, step = 1;
            if (dir == "up") {
              dir_n = "down";
              step = -1;
            }
            if (dir == "left") {
              dir_n = "right";
              step = -1;
            }
            luckysheetMoveHighlightRange(dir_n, step, "rangeOfFormula");
          } else {
            let dir_n = dir, step = 1;
            if (dir == "up") {
              dir_n = "down";
              step = -1;
            }
            if (dir == "left") {
              dir_n = "right";
              step = -1;
            }
            luckysheetMoveHighlightCell(dir_n, step, "rangeOfFormula");
          }
          event2.preventDefault();
        }
      } else if (!ctrlKey && !shiftKey) {
        let anchor = $(window.getSelection().anchorNode);
        let anchorOffset = window.getSelection().anchorOffset;
        if (dir == "up") {
          if (anchor.parent().is("span") && anchor.parent().next().length == 0 && anchorOffset > 0) {
            formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
            luckysheetMoveHighlightCell("down", -1, "rangeOfSelect");
            event2.preventDefault();
          } else if (anchor.is("#luckysheet-rich-text-editor") && anchor.context.childElementCount == anchorOffset) {
            formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
            luckysheetMoveHighlightCell("down", -1, "rangeOfSelect");
            event2.preventDefault();
          } else if (anchor.parent().is("#luckysheet-rich-text-editor") && anchor.context.length == anchorOffset) {
            formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
            luckysheetMoveHighlightCell("down", -1, "rangeOfSelect");
            event2.preventDefault();
          }
        } else if (dir == "down") {
          if (anchor.parent().is("span") && anchor.parent().next().length == 0 && anchorOffset > 0) {
            formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
            luckysheetMoveHighlightCell("down", 1, "rangeOfSelect");
            event2.preventDefault();
          } else if (anchor.is("#luckysheet-rich-text-editor") && anchor.context.childElementCount == anchorOffset) {
            formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
            luckysheetMoveHighlightCell("down", 1, "rangeOfSelect");
            event2.preventDefault();
          } else if (anchor.parent().is("#luckysheet-rich-text-editor") && anchor.context.length == anchorOffset) {
            formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
            luckysheetMoveHighlightCell("down", 1, "rangeOfSelect");
            event2.preventDefault();
          }
        } else if (dir == "left") {
          if (anchor.parent().is("span") && anchor.parent().prev().length == 0 && anchorOffset == 0) {
            formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
            luckysheetMoveHighlightCell("right", -1, "rangeOfSelect");
            event2.preventDefault();
          } else if (anchor.is("#luckysheet-rich-text-editor") && anchorOffset == 1) {
            formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
            luckysheetMoveHighlightCell("right", -1, "rangeOfSelect");
            event2.preventDefault();
          } else if (anchor.parent().is("#luckysheet-rich-text-editor") && anchorOffset == 0) {
            formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
            luckysheetMoveHighlightCell("right", -1, "rangeOfSelect");
            event2.preventDefault();
          } else {
            formula_default.rangeHightlightselected($("#luckysheet-rich-text-editor"));
          }
        } else if (dir == "right") {
          if (anchor.parent().is("span") && anchor.parent().next().length == 0 && anchorOffset > 0) {
            formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
            luckysheetMoveHighlightCell("right", 1, "rangeOfSelect");
            event2.preventDefault();
          } else if (anchor.is("#luckysheet-rich-text-editor") && anchor.context.childElementCount == anchorOffset) {
            formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
            luckysheetMoveHighlightCell("right", 1, "rangeOfSelect");
            event2.preventDefault();
          } else if (anchor.parent().is("#luckysheet-rich-text-editor") && anchor.context.length == anchorOffset) {
            formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
            luckysheetMoveHighlightCell("right", 1, "rangeOfSelect");
            event2.preventDefault();
          } else {
            formula_default.rangeHightlightselected($("#luckysheet-rich-text-editor"));
          }
        }
      }
    }
  }
  function keyboardInitial() {
    const _locale = locale_default();
    const locale_drag2 = _locale.drag;
    $("#luckysheet-input-box").click(function() {
      formula_default.rangeHightlightselected($("#luckysheet-rich-text-editor"));
    }).add("#" + store_default.container).on("keydown", function(event2) {
      let ctrlKey = event2.ctrlKey;
      let altKey = event2.altKey;
      let shiftKey = event2.shiftKey;
      let kcode = event2.keyCode;
      if ($("#luckysheet-modal-dialog-mask").is(":visible") || $(event2.target).hasClass("luckysheet-mousedown-cancel") || $(event2.target).hasClass("sp-input") || parseInt($("#luckysheet-input-box").css("top")) > 0 && $(event2.target).closest(".luckysheet-input-box").length > 0 && kcode != keycode.ENTER && kcode != keycode.TAB && kcode != keycode.UP && kcode != keycode.DOWN && kcode != keycode.LEFT && kcode != keycode.RIGHT) {
        let anchor = $(window.getSelection().anchorNode);
        if (anchor.parent().is("#luckysheet-helpbox-cell") || anchor.is("#luckysheet-helpbox-cell")) {
          if (kcode == keycode.ENTER) {
            let helpboxValue = $("#luckysheet-helpbox-cell").text();
            if (formula_default.iscelldata(helpboxValue)) {
              let cellrange = formula_default.getcellrange(helpboxValue);
              store_default.luckysheet_select_save = [{"row": cellrange["row"], "column": cellrange["column"], "row_focus": cellrange["row"][0], "column_focus": cellrange["column"][0]}];
              selectHightlightShow();
              $("#luckysheet-helpbox-cell").blur();
              let scrollLeft = $("#luckysheet-cell-main").scrollLeft(), scrollTop = $("#luckysheet-cell-main").scrollTop();
              let winH = $("#luckysheet-cell-main").height(), winW = $("#luckysheet-cell-main").width();
              let row = store_default.visibledatarow[cellrange["row"][1]], row_pre = cellrange["row"][0] - 1 == -1 ? 0 : store_default.visibledatarow[cellrange["row"][0] - 1];
              let col = store_default.visibledatacolumn[cellrange["column"][1]], col_pre = cellrange["column"][0] - 1 == -1 ? 0 : store_default.visibledatacolumn[cellrange["column"][0] - 1];
              if (col - scrollLeft - winW + 20 > 0) {
                $("#luckysheet-scrollbar-x").scrollLeft(col - winW + 20);
              } else if (col_pre - scrollLeft - 20 < 0) {
                $("#luckysheet-scrollbar-x").scrollLeft(col_pre - 20);
              }
              if (row - scrollTop - winH + 20 > 0) {
                $("#luckysheet-scrollbar-y").scrollTop(row - winH + 20);
              } else if (row_pre - scrollTop - 20 < 0) {
                $("#luckysheet-scrollbar-y").scrollTop(row_pre - 20);
              }
            }
          }
        }
        return;
      }
      if ($("#luckysheet-modal-dialog-mask").is(":visible") || $(event2.target).hasClass("luckysheet-mousedown-cancel") || $(event2.target).hasClass("formulaInputFocus")) {
        return;
      }
      let $inputbox = $("#luckysheet-input-box");
      if ((altKey || event2.metaKey) && kcode == keycode.ENTER && parseInt($inputbox.css("top")) > 0) {
        let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
        let row_index = last["row_focus"], col_index = last["column_focus"];
        enterKeyControll(store_default.flowdata[row_index][col_index]);
        event2.preventDefault();
      } else if (kcode == keycode.ENTER && parseInt($inputbox.css("top")) > 0) {
        if ($("#luckysheet-formula-search-c").is(":visible") && formula_default.searchFunctionCell != null) {
          formula_default.searchFunctionEnter($("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active"));
        } else {
          formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
          store_default.luckysheet_select_save = [{
            "row": [store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[0]],
            "column": [store_default.luckysheetCellUpdate[1], store_default.luckysheetCellUpdate[1]],
            "row_focus": store_default.luckysheetCellUpdate[0],
            "column_focus": store_default.luckysheetCellUpdate[1]
          }];
          luckysheetMoveHighlightCell("down", 1, "rangeOfSelect");
        }
        if ($("#luckysheet-search-formula-parm").is(":visible")) {
          $("#luckysheet-search-formula-parm").hide();
        }
        if ($("#luckysheet-search-formula-parm-select").is(":visible")) {
          $("#luckysheet-search-formula-parm-select").hide();
        }
        event2.preventDefault();
      } else if (kcode == keycode.TAB) {
        if (parseInt($inputbox.css("top")) > 0) {
          return;
        }
        luckysheetMoveHighlightCell("right", 1, "rangeOfSelect");
        event2.preventDefault();
      } else if (kcode == keycode.F2) {
        if (parseInt($inputbox.css("top")) > 0) {
          return;
        }
        let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
        let row_index = last["row_focus"], col_index = last["column_focus"];
        luckysheetupdateCell(row_index, col_index, store_default.flowdata);
        event2.preventDefault();
      } else if (kcode == keycode.F4 && parseInt($inputbox.css("top")) > 0) {
        formula_default.setfreezonFuc(event2);
        event2.preventDefault();
      } else if (kcode == keycode.ESC && parseInt($inputbox.css("top")) > 0) {
        formula_default.dontupdate();
        luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
        event2.preventDefault();
      } else if (kcode == keycode.ENTER) {
        if ($(event2.target).hasClass("formulaInputFocus") || $("#luckysheet-conditionformat-dialog").is(":visible")) {
          return;
        } else if (String.fromCharCode(kcode) != null && $("#luckysheet-cell-selected").is(":visible")) {
          let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
          let row_index = last["row_focus"], col_index = last["column_focus"];
          luckysheetupdateCell(row_index, col_index, store_default.flowdata);
          event2.preventDefault();
        }
      } else {
        if (ctrlKey || event2.metaKey) {
          if (shiftKey) {
            if (!luckysheet_shiftkeydown) {
              store_default.luckysheet_shiftpositon = $.extend(true, {}, store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1]);
              store_default.luckysheet_shiftkeydown = true;
            }
            if (kcode == keycode.UP) {
              if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
                return;
              }
              luckysheetMoveHighlightRange2("up", "rangeOfSelect");
            } else if (kcode == keycode.DOWN) {
              if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
                return;
              }
              luckysheetMoveHighlightRange2("down", "rangeOfSelect");
            } else if (kcode == keycode.LEFT) {
              if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
                return;
              }
              luckysheetMoveHighlightRange2("left", "rangeOfSelect");
            } else if (kcode == keycode.RIGHT) {
              if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
                return;
              }
              luckysheetMoveHighlightRange2("right", "rangeOfSelect");
            } else if (kcode == 186 || kcode == 222) {
              let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
              let row_index = last["row_focus"], col_index = last["column_focus"];
              luckysheetupdateCell(row_index, col_index, store_default.flowdata, true);
              let value = getNowDateTime(2);
              $("#luckysheet-rich-text-editor").html(value);
              luckysheetRangeLast($("#luckysheet-rich-text-editor")[0]);
              formula_default.functionInputHanddler($("#luckysheet-functionbox-cell"), $("#luckysheet-rich-text-editor"), kcode);
            }
          } else if (kcode == 66) {
            $("#luckysheet-icon-bold").click();
          } else if (kcode == 67) {
            if (imageCtrl_default.currentImgId != null) {
              imageCtrl_default.copyImgItem(event2);
              return;
            }
            if (menuButton_default.luckysheetPaintModelOn) {
              menuButton_default.cancelPaintModel();
            }
            if (store_default.luckysheet_select_save.length == 0) {
              return;
            }
            if (store_default.config["merge"] != null) {
              let has_PartMC = false;
              for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
                let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
                let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
                has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
                if (has_PartMC) {
                  break;
                }
              }
              if (has_PartMC) {
                if (isEditMode()) {
                  alert(locale_drag2.noMerge);
                } else {
                  tooltip_default.info(locale_drag2.noMerge, "");
                }
                return;
              }
            }
            let cdformat = store_default.luckysheetfile[getSheetIndex(store_default.currentSheetIndex)].luckysheet_conditionformat_save;
            if (store_default.luckysheet_select_save.length > 1 && cdformat != null && cdformat.length > 0) {
              let hasCF = false;
              let cf_compute = conditionformat_default.getComputeMap();
              label:
                for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
                  if (hasCF) {
                    break;
                  }
                  let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
                  let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
                  for (let r3 = r1; r3 <= r2; r3++) {
                    for (let c3 = c1; c3 <= c2; c3++) {
                      if (conditionformat_default.checksCF(r3, c3, cf_compute) != null) {
                        hasCF = true;
                        continue label;
                      }
                    }
                  }
                }
              if (hasCF) {
                if (isEditMode()) {
                  alert(locale_drag2.noMulti);
                } else {
                  tooltip_default.info(locale_drag2.noMulti, "");
                }
                return;
              }
            }
            if (store_default.luckysheet_select_save.length > 1) {
              let isSameRow = true, str_r = store_default.luckysheet_select_save[0].row[0], end_r = store_default.luckysheet_select_save[0].row[1];
              let isSameCol = true, str_c = store_default.luckysheet_select_save[0].column[0], end_c = store_default.luckysheet_select_save[0].column[1];
              for (let s = 1; s < store_default.luckysheet_select_save.length; s++) {
                if (store_default.luckysheet_select_save[s].row[0] != str_r || store_default.luckysheet_select_save[s].row[1] != end_r) {
                  isSameRow = false;
                }
                if (store_default.luckysheet_select_save[s].column[0] != str_c || store_default.luckysheet_select_save[s].column[1] != end_c) {
                  isSameCol = false;
                }
              }
              if (!isSameRow && !isSameCol || selectIsOverlap()) {
                if (isEditMode()) {
                  alert(locale_drag2.noMulti);
                } else {
                  tooltip_default.info(locale_drag2.noMulti, "");
                }
                return;
              }
            }
            selection_default.copy(event2);
            store_default.luckysheet_paste_iscut = false;
            luckysheetactiveCell();
            event2.stopPropagation();
            return;
          } else if (kcode == 70) {
            searchReplace_default.createDialog(0);
            searchReplace_default.init();
            $("#luckysheet-search-replace #searchInput input").focus();
          } else if (kcode == 72) {
            searchReplace_default.createDialog(1);
            searchReplace_default.init();
            $("#luckysheet-search-replace #searchInput input").focus();
          } else if (kcode == 73) {
            $("#luckysheet-icon-italic").click();
          } else if (kcode == 86) {
            if (isEditMode() || store_default.allowEdit === false) {
              return;
            }
            if ($(event2.target).hasClass("formulaInputFocus")) {
              return;
            }
            if (store_default.luckysheet_select_save.length > 1) {
              if (isEditMode()) {
                alert(locale_drag2.noPaste);
              } else {
                tooltip_default.info(locale_drag2.noPaste, "");
              }
              return;
            }
            selection_default.isPasteAction = true;
            luckysheetactiveCell();
            event2.stopPropagation();
            return;
          } else if (kcode == 88) {
            if (menuButton_default.luckysheetPaintModelOn) {
              menuButton_default.cancelPaintModel();
            }
            if (store_default.luckysheet_select_save.length == 0) {
              return;
            }
            if (store_default.config["merge"] != null) {
              let has_PartMC = false;
              for (let s = 0; s < store_default.luckysheet_select_save.length; s++) {
                let r1 = store_default.luckysheet_select_save[s].row[0], r2 = store_default.luckysheet_select_save[s].row[1];
                let c1 = store_default.luckysheet_select_save[s].column[0], c2 = store_default.luckysheet_select_save[s].column[1];
                has_PartMC = hasPartMC(store_default.config, r1, r2, c1, c2);
                if (has_PartMC) {
                  break;
                }
              }
              if (has_PartMC) {
                if (luckysheetConfigsetting_default.editMode) {
                  alert(_locale_drag.noMerge);
                } else {
                  tooltip_default.info(_locale_drag.noMerge, "");
                }
                return;
              }
            }
            if (store_default.luckysheet_select_save.length > 1) {
              if (isEditMode()) {
                alert(locale_drag2.noMulti);
              } else {
                tooltip_default.info(locale_drag2.noMulti, "");
              }
              return;
            }
            selection_default.copy(event2);
            store_default.luckysheet_paste_iscut = true;
            luckysheetactiveCell();
            event2.stopPropagation();
            return;
          } else if (kcode == 90) {
            controlHistory_default.redo(event2);
            luckysheetactiveCell();
            event2.stopPropagation();
            return;
          } else if (kcode == 89) {
            controlHistory_default.undo(event2);
            luckysheetactiveCell();
            event2.stopPropagation();
            return;
          } else if (kcode == keycode.UP) {
            if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
              return;
            }
            luckysheetMoveHighlightCell2("up", "rangeOfSelect");
          } else if (kcode == keycode.DOWN) {
            if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
              return;
            }
            luckysheetMoveHighlightCell2("down", "rangeOfSelect");
          } else if (kcode == keycode.LEFT) {
            if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
              return;
            }
            luckysheetMoveHighlightCell2("left", "rangeOfSelect");
          } else if (kcode == keycode.RIGHT) {
            if (parseInt($inputbox.css("top")) > 0 || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
              return;
            }
            luckysheetMoveHighlightCell2("right", "rangeOfSelect");
          } else if (kcode == 186) {
            let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
            let row_index = last["row_focus"], col_index = last["column_focus"];
            luckysheetupdateCell(row_index, col_index, store_default.flowdata, true);
            let value = getNowDateTime(1);
            $("#luckysheet-rich-text-editor").html(value);
            luckysheetRangeLast($("#luckysheet-rich-text-editor")[0]);
            formula_default.functionInputHanddler($("#luckysheet-functionbox-cell"), $("#luckysheet-rich-text-editor"), kcode);
          } else if (kcode == 222) {
            let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
            let row_index = last["row_focus"], col_index = last["column_focus"];
            luckysheetupdateCell(row_index, col_index, store_default.flowdata, true);
            let value = getNowDateTime(2);
            $("#luckysheet-rich-text-editor").html(value);
            luckysheetRangeLast($("#luckysheet-rich-text-editor")[0]);
            formula_default.functionInputHanddler($("#luckysheet-functionbox-cell"), $("#luckysheet-rich-text-editor"), kcode);
          } else if (String.fromCharCode(kcode).toLocaleUpperCase() == "A") {
            $("#luckysheet-left-top").click();
          }
          event2.preventDefault();
          return;
        } else if (shiftKey && (kcode == keycode.UP || kcode == keycode.DOWN || kcode == keycode.LEFT || kcode == keycode.RIGHT || altKey && (kcode == 53 || kcode == 101))) {
          if (parseInt($inputbox.css("top")) > 0 || $(event2.target).hasClass("formulaInputFocus")) {
            return;
          }
          if (!luckysheet_shiftkeydown) {
            store_default.luckysheet_shiftpositon = $.extend(true, {}, store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1]);
            store_default.luckysheet_shiftkeydown = true;
          }
          if (kcode == keycode.UP) {
            if ($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
              return;
            }
            luckysheetMoveHighlightRange("down", -1, "rangeOfSelect");
          } else if (kcode == keycode.DOWN) {
            if ($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
              return;
            }
            luckysheetMoveHighlightRange("down", 1, "rangeOfSelect");
          } else if (kcode == keycode.LEFT) {
            if ($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
              return;
            }
            luckysheetMoveHighlightRange("right", -1, "rangeOfSelect");
          } else if (kcode == keycode.RIGHT) {
            if ($("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
              return;
            }
            luckysheetMoveHighlightRange("right", 1, "rangeOfSelect");
          } else if (altKey && (kcode == 53 || kcode == 101)) {
            $("#luckysheet-icon-strikethrough").click();
          }
          event2.preventDefault();
        } else if (kcode == keycode.ESC) {
          if (menuButton_default.luckysheetPaintModelOn) {
            menuButton_default.cancelPaintModel();
          } else {
            cleargridelement(event2);
            event2.preventDefault();
          }
          selectHightlightShow();
        } else if (kcode == keycode.DELETE || kcode == keycode.BACKSPACE) {
          if (imageCtrl_default.currentImgId != null) {
            imageCtrl_default.removeImgItem();
          } else {
            $("#luckysheet-delete-text").click();
          }
          event2.preventDefault();
        } else if (kcode == 8 && imageCtrl_default.currentImgId != null) {
          imageCtrl_default.removeImgItem();
          event2.preventDefault();
        } else if (kcode == keycode.UP) {
          if (parseInt($inputbox.css("top")) > 0 || store_default.luckysheet_cell_selected_move || store_default.luckysheet_cell_selected_extend || $(event2.target).hasClass("formulaInputFocus") || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
            return;
          }
          luckysheetMoveHighlightCell("down", -1, "rangeOfSelect");
          event2.preventDefault();
        } else if (kcode == keycode.DOWN) {
          if (parseInt($inputbox.css("top")) > 0 || store_default.luckysheet_cell_selected_move || store_default.luckysheet_cell_selected_extend || $(event2.target).hasClass("formulaInputFocus") || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
            return;
          }
          luckysheetMoveHighlightCell("down", 1, "rangeOfSelect");
          event2.preventDefault();
        } else if (kcode == keycode.LEFT) {
          if (parseInt($inputbox.css("top")) > 0 || store_default.luckysheet_cell_selected_move || store_default.luckysheet_cell_selected_extend || $(event2.target).hasClass("formulaInputFocus") || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
            return;
          }
          luckysheetMoveHighlightCell("right", -1, "rangeOfSelect");
          event2.preventDefault();
        } else if (kcode == keycode.RIGHT) {
          if (parseInt($inputbox.css("top")) > 0 || store_default.luckysheet_cell_selected_move || store_default.luckysheet_cell_selected_extend || $(event2.target).hasClass("formulaInputFocus") || $("#luckysheet-singleRange-dialog").is(":visible") || $("#luckysheet-multiRange-dialog").is(":visible")) {
            return;
          }
          luckysheetMoveHighlightCell("right", 1, "rangeOfSelect");
          event2.preventDefault();
        } else if (!(kcode >= 112 && kcode <= 123 || kcode <= 46 || kcode == 144 || kcode == 108 || event2.ctrlKey || event2.altKey || event2.shiftKey && (kcode == 37 || kcode == 38 || kcode == 39 || kcode == 40)) || kcode == 8 || kcode == 32 || kcode == 46 || kcode == 0 || event2.ctrlKey && kcode == 86) {
          if (String.fromCharCode(kcode) != null && $("#luckysheet-cell-selected").is(":visible") && (kcode != keycode.CAPSLOCK && kcode != keycode.WIN && kcode != 18)) {
            let last = store_default.luckysheet_select_save[store_default.luckysheet_select_save.length - 1];
            let row_index = last["row_focus"], col_index = last["column_focus"];
            luckysheetupdateCell(row_index, col_index, store_default.flowdata, true);
            if (kcode == 8) {
              $("#luckysheet-rich-text-editor").html("<br/>");
            }
            formula_default.functionInputHanddler($("#luckysheet-functionbox-cell"), $("#luckysheet-rich-text-editor"), kcode);
          }
        }
      }
      luckysheetactiveCell();
      event2.stopPropagation();
    });
    $("#" + store_default.container).add("#luckysheet-input-box").keydown(function(event2) {
      if ($("#luckysheet-modal-dialog-mask").is(":visible") || $(event2.target).hasClass("luckysheet-mousedown-cancel") || $(event2.target).hasClass("formulaInputFocus")) {
        return;
      }
      let ctrlKey = event2.ctrlKey;
      let altKey = event2.altKey;
      let shiftKey = event2.shiftKey;
      let kcode = event2.keyCode;
      let $inputbox = $("#luckysheet-input-box");
      if (kcode == keycode.ESC && parseInt($("#luckysheet-input-box").css("top")) > 0) {
        formula_default.dontupdate();
        luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
        event2.preventDefault();
      } else if (kcode == keycode.ENTER && parseInt($inputbox.css("top")) > 0) {
        if ($("#luckysheet-formula-search-c").is(":visible") && formula_default.searchFunctionCell != null) {
          formula_default.searchFunctionEnter($("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active"));
          event2.preventDefault();
        }
      } else if (kcode == keycode.TAB && parseInt($inputbox.css("top")) > 0) {
        if ($("#luckysheet-formula-search-c").is(":visible") && formula_default.searchFunctionCell != null) {
          formula_default.searchFunctionEnter($("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active"));
        } else {
          formula_default.updatecell(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1]);
          luckysheetMoveHighlightCell("right", 1, "rangeOfSelect");
        }
        event2.preventDefault();
      } else if (kcode == keycode.F4 && parseInt($inputbox.css("top")) > 0) {
        formula_default.setfreezonFuc(event2);
        event2.preventDefault();
      } else if (kcode == keycode.UP && parseInt($inputbox.css("top")) > 0) {
        formulaMoveEvent("up", ctrlKey, shiftKey, event2);
      } else if (kcode == keycode.DOWN && parseInt($inputbox.css("top")) > 0) {
        formulaMoveEvent("down", ctrlKey, shiftKey, event2);
      } else if (kcode == keycode.LEFT && parseInt($inputbox.css("top")) > 0) {
        formulaMoveEvent("left", ctrlKey, shiftKey, event2);
      } else if (kcode == keycode.RIGHT && parseInt($inputbox.css("top")) > 0) {
        formulaMoveEvent("right", ctrlKey, shiftKey, event2);
      } else if (!(kcode >= 112 && kcode <= 123 || kcode <= 46 || kcode == 144 || kcode == 108 || event2.ctrlKey || event2.altKey || event2.shiftKey && (kcode == 37 || kcode == 38 || kcode == 39 || kcode == 40 || kcode == keycode.WIN || kcode == keycode.WIN_R || kcode == keycode.MENU)) || kcode == 8 || kcode == 32 || kcode == 46 || event2.ctrlKey && kcode == 86) {
        formula_default.functionInputHanddler($("#luckysheet-functionbox-cell"), $("#luckysheet-rich-text-editor"), kcode);
        setCenterInputPosition(store_default.luckysheetCellUpdate[0], store_default.luckysheetCellUpdate[1], store_default.flowdata);
      }
    }).keyup(function(e) {
      let kcode = e.keyCode;
      if (!e.shiftKey && kcode == 16) {
        store_default.luckysheet_shiftkeydown = false;
        store_default.luckysheet_shiftpositon = null;
      }
      if (parseInt($("#luckysheet-input-box").css("top")) > 0 && (kcode == 13 || kcode == 16 || kcode == 32)) {
      }
      e.preventDefault();
    });
    $("#luckysheet_info_detail_input").val(server_default.title).css("width", getByteLen(server_default.title) * 10).keydown(function() {
      let ctrlKey = event.ctrlKey;
      let altKey = event.altKey;
      let shiftKey = event.shiftKey;
      let kcode = event.keyCode;
      let $t = $(this);
      if (kcode == keycode.ENTER) {
        $t.blur().change();
      }
    }).bind("input propertychange", function() {
      let $t = $(this);
      let inputlen = getByteLen($t.val()) * 10;
      let updatelen = $("#luckysheet_info_detail_update").outerWidth();
      let savelen = $("#luckysheet_info_detail_save").outerWidth();
      let userlen = $("#luckysheet_info_detail_user").parent().outerWidth() + 60;
      let containerlen = $("#" + store_default.container).outerWidth();
      let otherlen = 100;
      let minuslen = containerlen - savelen - updatelen - userlen - otherlen;
      if (inputlen > minuslen) {
        $("#luckysheet_info_detail_input").css("width", minuslen);
      } else {
        $("#luckysheet_info_detail_input").css("width", inputlen);
      }
    }).change(function() {
      server_default.saveParam("na", null, $(this).val());
    });
    $("#" + store_default.container).add("input.luckysheet-mousedown-cancel").keydown(function(event2) {
      const element = event2.target.closest(".luckysheet-cols-menuitem");
      if (typeof element != "undefined" && element != null && event2.keyCode === 13) {
        $(element).trigger("click");
      }
    });
  }
  var luckysheet_shiftkeydown;
  var init_keyboard = __esm({
    "src/controllers/keyboard.js"() {
      init_luckysheetConfigsetting();
      init_menuButton();
      init_conditionformat();
      init_server();
      init_updateCell();
      init_constant();
      init_sheetMove();
      init_select();
      init_selection();
      init_searchReplace();
      init_controlHistory();
      init_imageCtrl();
      init_util();
      init_get();
      init_validate();
      init_cursorPos();
      init_formula();
      init_cleargridelement();
      init_tooltip();
      init_locale();
      init_inlineString();
      init_store();
      luckysheet_shiftkeydown = false;
    }
  });

  // src/controllers/orderBy.js
  function orderByInitial() {
    const _locale = locale_default();
    $("#luckysheetorderbyasc, #luckysheetorderbyasc_t").mousedown(function(event2) {
      cleargridelement(event2);
      sortColumnSeletion(store_default.orderbyindex, true);
      selectHightlightShow();
    });
    $("#luckysheetorderbydesc, #luckysheetorderbydesc_t").click(function(event2) {
      cleargridelement(event2);
      sortColumnSeletion(store_default.orderbyindex, false);
      selectHightlightShow();
    });
    let luckysheet_sort_initial = true;
    $("#luckysheetorderby").click(function() {
      if (!checkProtectionAuthorityNormal(store_default.currentSheetIndex, "sort")) {
        return;
      }
      $("body .luckysheet-cols-menu").hide();
      const locale_sort = _locale.sort;
      if (store_default.luckysheet_select_save.length > 1) {
        if (isEditMode()) {
          alert(locale_sort.noRangeError);
        } else {
          tooltip_default.info(locale_sort.noRangeError, "");
        }
        return;
      }
      let last = store_default.luckysheet_select_save[0];
      let r1 = last["row"][0], r2 = last["row"][1];
      let c1 = last["column"][0], c2 = last["column"][1];
      if (luckysheet_sort_initial) {
        luckysheet_sort_initial = false;
        let content = `<div style="overflow: hidden;" class="luckysheet-sort-modal"><div><label><input type="checkbox" id="luckysheet-sort-haveheader"/><span>${locale_sort.hasTitle}</span></label></div><div style="overflow-y:auto;" id="luckysheet-sort-dialog-tablec"><table data-itemcount="0" cellspacing="0"> <tr><td>${locale_sort.hasTitle} <select name="sort_0"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> <td> <div><label><input value="asc" type="radio" checked="checked" name="sort_0"><span>${locale_sort.asc}A-Z</span></label></div> <div><label><input value="desc" type="radio" name="sort_0"><span>${locale_sort.desc}Z-A</span></label></div></td></tr></table></div><div style="background: #e5e5e5;border-top: 1px solid #f5f5f5; height: 1px; width: 100%;margin:2px 0px;margin-bottom:10px;"></div> <div> <span style="font-weight: bold; text-decoration: underline;text-align:center;color: blue;cursor: pointer;" class="luckysheet-sort-dialog-additem">+ ${locale_sort.addOthers}</span> </div> </div>`;
        $("body").append(replaceHtml(modelHTML, {"id": "luckysheet-sort-dialog", "addclass": "", "title": _locale.sort.sortTitle, "content": content, "botton": `<button id="luckysheet-sort-modal-confirm" class="btn btn-primary">${locale_sort.confirm}</button><button class="btn btn-default luckysheet-model-close-btn">${locale_sort.close}</button>`}));
        $("#luckysheet-sort-dialog .luckysheet-sort-dialog-additem").click(function() {
          let last2 = store_default.luckysheet_select_save[0];
          let r12 = last2["row"][0], r22 = last2["row"][1];
          let c12 = last2["column"][0], c22 = last2["column"][1];
          let option2 = "", i2 = $("#luckysheet-sort-dialog table").data("itemcount") + 1;
          let t = $("#luckysheet-sort-haveheader").is(":checked");
          for (let c3 = c12; c3 <= c22; c3++) {
            if (t) {
              let v = getcellvalue(r12, c3, store_default.flowdata, "m");
              if (v == null) {
                v = locale_sort.columnOperation + (c3 - c12 + 1);
              }
              option2 += '<option value="' + c3 + '">' + v + "</option>";
            } else {
              option2 += '<option value="' + c3 + '">' + chatatABC(c3) + "</option>";
            }
          }
          $("#luckysheet-sort-dialog table").append(`
                    <tr class="luckysheet-sort-dialog-tr">
                        <td><span class="luckysheet-sort-item-close" onclick="$(this).parent().parent().remove();"><i class="fa fa-times"
                                    aria-hidden="true"></i></span>${locale_sort.secondaryTitle} <select
                                name="sort_${i2}">${option2}</select> </td>
                        <td>
                            <div><label><input value="asc" type="radio" checked="checked"
                                        name="sort_${i2}"><span>${locale_sort.asc}A-Z</span></label></div>
                            <div><label><input value="desc" type="radio" name="sort_${i2}"><span>${locale_sort.desc}Z-A</span></label>
                            </div>
                        </td>
                    </tr>
                `);
          $("#luckysheet-sort-dialog table").data("itemcount", i2);
        });
        $("#luckysheet-sort-haveheader").change(function() {
          let last2 = store_default.luckysheet_select_save[0];
          let r12 = last2["row"][0], r22 = last2["row"][1];
          let c12 = last2["column"][0], c22 = last2["column"][1];
          let t = $(this).is(":checked");
          let option2 = "";
          for (let c3 = c12; c3 <= c22; c3++) {
            if (t) {
              let v = getcellvalue(r12, c3, store_default.flowdata, "m");
              if (v == null) {
                v = locale_sort.columnOperation + (c3 - c12 + 1);
              }
              option2 += '<option value="' + c3 + '">' + v + "</option>";
            } else {
              option2 += '<option value="' + c3 + '">' + chatatABC(c3) + "</option>";
            }
          }
          $("#luckysheet-sort-dialog tr select").each(function() {
            $(this).html(option2);
          });
        });
        $("#luckysheet-sort-modal-confirm").click(function() {
          if (store_default.luckysheet_select_save.length > 1) {
            if (isEditMode()) {
              alert(locale_sort.noRangeError);
            } else {
              tooltip_default.info(locale_sort.noRangeError, "");
            }
            return;
          }
          let d = editor_default.deepCopyFlowData(store_default.flowdata);
          let last2 = store_default.luckysheet_select_save[0];
          let r12 = last2["row"][0], r22 = last2["row"][1];
          let c12 = last2["column"][0], c22 = last2["column"][1];
          let t = $("#luckysheet-sort-haveheader").is(":checked");
          let str;
          if (t) {
            str = r12 + 1;
          } else {
            str = r12;
          }
          let hasMc = false;
          let data = [];
          for (let r3 = str; r3 <= r22; r3++) {
            let data_row = [];
            for (let c3 = c12; c3 <= c22; c3++) {
              if (d[r3][c3] != null && d[r3][c3].mc != null) {
                hasMc = true;
                break;
              }
              data_row.push(d[r3][c3]);
            }
            data.push(data_row);
          }
          if (hasMc) {
            if (isEditMode()) {
              alert(locale_sort.mergeError);
            } else {
              tooltip_default.info(locale_sort.mergeError, "");
            }
            return;
          }
          $($("#luckysheet-sort-dialog table tr").toArray().reverse()).each(function() {
            let i2 = $(this).find("select").val(), asc = $(this).find("input:radio:checked").val();
            i2 -= c12;
            if (asc == "asc") {
              asc = true;
            } else {
              asc = false;
            }
            data = orderbydata([].concat(data), i2, asc);
          });
          for (let r3 = str; r3 <= r22; r3++) {
            for (let c3 = c12; c3 <= c22; c3++) {
              d[r3][c3] = data[r3 - str][c3 - c12];
            }
          }
          let allParam = {};
          if (store_default.config["rowlen"] != null) {
            let cfg = $.extend(true, {}, store_default.config);
            cfg = rowlenByRange(d, str, r22, cfg);
            allParam = {
              "cfg": cfg,
              "RowlChange": true
            };
          }
          jfrefreshgrid(d, [{"row": [str, r22], "column": [c12, c22]}], allParam);
          $("#luckysheet-sort-dialog").hide();
          $("#luckysheet-modal-dialog-mask").hide();
        });
      }
      let option = "";
      for (let c3 = c1; c3 <= c2; c3++) {
        option += '<option value="' + c3 + '">' + chatatABC(c3) + "</option>";
      }
      $("#luckysheet-sort-dialog select").html(option);
      $("#luckysheet-sort-dialog .luckysheet-sort-dialog-tr").remove();
      $("#luckysheet-sort-haveheader").prop("checked", false);
      $("#luckysheet-sort-dialog input:radio:first").prop("checked", "checked");
      $("#luckysheet-sort-dialog .luckysheet-modal-dialog-title-text").html(locale_sort.sortRangeTitle + "<span>" + chatatABC(c1) + (r1 + 1) + "</span>" + locale_sort.sortRangeTitleTo + "<span>" + chatatABC(c2) + (r2 + 1) + "</span>");
      let $t = $("#luckysheet-sort-dialog"), myh = $t.outerHeight(), myw = $t.outerWidth();
      let winw = $(window).width(), winh = $(window).height();
      let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
      $("#luckysheet-sort-dialog-tablec").css("max-height", (winh - myh) / 2);
      $("#luckysheet-sort-dialog").css({"left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 2}).show();
      $("#luckysheet-modal-dialog-mask").show();
      if (r1 < r2) {
        setTimeout(function() {
          let flowrowdata1 = store_default.flowdata[r1], flowrowdata2 = store_default.flowdata[r1 + 1], hastitle = false;
          for (let i2 = c1; i2 <= c2; i2++) {
            let isdatatype_r1 = isdatatype(flowrowdata1[i2]), isdatatype_r2 = isdatatype(flowrowdata2[i2]);
            if (isdatatype_r1 != isdatatype_r2) {
              hastitle = true;
            }
          }
          if (hastitle) {
            $("#luckysheet-sort-haveheader").prop("checked", true).change();
          }
        }, 10);
      }
    });
  }
  var init_orderBy = __esm({
    "src/controllers/orderBy.js"() {
      init_constant();
      init_select();
      init_protection();
      init_util();
      init_getRowlen();
      init_validate();
      init_cleargridelement();
      init_refresh();
      init_getdata();
      init_sort();
      init_tooltip();
      init_editor();
      init_datecontroll();
      init_store();
      init_locale();
    }
  });

  // src/expendPlugins/print/plugin.js
  function print(data, isDemo2) {
    loadLinks(dependLinks2);
    seriesLoadScripts(dependScripts2, null, function() {
    });
  }
  var dependScripts2, dependLinks2;
  var init_plugin2 = __esm({
    "src/expendPlugins/print/plugin.js"() {
      init_util();
      dependScripts2 = [
        "http://localhost:8080/luckysheetPluginPrint.umd.js"
      ];
      dependLinks2 = [
        "http://localhost:8080/luckysheetPluginPrint.css"
      ];
    }
  });

  // src/controllers/expendPlugins.js
  function initPlugins(plugins, data) {
    if (plugins.length) {
      plugins.forEach((plugin) => {
        pluginsObj[plugin](data, isDemo);
      });
    }
  }
  var pluginsObj, isDemo;
  var init_expendPlugins = __esm({
    "src/controllers/expendPlugins.js"() {
      init_plugin();
      init_plugin2();
      pluginsObj = {
        "chart": chart,
        "print": print
      };
      isDemo = true;
    }
  });

  // src/function/functionImplementation.js
  var import_dayjs8, import_numeral6, functionImplementation, functionImplementation_default;
  var init_functionImplementation = __esm({
    "src/function/functionImplementation.js"() {
      init_luckysheetConfigsetting();
      init_func();
      init_matrix_methods();
      init_get();
      init_menuButton();
      init_sparkline();
      init_formula();
      init_func_methods();
      init_editor();
      init_datecontroll();
      init_validate();
      init_refresh();
      init_format();
      init_sort();
      init_getdata();
      init_util();
      init_store();
      import_dayjs8 = __toModule(require_dayjs_min());
      import_numeral6 = __toModule(require_numeral());
      functionImplementation = {
        "SUM": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                if (!isRealNum(data)) {
                  if (getObjType(data) == "boolean") {
                    if (data.toString().toLowerCase() == "true") {
                      dataArr.push(1);
                    } else if (data.toString().toLowerCase() == "false") {
                      dataArr.push(0);
                    }
                  } else {
                    return formula_default.error.v;
                  }
                } else {
                  dataArr.push(data);
                }
              }
            }
            var sum = 0;
            if (dataArr.length > 0) {
              for (var i2 = 0; i2 < dataArr.length; i2++) {
                if (valueIsError(dataArr[i2])) {
                  return dataArr[i2];
                }
                if (!isRealNum(dataArr[i2])) {
                  continue;
                }
                sum = luckysheet_calcADPMM(sum, "+", dataArr[i2]);
              }
            }
            return sum;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "AVERAGE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array") {
                  if (!func_methods_default.isDyadicArr(data)) {
                    return formula_default.error.v;
                  }
                  dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
                } else {
                  dataArr = dataArr.concat(data);
                }
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "text", true));
              } else {
                dataArr.push(data);
              }
            }
            var sum = 0, count = 0;
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              if (valueIsError(dataArr[i2])) {
                return dataArr[i2];
              } else if (!isRealNum(dataArr[i2])) {
                return formula_default.error.v;
              }
              sum = luckysheet_calcADPMM(sum, "+", dataArr[i2]);
              count++;
            }
            if (count == 0) {
              return formula_default.error.d;
            }
            return luckysheet_calcADPMM(sum, "/", count);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COUNT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array") {
                  if (!func_methods_default.isDyadicArr(data)) {
                    return formula_default.error.v;
                  }
                  dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
                } else {
                  dataArr = dataArr.concat(data);
                }
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "text", true));
              } else {
                if (getObjType(data) == "boolean") {
                  if (data.toString().toLowerCase() == "true") {
                    dataArr.push(1);
                  } else if (data.toString().toLowerCase() == "false") {
                    dataArr.push(0);
                  }
                } else {
                  dataArr.push(data);
                }
              }
            }
            var count = 0;
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              if (isRealNum(dataArr[i2])) {
                count++;
              }
            }
            return count;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COUNTA": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array") {
                  if (!func_methods_default.isDyadicArr(data)) {
                    return formula_default.error.v;
                  }
                  dataArr = dataArr.concat(func_methods_default.getDataArr(data));
                } else {
                  dataArr = dataArr.concat(data);
                }
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "text", true));
              } else {
                dataArr.push(data);
              }
            }
            return dataArr.length;
          } catch (err) {
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MAX": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array") {
                  if (!func_methods_default.isDyadicArr(data)) {
                    return formula_default.error.v;
                  }
                  dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
                } else {
                  dataArr = dataArr.concat(data);
                }
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                dataArr.push(data);
              }
            }
            var max = null;
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              if (valueIsError(dataArr[i2])) {
                return dataArr[i2];
              }
              if (!isRealNum(dataArr[i2])) {
                continue;
              }
              if (max == null || parseFloat(dataArr[i2]) > max) {
                max = parseFloat(dataArr[i2]);
              }
            }
            return max == null ? 0 : max;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MIN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array") {
                  if (!func_methods_default.isDyadicArr(data)) {
                    return formula_default.error.v;
                  }
                  dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
                } else {
                  dataArr = dataArr.concat(data);
                }
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                dataArr.push(data);
              }
            }
            var min = null;
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              if (valueIsError(dataArr[i2])) {
                return dataArr[i2];
              }
              if (!isRealNum(dataArr[i2])) {
                continue;
              }
              if (min == null || parseFloat(dataArr[i2]) < min) {
                min = parseFloat(dataArr[i2]);
              }
            }
            return min == null ? 0 : min;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "AGE_BY_IDCARD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var UUserCard = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(UUserCard)) {
              return UUserCard;
            }
            if (!window.luckysheet_function.ISIDCARD.f(UUserCard)) {
              return formula_default.error.v;
            }
            var birthday = window.luckysheet_function.BIRTHDAY_BY_IDCARD.f(UUserCard);
            if (valueIsError(birthday)) {
              return birthday;
            }
            birthday = (0, import_dayjs8.default)(birthday);
            var cuurentdate = (0, import_dayjs8.default)();
            if (arguments.length == 2) {
              cuurentdate = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(cuurentdate)) {
                return cuurentdate;
              }
              cuurentdate = (0, import_dayjs8.default)(cuurentdate);
            }
            var age = cuurentdate.diff(birthday, "years");
            if (age < 0 || age.toString() == "NaN") {
              return formula_default.error.v;
            }
            return age;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SEX_BY_IDCARD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var UUserCard = func_methods_default.getFirstValue(arguments[0]).toString();
            if (valueIsError(UUserCard)) {
              return UUserCard;
            }
            if (!window.luckysheet_function.ISIDCARD.f(UUserCard)) {
              return formula_default.error.v;
            }
            if (parseInt(UUserCard.substr(16, 1)) % 2 == 1) {
              return "\u7537";
            } else {
              return "\u5973";
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "BIRTHDAY_BY_IDCARD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var UUserCard = func_methods_default.getFirstValue(arguments[0]).toString();
            if (valueIsError(UUserCard)) {
              return UUserCard;
            }
            if (!window.luckysheet_function.ISIDCARD.f(UUserCard)) {
              return formula_default.error.v;
            }
            var birthday = "";
            if (UUserCard.length == 15) {
              var year = "19" + UUserCard.substring(6, 8) + "/" + UUserCard.substring(8, 10) + "/" + UUserCard.substring(10, 12);
              birthday = year;
            } else if (UUserCard.length == 18) {
              var year = UUserCard.substring(6, 10) + "/" + UUserCard.substring(10, 12) + "/" + UUserCard.substring(12, 14);
              birthday = year;
            }
            var datetype = 0;
            if (arguments[1] != null) {
              datetype = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(datetype)) {
                return datetype;
              }
            }
            if (!isRealNum(datetype)) {
              return formula_default.error.v;
            }
            datetype = parseInt(datetype);
            if (datetype < 0 || datetype > 2) {
              return formula_default.error.v;
            }
            if (parseInt(datetype) == 0) {
              return birthday;
            } else if (parseInt(datetype) == 1) {
              return (0, import_dayjs8.default)(birthday).format("YYYY-MM-DD");
            } else if (parseInt(datetype) == 2) {
              return (0, import_dayjs8.default)(birthday).format("YYYY\u5E74M\u6708D\u65E5");
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PROVINCE_BY_IDCARD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var UUserCard = func_methods_default.getFirstValue(arguments[0]).toString();
            if (valueIsError(UUserCard)) {
              return UUserCard;
            }
            if (!window.luckysheet_function.ISIDCARD.f(UUserCard)) {
              return formula_default.error.v;
            }
            var native = "\u672A\u77E5";
            var provinceArray = formula_default.classlist.province;
            if (UUserCard.substring(0, 2) in provinceArray) {
              native = provinceArray[UUserCard.substring(0, 2)];
            }
            return native;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "CITY_BY_IDCARD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var UUserCard = func_methods_default.getFirstValue(arguments[0]).toString();
            if (valueIsError(UUserCard)) {
              return UUserCard;
            }
            if (!window.luckysheet_function.ISIDCARD.f(UUserCard)) {
              return formula_default.error.v;
            }
            var dataNum = cityData.length, native = "\u672A\u77E5";
            for (var i2 = 0; i2 < dataNum; i2++) {
              if (UUserCard.substring(0, 6) == cityData[i2].code) {
                native = cityData[i2].title;
                break;
              }
            }
            return native;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "STAR_BY_IDCARD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var UUserCard = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(UUserCard)) {
              return UUserCard;
            }
            if (!window.luckysheet_function.ISIDCARD.f(UUserCard)) {
              return formula_default.error.v;
            }
            var birthday = window.luckysheet_function.BIRTHDAY_BY_IDCARD.f(UUserCard);
            if (valueIsError(birthday)) {
              return birthday;
            }
            birthday = new Date(birthday);
            var month = birthday.getMonth(), day = birthday.getDate();
            var d = new Date(1999, month, day, 0, 0, 0);
            var arr = [];
            arr.push(["\u9B54\u7FAF\u5EA7", new Date(1999, 0, 1, 0, 0, 0)]);
            arr.push(["\u6C34\u74F6\u5EA7", new Date(1999, 0, 20, 0, 0, 0)]);
            arr.push(["\u53CC\u9C7C\u5EA7", new Date(1999, 1, 19, 0, 0, 0)]);
            arr.push(["\u767D\u7F8A\u5EA7", new Date(1999, 2, 21, 0, 0, 0)]);
            arr.push(["\u91D1\u725B\u5EA7", new Date(1999, 3, 21, 0, 0, 0)]);
            arr.push(["\u53CC\u5B50\u5EA7", new Date(1999, 4, 21, 0, 0, 0)]);
            arr.push(["\u5DE8\u87F9\u5EA7", new Date(1999, 5, 22, 0, 0, 0)]);
            arr.push(["\u72EE\u5B50\u5EA7", new Date(1999, 6, 23, 0, 0, 0)]);
            arr.push(["\u5904\u5973\u5EA7", new Date(1999, 7, 23, 0, 0, 0)]);
            arr.push(["\u5929\u79E4\u5EA7", new Date(1999, 8, 23, 0, 0, 0)]);
            arr.push(["\u5929\u874E\u5EA7", new Date(1999, 9, 23, 0, 0, 0)]);
            arr.push(["\u5C04\u624B\u5EA7", new Date(1999, 10, 22, 0, 0, 0)]);
            arr.push(["\u9B54\u7FAF\u5EA7", new Date(1999, 11, 22, 0, 0, 0)]);
            for (var i2 = arr.length - 1; i2 >= 0; i2--) {
              if (d >= arr[i2][1]) {
                return arr[i2][0];
              }
            }
            return "\u672A\u627E\u5230\u5339\u914D\u661F\u5EA7\u4FE1\u606F";
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ANIMAL_BY_IDCARD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var UUserCard = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(UUserCard)) {
              return UUserCard;
            }
            if (!window.luckysheet_function.ISIDCARD.f(UUserCard)) {
              return formula_default.error.v;
            }
            var birthday = window.luckysheet_function.BIRTHDAY_BY_IDCARD.f(UUserCard);
            if (valueIsError(birthday)) {
              return birthday;
            }
            birthday = new Date(birthday);
            var list = new Array("\u732A", "\u9F20", "\u725B", "\u864E", "\u5154", "\u9F99", "\u86C7", "\u9A6C", "\u7F8A", "\u7334", "\u9E21", "\u72D7");
            var index2 = (parseInt(birthday.getFullYear()) + 9) % 12;
            if (index2 != null && !isNaN(index2)) {
              return list[index2];
            } else {
              return "\u672A\u627E\u5230\u5339\u914D\u751F\u8096\u4FE1\u606F";
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISIDCARD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var idcard = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(idcard)) {
              return idcard;
            }
            var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
            if (reg.test(idcard)) {
              return true;
            } else {
              return false;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DM_TEXT_CUTWORD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            var datetype = 0;
            if (arguments[1] != null) {
              datetype = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(datetype)) {
                return datetype;
              }
            }
            if (!isRealNum(datetype)) {
              return formula_default.error.v;
            }
            datetype = parseInt(datetype);
            if (datetype != 0 && datetype != 1 && datetype != 2) {
              return formula_default.error.v;
            }
            $.post("/dataqk/tu/api/cutword", {
              "text": text,
              "type": datetype
            }, function(data) {
              var d = [].concat(store_default.flowdata);
              formula_default.execFunctionGroup(cell_r, cell_c, data);
              d[cell_r][cell_c] = {
                "v": data,
                "f": cell_fp
              };
              jfrefreshgrid(d, [{"row": [cell_r, cell_r], "column": [cell_c, cell_c]}]);
            });
            return "loading...";
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DM_TEXT_TFIDF": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            var count = 20;
            if (arguments[1] != null) {
              count = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(count)) {
                return count;
              }
            }
            if (!isRealNum(count)) {
              return formula_default.error.v;
            }
            count = parseInt(count);
            var set = 0;
            if (arguments[2] != null) {
              set = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(set)) {
                return set;
              }
            }
            if (!isRealNum(set)) {
              return formula_default.error.v;
            }
            set = parseInt(set);
            if (count < 0) {
              return formula_default.error.v;
            }
            if (set != 0 && set != 1 && set != 2) {
              return formula_default.error.v;
            }
            $.post("/dataqk/tu/api/tfidf", {
              "text": text,
              "count": count,
              "set": set
            }, function(data) {
              var d = editor_default.deepCopyFlowData(store_default.flowdata);
              formula_default.execFunctionGroup(cell_r, cell_c, data);
              d[cell_r][cell_c] = {
                "v": data,
                "f": cell_fp
              };
              jfrefreshgrid(d, [{"row": [cell_r, cell_r], "column": [cell_c, cell_c]}]);
            });
            return "loading...";
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DM_TEXT_TEXTRANK": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            var count = 20;
            if (arguments[1] != null) {
              count = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(count)) {
                return count;
              }
            }
            if (!isRealNum(count)) {
              return formula_default.error.v;
            }
            count = parseInt(count);
            var set = 0;
            if (arguments[2] != null) {
              set = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(set)) {
                return set;
              }
            }
            if (!isRealNum(set)) {
              return formula_default.error.v;
            }
            set = parseInt(set);
            if (count < 0) {
              return formula_default.error.v;
            }
            if (set != 0 && set != 1 && set != 2) {
              return formula_default.error.v;
            }
            $.post("/dataqk/tu/api/tfidf", {
              "text": text,
              "count": count,
              "set": set
            }, function(data) {
              var d = editor_default.deepCopyFlowData(store_default.flowdata);
              formula_default.execFunctionGroup(cell_r, cell_c, data);
              d[cell_r][cell_c] = {
                "v": data,
                "f": cell_fp
              };
              jfrefreshgrid(d, [{"row": [cell_r, cell_r], "column": [cell_c, cell_c]}]);
            });
            return "loading...";
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DATA_CN_STOCK_CLOSE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var stockcode = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(stockcode)) {
              return stockcode;
            }
            var date = null;
            if (arguments[1] != null) {
              var data_date = arguments[1];
              if (getObjType(data_date) == "array") {
                return formula_default.error.v;
              } else if (getObjType(data_date) == "object" && data_date.startCell != null) {
                if (data_date.data != null && getObjType(data_date.data) != "array" && data_date.data.ct != null && data_date.data.ct.t == "d") {
                  date = update("yyyy-mm-dd", data_date.data.v);
                } else {
                  return formula_default.error.v;
                }
              } else {
                date = data_date;
              }
              if (!isdatetime(date)) {
                return [formula_default.error.v, "\u65E5\u671F\u9519\u8BEF"];
              }
              date = (0, import_dayjs8.default)(date).format("YYYY-MM-DD");
            }
            var price = 0;
            if (arguments[2] != null) {
              price = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(price)) {
                return price;
              }
            }
            if (!isRealNum(price)) {
              return formula_default.error.v;
            }
            price = parseInt(price);
            if (price != 0 && price != 1 && price != 2) {
              return formula_default.error.v;
            }
            $.post("/dataqk/tu/api/getstockinfo", {
              "stockCode": stockcode,
              "date": date,
              "price": price,
              type: "0"
            }, function(data) {
              var d = editor_default.deepCopyFlowData(store_default.flowdata);
              var v = numFormat2(data);
              if (v == null) {
                v = data;
              }
              formula_default.execFunctionGroup(cell_r, cell_c, v);
              d[cell_r][cell_c] = {
                "v": v,
                "f": cell_fp
              };
              jfrefreshgrid(d, [{"row": [cell_r, cell_r], "column": [cell_c, cell_c]}]);
            });
            return "loading...";
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DATA_CN_STOCK_OPEN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var stockcode = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(stockcode)) {
              return stockcode;
            }
            var date = null;
            if (arguments[1] != null) {
              var data_date = arguments[1];
              if (getObjType(data_date) == "array") {
                return formula_default.error.v;
              } else if (getObjType(data_date) == "object" && data_date.startCell != null) {
                if (data_date.data != null && getObjType(data_date.data) != "array" && data_date.data.ct != null && data_date.data.ct.t == "d") {
                  date = update("yyyy-mm-dd", data_date.data.v);
                } else {
                  return formula_default.error.v;
                }
              } else {
                date = data_date;
              }
              if (!isdatetime(date)) {
                return [formula_default.error.v, "\u65E5\u671F\u9519\u8BEF"];
              }
              date = (0, import_dayjs8.default)(date).format("YYYY-MM-DD");
            }
            var price = 0;
            if (arguments[2] != null) {
              price = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(price)) {
                return price;
              }
            }
            if (!isRealNum(price)) {
              return formula_default.error.v;
            }
            price = parseInt(price);
            if (price != 0 && price != 1 && price != 2) {
              return formula_default.error.v;
            }
            $.post("/dataqk/tu/api/getstockinfo", {
              "stockCode": stockcode,
              "date": date,
              "price": price,
              type: "1"
            }, function(data) {
              var d = editor_default.deepCopyFlowData(store_default.flowdata);
              formula_default.execFunctionGroup(cell_r, cell_c, data);
              d[cell_r][cell_c] = {
                "v": data,
                "f": cell_fp
              };
              jfrefreshgrid(d, [{"row": [cell_r, cell_r], "column": [cell_c, cell_c]}]);
            });
            return "loading...";
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DATA_CN_STOCK_MAX": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var stockcode = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(stockcode)) {
              return stockcode;
            }
            var date = null;
            if (arguments[1] != null) {
              var data_date = arguments[1];
              if (getObjType(data_date) == "array") {
                return formula_default.error.v;
              } else if (getObjType(data_date) == "object" && data_date.startCell != null) {
                if (data_date.data != null && getObjType(data_date.data) != "array" && data_date.data.ct != null && data_date.data.ct.t == "d") {
                  date = update("yyyy-mm-dd", data_date.data.v);
                } else {
                  return formula_default.error.v;
                }
              } else {
                date = data_date;
              }
              if (!isdatetime(date)) {
                return [formula_default.error.v, "\u65E5\u671F\u9519\u8BEF"];
              }
              date = (0, import_dayjs8.default)(date).format("YYYY-MM-DD");
            }
            var price = 0;
            if (arguments[2] != null) {
              price = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(price)) {
                return price;
              }
            }
            if (!isRealNum(price)) {
              return formula_default.error.v;
            }
            price = parseInt(price);
            if (price != 0 && price != 1 && price != 2) {
              return formula_default.error.v;
            }
            $.post("/dataqk/tu/api/getstockinfo", {
              "stockCode": stockcode,
              "date": date,
              "price": price,
              type: "2"
            }, function(data) {
              var d = editor_default.deepCopyFlowData(store_default.flowdata);
              formula_default.execFunctionGroup(cell_r, cell_c, data);
              d[cell_r][cell_c] = {
                "v": data,
                "f": cell_fp
              };
              jfrefreshgrid(d, [{"row": [cell_r, cell_r], "column": [cell_c, cell_c]}]);
            });
            return "loading...";
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DATA_CN_STOCK_MIN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var stockcode = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(stockcode)) {
              return stockcode;
            }
            var date = null;
            if (arguments[1] != null) {
              var data_date = arguments[1];
              if (getObjType(data_date) == "array") {
                return formula_default.error.v;
              } else if (getObjType(data_date) == "object" && data_date.startCell != null) {
                if (data_date.data != null && getObjType(data_date.data) != "array" && data_date.data.ct != null && data_date.data.ct.t == "d") {
                  date = update("yyyy-mm-dd", data_date.data.v);
                } else {
                  return formula_default.error.v;
                }
              } else {
                date = data_date;
              }
              if (!isdatetime(date)) {
                return [formula_default.error.v, "\u65E5\u671F\u9519\u8BEF"];
              }
              date = (0, import_dayjs8.default)(date).format("YYYY-MM-DD");
            }
            var price = 0;
            if (arguments[2] != null) {
              price = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(price)) {
                return price;
              }
            }
            if (!isRealNum(price)) {
              return formula_default.error.v;
            }
            price = parseInt(price);
            if (price != 0 && price != 1 && price != 2) {
              return formula_default.error.v;
            }
            $.post("/dataqk/tu/api/getstockinfo", {
              "stockCode": stockcode,
              "date": date,
              "price": price,
              type: "3"
            }, function(data) {
              var d = editor_default.deepCopyFlowData(store_default.flowdata);
              formula_default.execFunctionGroup(cell_r, cell_c, data);
              d[cell_r][cell_c] = {
                "v": data,
                "f": cell_fp
              };
              jfrefreshgrid(d, [{"row": [cell_r, cell_r], "column": [cell_c, cell_c]}]);
            });
            return "loading...";
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DATA_CN_STOCK_VOLUMN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var stockcode = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(stockcode)) {
              return stockcode;
            }
            var date = null;
            if (arguments[1] != null) {
              var data_date = arguments[1];
              if (getObjType(data_date) == "array") {
                return formula_default.error.v;
              } else if (getObjType(data_date) == "object" && data_date.startCell != null) {
                if (data_date.data != null && getObjType(data_date.data) != "array" && data_date.data.ct != null && data_date.data.ct.t == "d") {
                  date = update("yyyy-mm-dd", data_date.data.v);
                } else {
                  return formula_default.error.v;
                }
              } else {
                date = data_date;
              }
              if (!isdatetime(date)) {
                return [formula_default.error.v, "\u65E5\u671F\u9519\u8BEF"];
              }
              date = (0, import_dayjs8.default)(date).format("YYYY-MM-DD");
            }
            var price = 0;
            if (arguments[2] != null) {
              price = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(price)) {
                return price;
              }
            }
            if (!isRealNum(price)) {
              return formula_default.error.v;
            }
            price = parseInt(price);
            if (price != 0 && price != 1 && price != 2) {
              return formula_default.error.v;
            }
            $.post("/dataqk/tu/api/getstockinfo", {
              "stockCode": stockcode,
              "date": date,
              "price": price,
              type: "4"
            }, function(data) {
              var d = editor_default.deepCopyFlowData(store_default.flowdata);
              formula_default.execFunctionGroup(cell_r, cell_c, data);
              d[cell_r][cell_c] = {
                "v": data,
                "f": cell_fp
              };
              jfrefreshgrid(d, [{"row": [cell_r, cell_r], "column": [cell_c, cell_c]}]);
            });
            return "loading...";
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DATA_CN_STOCK_AMOUNT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var stockcode = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(stockcode)) {
              return stockcode;
            }
            var date = null;
            if (arguments[1] != null) {
              var data_date = arguments[1];
              if (getObjType(data_date) == "array") {
                return formula_default.error.v;
              } else if (getObjType(data_date) == "object" && data_date.startCell != null) {
                if (data_date.data != null && getObjType(data_date.data) != "array" && data_date.data.ct != null && data_date.data.ct.t == "d") {
                  date = update("yyyy-mm-dd", data_date.data.v);
                } else {
                  return formula_default.error.v;
                }
              } else {
                date = data_date;
              }
              if (!isdatetime(date)) {
                return [formula_default.error.v, "\u65E5\u671F\u9519\u8BEF"];
              }
              date = (0, import_dayjs8.default)(date).format("YYYY-MM-DD");
            }
            var price = 0;
            if (arguments[2] != null) {
              price = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(price)) {
                return price;
              }
            }
            if (!isRealNum(price)) {
              return formula_default.error.v;
            }
            price = parseInt(price);
            if (price != 0 && price != 1 && price != 2) {
              return formula_default.error.v;
            }
            $.post("/dataqk/tu/api/getstockinfo", {
              "stockCode": stockcode,
              "date": date,
              "price": price,
              type: "5"
            }, function(data) {
              var d = editor_default.deepCopyFlowData(store_default.flowdata);
              formula_default.execFunctionGroup(cell_r, cell_c, data);
              d[cell_r][cell_c] = {
                "v": data,
                "f": cell_fp
              };
              jfrefreshgrid(d, [{"row": [cell_r, cell_r], "column": [cell_c, cell_c]}]);
            });
            return "loading...";
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISDATE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var date = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(date)) {
              return date;
            }
            return isdatetime(date);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SUMIF": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var sum = 0;
            var rangeData = arguments[0].data;
            var rangeRow = arguments[0].rowl;
            var rangeCol = arguments[0].coll;
            var criteria = luckysheet_parseData(arguments[1]);
            rangeData = formula_default.getRangeArray(rangeData)[0];
            if (arguments[2]) {
              var sumRangeData = [];
              var sumRangeStart = arguments[2].startCell;
              var sumRangeRow = arguments[2].rowl;
              var sumRangeCol = arguments[2].coll;
              var sumRangeSheet = arguments[2].sheetName;
              if (rangeRow == sumRangeRow && rangeCol == sumRangeCol) {
                sumRangeData = arguments[2].data;
              } else {
                var row = [], col = [];
                var sumRangeEnd = "";
                var realSumRange = "";
                row[0] = parseInt(sumRangeStart.replace(/[^0-9]/g, "")) - 1;
                col[0] = ABCatNum(sumRangeStart.replace(/[^A-Za-z]/g, ""));
                row[1] = row[0] + rangeRow - 1;
                col[1] = col[0] + rangeCol - 1;
                var real_ABC = chatatABC(col[1]);
                var real_Num = row[1] + 1;
                sumRangeEnd = real_ABC + real_Num;
                realSumRange = sumRangeSheet + "!" + sumRangeStart + ":" + sumRangeEnd;
                sumRangeData = luckysheet_getcelldata(realSumRange).data;
              }
              sumRangeData = formula_default.getRangeArray(sumRangeData)[0];
              for (var i2 = 0; i2 < rangeData.length; i2++) {
                var v = rangeData[i2];
                if (!!v && formula_default.acompareb(v, criteria)) {
                  if (!isRealNum(sumRangeData[i2])) {
                    continue;
                  }
                  sum = luckysheet_calcADPMM(sum, "+", sumRangeData[i2]);
                }
              }
            } else {
              for (var i2 = 0; i2 < rangeData.length; i2++) {
                var v = rangeData[i2];
                if (!!v && formula_default.acompareb(v, criteria)) {
                  if (!isRealNum(v)) {
                    continue;
                  }
                  sum = luckysheet_calcADPMM(sum, "", v);
                }
              }
            }
            return sum;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TAN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            return Math.tan(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TANH": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var e2 = Math.exp(2 * number);
            return (e2 - 1) / (e2 + 1);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "CEILING": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var significance = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(significance)) {
              return significance;
            }
            if (!isRealNum(significance)) {
              return formula_default.error.v;
            }
            significance = parseFloat(significance);
            if (significance == 0) {
              return 0;
            }
            if (number > 0 && significance < 0) {
              return formula_default.error.nm;
            }
            return Math.ceil(number / significance) * significance;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ATAN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            return Math.atan(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ASINH": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            return Math.log(number + Math.sqrt(number * number + 1));
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ABS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            return Math.abs(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ACOS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            if (number < -1 || number > 1) {
              return formula_default.error.nm;
            }
            return Math.acos(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ACOSH": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            if (number < 1) {
              return formula_default.error.nm;
            }
            return Math.log(number + Math.sqrt(number * number - 1));
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MULTINOMIAL": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                dataArr.push(data);
              }
            }
            var sum = 0, divisor = 1;
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              number = parseFloat(number);
              if (number < 0) {
                return formula_default.error.nm;
              }
              sum += number;
              divisor *= func_methods_default.factorial(number);
            }
            return func_methods_default.factorial(sum) / divisor;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ATANH": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            if (number <= -1 || number >= 1) {
              return formula_default.error.nm;
            }
            return Math.log((1 + number) / (1 - number)) / 2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ATAN2": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number_x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number_x)) {
              return number_x;
            }
            if (!isRealNum(number_x)) {
              return formula_default.error.v;
            }
            number_x = parseFloat(number_x);
            var number_y = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(number_y)) {
              return number_y;
            }
            if (!isRealNum(number_y)) {
              return formula_default.error.v;
            }
            number_y = parseFloat(number_y);
            if (number_x == 0 && number_y == 0) {
              return formula_default.error.d;
            }
            return Math.atan2(number_y, number_x);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COUNTBLANK": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data = arguments[0];
            var sum = 0;
            if (getObjType(data) == "object" && data.startCell != null) {
              if (data.data == null) {
                return 1;
              }
              if (getObjType(data.data) == "array") {
                for (var r2 = 0; r2 < data.data.length; r2++) {
                  for (var c2 = 0; c2 < data.data[r2].length; c2++) {
                    if (data.data[r2][c2] == null || isRealNull(data.data[r2][c2].v)) {
                      sum++;
                    }
                  }
                }
              } else {
                if (isRealNull(data.data.v)) {
                  sum++;
                }
              }
            }
            return sum;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COSH": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            return (Math.exp(number) + Math.exp(-number)) / 2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "INT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data = arguments[0];
            if (getObjType(data) == "array") {
              if (getObjType(data[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                if (!isRealNum(data[0][0])) {
                  return formula_default.error.v;
                }
                return Math.floor(parseFloat(data[0][0]));
              } else {
                if (!isRealNum(data[0])) {
                  return formula_default.error.v;
                }
                return Math.floor(parseFloat(data[0]));
              }
            } else if (getObjType(data) == "object" && data.startCell != null) {
              if (data.coll > 1) {
                return formula_default.error.v;
              }
              if (data.rowl > 1) {
                var cellrange = formula_default.getcellrange(data.startCell);
                var str = cellrange.row[0];
                if (window.luckysheetCurrentRow < str || window.luckysheetCurrentRow > str + data.rowl - 1) {
                  return formula_default.error.v;
                }
                var cell = data.data[window.luckysheetCurrentRow - str][0];
              } else {
                var cell = data.data;
              }
              if (cell == null || isRealNull(cell.v)) {
                return 0;
              }
              if (!isRealNum(cell.v)) {
                return formula_default.error.v;
              }
              return Math.floor(parseFloat(cell.v));
            } else {
              if (getObjType(data) == "boolean") {
                if (data.toString().toLowerCase() == "true") {
                  return 1;
                }
                if (data.toString().toLowerCase() == "false") {
                  return 0;
                }
              }
              if (!isRealNum(data)) {
                return formula_default.error.v;
              }
              return Math.floor(parseFloat(data));
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISEVEN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseInt(number);
            return Math.abs(number) & 1 ? false : true;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISODD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseInt(number);
            return Math.abs(number) & 1 ? true : false;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LCM": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var o = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array") {
                  if (!func_methods_default.isDyadicArr(data)) {
                    return formula_default.error.v;
                  }
                  o = o.concat(func_methods_default.getDataArr(data));
                } else {
                  o = o.concat(data);
                }
              } else if (getObjType(data) == "object" && data.startCell != null) {
                o = o.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                o.push(data);
              }
            }
            for (var y = 0; y < o.length; y++) {
              var number = o[y];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              number = parseInt(number);
              if (number < 0) {
                return formula_default.error.nm;
              }
              o[y] = number;
            }
            for (var i2, j, n, d, r2 = 1; (n = o.pop()) !== void 0; ) {
              if (n == 0) {
                r2 = 0;
              }
              while (n > 1) {
                if (n % 2) {
                  for (i2 = 3, j = Math.floor(Math.sqrt(n)); i2 <= j && n % i2; i2 += 2) {
                  }
                  d = i2 <= j ? i2 : n;
                } else {
                  d = 2;
                }
                for (n /= d, r2 *= d, i2 = o.length; i2; o[--i2] % d === 0 && (o[i2] /= d) === 1 && o.splice(i2, 1)) {
                }
              }
            }
            if (r2 >= Math.pow(2, 53)) {
              return formula_default.error.nm;
            }
            return r2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            if (number <= 0) {
              return formula_default.error.nm;
            }
            return Math.log(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LOG": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            if (number <= 0) {
              return formula_default.error.nm;
            }
            if (arguments.length == 2) {
              var base = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(base)) {
                return base;
              }
              if (!isRealNum(base)) {
                return formula_default.error.v;
              }
              base = parseFloat(base);
              if (base <= 0) {
                return formula_default.error.nm;
              }
            } else {
              var base = 10;
            }
            return Math.log(number) / Math.log(base);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LOG10": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            if (number <= 0) {
              return formula_default.error.nm;
            }
            return Math.log(number) / Math.log(10);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MOD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var divisor = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(divisor)) {
              return divisor;
            }
            if (!isRealNum(divisor)) {
              return formula_default.error.v;
            }
            divisor = parseFloat(divisor);
            if (divisor == 0) {
              return formula_default.error.d;
            }
            var modulus = Math.abs(number % divisor);
            return divisor > 0 ? modulus : -modulus;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MROUND": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var multiple = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(multiple)) {
              return multiple;
            }
            if (!isRealNum(multiple)) {
              return formula_default.error.v;
            }
            multiple = parseFloat(multiple);
            if (number * multiple < 0) {
              return formula_default.error.nm;
            }
            return Math.round(number / multiple) * multiple;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ODD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var temp = Math.ceil(Math.abs(number));
            temp = temp & 1 ? temp : temp + 1;
            return number >= 0 ? temp : -temp;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SUMSQ": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                dataArr.push(data);
              }
            }
            var sum = 0;
            if (dataArr.length > 0) {
              for (var i2 = 0; i2 < dataArr.length; i2++) {
                var number = dataArr[i2];
                if (!isRealNum(number)) {
                  return formula_default.error.v;
                }
                number = parseFloat(number);
                sum += number * number;
              }
            }
            return sum;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COMBIN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseInt(number);
            var number_chosen = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(number_chosen)) {
              return number_chosen;
            }
            if (!isRealNum(number_chosen)) {
              return formula_default.error.v;
            }
            number_chosen = parseInt(number_chosen);
            if (number < 0 || number_chosen < 0 || number < number_chosen) {
              return formula_default.error.nm;
            }
            return func_methods_default.factorial(number) / (func_methods_default.factorial(number_chosen) * func_methods_default.factorial(number - number_chosen));
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SUBTOTAL": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            let compute = function(function_num2) {
              switch (function_num2) {
                case 1:
                case 101:
                  return window.luckysheet_function.AVERAGE.f.apply(window.luckysheet_function.AVERAGE, arr);
                  break;
                case 2:
                case 102:
                  return window.luckysheet_function.COUNT.f.apply(window.luckysheet_function.COUNT, arr);
                  break;
                case 3:
                case 103:
                  return window.luckysheet_function.COUNTA.f.apply(window.luckysheet_function.COUNTA, arr);
                  break;
                case 4:
                case 104:
                  return window.luckysheet_function.MAX.f.apply(window.luckysheet_function.MAX, arr);
                  break;
                case 5:
                case 105:
                  return window.luckysheet_function.MIN.f.apply(window.luckysheet_function.MIN, arr);
                  break;
                case 6:
                case 106:
                  return window.luckysheet_function.PRODUCT.f.apply(window.luckysheet_function.PRODUCT, arr);
                  break;
                case 7:
                case 107:
                  return window.luckysheet_function.STDEVA.f.apply(window.luckysheet_function.STDEVA, arr);
                  break;
                case 8:
                case 108:
                  return window.luckysheet_function.STDEVP.f.apply(window.luckysheet_function.STDEVP, arr);
                  break;
                case 9:
                case 109:
                  return window.luckysheet_function.SUM.f.apply(window.luckysheet_function.SUM, arr);
                  break;
                case 10:
                case 110:
                  return window.luckysheet_function.VAR_S.f.apply(window.luckysheet_function.VAR_S, arr);
                  break;
                case 11:
                case 111:
                  return window.luckysheet_function.VAR_P.f.apply(window.luckysheet_function.VAR_P, arr);
                  break;
              }
            };
            var data_function_num = arguments[0];
            var function_num;
            if (getObjType(data_function_num) == "array") {
              if (getObjType(data_function_num[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_function_num)) {
                  return formula_default.error.v;
                }
                function_num = [];
                for (var i2 = 0; i2 < data_function_num.length; i2++) {
                  var rowArr = [];
                  for (var j = 0; j < data_function_num[i2].length; j++) {
                    rowArr.push(data_function_num[i2][j]);
                  }
                  function_num.push(rowArr);
                }
              } else {
                function_num = [];
                for (var i2 = 0; i2 < data_function_num.length; i2++) {
                  function_num.push(data_function_num[i2]);
                }
              }
            } else if (getObjType(data_function_num) == "object" && data_function_num.startCell != null) {
              function_num = func_methods_default.getFirstValue(data_function_num);
            } else {
              function_num = data_function_num;
            }
            var arr = Array.prototype.slice.apply(arguments);
            arr.shift();
            if (getObjType(function_num) == "array") {
              var result = [];
              if (getObjType(function_num[0]) == "array") {
                for (var i2 = 0; i2 < function_num.length; i2++) {
                  var rowArr = [];
                  for (var j = 0; j < function_num[i2].length; j++) {
                    var value = function_num[i2][j];
                    if (valueIsError(value)) {
                      rowArr.push(value);
                    } else if (!isRealNum(value)) {
                      rowArr.push(formula_default.error.v);
                    } else {
                      value = parseInt(value);
                      if (value < 1 || value > 111 || value > 11 && value < 101) {
                        rowArr.push(formula_default.error.v);
                      } else {
                        rowArr.push(compute(value));
                      }
                    }
                  }
                  result.push(rowArr);
                }
              } else {
                for (var i2 = 0; i2 < function_num.length; i2++) {
                  var value = function_num[i2];
                  if (valueIsError(value)) {
                    result.push(value);
                  } else if (!isRealNum(value)) {
                    result.push(formula_default.error.v);
                  } else {
                    value = parseInt(value);
                    if (value < 1 || value > 111 || value > 11 && value < 101) {
                      result.push(formula_default.error.v);
                    } else {
                      result.push(compute(value));
                    }
                  }
                }
              }
              return result;
            } else {
              if (valueIsError(function_num)) {
                return function_num;
              }
              if (!isRealNum(function_num)) {
                return formula_default.error.v;
              }
              function_num = parseInt(function_num);
              if (function_num < 1 || function_num > 111 || function_num > 11 && function_num < 101) {
                return formula_default.error.v;
              }
              return compute(function_num);
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ASIN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            if (number < -1 || number > 1) {
              return formula_default.error.nm;
            }
            return Math.asin(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COUNTIF": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            let getCriteriaResult = function(range3, criter) {
              if (!/[<>=!*?]/.test(criter)) {
                criter = '=="' + criter + '"';
              }
              criter = criter.replace("<>", "!=");
              var matches = 0;
              if (getObjType(range3) == "array") {
                for (var i3 = 0; i3 < range3.length; i3++) {
                  for (var j2 = 0; j2 < range3[i3].length; j2++) {
                    if (range3[i3][j2] != null && !isRealNull(range3[i3][j2].v)) {
                      var value = range3[i3][j2].v;
                      if (criter.indexOf("*") > -1 || criter.indexOf("?") > -1) {
                        if (formula_default.isWildcard(value, criter)) {
                          matches++;
                        }
                      } else {
                        if (typeof value !== "string") {
                          if (new Function("return " + value + criter)()) {
                            matches++;
                          }
                        } else {
                          if (new Function('return "' + value + '"' + criter)()) {
                            matches++;
                          }
                        }
                      }
                    }
                  }
                }
              } else {
                if (range3 != null && !isRealNull(range3.v)) {
                  var value = range3.v;
                  if (criter.indexOf("*") > -1 || criter.indexOf("?") > -1) {
                    if (formula_default.isWildcard(value, criter)) {
                      matches++;
                    }
                  } else {
                    if (typeof value !== "string") {
                      if (new Function("return " + value + criter)()) {
                        matches++;
                      }
                    } else {
                      if (new Function('return "' + value + '"' + criter)()) {
                        matches++;
                      }
                    }
                  }
                }
              }
              return matches;
            };
            var data_range = arguments[0];
            var range2;
            if (getObjType(data_range) == "object" && data_range.startCell != null) {
              range2 = data_range.data;
            } else {
              return formula_default.error.v;
            }
            var data_criteria = arguments[1];
            var criteria;
            if (getObjType(data_criteria) == "array") {
              criteria = [];
              if (getObjType(data_criteria[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_criteria)) {
                  return formula_default.error.v;
                }
                for (var i2 = 0; i2 < data_criteria.length; i2++) {
                  var rowArr = [];
                  for (var j = 0; j < data_criteria[i2].length; j++) {
                    rowArr.push(data_criteria[i2][j]);
                  }
                  criteria.push(rowArr);
                }
              } else {
                for (var i2 = 0; i2 < data_criteria.length; i2++) {
                  criteria.push(data_criteria[i2]);
                }
              }
            } else if (getObjType(data_criteria) == "object" && data_criteria.startCell != null) {
              if (data_criteria.rowl > 1 || data_criteria.coll > 1) {
                return 0;
              }
              criteria = data_criteria.data.v;
            } else {
              criteria = data_criteria;
            }
            if (getObjType(criteria) == "array") {
              var result = [];
              if (getObjType(criteria[0]) == "array") {
                for (var i2 = 0; i2 < criteria.length; i2++) {
                  var rowArr = [];
                  for (var j = 0; j < criteria[i2].length; j++) {
                    rowArr.push(getCriteriaResult(range2, criteria[i2][j]));
                  }
                  result.push(rowArr);
                }
              } else {
                for (var i2 = 0; i2 < criteria.length; i2++) {
                  result.push(getCriteriaResult(range2, criteria[i2]));
                }
              }
              return result;
            } else {
              return getCriteriaResult(range2, criteria);
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "RADIANS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            return number * Math.PI / 180;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "RAND": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          try {
            return Math.floor(Math.random() * 1e9) / 1e9;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COUNTUNIQUE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "text", true));
              } else {
                dataArr.push(data);
              }
            }
            return window.luckysheet_function.UNIQUE.f(dataArr);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DEGREES": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            return number * 180 / Math.PI;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ERFC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            return jStat.erfc(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "EVEN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var temp = Math.ceil(Math.abs(number));
            temp = temp & 1 ? temp + 1 : temp;
            return number > 0 ? temp : -temp;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "EXP": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            return Math.exp(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "FACT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              if (getObjType(number) == "boolean") {
                if (number.toString().toLowerCase() == "true") {
                  number = 1;
                } else if (number.toString().toLowerCase() == "false") {
                  number = 0;
                }
              } else {
                return formula_default.error.v;
              }
            }
            number = parseInt(number);
            if (number < 0) {
              return formula_default.error.nm;
            }
            return func_methods_default.factorial(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "FACTDOUBLE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              if (getObjType(number) == "boolean") {
                if (number.toString().toLowerCase() == "true") {
                  number = 1;
                } else if (number.toString().toLowerCase() == "false") {
                  number = 0;
                }
              } else {
                return formula_default.error.v;
              }
            }
            number = parseInt(number);
            if (number < 0) {
              return formula_default.error.nm;
            }
            return func_methods_default.factorialDouble(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PI": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          try {
            return Math.PI;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "FLOOR": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var significance = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(significance)) {
              return significance;
            }
            if (!isRealNum(significance)) {
              return formula_default.error.v;
            }
            significance = parseFloat(significance);
            if (significance == 0) {
              return formula_default.error.d;
            }
            if (number > 0 && significance < 0) {
              return formula_default.error.nm;
            }
            var precision = -Math.floor(Math.log(Math.abs(significance)) / Math.log(10));
            if (number >= 0) {
              return Math.floor(number / significance) * significance * Math.pow(10, precision) / Math.pow(10, precision);
            } else {
              return -(Math.ceil(Math.abs(number) / significance) * significance * Math.pow(10, precision)) / Math.pow(10, precision);
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "GCD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, false));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", false));
              } else {
                dataArr.push(data);
              }
            }
            if (!isRealNum(dataArr[0])) {
              return formula_default.error.v;
            }
            var x = parseInt(dataArr[0]);
            if (x < 0 || x >= Math.pow(2, 53)) {
              return formula_default.error.nm;
            }
            for (var i2 = 1; i2 < dataArr.length; i2++) {
              var y = dataArr[i2];
              if (!isRealNum(y)) {
                return formula_default.error.v;
              }
              y = parseInt(y);
              if (y < 0 || y >= Math.pow(2, 53)) {
                return formula_default.error.nm;
              }
              while (x && y) {
                if (x > y) {
                  x %= y;
                } else {
                  y %= x;
                }
              }
              x += y;
            }
            return x;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "RANDBETWEEN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var bottom = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(bottom)) {
              return bottom;
            }
            if (!isRealNum(bottom)) {
              return formula_default.error.v;
            }
            bottom = parseInt(bottom);
            var top = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(top)) {
              return top;
            }
            if (!isRealNum(top)) {
              return formula_default.error.v;
            }
            top = parseInt(top);
            if (bottom > top) {
              return formula_default.error.nm;
            }
            return bottom + Math.ceil((top - bottom + 1) * Math.random()) - 1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ROUND": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var digits = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(digits)) {
              return digits;
            }
            if (!isRealNum(digits)) {
              return formula_default.error.v;
            }
            digits = parseInt(digits);
            var sign = number > 0 ? 1 : -1;
            return sign * Math.round(Math.abs(number) * Math.pow(10, digits)) / Math.pow(10, digits);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ROUNDDOWN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var digits = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(digits)) {
              return digits;
            }
            if (!isRealNum(digits)) {
              return formula_default.error.v;
            }
            digits = parseInt(digits);
            var sign = number > 0 ? 1 : -1;
            return sign * Math.floor(Math.abs(number) * Math.pow(10, digits)) / Math.pow(10, digits);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ROUNDUP": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var digits = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(digits)) {
              return digits;
            }
            if (!isRealNum(digits)) {
              return formula_default.error.v;
            }
            digits = parseInt(digits);
            var sign = number > 0 ? 1 : -1;
            return sign * Math.ceil(Math.abs(number) * Math.pow(10, digits)) / Math.pow(10, digits);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SERIESSUM": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            var n = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(n)) {
              return n;
            }
            if (!isRealNum(n)) {
              return formula_default.error.v;
            }
            n = parseFloat(n);
            var m = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(m)) {
              return m;
            }
            if (!isRealNum(m)) {
              return formula_default.error.v;
            }
            m = parseFloat(m);
            var data_coefficients = arguments[3];
            var coefficients = [];
            if (getObjType(data_coefficients) == "array") {
              if (getObjType(data_coefficients[0]) == "array" && !func_methods_default.isDyadicArr(data_coefficients)) {
                return formula_default.error.v;
              }
              coefficients = coefficients.concat(func_methods_default.getDataArr(data_coefficients, false));
            } else if (getObjType(data_coefficients) == "object" && data_coefficients.startCell != null) {
              coefficients = coefficients.concat(func_methods_default.getCellDataArr(data_coefficients, "number", false));
            } else {
              coefficients.push(data_coefficients);
            }
            if (!isRealNum(coefficients[0])) {
              return formula_default.error.v;
            }
            var result = parseFloat(coefficients[0]) * Math.pow(x, n);
            for (var i2 = 1; i2 < coefficients.length; i2++) {
              var number = coefficients[i2];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              number = parseFloat(number);
              result += number * Math.pow(x, n + i2 * m);
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SIGN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            if (number > 0) {
              return 1;
            } else if (number == 0) {
              return 0;
            } else if (number < 0) {
              return -1;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SIN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            return Math.sin(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SINH": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            return (Math.exp(number) - Math.exp(-number)) / 2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SQRT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            if (number < 0) {
              return formula_default.error.nm;
            }
            return Math.sqrt(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SQRTPI": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            if (number < 0) {
              return formula_default.error.nm;
            }
            return Math.sqrt(number * Math.PI);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "GAMMALN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            if (number <= 0) {
              return formula_default.error.nm;
            }
            return jStat.gammaln(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            return Math.cos(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TRUNC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            if (arguments.length == 2) {
              var digits = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(digits)) {
                return digits;
              }
              if (!isRealNum(digits)) {
                return formula_default.error.v;
              }
              digits = parseInt(digits);
            } else {
              var digits = 0;
            }
            var sign = number > 0 ? 1 : -1;
            return sign * Math.floor(Math.abs(number) * Math.pow(10, digits)) / Math.pow(10, digits);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "QUOTIENT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var numerator = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(numerator)) {
              return numerator;
            }
            if (!isRealNum(numerator)) {
              return formula_default.error.v;
            }
            numerator = parseFloat(numerator);
            var denominator = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(denominator)) {
              return denominator;
            }
            if (!isRealNum(denominator)) {
              return formula_default.error.v;
            }
            denominator = parseFloat(denominator);
            if (denominator == 0) {
              return formula_default.error.d;
            }
            return parseInt(numerator / denominator, 10);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "POWER": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var power = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(power)) {
              return power;
            }
            if (!isRealNum(power)) {
              return formula_default.error.v;
            }
            power = parseFloat(power);
            if (number == 0 && power == 0) {
              return formula_default.error.nm;
            }
            if (number < 0 && power.toString().indexOf(".") > -1) {
              return formula_default.error.nm;
            }
            return Math.pow(number, power);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SUMIFS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var sum = 0;
            var args = arguments;
            luckysheet_getValue(args);
            var rangeData = formula_default.getRangeArray(args[0])[0];
            var results = new Array(rangeData.length);
            for (var i2 = 0; i2 < results.length; i2++) {
              results[i2] = true;
            }
            for (var i2 = 1; i2 < args.length; i2 += 2) {
              var range2 = formula_default.getRangeArray(args[i2])[0];
              var criteria = args[i2 + 1];
              for (var j = 0; j < range2.length; j++) {
                var v = range2[j];
                results[j] = results[j] && !!v && formula_default.acompareb(v, criteria);
              }
            }
            for (var i2 = 0; i2 < rangeData.length; i2++) {
              if (results[i2]) {
                sum = luckysheet_calcADPMM(sum, "+", rangeData[i2]);
              }
            }
            return sum;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COUNTIFS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var args = arguments;
            luckysheet_getValue(args);
            var results = new Array(formula_default.getRangeArray(args[0])[0].length);
            for (var i2 = 0; i2 < results.length; i2++) {
              results[i2] = true;
            }
            for (var i2 = 0; i2 < args.length; i2 += 2) {
              var range2 = formula_default.getRangeArray(args[i2])[0];
              var criteria = args[i2 + 1];
              for (var j = 0; j < range2.length; j++) {
                var v = range2[j];
                results[j] = results[j] && !!v && formula_default.acompareb(v, criteria);
              }
            }
            var result = 0;
            for (var i2 = 0; i2 < results.length; i2++) {
              if (results[i2]) {
                result++;
              }
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PRODUCT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                dataArr.push(data);
              }
            }
            var result = 1;
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              number = parseFloat(number);
              result *= number;
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "HARMEAN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                dataArr.push(data);
              }
            }
            var den = 0, len = 0;
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              number = parseFloat(number);
              if (number <= 0) {
                return formula_default.error.nm;
              }
              den += 1 / number;
              len++;
            }
            return len / den;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "HYPGEOMDIST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            let pdf = function(x, n, M, N) {
              var a = func_methods_default.factorial(M) / (func_methods_default.factorial(x) * func_methods_default.factorial(M - x));
              var b = func_methods_default.factorial(N - M) / (func_methods_default.factorial(n - x) * func_methods_default.factorial(N - M - n + x));
              var c2 = func_methods_default.factorial(N) / (func_methods_default.factorial(n) * func_methods_default.factorial(N - n));
              return a * b / c2;
            }, cdf = function(x, n, M, N) {
              var sum = 0;
              for (var i3 = 0; i3 <= x; i3++) {
                sum += pdf(i3, n, M, N);
              }
              return sum;
            };
            var sample_s = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(sample_s)) {
              return sample_s;
            }
            if (!isRealNum(sample_s)) {
              return formula_default.error.v;
            }
            sample_s = parseInt(sample_s);
            var number_sample = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(number_sample)) {
              return number_sample;
            }
            if (!isRealNum(number_sample)) {
              return formula_default.error.v;
            }
            number_sample = parseInt(number_sample);
            var population_s = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(population_s)) {
              return population_s;
            }
            if (!isRealNum(population_s)) {
              return formula_default.error.v;
            }
            population_s = parseInt(population_s);
            var number_pop = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(number_pop)) {
              return number_pop;
            }
            if (!isRealNum(number_pop)) {
              return formula_default.error.v;
            }
            number_pop = parseInt(number_pop);
            var cumulative = func_methods_default.getCellBoolen(arguments[4]);
            if (valueIsError(cumulative)) {
              return cumulative;
            }
            if (sample_s < 0 || sample_s > Math.min(number_sample, population_s) || sample_s < Math.max(0, number_sample - number_pop + population_s)) {
              return formula_default.error.nm;
            }
            if (number_sample <= 0 || number_sample > number_pop) {
              return formula_default.error.nm;
            }
            if (population_s <= 0 || population_s > number_pop) {
              return formula_default.error.nm;
            }
            if (number_pop <= 0) {
              return formula_default.error.nm;
            }
            return cumulative ? cdf(sample_s, number_sample, population_s, number_pop) : pdf(sample_s, number_sample, population_s, number_pop);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "INTERCEPT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = 0;
            var data_known_y = arguments[0];
            var known_y = [];
            if (getObjType(data_known_y) == "array") {
              if (getObjType(data_known_y[0]) == "array" && !func_methods_default.isDyadicArr(data_known_y)) {
                return formula_default.error.v;
              }
              known_y = known_y.concat(func_methods_default.getDataArr(data_known_y, false));
            } else if (getObjType(data_known_y) == "object" && data_known_y.startCell != null) {
              known_y = known_y.concat(func_methods_default.getCellDataArr(data_known_y, "text", false));
            } else {
              known_y.push(data_known_y);
            }
            var data_known_x = arguments[1];
            var known_x = [];
            if (getObjType(data_known_x) == "array") {
              if (getObjType(data_known_x[0]) == "array" && !func_methods_default.isDyadicArr(data_known_x)) {
                return formula_default.error.v;
              }
              known_x = known_x.concat(func_methods_default.getDataArr(data_known_x, false));
            } else if (getObjType(data_known_x) == "object" && data_known_x.startCell != null) {
              known_x = known_x.concat(func_methods_default.getCellDataArr(data_known_x, "text", false));
            } else {
              known_x.push(data_known_x);
            }
            if (known_y.length != known_x.length) {
              return formula_default.error.na;
            }
            var data_y = [], data_x = [];
            for (var i2 = 0; i2 < known_y.length; i2++) {
              var num_y = known_y[i2];
              var num_x = known_x[i2];
              if (isRealNum(num_y) && isRealNum(num_x)) {
                data_y.push(parseFloat(num_y));
                data_x.push(parseFloat(num_x));
              }
            }
            if (func_methods_default.variance_s(data_x) == 0) {
              return formula_default.error.d;
            }
            var xmean = jStat.mean(data_x);
            var ymean = jStat.mean(data_y);
            var n = data_x.length;
            var num = 0;
            var den = 0;
            for (var i2 = 0; i2 < n; i2++) {
              num += (data_x[i2] - xmean) * (data_y[i2] - ymean);
              den += Math.pow(data_x[i2] - xmean, 2);
            }
            var b = num / den;
            var a = ymean - b * xmean;
            return a + b * x;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "KURT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "text", true));
              } else {
                dataArr.push(data);
              }
            }
            var dataArr_n = [];
            for (var j = 0; j < dataArr.length; j++) {
              var number = dataArr[j];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              number = parseFloat(number);
              dataArr_n.push(number);
            }
            if (dataArr_n.length < 4 || func_methods_default.standardDeviation_s(dataArr_n) == 0) {
              return formula_default.error.d;
            }
            var mean = jStat.mean(dataArr_n);
            var n = dataArr_n.length;
            var sigma = 0;
            for (var i2 = 0; i2 < n; i2++) {
              sigma += Math.pow(dataArr_n[i2] - mean, 4);
            }
            sigma = sigma / Math.pow(jStat.stdev(dataArr_n, true), 4);
            return n * (n + 1) / ((n - 1) * (n - 2) * (n - 3)) * sigma - 3 * (n - 1) * (n - 1) / ((n - 2) * (n - 3));
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LARGE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            if (getObjType(arguments[0]) == "array") {
              if (getObjType(arguments[0][0]) == "array" && !func_methods_default.isDyadicArr(arguments[0])) {
                return formula_default.error.v;
              }
              dataArr = dataArr.concat(func_methods_default.getDataArr(arguments[0], true));
            } else if (getObjType(arguments[0]) == "object" && arguments[0].startCell != null) {
              dataArr = dataArr.concat(func_methods_default.getCellDataArr(arguments[0], "text", true));
            } else {
              dataArr.push(arguments[0]);
            }
            var dataArr_n = [];
            for (var j = 0; j < dataArr.length; j++) {
              var number = dataArr[j];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              number = parseFloat(number);
              dataArr_n.push(number);
            }
            var n;
            if (getObjType(arguments[1]) == "array") {
              if (getObjType(arguments[1][0]) == "array" && !func_methods_default.isDyadicArr(arguments[1])) {
                return formula_default.error.v;
              }
              n = func_methods_default.getDataArr(arguments[1]);
            } else if (getObjType(arguments[1]) == "object" && arguments[1].startCell != null) {
              if (arguments[1].rowl > 1 || arguments[1].coll > 1) {
                return formula_default.error.v;
              }
              var cell = arguments[1].data;
              if (cell == null || isRealNull(cell.v)) {
                var n = 0;
              } else {
                var n = cell.v;
              }
            } else {
              n = arguments[1];
            }
            if (getObjType(n) == "array") {
              if (dataArr_n.length == 0) {
                return formula_default.error.nm;
              }
              var result = [];
              for (var i2 = 0; i2 < n.length; i2++) {
                if (!isRealNum(n[i2])) {
                  result.push(formula_default.error.v);
                  continue;
                }
                n[i2] = Math.ceil(parseFloat(n[i2]));
                if (n[i2] <= 0 || n[i2] > dataArr_n.length) {
                  result.push(formula_default.error.nm);
                  continue;
                }
                result.push(dataArr.sort(function(a, b) {
                  return b - a;
                })[n[i2] - 1]);
              }
              return result;
            } else {
              if (!isRealNum(n)) {
                return formula_default.error.v;
              }
              n = Math.ceil(parseFloat(n));
              if (dataArr_n.length == 0) {
                return formula_default.error.nm;
              }
              if (n <= 0 || n > dataArr_n.length) {
                return formula_default.error.nm;
              }
              return dataArr.sort(function(a, b) {
                return b - a;
              })[n - 1];
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "STDEVA": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, false));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "text", false));
              } else {
                dataArr.push(data);
              }
            }
            var dataArr_n = [];
            for (var j = 0; j < dataArr.length; j++) {
              var number = dataArr[j];
              if (!isRealNum(number)) {
                if (number.toString().toLowerCase() == "true") {
                  number = 1;
                } else {
                  number = 0;
                }
              } else {
                number = parseFloat(number);
              }
              dataArr_n.push(number);
            }
            if (dataArr_n.length == 0) {
              return 0;
            }
            if (dataArr_n.length == 1) {
              return formula_default.error.d;
            }
            return func_methods_default.standardDeviation_s(dataArr_n);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "STDEVP": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "text", true));
              } else {
                dataArr.push(data);
              }
            }
            var dataArr_n = [];
            for (var j = 0; j < dataArr.length; j++) {
              var number = dataArr[j];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              number = parseFloat(number);
              dataArr_n.push(number);
            }
            if (dataArr_n.length == 0) {
              return 0;
            }
            if (dataArr_n.length == 1) {
              return formula_default.error.d;
            }
            return func_methods_default.standardDeviation(dataArr_n);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "GEOMEAN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "text", true));
              } else {
                if (getObjType(data) == "boolean") {
                  if (data.toString().toLowerCase() == "true") {
                    dataArr.push(1);
                  } else if (data.toString().toLowerCase() == "false") {
                    dataArr.push(0);
                  }
                } else if (isRealNum(data)) {
                  dataArr.push(data);
                } else {
                  return formula_default.error.v;
                }
              }
            }
            var dataArr_n = [];
            for (var j = 0; j < dataArr.length; j++) {
              var number = dataArr[j];
              if (!isRealNum(number)) {
                continue;
              }
              number = parseFloat(number);
              if (number <= 0) {
                return formula_default.error.nm;
              }
              dataArr_n.push(number);
            }
            if (dataArr_n.length == 0) {
              return formula_default.error.nm;
            }
            return jStat.geomean(dataArr_n);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "RANK_EQ": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var data_ref = arguments[1];
            var ref = [];
            if (getObjType(data_ref) == "array") {
              if (getObjType(data_ref[0]) == "array" && !func_methods_default.isDyadicArr(data_ref)) {
                return formula_default.error.v;
              }
              ref = ref.concat(func_methods_default.getDataArr(data_ref, true));
            } else if (getObjType(data_ref) == "object" && data_ref.startCell != null) {
              ref = ref.concat(func_methods_default.getCellDataArr(data_ref, "number", true));
            } else {
              ref.push(data_ref);
            }
            var ref_n = [];
            for (var j = 0; j < ref.length; j++) {
              var num = ref[j];
              if (!isRealNum(num)) {
                return formula_default.error.v;
              }
              num = parseFloat(num);
              ref_n.push(num);
            }
            if (arguments.length == 3) {
              var order = func_methods_default.getCellBoolen(arguments[2]);
              if (valueIsError(order)) {
                return order;
              }
            } else {
              var order = false;
            }
            var sort = order ? function(a, b) {
              return a - b;
            } : function(a, b) {
              return b - a;
            };
            ref_n = ref_n.sort(sort);
            var index2 = ref_n.indexOf(number);
            if (index2 == -1) {
              return formula_default.error.na;
            } else {
              return index2 + 1;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "RANK_AVG": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var data_ref = arguments[1];
            var ref = [];
            if (getObjType(data_ref) == "array") {
              if (getObjType(data_ref[0]) == "array" && !func_methods_default.isDyadicArr(data_ref)) {
                return formula_default.error.v;
              }
              ref = ref.concat(func_methods_default.getDataArr(data_ref, true));
            } else if (getObjType(data_ref) == "object" && data_ref.startCell != null) {
              ref = ref.concat(func_methods_default.getCellDataArr(data_ref, "number", true));
            } else {
              ref.push(data_ref);
            }
            var ref_n = [];
            for (var j = 0; j < ref.length; j++) {
              var num = ref[j];
              if (!isRealNum(num)) {
                return formula_default.error.v;
              }
              num = parseFloat(num);
              ref_n.push(num);
            }
            if (arguments.length == 3) {
              var order = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(order)) {
                return order;
              }
              if (getObjType(order) == "boolean") {
              } else if (getObjType(order) == "string" && (order.toLowerCase() == "true" || order.toLowerCase() == "false")) {
                if (order.toLowerCase() == "true") {
                  order = true;
                }
                if (order.toLowerCase() == "false") {
                  order = false;
                }
              } else if (isRealNum(order)) {
                order = parseFloat(order);
                order = order == 0 ? false : true;
              } else {
                return formula_default.error.v;
              }
            } else {
              var order = false;
            }
            var sort = order ? function(a, b) {
              return a - b;
            } : function(a, b) {
              return b - a;
            };
            ref_n = ref_n.sort(sort);
            var count = 0;
            for (var i2 = 0; i2 < ref_n.length; i2++) {
              if (ref_n[i2] == number) {
                count++;
              }
            }
            return count > 1 ? (2 * ref_n.indexOf(number) + count + 1) / 2 : ref_n.indexOf(number) + 1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PERCENTRANK_EXC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_ref = arguments[0];
            var ref = [];
            if (getObjType(data_ref) == "array") {
              if (getObjType(data_ref[0]) == "array" && !func_methods_default.isDyadicArr(data_ref)) {
                return formula_default.error.v;
              }
              ref = ref.concat(func_methods_default.getDataArr(data_ref, true));
            } else if (getObjType(data_ref) == "object" && data_ref.startCell != null) {
              ref = ref.concat(func_methods_default.getCellDataArr(data_ref, "number", true));
            } else {
              ref.push(data_ref);
            }
            var ref_n = [];
            for (var j = 0; j < ref.length; j++) {
              var number = ref[j];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              number = parseFloat(number);
              ref_n.push(number);
            }
            var x = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            if (arguments.length == 3) {
              var significance = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(significance)) {
                return significance;
              }
              if (!isRealNum(significance)) {
                return formula_default.error.v;
              }
              significance = parseInt(significance);
            } else {
              var significance = 3;
            }
            if (ref_n.length == 0) {
              return formula_default.error.nm;
            }
            if (significance < 1) {
              return formula_default.error.nm;
            }
            if (ref_n.length == 1 && ref_n[0] == x) {
              return 1;
            }
            ref_n = ref_n.sort(function(a, b) {
              return a - b;
            });
            var uniques = window.luckysheet_function.UNIQUE.f(ref_n)[0];
            var n = ref_n.length;
            var m = uniques.length;
            var power = Math.pow(10, significance);
            var result = 0;
            var match = false;
            var i2 = 0;
            while (!match && i2 < m) {
              if (x === uniques[i2]) {
                result = (ref_n.indexOf(uniques[i2]) + 1) / (n + 1);
                match = true;
              } else if (x >= uniques[i2] && (x < uniques[i2 + 1] || i2 === m - 1)) {
                result = (ref_n.lastIndexOf(uniques[i2]) + 1 + (x - uniques[i2]) / (uniques[i2 + 1] - uniques[i2])) / (n + 1);
                match = true;
              }
              i2++;
            }
            if (isNaN(result)) {
              return formula_default.error.na;
            } else {
              return Math.floor(result * power) / power;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PERCENTRANK_INC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_ref = arguments[0];
            var ref = [];
            if (getObjType(data_ref) == "array") {
              if (getObjType(data_ref[0]) == "array" && !func_methods_default.isDyadicArr(data_ref)) {
                return formula_default.error.v;
              }
              ref = ref.concat(func_methods_default.getDataArr(data_ref, true));
            } else if (getObjType(data_ref) == "object" && data_ref.startCell != null) {
              ref = ref.concat(func_methods_default.getCellDataArr(data_ref, "number", true));
            } else {
              ref.push(data_ref);
            }
            var ref_n = [];
            for (var j = 0; j < ref.length; j++) {
              var number = ref[j];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              number = parseFloat(number);
              ref_n.push(number);
            }
            var x = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            if (arguments.length == 3) {
              var significance = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(significance)) {
                return significance;
              }
              if (!isRealNum(significance)) {
                return formula_default.error.v;
              }
              significance = parseInt(significance);
            } else {
              var significance = 3;
            }
            if (ref_n.length == 0) {
              return formula_default.error.nm;
            }
            if (significance < 1) {
              return formula_default.error.nm;
            }
            if (ref_n.length == 1 && ref_n[0] == x) {
              return 1;
            }
            ref_n = ref_n.sort(function(a, b) {
              return a - b;
            });
            var uniques = window.luckysheet_function.UNIQUE.f(ref_n)[0];
            var n = ref_n.length;
            var m = uniques.length;
            var power = Math.pow(10, significance);
            var result = 0;
            var match = false;
            var i2 = 0;
            while (!match && i2 < m) {
              if (x === uniques[i2]) {
                result = ref_n.indexOf(uniques[i2]) / (n - 1);
                match = true;
              } else if (x >= uniques[i2] && (x < uniques[i2 + 1] || i2 === m - 1)) {
                result = (ref_n.lastIndexOf(uniques[i2]) + (x - uniques[i2]) / (uniques[i2 + 1] - uniques[i2])) / (n - 1);
                match = true;
              }
              i2++;
            }
            if (isNaN(result)) {
              return formula_default.error.na;
            } else {
              return Math.floor(result * power) / power;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "FORECAST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            var data_known_y = arguments[1];
            var known_y = [];
            if (getObjType(data_known_y) == "array") {
              if (getObjType(data_known_y[0]) == "array" && !func_methods_default.isDyadicArr(data_known_y)) {
                return formula_default.error.v;
              }
              known_y = known_y.concat(func_methods_default.getDataArr(data_known_y, false));
            } else if (getObjType(data_known_y) == "object" && data_known_y.startCell != null) {
              known_y = known_y.concat(func_methods_default.getCellDataArr(data_known_y, "text", false));
            } else {
              known_y.push(data_known_y);
            }
            var data_known_x = arguments[2];
            var known_x = [];
            if (getObjType(data_known_x) == "array") {
              if (getObjType(data_known_x[0]) == "array" && !func_methods_default.isDyadicArr(data_known_x)) {
                return formula_default.error.v;
              }
              known_x = known_x.concat(func_methods_default.getDataArr(data_known_x, false));
            } else if (getObjType(data_known_x) == "object" && data_known_x.startCell != null) {
              known_x = known_x.concat(func_methods_default.getCellDataArr(data_known_x, "text", false));
            } else {
              known_x.push(data_known_x);
            }
            if (known_y.length != known_x.length) {
              return formula_default.error.na;
            }
            var data_y = [], data_x = [];
            for (var i2 = 0; i2 < known_y.length; i2++) {
              var num_y = known_y[i2];
              var num_x = known_x[i2];
              if (isRealNum(num_y) && isRealNum(num_x)) {
                data_y.push(parseFloat(num_y));
                data_x.push(parseFloat(num_x));
              }
            }
            if (func_methods_default.variance_s(data_x) == 0) {
              return formula_default.error.d;
            }
            var xmean = jStat.mean(data_x);
            var ymean = jStat.mean(data_y);
            var n = data_x.length;
            var num = 0;
            var den = 0;
            for (var i2 = 0; i2 < n; i2++) {
              num += (data_x[i2] - xmean) * (data_y[i2] - ymean);
              den += Math.pow(data_x[i2] - xmean, 2);
            }
            var b = num / den;
            var a = ymean - b * xmean;
            return a + b * x;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "FISHERINV": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var y = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(y)) {
              return y;
            }
            if (!isRealNum(y)) {
              return formula_default.error.v;
            }
            y = parseFloat(y);
            var e2y = Math.exp(2 * y);
            return (e2y - 1) / (e2y + 1);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "FISHER": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            if (x <= -1 || x >= 1) {
              return formula_default.error.nm;
            }
            return Math.log((1 + x) / (1 - x)) / 2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MODE_SNGL": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                if (!isRealNum(data)) {
                  return formula_default.error.v;
                }
                dataArr.push(data);
              }
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              }
            }
            var count = {};
            var maxItems = [];
            var max = 0;
            var currentItem;
            for (var i2 = 0; i2 < dataArr_n.length; i2++) {
              currentItem = dataArr_n[i2];
              count[currentItem] = count[currentItem] ? count[currentItem] + 1 : 1;
              if (count[currentItem] > max) {
                max = count[currentItem];
                maxItems = [];
              }
              if (count[currentItem] == max) {
                maxItems[maxItems.length] = currentItem;
              }
            }
            if (max <= 1) {
              return formula_default.error.na;
            }
            var resultIndex = dataArr_n.indexOf(maxItems[0]);
            for (var j = 0; j < maxItems.length; j++) {
              var index2 = dataArr_n.indexOf(maxItems[j]);
              if (index2 < resultIndex) {
                resultIndex = index2;
              }
            }
            return dataArr_n[resultIndex];
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "WEIBULL_DIST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            var alpha = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(alpha)) {
              return alpha;
            }
            if (!isRealNum(alpha)) {
              return formula_default.error.v;
            }
            alpha = parseFloat(alpha);
            var beta = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(beta)) {
              return beta;
            }
            if (!isRealNum(beta)) {
              return formula_default.error.v;
            }
            beta = parseFloat(beta);
            var cumulative = func_methods_default.getCellBoolen(arguments[3]);
            if (valueIsError(cumulative)) {
              return cumulative;
            }
            if (x < 0 || alpha <= 0 || beta <= 0) {
              return formula_default.error.nm;
            }
            return cumulative ? 1 - Math.exp(-Math.pow(x / beta, alpha)) : Math.pow(x, alpha - 1) * Math.exp(-Math.pow(x / beta, alpha)) * alpha / Math.pow(beta, alpha);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "AVEDEV": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                if (!isRealNum(data)) {
                  return formula_default.error.v;
                }
                dataArr.push(data);
              }
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              }
            }
            if (dataArr_n.length == 0) {
              return formula_default.error.nm;
            }
            return jStat.sum(jStat(dataArr_n).subtract(jStat.mean(dataArr_n)).abs()[0]) / dataArr_n.length;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "AVERAGEA": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, false));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                if (number.toString.toLowerCase() == "true") {
                  dataArr.push(1);
                } else if (number.toString.toLowerCase() == "false") {
                  dataArr.push(0);
                } else if (isRealNum(data)) {
                  dataArr.push(data);
                } else {
                  return formula_default.error.v;
                }
              }
            }
            var sum = 0, count = 0;
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                sum += parseFloat(number);
              } else {
                if (number.toString().toLowerCase() == "true") {
                  sum += 1;
                } else {
                  sum += 0;
                }
              }
              count++;
            }
            if (count == 0) {
              return formula_default.error.d;
            }
            return sum / count;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "BINOM_DIST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number_s = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number_s)) {
              return number_s;
            }
            if (!isRealNum(number_s)) {
              return formula_default.error.v;
            }
            number_s = parseInt(number_s);
            var trials = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(trials)) {
              return trials;
            }
            if (!isRealNum(trials)) {
              return formula_default.error.v;
            }
            trials = parseInt(trials);
            var probability_s = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(probability_s)) {
              return probability_s;
            }
            if (!isRealNum(probability_s)) {
              return formula_default.error.v;
            }
            probability_s = parseFloat(probability_s);
            var cumulative = func_methods_default.getCellBoolen(arguments[3]);
            if (valueIsError(cumulative)) {
              return cumulative;
            }
            if (number_s < 0 || number_s > trials) {
              return formula_default.error.nm;
            }
            if (probability_s < 0 || probability_s > 1) {
              return formula_default.error.nm;
            }
            return cumulative ? jStat.binomial.cdf(number_s, trials, probability_s) : jStat.binomial.pdf(number_s, trials, probability_s);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "BINOM_INV": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var trials = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(trials)) {
              return trials;
            }
            if (!isRealNum(trials)) {
              return formula_default.error.v;
            }
            trials = parseInt(trials);
            var probability_s = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(probability_s)) {
              return probability_s;
            }
            if (!isRealNum(probability_s)) {
              return formula_default.error.v;
            }
            probability_s = parseFloat(probability_s);
            var alpha = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(alpha)) {
              return alpha;
            }
            if (!isRealNum(alpha)) {
              return formula_default.error.v;
            }
            alpha = parseFloat(alpha);
            if (trials < 0) {
              return formula_default.error.nm;
            }
            if (probability_s < 0 || probability_s > 1) {
              return formula_default.error.nm;
            }
            if (alpha < 0 || alpha > 1) {
              return formula_default.error.nm;
            }
            var x = 0;
            while (x <= trials) {
              if (jStat.binomial.cdf(x, trials, probability_s) >= alpha) {
                return x;
              }
              x++;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "CONFIDENCE_NORM": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var alpha = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(alpha)) {
              return alpha;
            }
            if (!isRealNum(alpha)) {
              return formula_default.error.v;
            }
            alpha = parseFloat(alpha);
            var standard_dev = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(standard_dev)) {
              return standard_dev;
            }
            if (!isRealNum(standard_dev)) {
              return formula_default.error.v;
            }
            standard_dev = parseFloat(standard_dev);
            var size = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(size)) {
              return size;
            }
            if (!isRealNum(size)) {
              return formula_default.error.v;
            }
            size = parseInt(size);
            if (alpha <= 0 || alpha >= 1) {
              return formula_default.error.nm;
            }
            if (standard_dev <= 0) {
              return formula_default.error.nm;
            }
            if (size < 1) {
              return formula_default.error.nm;
            }
            return jStat.normalci(1, alpha, standard_dev, size)[1] - 1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "CORREL": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_known_y = arguments[0];
            var known_y = [];
            if (getObjType(data_known_y) == "array") {
              if (getObjType(data_known_y[0]) == "array" && !func_methods_default.isDyadicArr(data_known_y)) {
                return formula_default.error.v;
              }
              known_y = known_y.concat(func_methods_default.getDataArr(data_known_y, false));
            } else if (getObjType(data_known_y) == "object" && data_known_y.startCell != null) {
              known_y = known_y.concat(func_methods_default.getCellDataArr(data_known_y, "text", false));
            } else {
              known_y.push(data_known_y);
            }
            var data_known_x = arguments[1];
            var known_x = [];
            if (getObjType(data_known_x) == "array") {
              if (getObjType(data_known_x[0]) == "array" && !func_methods_default.isDyadicArr(data_known_x)) {
                return formula_default.error.v;
              }
              known_x = known_x.concat(func_methods_default.getDataArr(data_known_x, false));
            } else if (getObjType(data_known_x) == "object" && data_known_x.startCell != null) {
              known_x = known_x.concat(func_methods_default.getCellDataArr(data_known_x, "text", false));
            } else {
              known_x.push(data_known_x);
            }
            if (known_y.length != known_x.length) {
              return formula_default.error.na;
            }
            var data_y = [], data_x = [];
            for (var i2 = 0; i2 < known_y.length; i2++) {
              var num_y = known_y[i2];
              var num_x = known_x[i2];
              if (isRealNum(num_y) && isRealNum(num_x)) {
                data_y.push(parseFloat(num_y));
                data_x.push(parseFloat(num_x));
              }
            }
            if (data_y.length == 0 || data_x.length == 0 || func_methods_default.standardDeviation(data_y) == 0 || func_methods_default.standardDeviation(data_x) == 0) {
              return formula_default.error.d;
            }
            return jStat.corrcoeff(data_y, data_x);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COVARIANCE_P": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_known_x = arguments[0];
            var known_x = [];
            if (getObjType(data_known_x) == "array") {
              if (getObjType(data_known_x[0]) == "array" && !func_methods_default.isDyadicArr(data_known_x)) {
                return formula_default.error.v;
              }
              known_x = known_x.concat(func_methods_default.getDataArr(data_known_x, false));
            } else if (getObjType(data_known_x) == "object" && data_known_x.startCell != null) {
              known_x = known_x.concat(func_methods_default.getCellDataArr(data_known_x, "text", false));
            } else {
              known_x.push(data_known_x);
            }
            var data_known_y = arguments[1];
            var known_y = [];
            if (getObjType(data_known_y) == "array") {
              if (getObjType(data_known_y[0]) == "array" && !func_methods_default.isDyadicArr(data_known_y)) {
                return formula_default.error.v;
              }
              known_y = known_y.concat(func_methods_default.getDataArr(data_known_y, false));
            } else if (getObjType(data_known_y) == "object" && data_known_y.startCell != null) {
              known_y = known_y.concat(func_methods_default.getCellDataArr(data_known_y, "text", false));
            } else {
              known_y.push(data_known_y);
            }
            if (known_x.length != known_y.length) {
              return formula_default.error.na;
            }
            var data_x = [], data_y = [];
            for (var i2 = 0; i2 < known_x.length; i2++) {
              var num_x = known_x[i2];
              var num_y = known_y[i2];
              if (isRealNum(num_x) && isRealNum(num_y)) {
                data_x.push(parseFloat(num_x));
                data_y.push(parseFloat(num_y));
              }
            }
            if (data_x.length == 0 || data_y.length == 0) {
              return formula_default.error.d;
            }
            var mean1 = jStat.mean(data_x);
            var mean2 = jStat.mean(data_y);
            var result = 0;
            for (var i2 = 0; i2 < data_x.length; i2++) {
              result += (data_x[i2] - mean1) * (data_y[i2] - mean2);
            }
            result = result / data_x.length;
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COVARIANCE_S": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_known_x = arguments[0];
            var known_x = [];
            if (getObjType(data_known_x) == "array") {
              if (getObjType(data_known_x[0]) == "array" && !func_methods_default.isDyadicArr(data_known_x)) {
                return formula_default.error.v;
              }
              known_x = known_x.concat(func_methods_default.getDataArr(data_known_x, false));
            } else if (getObjType(data_known_x) == "object" && data_known_x.startCell != null) {
              known_x = known_x.concat(func_methods_default.getCellDataArr(data_known_x, "text", false));
            } else {
              known_x.push(data_known_x);
            }
            var data_known_y = arguments[1];
            var known_y = [];
            if (getObjType(data_known_y) == "array") {
              if (getObjType(data_known_y[0]) == "array" && !func_methods_default.isDyadicArr(data_known_y)) {
                return formula_default.error.v;
              }
              known_y = known_y.concat(func_methods_default.getDataArr(data_known_y, false));
            } else if (getObjType(data_known_y) == "object" && data_known_y.startCell != null) {
              known_y = known_y.concat(func_methods_default.getCellDataArr(data_known_y, "text", false));
            } else {
              known_y.push(data_known_y);
            }
            if (known_x.length != known_y.length) {
              return formula_default.error.na;
            }
            var data_x = [], data_y = [];
            for (var i2 = 0; i2 < known_x.length; i2++) {
              var num_x = known_x[i2];
              var num_y = known_y[i2];
              if (isRealNum(num_x) && isRealNum(num_y)) {
                data_x.push(parseFloat(num_x));
                data_y.push(parseFloat(num_y));
              }
            }
            if (data_x.length == 0 || data_y.length == 0) {
              return formula_default.error.d;
            }
            return jStat.covariance(data_x, data_y);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DEVSQ": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                if (!isRealNum(data)) {
                  if (getObjType(data) == "boolean") {
                    if (data.toString().toLowerCase() == "true") {
                      dataArr.push(1);
                    } else if (data.toString().toLowerCase() == "false") {
                      dataArr.push(0);
                    }
                  } else {
                    return formula_default.error.v;
                  }
                } else {
                  dataArr.push(data);
                }
              }
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              }
            }
            var mean = jStat.mean(dataArr_n);
            var result = 0;
            for (var i2 = 0; i2 < dataArr_n.length; i2++) {
              result += Math.pow(dataArr_n[i2] - mean, 2);
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "EXPON_DIST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            var lambda = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(lambda)) {
              return lambda;
            }
            if (!isRealNum(lambda)) {
              return formula_default.error.v;
            }
            lambda = parseFloat(lambda);
            var cumulative = func_methods_default.getCellBoolen(arguments[2]);
            if (valueIsError(cumulative)) {
              return cumulative;
            }
            if (x < 0) {
              return formula_default.error.nm;
            }
            if (lambda < 0) {
              return formula_default.error.nm;
            }
            return cumulative ? jStat.exponential.cdf(x, lambda) : jStat.exponential.pdf(x, lambda);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "AVERAGEIF": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var sum = 0;
            var count = 0;
            var rangeData = arguments[0].data;
            var rangeRow = arguments[0].rowl;
            var rangeCol = arguments[0].coll;
            var criteria = luckysheet_parseData(arguments[1]);
            var sumRangeData = [];
            if (arguments[2]) {
              var sumRangeStart = arguments[2].startCell;
              var sumRangeRow = arguments[2].rowl;
              var sumRangeCol = arguments[2].coll;
              var sumRangeSheet = arguments[2].sheetName;
              if (rangeRow == sumRangeRow && rangeCol == sumRangeCol) {
                sumRangeData = arguments[2].data;
              } else {
                var row = [], col = [];
                var sumRangeEnd = "";
                var realSumRange = "";
                row[0] = parseInt(sumRangeStart.replace(/[^0-9]/g, "")) - 1;
                col[0] = ABCatNum(sumRangeStart.replace(/[^A-Za-z]/g, ""));
                row[1] = row[0] + rangeRow - 1;
                col[1] = col[0] + rangeCol - 1;
                var real_ABC = chatatABC(col[1]);
                var real_Num = row[1] + 1;
                sumRangeEnd = real_ABC + real_Num;
                realSumRange = sumRangeSheet + "!" + sumRangeStart + ":" + sumRangeEnd;
                sumRangeData = luckysheet_getcelldata(realSumRange).data;
              }
              sumRangeData = formula_default.getRangeArray(sumRangeData)[0];
            }
            rangeData = formula_default.getRangeArray(rangeData)[0];
            for (var i2 = 0; i2 < rangeData.length; i2++) {
              var v = rangeData[i2];
              if (!!v && formula_default.acompareb(v, criteria)) {
                var vnow = sumRangeData[i2] || v;
                if (!isRealNum(vnow)) {
                  continue;
                }
                sum += parseFloat(vnow);
                count++;
              }
            }
            if (sum == 0 || count == 0) {
              return formula_default.error.d;
            } else {
              return numFormat2(sum / count);
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "AVERAGEIFS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var sum = 0;
            var count = 0;
            var args = arguments;
            luckysheet_getValue(args);
            var rangeData = formula_default.getRangeArray(args[0])[0];
            var results = new Array(rangeData.length);
            for (var i2 = 0; i2 < results.length; i2++) {
              results[i2] = true;
            }
            for (var i2 = 1; i2 < args.length; i2 += 2) {
              var range2 = formula_default.getRangeArray(args[i2])[0];
              var criteria = args[i2 + 1];
              for (var j = 0; j < range2.length; j++) {
                var v = range2[j];
                results[j] = results[j] && !!v && formula_default.acompareb(v, criteria);
              }
            }
            for (var i2 = 0; i2 < rangeData.length; i2++) {
              if (results[i2] && isRealNum(rangeData[i2])) {
                sum += parseFloat(rangeData[i2]);
                count++;
              }
            }
            if (sum == 0 || count == 0) {
              return formula_default.error.d;
            } else {
              return numFormat2(sum / count);
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PERMUT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseInt(number);
            var number_chosen = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(number_chosen)) {
              return number_chosen;
            }
            if (!isRealNum(number_chosen)) {
              return formula_default.error.v;
            }
            number_chosen = parseInt(number_chosen);
            if (number <= 0 || number_chosen < 0) {
              return formula_default.error.nm;
            }
            if (number < number_chosen) {
              return formula_default.error.nm;
            }
            return func_methods_default.factorial(number) / func_methods_default.factorial(number - number_chosen);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TRIMMEAN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            let rest2 = function(array, idx) {
              idx = idx || 1;
              if (!array || typeof array.slice !== "function") {
                return array;
              }
              return array.slice(idx);
            }, initial = function(array, idx) {
              idx = idx || 1;
              if (!array || typeof array.slice !== "function") {
                return array;
              }
              return array.slice(0, array.length - idx);
            };
            var data_dataArr = arguments[0];
            var dataArr = [];
            if (getObjType(data_dataArr) == "array") {
              if (getObjType(data_dataArr[0]) == "array" && !func_methods_default.isDyadicArr(data_dataArr)) {
                return formula_default.error.v;
              }
              dataArr = dataArr.concat(func_methods_default.getDataArr(data_dataArr, false));
            } else if (getObjType(data_dataArr) == "object" && data_dataArr.startCell != null) {
              dataArr = dataArr.concat(func_methods_default.getCellDataArr(data_dataArr, "number", false));
            } else {
              dataArr.push(data_dataArr);
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              }
            }
            var percent = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(percent)) {
              return percent;
            }
            if (!isRealNum(percent)) {
              return formula_default.error.v;
            }
            percent = parseFloat(percent);
            if (dataArr_n.length == 0) {
              return formula_default.error.nm;
            }
            if (percent < 0 || percent > 1) {
              return formula_default.error.nm;
            }
            ;
            ;
            dataArr_n.sort(function(a, b) {
              return a - b;
            });
            var trim = window.luckysheet_function.FLOOR.f(dataArr_n.length * percent, 2) / 2;
            var result = rest2(dataArr_n, trim);
            result = initial(result, trim);
            result = jStat.mean(result);
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PERCENTILE_EXC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_dataArr = arguments[0];
            var dataArr = [];
            if (getObjType(data_dataArr) == "array") {
              if (getObjType(data_dataArr[0]) == "array" && !func_methods_default.isDyadicArr(data_dataArr)) {
                return formula_default.error.v;
              }
              dataArr = dataArr.concat(func_methods_default.getDataArr(data_dataArr, false));
            } else if (getObjType(data_dataArr) == "object" && data_dataArr.startCell != null) {
              dataArr = dataArr.concat(func_methods_default.getCellDataArr(data_dataArr, "number", false));
            } else {
              dataArr.push(data_dataArr);
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              }
            }
            var k = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(k)) {
              return k;
            }
            if (!isRealNum(k)) {
              return formula_default.error.v;
            }
            k = parseFloat(k);
            if (dataArr_n.length == 0) {
              return formula_default.error.nm;
            }
            if (k <= 0 || k >= 1) {
              return formula_default.error.nm;
            }
            dataArr_n = dataArr_n.sort(function(a, b) {
              return a - b;
            });
            var n = dataArr_n.length;
            if (k < 1 / (n + 1) || k > 1 - 1 / (n + 1)) {
              return formula_default.error.nm;
            }
            var l = k * (n + 1) - 1;
            var fl = Math.floor(l);
            return l === fl ? dataArr_n[l] : dataArr_n[fl] + (l - fl) * (dataArr_n[fl + 1] - dataArr_n[fl]);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PERCENTILE_INC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_dataArr = arguments[0];
            var dataArr = [];
            if (getObjType(data_dataArr) == "array") {
              if (getObjType(data_dataArr[0]) == "array" && !func_methods_default.isDyadicArr(data_dataArr)) {
                return formula_default.error.v;
              }
              dataArr = dataArr.concat(func_methods_default.getDataArr(data_dataArr, false));
            } else if (getObjType(data_dataArr) == "object" && data_dataArr.startCell != null) {
              dataArr = dataArr.concat(func_methods_default.getCellDataArr(data_dataArr, "number", false));
            } else {
              dataArr.push(data_dataArr);
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              }
            }
            var k = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(k)) {
              return k;
            }
            if (!isRealNum(k)) {
              return formula_default.error.v;
            }
            k = parseFloat(k);
            if (dataArr_n.length == 0) {
              return formula_default.error.nm;
            }
            if (k < 0 || k > 1) {
              return formula_default.error.nm;
            }
            dataArr_n = dataArr_n.sort(function(a, b) {
              return a - b;
            });
            var n = dataArr_n.length;
            var l = k * (n - 1);
            var fl = Math.floor(l);
            return l === fl ? dataArr_n[l] : dataArr_n[fl] + (l - fl) * (dataArr_n[fl + 1] - dataArr_n[fl]);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PEARSON": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_known_x = arguments[0];
            var known_x = [];
            if (getObjType(data_known_x) == "array") {
              if (getObjType(data_known_x[0]) == "array" && !func_methods_default.isDyadicArr(data_known_x)) {
                return formula_default.error.v;
              }
              known_x = known_x.concat(func_methods_default.getDataArr(data_known_x, false));
            } else if (getObjType(data_known_x) == "object" && data_known_x.startCell != null) {
              known_x = known_x.concat(func_methods_default.getCellDataArr(data_known_x, "text", false));
            } else {
              known_x.push(data_known_x);
            }
            var data_known_y = arguments[1];
            var known_y = [];
            if (getObjType(data_known_y) == "array") {
              if (getObjType(data_known_y[0]) == "array" && !func_methods_default.isDyadicArr(data_known_y)) {
                return formula_default.error.v;
              }
              known_y = known_y.concat(func_methods_default.getDataArr(data_known_y, false));
            } else if (getObjType(data_known_y) == "object" && data_known_y.startCell != null) {
              known_y = known_y.concat(func_methods_default.getCellDataArr(data_known_y, "text", false));
            } else {
              known_y.push(data_known_y);
            }
            if (known_x.length != known_y.length) {
              return formula_default.error.na;
            }
            var data_x = [], data_y = [];
            for (var i2 = 0; i2 < known_x.length; i2++) {
              var num_x = known_x[i2];
              var num_y = known_y[i2];
              if (isRealNum(num_x) && isRealNum(num_y)) {
                data_x.push(parseFloat(num_x));
                data_y.push(parseFloat(num_y));
              }
            }
            if (data_y.length == 0 || data_x.length == 0) {
              return formula_default.error.d;
            }
            var xmean = jStat.mean(data_x);
            var ymean = jStat.mean(data_y);
            var n = data_x.length;
            var num = 0;
            var den1 = 0;
            var den2 = 0;
            for (var i2 = 0; i2 < n; i2++) {
              num += (data_x[i2] - xmean) * (data_y[i2] - ymean);
              den1 += Math.pow(data_x[i2] - xmean, 2);
              den2 += Math.pow(data_y[i2] - ymean, 2);
            }
            return num / Math.sqrt(den1 * den2);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "NORM_S_INV": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var probability = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(probability)) {
              return probability;
            }
            if (!isRealNum(probability)) {
              return formula_default.error.v;
            }
            probability = parseFloat(probability);
            if (probability <= 0 || probability >= 1) {
              return formula_default.error.nm;
            }
            return jStat.normal.inv(probability, 0, 1);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "NORM_S_DIST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var z = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(z)) {
              return z;
            }
            if (!isRealNum(z)) {
              return formula_default.error.v;
            }
            z = parseFloat(z);
            var cumulative = func_methods_default.getCellBoolen(arguments[1]);
            if (valueIsError(cumulative)) {
              return cumulative;
            }
            return cumulative ? jStat.normal.cdf(z, 0, 1) : jStat.normal.pdf(z, 0, 1);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "NORM_INV": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var probability = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(probability)) {
              return probability;
            }
            if (!isRealNum(probability)) {
              if (getObjType(probability) == "boolean") {
                if (probability.toString().toLowerCase() == "true") {
                  probability = 1;
                } else if (probability.toString().toLowerCase() == "false") {
                  probability = 0;
                }
              } else {
                return formula_default.error.v;
              }
            }
            probability = parseFloat(probability);
            var mean = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(mean)) {
              return mean;
            }
            if (!isRealNum(mean)) {
              if (getObjType(mean) == "boolean") {
                if (mean.toString().toLowerCase() == "true") {
                  mean = 1;
                } else if (mean.toString().toLowerCase() == "false") {
                  mean = 0;
                }
              } else {
                return formula_default.error.v;
              }
            }
            mean = parseFloat(mean);
            var standard_dev = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(standard_dev)) {
              return standard_dev;
            }
            if (!isRealNum(standard_dev)) {
              if (getObjType(standard_dev) == "boolean") {
                if (standard_dev.toString().toLowerCase() == "true") {
                  standard_dev = 1;
                } else if (standard_dev.toString().toLowerCase() == "false") {
                  standard_dev = 0;
                }
              } else {
                return formula_default.error.v;
              }
            }
            standard_dev = parseFloat(standard_dev);
            if (probability <= 0 || probability >= 1) {
              return formula_default.error.nm;
            }
            if (standard_dev <= 0) {
              return formula_default.error.nm;
            }
            return jStat.normal.inv(probability, mean, standard_dev);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "NORM_DIST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              if (getObjType(x) == "boolean") {
                if (x.toString().toLowerCase() == "true") {
                  x = 1;
                } else if (x.toString().toLowerCase() == "false") {
                  x = 0;
                }
              } else {
                return formula_default.error.v;
              }
            }
            x = parseFloat(x);
            var mean = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(mean)) {
              return mean;
            }
            if (!isRealNum(mean)) {
              return formula_default.error.v;
            }
            mean = parseFloat(mean);
            var standard_dev = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(standard_dev)) {
              return standard_dev;
            }
            if (!isRealNum(standard_dev)) {
              return formula_default.error.v;
            }
            standard_dev = parseFloat(standard_dev);
            var cumulative = func_methods_default.getCellBoolen(arguments[3]);
            if (valueIsError(cumulative)) {
              return cumulative;
            }
            if (standard_dev <= 0) {
              return formula_default.error.nm;
            }
            return cumulative ? jStat.normal.cdf(x, mean, standard_dev) : jStat.normal.pdf(x, mean, standard_dev);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "NEGBINOM_DIST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number_f = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number_f)) {
              return number_f;
            }
            if (!isRealNum(number_f)) {
              return formula_default.error.v;
            }
            number_f = parseInt(number_f);
            var number_s = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(number_s)) {
              return number_s;
            }
            if (!isRealNum(number_s)) {
              return formula_default.error.v;
            }
            number_s = parseInt(number_s);
            var probability_s = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(probability_s)) {
              return probability_s;
            }
            if (!isRealNum(probability_s)) {
              return formula_default.error.v;
            }
            probability_s = parseFloat(probability_s);
            var cumulative = func_methods_default.getCellBoolen(arguments[3]);
            if (valueIsError(cumulative)) {
              return cumulative;
            }
            if (probability_s < 0 || probability_s > 1) {
              return formula_default.error.nm;
            }
            if (number_f < 0 || number_s < 1) {
              return formula_default.error.nm;
            }
            return cumulative ? jStat.negbin.cdf(number_f, number_s, probability_s) : jStat.negbin.pdf(number_f, number_s, probability_s);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MINA": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, false));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                if (number.toString.toLowerCase() == "true") {
                  dataArr.push(1);
                } else if (number.toString.toLowerCase() == "false") {
                  dataArr.push(0);
                } else if (isRealNum(data)) {
                  dataArr.push(data);
                } else {
                  return formula_default.error.v;
                }
              }
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              } else {
                if (number.toString().toLowerCase() == "true") {
                  dataArr_n.push(1);
                } else {
                  dataArr_n.push(0);
                }
              }
            }
            return dataArr_n.length === 0 ? 0 : Math.min.apply(Math, dataArr_n);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MEDIAN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                if (!isRealNum(data)) {
                  return formula_default.error.v;
                }
                dataArr.push(data);
              }
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              }
            }
            return jStat.median(dataArr_n);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MAXA": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, false));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                if (number.toString.toLowerCase() == "true") {
                  dataArr.push(1);
                } else if (number.toString.toLowerCase() == "false") {
                  dataArr.push(0);
                } else if (isRealNum(data)) {
                  dataArr.push(data);
                } else {
                  return formula_default.error.v;
                }
              }
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              } else {
                if (number.toString().toLowerCase() == "true") {
                  dataArr_n.push(1);
                } else {
                  dataArr_n.push(0);
                }
              }
            }
            return dataArr_n.length === 0 ? 0 : Math.max.apply(Math, dataArr_n);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LOGNORM_INV": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var probability = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(probability)) {
              return probability;
            }
            if (!isRealNum(probability)) {
              return formula_default.error.v;
            }
            probability = parseFloat(probability);
            var mean = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(mean)) {
              return mean;
            }
            if (!isRealNum(mean)) {
              return formula_default.error.v;
            }
            mean = parseFloat(mean);
            var standard_dev = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(standard_dev)) {
              return standard_dev;
            }
            if (!isRealNum(standard_dev)) {
              return formula_default.error.v;
            }
            standard_dev = parseFloat(standard_dev);
            if (probability <= 0 || probability >= 1) {
              return formula_default.error.nm;
            }
            if (standard_dev <= 0) {
              return formula_default.error.nm;
            }
            return jStat.lognormal.inv(probability, mean, standard_dev);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LOGNORM_DIST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            var mean = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(mean)) {
              return mean;
            }
            if (!isRealNum(mean)) {
              return formula_default.error.v;
            }
            mean = parseFloat(mean);
            var standard_dev = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(standard_dev)) {
              return standard_dev;
            }
            if (!isRealNum(standard_dev)) {
              return formula_default.error.v;
            }
            standard_dev = parseFloat(standard_dev);
            var cumulative = func_methods_default.getCellBoolen(arguments[3]);
            if (valueIsError(cumulative)) {
              return cumulative;
            }
            if (x <= 0 || standard_dev <= 0) {
              return formula_default.error.nm;
            }
            return cumulative ? jStat.lognormal.cdf(x, mean, standard_dev) : jStat.lognormal.pdf(x, mean, standard_dev);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "Z_TEST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            if (getObjType(arguments[0]) == "array") {
              if (getObjType(arguments[0][0]) == "array" && !func_methods_default.isDyadicArr(arguments[0])) {
                return formula_default.error.v;
              }
              dataArr = dataArr.concat(func_methods_default.getDataArr(arguments[0], true));
            } else if (getObjType(arguments[0]) == "object" && arguments[0].startCell != null) {
              dataArr = dataArr.concat(func_methods_default.getCellDataArr(arguments[0], "text", true));
            } else {
              dataArr.push(arguments[0]);
            }
            var dataArr_n = [];
            for (var j = 0; j < dataArr.length; j++) {
              var number = dataArr[j];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              }
            }
            var x = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            if (dataArr_n.length == 0) {
              return formula_default.error.na;
            }
            var sigma = func_methods_default.standardDeviation_s(dataArr_n);
            if (arguments.length == 3) {
              sigma = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(sigma)) {
                return sigma;
              }
              if (!isRealNum(sigma)) {
                return formula_default.error.v;
              }
              sigma = parseFloat(sigma);
            }
            var n = dataArr_n.length;
            var mean = window.luckysheet_function.AVERAGE.f.apply(window.luckysheet_function.AVERAGE, dataArr_n);
            return 1 - window.luckysheet_function.NORM_S_DIST.f((mean - x) / (sigma / Math.sqrt(n)), "true");
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PROB": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_x_range = [];
            if (getObjType(arguments[0]) == "array") {
              if (getObjType(arguments[0][0]) == "array" && !func_methods_default.isDyadicArr(arguments[0])) {
                return formula_default.error.v;
              }
              data_x_range = data_x_range.concat(func_methods_default.getDataArr(arguments[0], false));
            } else if (getObjType(arguments[0]) == "object" && arguments[0].startCell != null) {
              data_x_range = data_x_range.concat(func_methods_default.getCellDataArr(arguments[0], "text", false));
            } else {
              data_x_range.push(arguments[0]);
            }
            var data_prob_range = [];
            if (getObjType(arguments[1]) == "array") {
              if (getObjType(arguments[1][0]) == "array" && !func_methods_default.isDyadicArr(arguments[1])) {
                return formula_default.error.v;
              }
              data_prob_range = data_prob_range.concat(func_methods_default.getDataArr(arguments[1], false));
            } else if (getObjType(arguments[1]) == "object" && arguments[1].startCell != null) {
              data_prob_range = data_prob_range.concat(func_methods_default.getCellDataArr(arguments[1], "text", false));
            } else {
              data_prob_range.push(arguments[1]);
            }
            if (data_x_range.length != data_prob_range.length) {
              return formula_default.error.na;
            }
            var x_range = [], prob_range = [], prob_range_sum = 0;
            for (var i2 = 0; i2 < data_x_range.length; i2++) {
              var num_x_range = data_x_range[i2];
              var num_prob_range = data_prob_range[i2];
              if (isRealNum(num_x_range) && isRealNum(num_prob_range)) {
                x_range.push(parseFloat(num_x_range));
                prob_range.push(parseFloat(num_prob_range));
                prob_range_sum += parseFloat(num_prob_range);
                if (parseFloat(num_prob_range) <= 0 || parseFloat(num_prob_range) > 1) {
                  return formula_default.error.nm;
                }
              }
            }
            if (prob_range_sum != 1) {
              return formula_default.error.nm;
            }
            var lower_limit = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(lower_limit)) {
              return lower_limit;
            }
            if (!isRealNum(lower_limit)) {
              return formula_default.error.v;
            }
            lower_limit = parseFloat(lower_limit);
            var upper_limit = lower_limit;
            if (arguments.length == 4) {
              upper_limit = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(upper_limit)) {
                return upper_limit;
              }
              if (!isRealNum(upper_limit)) {
                return formula_default.error.v;
              }
              upper_limit = parseFloat(upper_limit);
            }
            var result = 0;
            for (var i2 = 0; i2 < x_range.length; i2++) {
              if (x_range[i2] >= lower_limit && x_range[i2] <= upper_limit) {
                result += prob_range[i2];
              }
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "QUARTILE_EXC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_array = [];
            if (getObjType(arguments[0]) == "array") {
              if (getObjType(arguments[0][0]) == "array" && !func_methods_default.isDyadicArr(arguments[0])) {
                return formula_default.error.v;
              }
              data_array = data_array.concat(func_methods_default.getDataArr(arguments[0], true));
            } else if (getObjType(arguments[0]) == "object" && arguments[0].startCell != null) {
              data_array = data_array.concat(func_methods_default.getCellDataArr(arguments[0], "text", true));
            } else {
              if (!isRealNum(arguments[0])) {
                return formula_default.error.v;
              }
              data_array.push(arguments[0]);
            }
            var array = [];
            for (var i2 = 0; i2 < data_array.length; i2++) {
              var number = data_array[i2];
              if (isRealNum(number)) {
                array.push(parseFloat(number));
              }
            }
            var quart = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(quart)) {
              return quart;
            }
            if (!isRealNum(quart)) {
              return formula_default.error.v;
            }
            quart = parseInt(quart);
            if (array.length == 0) {
              return formula_default.error.nm;
            }
            if (quart <= 0 || quart >= 4) {
              return formula_default.error.nm;
            }
            switch (quart) {
              case 1:
                return window.luckysheet_function.PERCENTILE_EXC.f(array, 0.25);
              case 2:
                return window.luckysheet_function.PERCENTILE_EXC.f(array, 0.5);
              case 3:
                return window.luckysheet_function.PERCENTILE_EXC.f(array, 0.75);
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "QUARTILE_INC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_array = [];
            if (getObjType(arguments[0]) == "array") {
              if (getObjType(arguments[0][0]) == "array" && !func_methods_default.isDyadicArr(arguments[0])) {
                return formula_default.error.v;
              }
              data_array = data_array.concat(func_methods_default.getDataArr(arguments[0], true));
            } else if (getObjType(arguments[0]) == "object" && arguments[0].startCell != null) {
              data_array = data_array.concat(func_methods_default.getCellDataArr(arguments[0], "text", true));
            } else {
              if (!isRealNum(arguments[0])) {
                return formula_default.error.v;
              }
              data_array.push(arguments[0]);
            }
            var array = [];
            for (var i2 = 0; i2 < data_array.length; i2++) {
              var number = data_array[i2];
              if (isRealNum(number)) {
                array.push(parseFloat(number));
              }
            }
            var quart = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(quart)) {
              return quart;
            }
            if (!isRealNum(quart)) {
              return formula_default.error.v;
            }
            quart = parseInt(quart);
            if (array.length == 0) {
              return formula_default.error.nm;
            }
            if (quart < 0 || quart > 4) {
              return formula_default.error.nm;
            }
            switch (quart) {
              case 0:
                return Math.min.apply(Math, array);
              case 1:
                return window.luckysheet_function.PERCENTILE_INC.f(array, 0.25);
              case 2:
                return window.luckysheet_function.PERCENTILE_INC.f(array, 0.5);
              case 3:
                return window.luckysheet_function.PERCENTILE_INC.f(array, 0.75);
              case 4:
                return Math.max.apply(Math, array);
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "POISSON_DIST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseInt(x);
            var mean = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(mean)) {
              return mean;
            }
            if (!isRealNum(mean)) {
              return formula_default.error.v;
            }
            mean = parseFloat(mean);
            var cumulative = func_methods_default.getCellBoolen(arguments[2]);
            if (valueIsError(cumulative)) {
              return cumulative;
            }
            if (x < 0 || mean < 0) {
              return formula_default.error.nm;
            }
            return cumulative ? jStat.poisson.cdf(x, mean) : jStat.poisson.pdf(x, mean);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "RSQ": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_known_y = arguments[0];
            var known_y = [];
            if (getObjType(data_known_y) == "array") {
              if (getObjType(data_known_y[0]) == "array" && !func_methods_default.isDyadicArr(data_known_y)) {
                return formula_default.error.v;
              }
              known_y = known_y.concat(func_methods_default.getDataArr(data_known_y, false));
            } else if (getObjType(data_known_y) == "object" && data_known_y.startCell != null) {
              known_y = known_y.concat(func_methods_default.getCellDataArr(data_known_y, "text", false));
            } else {
              if (!isRealNum(data_known_y)) {
                return formula_default.error.v;
              }
              known_y.push(data_known_y);
            }
            var data_known_x = arguments[1];
            var known_x = [];
            if (getObjType(data_known_x) == "array") {
              if (getObjType(data_known_x[0]) == "array" && !func_methods_default.isDyadicArr(data_known_x)) {
                return formula_default.error.v;
              }
              known_x = known_x.concat(func_methods_default.getDataArr(data_known_x, false));
            } else if (getObjType(data_known_x) == "object" && data_known_x.startCell != null) {
              known_x = known_x.concat(func_methods_default.getCellDataArr(data_known_x, "text", false));
            } else {
              if (!isRealNum(data_known_x)) {
                return formula_default.error.v;
              }
              known_x.push(data_known_x);
            }
            if (known_y.length != known_x.length) {
              return formula_default.error.na;
            }
            var data_y = [], data_x = [];
            for (var i2 = 0; i2 < known_y.length; i2++) {
              var num_y = known_y[i2];
              var num_x = known_x[i2];
              if (isRealNum(num_y) && isRealNum(num_x)) {
                data_y.push(parseFloat(num_y));
                data_x.push(parseFloat(num_x));
              }
            }
            if (data_y.length == 0 || data_x.length == 0) {
              return formula_default.error.d;
            }
            return Math.pow(window.luckysheet_function.PEARSON.f(data_y, data_x), 2);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "T_DIST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            var degrees_freedom = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(degrees_freedom)) {
              return degrees_freedom;
            }
            if (!isRealNum(degrees_freedom)) {
              return formula_default.error.v;
            }
            degrees_freedom = parseInt(degrees_freedom);
            var cumulative = func_methods_default.getCellBoolen(arguments[2]);
            if (valueIsError(cumulative)) {
              return cumulative;
            }
            if (degrees_freedom < 1) {
              return formula_default.error.nm;
            }
            return cumulative ? jStat.studentt.cdf(x, degrees_freedom) : jStat.studentt.pdf(x, degrees_freedom);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "T_DIST_2T": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            var degrees_freedom = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(degrees_freedom)) {
              return degrees_freedom;
            }
            if (!isRealNum(degrees_freedom)) {
              return formula_default.error.v;
            }
            degrees_freedom = parseInt(degrees_freedom);
            if (x < 0 || degrees_freedom < 1) {
              return formula_default.error.nm;
            }
            return (1 - jStat.studentt.cdf(x, degrees_freedom)) * 2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "T_DIST_RT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            var degrees_freedom = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(degrees_freedom)) {
              return degrees_freedom;
            }
            if (!isRealNum(degrees_freedom)) {
              return formula_default.error.v;
            }
            degrees_freedom = parseInt(degrees_freedom);
            if (degrees_freedom < 1) {
              return formula_default.error.nm;
            }
            return 1 - jStat.studentt.cdf(x, degrees_freedom);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "T_INV": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var probability = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(probability)) {
              return probability;
            }
            if (!isRealNum(probability)) {
              return formula_default.error.v;
            }
            probability = parseFloat(probability);
            var deg_freedom = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(deg_freedom)) {
              return deg_freedom;
            }
            if (!isRealNum(deg_freedom)) {
              return formula_default.error.v;
            }
            deg_freedom = parseInt(deg_freedom);
            if (probability <= 0 || probability > 1) {
              return formula_default.error.nm;
            }
            if (deg_freedom < 1) {
              return formula_default.error.nm;
            }
            return jStat.studentt.inv(probability, deg_freedom);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "T_INV_2T": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var probability = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(probability)) {
              return probability;
            }
            if (!isRealNum(probability)) {
              return formula_default.error.v;
            }
            probability = parseFloat(probability);
            var deg_freedom = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(deg_freedom)) {
              return deg_freedom;
            }
            if (!isRealNum(deg_freedom)) {
              return formula_default.error.v;
            }
            deg_freedom = parseInt(deg_freedom);
            if (probability <= 0 || probability > 1) {
              return formula_default.error.nm;
            }
            if (deg_freedom < 1) {
              return formula_default.error.nm;
            }
            return Math.abs(jStat.studentt.inv(probability / 2, deg_freedom));
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "T_TEST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var known_x = [];
            if (getObjType(arguments[0]) == "array") {
              if (getObjType(arguments[0][0]) == "array" && !func_methods_default.isDyadicArr(arguments[0])) {
                return formula_default.error.v;
              }
              known_x = known_x.concat(func_methods_default.getDataArr(arguments[0], false));
            } else if (getObjType(arguments[0]) == "object" && arguments[0].startCell != null) {
              known_x = known_x.concat(func_methods_default.getCellDataArr(arguments[0], "text", false));
            } else {
              if (!isRealNum(arguments[0])) {
                return formula_default.error.v;
              }
              known_x.push(arguments[0]);
            }
            var data_x = known_x;
            var known_y = [];
            if (getObjType(arguments[1]) == "array") {
              if (getObjType(arguments[1][0]) == "array" && !func_methods_default.isDyadicArr(arguments[1])) {
                return formula_default.error.v;
              }
              known_y = known_y.concat(func_methods_default.getDataArr(arguments[1], false));
            } else if (getObjType(arguments[1]) == "object" && arguments[1].startCell != null) {
              known_y = known_y.concat(func_methods_default.getCellDataArr(arguments[1], "text", false));
            } else {
              if (!isRealNum(arguments[1])) {
                return formula_default.error.v;
              }
              known_y.push(arguments[1]);
            }
            var data_y = known_y;
            var tails = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(tails)) {
              return tails;
            }
            if (!isRealNum(tails)) {
              return formula_default.error.v;
            }
            tails = parseInt(tails);
            var type = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(type)) {
              return type;
            }
            if (!isRealNum(type)) {
              return formula_default.error.v;
            }
            type = parseInt(type);
            if ([1, 2].indexOf(tails) == -1) {
              return formula_default.error.nm;
            }
            if ([1, 2, 3].indexOf(type) == -1) {
              return formula_default.error.nm;
            }
            var t = null, df = null;
            if (type == 1) {
              var diff_arr = [];
              for (i2 = 0; i2 < data_x.length; i2++) {
                diff_arr.push(data_x[i2] - data_y[i2]);
              }
              var diff_mean = Math.abs(jStat.mean(diff_arr));
              var diff_sd = func_methods_default.standardDeviation_s(diff_arr);
              t = diff_mean / (diff_sd / Math.sqrt(data_x.length));
              df = data_x.length - 1;
            } else {
              var mean_x = jStat.mean(data_x);
              var mean_y = jStat.mean(data_y);
              var s_x = func_methods_default.variance_s(data_x);
              var s_y = func_methods_default.variance_s(data_y);
              t = Math.abs(mean_x - mean_y) / Math.sqrt(s_x / data_x.length + s_y / data_y.length);
              switch (type) {
                case 2:
                  df = data_x.length + data_y.length - 2;
                  break;
                case 3:
                  df = Math.pow(s_x / data_x.length + s_y / data_y.length, 2) / (Math.pow(s_x / data_x.length, 2) / (data_x.length - 1) + Math.pow(s_y / data_y.length, 2) / (data_y.length - 1));
                  break;
              }
            }
            if (tails == 1) {
              var result = window.luckysheet_function.T_DIST_RT.f(t, df);
            } else if (tails == 2) {
              var result = window.luckysheet_function.T_DIST_2T.f(t, df);
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "F_DIST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            var degrees_freedom1 = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(degrees_freedom1)) {
              return degrees_freedom1;
            }
            if (!isRealNum(degrees_freedom1)) {
              return formula_default.error.v;
            }
            degrees_freedom1 = parseInt(degrees_freedom1);
            var degrees_freedom2 = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(degrees_freedom2)) {
              return degrees_freedom2;
            }
            if (!isRealNum(degrees_freedom2)) {
              return formula_default.error.v;
            }
            degrees_freedom2 = parseInt(degrees_freedom2);
            var cumulative = func_methods_default.getCellBoolen(arguments[3]);
            if (valueIsError(cumulative)) {
              return cumulative;
            }
            if (x < 0) {
              return formula_default.error.nm;
            }
            if (degrees_freedom1 < 1) {
              return formula_default.error.nm;
            }
            if (degrees_freedom2 < 1) {
              return formula_default.error.nm;
            }
            return cumulative ? jStat.centralF.cdf(x, degrees_freedom1, degrees_freedom2) : jStat.centralF.pdf(x, degrees_freedom1, degrees_freedom2);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "F_DIST_RT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            var degrees_freedom1 = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(degrees_freedom1)) {
              return degrees_freedom1;
            }
            if (!isRealNum(degrees_freedom1)) {
              return formula_default.error.v;
            }
            degrees_freedom1 = parseInt(degrees_freedom1);
            var degrees_freedom2 = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(degrees_freedom2)) {
              return degrees_freedom2;
            }
            if (!isRealNum(degrees_freedom2)) {
              return formula_default.error.v;
            }
            degrees_freedom2 = parseInt(degrees_freedom2);
            if (x < 0) {
              return formula_default.error.nm;
            }
            if (degrees_freedom1 < 1) {
              return formula_default.error.nm;
            }
            if (degrees_freedom2 < 1) {
              return formula_default.error.nm;
            }
            return 1 - jStat.centralF.cdf(x, degrees_freedom1, degrees_freedom2);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "VAR_P": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                if (!isRealNum(data)) {
                  return formula_default.error.v;
                }
                dataArr.push(data);
              }
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              }
            }
            if (dataArr_n.length == 0) {
              return formula_default.error.d;
            }
            var n = dataArr_n.length;
            var sigma = 0;
            var mean = window.luckysheet_function.AVERAGE.f.apply(window.luckysheet_function.AVERAGE, dataArr_n);
            for (var i2 = 0; i2 < n; i2++) {
              sigma += Math.pow(dataArr_n[i2] - mean, 2);
            }
            return sigma / n;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "VAR_S": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                if (!isRealNum(data)) {
                  return formula_default.error.v;
                }
                dataArr.push(data);
              }
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              }
            }
            if (dataArr_n.length == 0) {
              return formula_default.error.d;
            }
            var n = dataArr_n.length;
            var sigma = 0;
            var mean = window.luckysheet_function.AVERAGE.f.apply(window.luckysheet_function.AVERAGE, dataArr_n);
            for (var i2 = 0; i2 < n; i2++) {
              sigma += Math.pow(dataArr_n[i2] - mean, 2);
            }
            return sigma / (n - 1);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "VARA": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, false));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                if (number.toString.toLowerCase() == "true") {
                  dataArr.push(1);
                } else if (number.toString.toLowerCase() == "false") {
                  dataArr.push(0);
                } else if (isRealNum(data)) {
                  dataArr.push(data);
                } else {
                  return formula_default.error.v;
                }
              }
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              } else {
                if (number.toString().toLowerCase() == "true") {
                  dataArr_n.push(1);
                } else {
                  dataArr_n.push(0);
                }
              }
            }
            var n = dataArr_n.length;
            var sigma = 0;
            var mean = window.luckysheet_function.AVERAGE.f.apply(window.luckysheet_function.AVERAGE, dataArr_n);
            for (var i2 = 0; i2 < n; i2++) {
              sigma += Math.pow(dataArr_n[i2] - mean, 2);
            }
            return sigma / (n - 1);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "VARPA": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, false));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                if (number.toString.toLowerCase() == "true") {
                  dataArr.push(1);
                } else if (number.toString.toLowerCase() == "false") {
                  dataArr.push(0);
                } else if (isRealNum(data)) {
                  dataArr.push(data);
                } else {
                  return formula_default.error.v;
                }
              }
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              } else {
                if (number.toString().toLowerCase() == "true") {
                  dataArr_n.push(1);
                } else {
                  dataArr_n.push(0);
                }
              }
            }
            var n = dataArr_n.length;
            var sigma = 0;
            var mean = window.luckysheet_function.AVERAGE.f.apply(window.luckysheet_function.AVERAGE, dataArr_n);
            for (var i2 = 0; i2 < n; i2++) {
              sigma += Math.pow(dataArr_n[i2] - mean, 2);
            }
            return sigma / n;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "STEYX": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var known_y = [];
            if (getObjType(arguments[0]) == "array") {
              if (getObjType(arguments[0][0]) == "array" && !func_methods_default.isDyadicArr(arguments[0])) {
                return formula_default.error.v;
              }
              known_y = known_y.concat(func_methods_default.getDataArr(arguments[0], false));
            } else if (getObjType(arguments[0]) == "object" && arguments[0].startCell != null) {
              known_y = known_y.concat(func_methods_default.getCellDataArr(arguments[0], "text", false));
            } else {
              if (!isRealNum(arguments[0])) {
                return formula_default.error.v;
              }
              known_y.push(arguments[0]);
            }
            var known_x = [];
            if (getObjType(arguments[1]) == "array") {
              if (getObjType(arguments[1][0]) == "array" && !func_methods_default.isDyadicArr(arguments[1])) {
                return formula_default.error.v;
              }
              known_x = known_x.concat(func_methods_default.getDataArr(arguments[1], false));
            } else if (getObjType(arguments[1]) == "object" && arguments[1].startCell != null) {
              known_x = known_x.concat(func_methods_default.getCellDataArr(arguments[1], "text", false));
            } else {
              if (!isRealNum(arguments[1])) {
                return formula_default.error.v;
              }
              known_x.push(arguments[1]);
            }
            if (known_y.length != known_x.length) {
              return formula_default.error.na;
            }
            var data_y = [], data_x = [];
            for (var i2 = 0; i2 < known_y.length; i2++) {
              var num_y = known_y[i2];
              var num_x = known_x[i2];
              if (isRealNum(num_y) && isRealNum(num_x)) {
                data_y.push(parseFloat(num_y));
                data_x.push(parseFloat(num_x));
              }
            }
            if (data_y.length < 3 || data_x.length < 3) {
              return formula_default.error.d;
            }
            var xmean = jStat.mean(data_x);
            var ymean = jStat.mean(data_y);
            var n = data_x.length;
            var lft = 0;
            var num = 0;
            var den = 0;
            for (var i2 = 0; i2 < n; i2++) {
              lft += Math.pow(data_y[i2] - ymean, 2);
              num += (data_x[i2] - xmean) * (data_y[i2] - ymean);
              den += Math.pow(data_x[i2] - xmean, 2);
            }
            return Math.sqrt((lft - num * num / den) / (n - 2));
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "STANDARDIZE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            if (!isRealNum(x)) {
              return formula_default.error.v;
            }
            x = parseFloat(x);
            var mean = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(mean)) {
              return mean;
            }
            if (!isRealNum(mean)) {
              return formula_default.error.v;
            }
            mean = parseFloat(mean);
            var standard_dev = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(standard_dev)) {
              return standard_dev;
            }
            if (!isRealNum(standard_dev)) {
              return formula_default.error.v;
            }
            standard_dev = parseFloat(standard_dev);
            if (standard_dev <= 0) {
              return formula_default.error.nm;
            }
            return (x - mean) / standard_dev;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SMALL": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            if (getObjType(arguments[0]) == "array") {
              if (getObjType(arguments[0][0]) == "array" && !func_methods_default.isDyadicArr(arguments[0])) {
                return formula_default.error.v;
              }
              dataArr = dataArr.concat(func_methods_default.getDataArr(arguments[0], true));
            } else if (getObjType(arguments[0]) == "object" && arguments[0].startCell != null) {
              dataArr = dataArr.concat(func_methods_default.getCellDataArr(arguments[0], "number", true));
            } else {
              if (!isRealNum(arguments[0])) {
                return formula_default.error.v;
              }
              dataArr.push(arguments[0]);
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              }
            }
            var k = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(k)) {
              return k;
            }
            if (!isRealNum(k)) {
              return formula_default.error.v;
            }
            k = parseInt(k);
            if (dataArr_n.length == 0) {
              return formula_default.error.nm;
            }
            if (k <= 0 || k > dataArr_n.length) {
              return formula_default.error.nm;
            }
            return dataArr_n.sort(function(a, b) {
              return a - b;
            })[k - 1];
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SLOPE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var known_y = [];
            if (getObjType(arguments[0]) == "array") {
              if (getObjType(arguments[0][0]) == "array" && !func_methods_default.isDyadicArr(arguments[0])) {
                return formula_default.error.v;
              }
              known_y = known_y.concat(func_methods_default.getDataArr(arguments[0], false));
            } else if (getObjType(arguments[0]) == "object" && arguments[0].startCell != null) {
              known_y = known_y.concat(func_methods_default.getCellDataArr(arguments[0], "text", false));
            } else {
              if (!isRealNum(arguments[0])) {
                return formula_default.error.v;
              }
              known_y.push(arguments[0]);
            }
            var known_x = [];
            if (getObjType(arguments[1]) == "array") {
              if (getObjType(arguments[1][0]) == "array" && !func_methods_default.isDyadicArr(arguments[1])) {
                return formula_default.error.v;
              }
              known_x = known_x.concat(func_methods_default.getDataArr(arguments[1], false));
            } else if (getObjType(arguments[1]) == "object" && arguments[1].startCell != null) {
              known_x = known_x.concat(func_methods_default.getCellDataArr(arguments[1], "text", false));
            } else {
              if (!isRealNum(arguments[1])) {
                return formula_default.error.v;
              }
              known_x.push(arguments[1]);
            }
            if (known_y.length != known_x.length) {
              return formula_default.error.na;
            }
            var data_y = [], data_x = [];
            for (var i2 = 0; i2 < known_y.length; i2++) {
              var num_y = known_y[i2];
              var num_x = known_x[i2];
              if (isRealNum(num_y) && isRealNum(num_x)) {
                data_y.push(parseFloat(num_y));
                data_x.push(parseFloat(num_x));
              }
            }
            if (data_y.length < 3 || data_x.length < 3) {
              return formula_default.error.d;
            }
            var xmean = jStat.mean(data_x);
            var ymean = jStat.mean(data_y);
            var n = data_x.length;
            var num = 0;
            var den = 0;
            for (var i2 = 0; i2 < n; i2++) {
              num += (data_x[i2] - xmean) * (data_y[i2] - ymean);
              den += Math.pow(data_x[i2] - xmean, 2);
            }
            return num / den;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SKEW": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                if (!isRealNum(data)) {
                  return formula_default.error.v;
                }
                dataArr.push(data);
              }
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              }
            }
            if (dataArr_n.length < 3 || func_methods_default.standardDeviation_s(dataArr_n) == 0) {
              return formula_default.error.d;
            }
            var mean = jStat.mean(dataArr_n);
            var n = dataArr_n.length;
            var sigma = 0;
            for (var i2 = 0; i2 < n; i2++) {
              sigma += Math.pow(dataArr_n[i2] - mean, 3);
            }
            return n * sigma / ((n - 1) * (n - 2) * Math.pow(jStat.stdev(dataArr_n, true), 3));
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SKEW_P": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var dataArr = [];
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                if (!isRealNum(data)) {
                  return formula_default.error.v;
                }
                dataArr.push(data);
              }
            }
            var dataArr_n = [];
            for (var i2 = 0; i2 < dataArr.length; i2++) {
              var number = dataArr[i2];
              if (isRealNum(number)) {
                dataArr_n.push(parseFloat(number));
              }
            }
            if (dataArr_n.length < 3 || func_methods_default.standardDeviation_s(dataArr_n) == 0) {
              return formula_default.error.d;
            }
            var mean = jStat.mean(dataArr_n);
            var n = dataArr_n.length;
            var m2 = 0;
            var m3 = 0;
            for (var i2 = 0; i2 < n; i2++) {
              m3 += Math.pow(dataArr_n[i2] - mean, 3);
              m2 += Math.pow(dataArr_n[i2] - mean, 2);
            }
            m3 = m3 / n;
            m2 = m2 / n;
            return m3 / Math.pow(m2, 3 / 2);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ADDRESS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var row_num = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(row_num)) {
              return row_num;
            }
            if (!isRealNum(row_num)) {
              return formula_default.error.v;
            }
            row_num = parseInt(row_num);
            var column_num = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(column_num)) {
              return column_num;
            }
            if (!isRealNum(column_num)) {
              return formula_default.error.v;
            }
            column_num = parseInt(column_num);
            var abs_num = 1;
            if (arguments.length >= 3) {
              abs_num = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(abs_num)) {
                return abs_num;
              }
              if (!isRealNum(abs_num)) {
                return formula_default.error.v;
              }
              abs_num = parseInt(abs_num);
            }
            var A1 = true;
            if (arguments.length >= 4) {
              A1 = func_methods_default.getCellBoolen(arguments[3]);
              if (valueIsError(A1)) {
                return A1;
              }
            }
            if (row_num <= 0 || column_num <= 0) {
              return formula_default.error.v;
            }
            if ([1, 2, 3, 4].indexOf(abs_num) == -1) {
              return formula_default.error.v;
            }
            var str;
            if (A1) {
              column_num = chatatABC(column_num - 1);
              switch (abs_num) {
                case 1:
                  str = "$" + column_num + "$" + row_num;
                  break;
                case 2:
                  str = column_num + "$" + row_num;
                  break;
                case 3:
                  str = "$" + column_num + row_num;
                  break;
                case 4:
                  str = column_num + row_num;
                  break;
              }
            } else {
              switch (abs_num) {
                case 1:
                  str = "R" + row_num + "C" + column_num;
                  break;
                case 2:
                  str = "R" + row_num + "C[" + column_num + "]";
                  break;
                case 3:
                  str = "R[" + row_num + "]C" + column_num;
                  break;
                case 4:
                  str = "R[" + row_num + "]C[" + column_num + "]";
                  break;
              }
            }
            if (arguments.length == 5) {
              var sheet_text = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(sheet_text)) {
                return sheet_text;
              }
              return sheet_text + "!" + str;
            } else {
              return str;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "INDIRECT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var ref_text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(ref_text)) {
              return ref_text;
            }
            var A1 = true;
            if (arguments.length == 2) {
              A1 = func_methods_default.getCellBoolen(arguments[1]);
              if (valueIsError(A1)) {
                return A1;
              }
            }
            let luckysheetfile = getluckysheetfile();
            let index2 = getSheetIndex(store_default.calculateSheetIndex);
            let currentSheet = luckysheetfile[index2];
            let sheetdata = currentSheet.data;
            if (A1) {
            } else {
            }
            if (formula_default.iscelldata(ref_text)) {
              let cellrange = formula_default.getcellrange(ref_text);
              let row = cellrange.row[0], col = cellrange.column[0];
              if (row < 0 || row >= sheetdata.length || col < 0 || col >= sheetdata[0].length) {
                return formula_default.error.r;
              }
              if (sheetdata[row][col] == null || isRealNull(sheetdata[row][col].v)) {
                return 0;
              }
              let value = sheetdata[row][col].v;
              if (formula_default.execFunctionGlobalData != null) {
                let ef = formula_default.execFunctionGlobalData[row + "_" + col + "_" + store_default.calculateSheetIndex];
                if (ef != null) {
                  value = ef.v;
                }
              }
              let retAll = {
                "sheetName": currentSheet.name,
                "startCell": ref_text,
                "rowl": row,
                "coll": col,
                "data": value
              };
              return retAll;
            } else {
              return formula_default.error.r;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ROW": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            if (arguments.length == 1) {
              var reference;
              if (getObjType(arguments[0]) == "array") {
                return formula_default.error.v;
              } else if (getObjType(arguments[0]) == "object" && arguments[0].startCell != null) {
                reference = arguments[0].startCell;
              } else {
                reference = arguments[0];
              }
              if (formula_default.iscelldata(reference)) {
                var cellrange = formula_default.getcellrange(reference);
                return cellrange["row"][0] + 1;
              } else {
                return formula_default.error.v;
              }
            } else {
              return window.luckysheetCurrentRow + 1;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ROWS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            if (getObjType(arguments[0]) == "array") {
              if (getObjType(arguments[0][0]) == "array") {
                return arguments[0].length;
              } else {
                return 1;
              }
            } else if (getObjType(arguments[0]) == "object" && arguments[0].startCell != null) {
              return arguments[0].rowl;
            } else {
              return 1;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COLUMN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            if (arguments.length == 1) {
              var reference;
              if (getObjType(arguments[0]) == "array") {
                return formula_default.error.v;
              } else if (getObjType(arguments[0]) == "object" && arguments[0].startCell != null) {
                reference = arguments[0].startCell;
              } else {
                reference = arguments[0];
              }
              if (formula_default.iscelldata(reference)) {
                var cellrange = formula_default.getcellrange(reference);
                return cellrange["column"][0] + 1;
              } else {
                return formula_default.error.v;
              }
            } else {
              return window.luckysheetCurrentColumn + 1;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COLUMNS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            if (getObjType(arguments[0]) == "array") {
              if (getObjType(arguments[0][0]) == "array") {
                return arguments[0][0].length;
              } else {
                return arguments[0].length;
              }
            } else if (getObjType(arguments[0]) == "object" && arguments[0].startCell != null) {
              return arguments[0].coll;
            } else {
              return 1;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "OFFSET": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            if (!(getObjType(arguments[0]) == "object" && arguments[0].startCell != null)) {
              return formula_default.error.v;
            }
            var reference = arguments[0].startCell;
            let sheetName = arguments[0].sheetName;
            var rows = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(rows)) {
              return rows;
            }
            if (!isRealNum(rows)) {
              return formula_default.error.v;
            }
            rows = parseInt(rows);
            var cols = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(cols)) {
              return cols;
            }
            if (!isRealNum(cols)) {
              return formula_default.error.v;
            }
            cols = parseInt(cols);
            var height = arguments[0].rowl;
            if (arguments.length >= 4) {
              height = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(height)) {
                return height;
              }
              if (!isRealNum(height)) {
                return formula_default.error.v;
              }
              height = parseInt(height);
            }
            var width = arguments[0].coll;
            if (arguments.length == 5) {
              width = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(width)) {
                return width;
              }
              if (!isRealNum(width)) {
                return formula_default.error.v;
              }
              width = parseInt(width);
            }
            if (height < 1 || width < 1) {
              return formula_default.error.r;
            }
            var cellrange = formula_default.getcellrange(reference);
            var cellRow0 = cellrange["row"][0];
            var cellCol0 = cellrange["column"][0];
            cellRow0 += rows;
            cellCol0 += cols;
            var cellRow1 = cellRow0 + height - 1;
            var cellCol1 = cellCol0 + width - 1;
            let luckysheetfile = getluckysheetfile();
            let index2 = getSheetIndex(store_default.calculateSheetIndex);
            let sheetdata = luckysheetfile[index2].data;
            if (cellRow0 < 0 || cellRow1 >= sheetdata.length || cellCol0 < 0 || cellCol1 >= sheetdata[0].length) {
              return formula_default.error.r;
            }
            var result = [];
            for (var r2 = cellRow0; r2 <= cellRow1; r2++) {
              var rowArr = [];
              for (var c2 = cellCol0; c2 <= cellCol1; c2++) {
                if (formula_default.execFunctionGlobalData != null && formula_default.execFunctionGlobalData[r2 + "_" + c2 + "_" + store_default.calculateSheetIndex] != null) {
                  let ef = formula_default.execFunctionGlobalData[r2 + "_" + c2 + "_" + store_default.calculateSheetIndex];
                  if (ef != null) {
                    rowArr.push(ef.v);
                  } else {
                    rowArr.push(0);
                  }
                } else if (sheetdata[r2][c2] != null && !isRealNull(sheetdata[r2][c2].v)) {
                  rowArr.push(sheetdata[r2][c2].v);
                } else {
                  rowArr.push(0);
                }
              }
              result.push(rowArr);
            }
            let retAll = {
              "sheetName": sheetName,
              "startCell": getRangetxt(store_default.calculateSheetIndex, {
                row: [cellRow0, cellRow1],
                column: [cellCol0, cellCol1]
              }),
              "rowl": cellRow0,
              "coll": cellCol0,
              "data": result
            };
            return retAll;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MATCH": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var lookup_value = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(lookup_value)) {
              return lookup_value;
            }
            var data_lookup_array = arguments[1];
            var lookup_array = [];
            if (getObjType(data_lookup_array) == "array") {
              if (getObjType(data_lookup_array[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_lookup_array)) {
                  return formula_default.error.v;
                }
                return formula_default.error.na;
              } else {
                for (var i2 = 0; i2 < data_lookup_array.length; i2++) {
                  lookup_array.push(data_lookup_array[i2]);
                }
              }
            } else if (getObjType(data_lookup_array) == "object" && data_lookup_array.startCell != null) {
              if (data_lookup_array.rowl > 1 && data_lookup_array.coll > 1) {
                return formula_default.error.na;
              }
              if (data_lookup_array.data != null) {
                if (getObjType(data_lookup_array.data) == "array") {
                  for (var i2 = 0; i2 < data_lookup_array.data.length; i2++) {
                    for (var j = 0; j < data_lookup_array.data[i2].length; j++) {
                      if (data_lookup_array.data[i2][j] != null && !isRealNull(data_lookup_array.data[i2][j].v)) {
                        lookup_array.push(data_lookup_array.data[i2][j].v);
                      }
                    }
                  }
                } else {
                  lookup_array.push(data_lookup_array.data.v);
                }
              }
            }
            var match_type = 1;
            if (arguments.length == 3) {
              match_type = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(match_type)) {
                return match_type;
              }
              if (!isRealNum(match_type)) {
                return formula_default.error.v;
              }
              match_type = Math.ceil(parseFloat(match_type));
            }
            if ([-1, 0, 1].indexOf(match_type) == -1) {
              return formula_default.error.na;
            }
            var index2;
            var indexValue;
            for (var idx = 0; idx < lookup_array.length; idx++) {
              if (match_type === 1) {
                if (lookup_array[idx] === lookup_value) {
                  return idx + 1;
                } else if (lookup_array[idx] < lookup_value) {
                  if (!indexValue) {
                    index2 = idx + 1;
                    indexValue = lookup_array[idx];
                  } else if (lookup_array[idx] > indexValue) {
                    index2 = idx + 1;
                    indexValue = lookup_array[idx];
                  }
                }
              } else if (match_type === 0) {
                if (typeof lookup_value === "string") {
                  lookup_value = lookup_value.replace(/\?/g, ".");
                  if (lookup_array[idx].toLowerCase().match(lookup_value.toLowerCase())) {
                    return idx + 1;
                  }
                } else {
                  if (lookup_array[idx] === lookup_value) {
                    return idx + 1;
                  }
                }
              } else if (match_type === -1) {
                if (lookup_array[idx] === lookup_value) {
                  return idx + 1;
                } else if (lookup_array[idx] > lookup_value) {
                  if (!indexValue) {
                    index2 = idx + 1;
                    indexValue = lookup_array[idx];
                  } else if (lookup_array[idx] < indexValue) {
                    index2 = idx + 1;
                    indexValue = lookup_array[idx];
                  }
                }
              }
            }
            return index2 ? index2 : formula_default.error.na;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "VLOOKUP": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var lookup_value = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(lookup_value)) {
              return lookup_value;
            }
            if (lookup_value.toString().replace(/\s/g, "") == "") {
              return formula_default.error.na;
            }
            var data_table_array = arguments[1];
            var table_array = [];
            if (getObjType(data_table_array) == "array") {
              if (getObjType(data_table_array[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_table_array)) {
                  return formula_default.error.v;
                }
                for (var i2 = 0; i2 < data_table_array.length; i2++) {
                  var rowArr = [];
                  for (var j = 0; j < data_table_array[i2].length; j++) {
                    rowArr.push(data_table_array[i2][j]);
                  }
                  table_array.push(rowArr);
                }
              } else {
                var rowArr = [];
                for (var i2 = 0; i2 < data_table_array.length; i2++) {
                  rowArr.push(data_table_array[i2]);
                }
                table_array.push(rowArr);
              }
            } else if (getObjType(data_table_array) == "object" && data_table_array.startCell != null) {
              table_array = func_methods_default.getCellDataDyadicArr(data_table_array, "text");
            } else {
              return formula_default.error.v;
            }
            var col_index_num = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(col_index_num)) {
              return col_index_num;
            }
            if (!isRealNum(col_index_num)) {
              return formula_default.error.v;
            }
            col_index_num = parseInt(col_index_num);
            var range_lookup = true;
            if (arguments.length == 4) {
              range_lookup = func_methods_default.getCellBoolen(arguments[3]);
              if (valueIsError(range_lookup)) {
                return range_lookup;
              }
            }
            if (col_index_num < 1) {
              return formula_default.error.v;
            } else if (col_index_num > table_array[0].length) {
              return formula_default.error.r;
            }
            if (range_lookup) {
              table_array = orderbydata(table_array, 0, true);
              for (var r2 = 0; r2 < table_array.length; r2++) {
                var v = table_array[r2][0];
                var result;
                if (isdatetime(lookup_value) && isdatetime(v)) {
                  result = diff(lookup_value, v);
                } else if (isRealNum(lookup_value) && isRealNum(v)) {
                  result = (0, import_numeral6.default)(lookup_value).value() - (0, import_numeral6.default)(v).value();
                } else if (!isRealNum(lookup_value) && !isRealNum(v)) {
                  result = lookup_value.localeCompare(v, "zh");
                } else if (!isRealNum(lookup_value)) {
                  result = 1;
                } else if (!isRealNum(v)) {
                  result = -1;
                }
                if (result < 0) {
                  if (r2 == 0) {
                    return formula_default.error.na;
                  } else {
                    return table_array[r2 - 1][col_index_num - 1];
                  }
                } else {
                  if (r2 == table_array.length - 1) {
                    return table_array[r2][col_index_num - 1];
                  }
                }
              }
            } else {
              var index2 = null;
              for (var r2 = 0; r2 < table_array.length; r2++) {
                if (lookup_value.toString() == table_array[r2][0].toString()) {
                  index2 = r2;
                  break;
                }
              }
              if (index2 == null) {
                return formula_default.error.na;
              }
              return table_array[index2][col_index_num - 1];
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "HLOOKUP": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var searchkey = arguments[0];
            if (typeof searchkey == "object") {
              searchkey = arguments[0].data;
              if (getObjType(searchkey) == "array") {
                searchkey = searchkey[r];
                if (getObjType(searchkey) == "array") {
                  searchkey = searchkey[c2];
                }
              } else {
                searchkey = searchkey.v;
              }
            }
            var range2 = arguments[1].data;
            var index2 = arguments[2];
            var isaccurate = false;
            if (arguments.length > 3) {
              isaccurate = !!arguments[3];
            }
            if (index2 > range2.rowl) {
              return [formula_default.error.v, "\u7D22\u5F15\u8D85\u8FC7\u4E86\u8303\u56F4\u7684\u957F\u5EA6\uFF0C" + range2[0].length];
            }
            if (index2 < 1) {
              return [formula_default.error.v, "\u7D22\u5F15\u5FC5\u987B\u5927\u4E8E1"];
            }
            var result = formula_default.error.na;
            for (var c2 = 0; c2 < range2[0].length; c2++) {
              var matchv = getcellvalue(0, c2, range2);
              var showv = getcellvalue(index2 - 1, c2, range2);
              if (isaccurate) {
                if (matchv.indexOf(searchkey) > -1) {
                  result = showv;
                }
              } else {
                if (formula_default.acompareb(matchv, searchkey)) {
                  result = showv;
                  return result;
                }
              }
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LOOKUP": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            let sortNum = function(a, b) {
              return b - a;
            };
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var searchkey = arguments[0];
            if (typeof searchkey == "object") {
              searchkey = arguments[0].data;
              if (getObjType(searchkey) == "array") {
                searchkey = searchkey[r];
                if (getObjType(searchkey) == "array") {
                  searchkey = searchkey[c];
                }
              } else {
                searchkey = searchkey.v;
              }
            }
            var range2 = arguments[1].data;
            var range22;
            var result = formula_default.error.na;
            range2 = formula_default.getRangeArray(range2)[0];
            if (arguments[2]) {
              range22 = arguments[2].data;
              range22 = formula_default.getRangeArray(range22)[0];
            }
            if (typeof searchkey == "string") {
              for (var i2 = 0; i2 < range2.length; i2++) {
                var matchv = range2[i2];
                var showv;
                if (arguments[2]) {
                  showv = range22[i2];
                  if (matchv == searchkey) {
                    result = showv;
                  }
                } else {
                  if (formula_default.acompareb(matchv, searchkey)) {
                    result = matchv;
                  }
                }
              }
            } else if (isdatatype(searchkey) == "num") {
              var rangeNow = [];
              for (var i2 = 0; i2 < range2.length; i2++) {
                var matchv = range2[i2];
                var showv;
                if (arguments[2]) {
                  showv = range22[i2];
                  if (matchv == searchkey) {
                    result = showv;
                    return result;
                  } else if (matchv != searchkey && isdatatype(matchv) == "num") {
                    rangeNow.push(matchv);
                  }
                } else {
                  if (matchv == searchkey) {
                    result = matchv;
                    return result;
                  } else if (matchv != searchkey && isdatatype(matchv) == "num") {
                    rangeNow.push(matchv);
                  }
                }
              }
              if (rangeNow.length != 0) {
                rangeNow.push(searchkey);
                rangeNow.sort(sortNum);
                var index2 = rangeNow.indexOf(searchkey);
                if (index2 == rangeNow.length - 1) {
                  return [formula_default.error.na, "\u627E\u4E0D\u5230\u5BF9\u5E94\u53C2\u6570"];
                } else {
                  var mat = rangeNow[index2 + 1];
                  if (arguments[2]) {
                    var i2 = range2.indexOf(mat);
                    result = range22[i2];
                  } else {
                    result = mat;
                  }
                }
              }
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "INDEX": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_array = arguments[0];
            var array = [];
            let isReference = false;
            if (getObjType(data_array) == "array") {
              if (getObjType(data_array[0]) == "array" && !func_methods_default.isDyadicArr(data_array)) {
                return formula_default.error.v;
              }
              array = func_methods_default.getDataDyadicArr(data_array);
            } else if (getObjType(data_array) == "object" && data_array.startCell != null) {
              array = func_methods_default.getCellDataDyadicArr(data_array, "number");
              isReference = true;
            }
            var rowlen = array.length, collen = array[0].length;
            var row_num = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(row_num)) {
              return row_num;
            }
            if (!isRealNum(row_num)) {
              return formula_default.error.v;
            }
            row_num = parseInt(row_num);
            var column_num = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(column_num)) {
              return column_num;
            }
            if (row_num < 0 || isRealNum(column_num) && column_num < 0) {
              return formula_default.error.v;
            }
            if (row_num > rowlen || isRealNum(column_num) && column_num > collen) {
              return formula_default.error.r;
            }
            if (isReference) {
              var cellrange = formula_default.getcellrange(data_array.startCell);
              var cellRow0 = cellrange["row"][0];
              var cellCol0 = cellrange["column"][0];
              let data = array;
              if (row_num == 0 || column_num == 0) {
                if (row_num == 0) {
                  data = array[0];
                  row_num = 1;
                } else {
                  data = array[row_num - 1];
                }
                if (isRealNum(column_num)) {
                  if (column_num == 0) {
                    data = data[0];
                    column_num = 1;
                  } else {
                    data = data[column_num - 1];
                  }
                } else {
                  column_num = 1;
                }
              } else {
                if (!isRealNum(row_num)) {
                  row_num = 1;
                }
                if (!isRealNum(column_num)) {
                  column_num = 1;
                }
                data = array[row_num - 1][column_num - 1];
              }
              let row_index = cellRow0 + row_num - 1, column_index = cellCol0 + column_num - 1;
              let retAll = {
                "sheetName": data_array.sheetName,
                "startCell": getRangetxt(store_default.calculateSheetIndex, {
                  row: [row_index, row_index],
                  column: [column_index, column_index]
                }),
                "rowl": row_index,
                "coll": column_index,
                "data": data
              };
              return retAll;
            } else {
              if (!isRealNum(column_num)) {
                return formula_default.error.v;
              }
              column_num = parseInt(column_num);
              if (row_num <= 0 || column_num <= 0) {
                return formula_default.error.v;
              }
              return array[row_num - 1][column_num - 1];
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "GETPIVOTDATA": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            return formula_default.error.v;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "CHOOSE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var index_num = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(index_num)) {
              return index_num;
            }
            if (!isRealNum(index_num)) {
              return formula_default.error.v;
            }
            index_num = parseInt(index_num);
            if (index_num < 1 || index_num > arguments.length - 1) {
              return formula_default.error.v;
            }
            var data_result = arguments[index_num];
            if (getObjType(data_result) == "array") {
              if (getObjType(data_result[0]) == "array" && !func_methods_default.isDyadicArr(data_result)) {
                return formula_default.error.v;
              }
              return data_result;
            } else if (getObjType(data_result) == "object" && data_result.startCell != null) {
              if (data_result.data == null) {
                return 0;
              }
              if (getObjType(data_result.data) == "array") {
                var result = func_methods_default.getCellDataDyadicArr(data_result.data, "number");
                return result;
              } else {
                if (isRealNull(data_result.data.v)) {
                  return 0;
                }
                return data_result.data.v;
              }
            } else {
              return data_result;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "HYPERLINK": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            return formula_default.error.v;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TIME": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var hour = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(hour)) {
              return hour;
            }
            if (!isRealNum(hour)) {
              return formula_default.error.v;
            }
            hour = parseInt(hour);
            var minute = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(minute)) {
              return minute;
            }
            if (!isRealNum(minute)) {
              return formula_default.error.v;
            }
            minute = parseInt(minute);
            var second = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(second)) {
              return second;
            }
            if (!isRealNum(second)) {
              return formula_default.error.v;
            }
            second = parseInt(second);
            if (hour < 0 || hour > 32767) {
              return formula_default.error.nm;
            } else if (hour > 24) {
              hour = hour % 24;
            }
            if (minute < 0 || minute > 32767) {
              return formula_default.error.nm;
            }
            if (second < 0 || second > 32767) {
              return formula_default.error.nm;
            }
            var time = (0, import_dayjs8.default)().set({"hour": hour, "minute": minute, "second": second});
            return (0, import_dayjs8.default)(time).format("h:mm:ss a");
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TIMEVALUE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var time_text = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(time_text)) {
              return time_text;
            }
            if (!(0, import_dayjs8.default)(time_text).isValid()) {
              return formula_default.error.v;
            }
            return (3600 * (0, import_dayjs8.default)(time_text).get("hour") + 60 * (0, import_dayjs8.default)(time_text).get("minute") + (0, import_dayjs8.default)(time_text).get("second")) / 86400;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "EOMONTH": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var start_date = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(start_date)) {
              return start_date;
            }
            var months = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(months)) {
              return months;
            }
            if (!isRealNum(months)) {
              return formula_default.error.v;
            }
            months = parseInt(months);
            if (!(0, import_dayjs8.default)(start_date).isValid()) {
              return formula_default.error.v;
            }
            var date = (0, import_dayjs8.default)(start_date).add(months + 1, "months").set("date", 1).subtract(1, "days");
            var mask = genarate((0, import_dayjs8.default)(date).format("YYYY-MM-DD H:mm:ss"));
            var result = mask[2];
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "EDATE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var start_date = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(start_date)) {
              return start_date;
            }
            var months = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(months)) {
              return months;
            }
            if (!isRealNum(months)) {
              return formula_default.error.v;
            }
            months = parseInt(months);
            if (!(0, import_dayjs8.default)(start_date).isValid()) {
              return formula_default.error.v;
            }
            var date = (0, import_dayjs8.default)(start_date).add(months, "months");
            var mask = genarate((0, import_dayjs8.default)(date).format("YYYY-MM-DD h:mm:ss"));
            var result = mask[2];
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SECOND": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var time_text = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(time_text)) {
              return time_text;
            }
            if (!(0, import_dayjs8.default)(time_text).isValid()) {
              return formula_default.error.v;
            }
            var result = (0, import_dayjs8.default)(time_text).seconds();
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MINUTE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var time_text = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(time_text)) {
              return time_text;
            }
            if (!(0, import_dayjs8.default)(time_text).isValid()) {
              return formula_default.error.v;
            }
            var result = (0, import_dayjs8.default)(time_text).minutes();
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "HOUR": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var time_text = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(time_text)) {
              return time_text;
            }
            if (!(0, import_dayjs8.default)(time_text).isValid()) {
              return formula_default.error.v;
            }
            var result = (0, import_dayjs8.default)(time_text).hours();
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "NOW": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            return (0, import_dayjs8.default)().format("YYYY-M-D HH:mm");
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "NETWORKDAYS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            if (arguments.length == 3) {
              var result = window.luckysheet_function.NETWORKDAYS_INTL.f(arguments[0], arguments[1], 1, arguments[2]);
            } else {
              var result = window.luckysheet_function.NETWORKDAYS_INTL.f(arguments[0], arguments[1], 1);
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "NETWORKDAYS_INTL": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var WEEKEND_TYPES = [
              [],
              [6, 0],
              [0, 1],
              [1, 2],
              [2, 3],
              [3, 4],
              [4, 5],
              [5, 6],
              void 0,
              void 0,
              void 0,
              [0, 0],
              [1, 1],
              [2, 2],
              [3, 3],
              [4, 4],
              [5, 5],
              [6, 6]
            ];
            var start_date = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(start_date)) {
              return start_date;
            }
            if (!(0, import_dayjs8.default)(start_date).isValid()) {
              return formula_default.error.v;
            }
            var end_date = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(end_date)) {
              return end_date;
            }
            if (!(0, import_dayjs8.default)(end_date).isValid()) {
              return formula_default.error.v;
            }
            var weekend = WEEKEND_TYPES[1];
            if (arguments.length >= 3) {
              weekend = arguments[2];
              if (typeof weekend == "string" && weekend.length == "7" && /^[0-1]{7}$/g.test(weekend)) {
              } else {
                weekend = func_methods_default.getFirstValue(arguments[2]);
                if (valueIsError(weekend)) {
                  return weekend;
                }
                if (!isRealNum(weekend)) {
                  return formula_default.error.v;
                }
                weekend = parseInt(weekend);
                if (weekend < 1 || weekend > 7 && weekend < 11 || weekend > 17) {
                  return formula_default.error.nm;
                }
                weekend = WEEKEND_TYPES[weekend];
              }
            }
            var holidays = [];
            if (arguments.length == 4) {
              holidays = func_methods_default.getCellrangeDate(arguments[3]);
              if (valueIsError(holidays)) {
                return holidays;
              }
            }
            for (var i2 = 0; i2 < holidays.length; i2++) {
              if (!(0, import_dayjs8.default)(holidays[i2]).isValid()) {
                return formula_default.error.v;
              }
            }
            var days = (0, import_dayjs8.default)(end_date).diff((0, import_dayjs8.default)(start_date), "days") + 1;
            var total = days;
            var day = (0, import_dayjs8.default)(start_date);
            for (i2 = 0; i2 < days; i2++) {
              var d = (0, import_dayjs8.default)(day).weekday();
              var dec = false;
              if (getObjType(weekend) == "array") {
                if (d === weekend[0] || d === weekend[1]) {
                  dec = true;
                }
              } else {
                if (d == 0) {
                  d = 7;
                }
                if (weekend.charAt(d - 1) == "0") {
                  dec = true;
                }
              }
              for (var j = 0; j < holidays.length; j++) {
                if ((0, import_dayjs8.default)(day).diff((0, import_dayjs8.default)(holidays[j]), "days") === 0) {
                  dec = true;
                  break;
                }
              }
              if (dec) {
                total--;
              }
              day = (0, import_dayjs8.default)(day).add(1, "days");
            }
            return total;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISOWEEKNUM": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var date = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(date)) {
              return date;
            }
            if (!(0, import_dayjs8.default)(date).isValid()) {
              return formula_default.error.v;
            }
            return (0, import_dayjs8.default)(date).isoWeeks();
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "WEEKNUM": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var WEEK_STARTS = [
              void 0,
              7,
              1,
              void 0,
              void 0,
              void 0,
              void 0,
              void 0,
              void 0,
              void 0,
              void 0,
              1,
              2,
              3,
              4,
              5,
              6,
              7
            ];
            var serial_number = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(serial_number)) {
              return serial_number;
            }
            if (!(0, import_dayjs8.default)(serial_number).isValid()) {
              return formula_default.error.v;
            }
            var return_type = 1;
            if (arguments.length == 2) {
              return_type = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(return_type)) {
                return return_type;
              }
              if (!isRealNum(return_type)) {
                return formula_default.error.v;
              }
              return_type = parseInt(return_type);
            }
            if (return_type == 21) {
              return window.luckysheet_function.ISOWEEKNUM.f(arguments[0]);
            }
            if ([1, 2, 11, 12, 13, 14, 15, 16, 17].indexOf(return_type) == -1) {
              return formula_default.error.nm;
            }
            var week_start = WEEK_STARTS[return_type];
            var inc = (0, import_dayjs8.default)(serial_number).isoWeekday() >= week_start ? 1 : 0;
            var result = (0, import_dayjs8.default)(serial_number).isoWeeks() + inc;
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "WEEKDAY": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var WEEK_TYPES = [
              [],
              [1, 2, 3, 4, 5, 6, 7],
              [7, 1, 2, 3, 4, 5, 6],
              [6, 0, 1, 2, 3, 4, 5],
              [],
              [],
              [],
              [],
              [],
              [],
              [],
              [7, 1, 2, 3, 4, 5, 6],
              [6, 7, 1, 2, 3, 4, 5],
              [5, 6, 7, 1, 2, 3, 4],
              [4, 5, 6, 7, 1, 2, 3],
              [3, 4, 5, 6, 7, 1, 2],
              [2, 3, 4, 5, 6, 7, 1],
              [1, 2, 3, 4, 5, 6, 7]
            ];
            var serial_number = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(serial_number)) {
              return serial_number;
            }
            if (!(0, import_dayjs8.default)(serial_number).isValid()) {
              return formula_default.error.v;
            }
            var return_type = 1;
            if (arguments.length == 2) {
              return_type = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(return_type)) {
                return return_type;
              }
              if (!isRealNum(return_type)) {
                return formula_default.error.v;
              }
              return_type = parseInt(return_type);
            }
            if ([1, 2, 3, 11, 12, 13, 14, 15, 16, 17].indexOf(return_type) == -1) {
              return formula_default.error.nm;
            }
            var result = WEEK_TYPES[return_type][(0, import_dayjs8.default)(serial_number).day()];
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DAY": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var serial_number = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(serial_number)) {
              return serial_number;
            }
            if (!(0, import_dayjs8.default)(serial_number).isValid()) {
              return formula_default.error.v;
            }
            return (0, import_dayjs8.default)(serial_number).date();
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DAYS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var end_date = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(end_date)) {
              return end_date;
            }
            if (!(0, import_dayjs8.default)(end_date).isValid()) {
              return formula_default.error.v;
            }
            var start_date = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(start_date)) {
              return start_date;
            }
            if (!(0, import_dayjs8.default)(start_date).isValid()) {
              return formula_default.error.v;
            }
            var result = (0, import_dayjs8.default)(end_date).diff((0, import_dayjs8.default)(start_date), "days");
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DAYS360": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var start_date = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(start_date)) {
              return start_date;
            }
            if (!(0, import_dayjs8.default)(start_date).isValid()) {
              return formula_default.error.v;
            }
            var end_date = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(end_date)) {
              return end_date;
            }
            if (!(0, import_dayjs8.default)(end_date).isValid()) {
              return formula_default.error.v;
            }
            var method2 = false;
            if (arguments.length == 3) {
              method2 = func_methods_default.getCellBoolen(arguments[2]);
              if (valueIsError(method2)) {
                return method2;
              }
            }
            var sm = (0, import_dayjs8.default)(start_date).month();
            var em = (0, import_dayjs8.default)(end_date).month();
            var sd, ed;
            if (method2) {
              sd = (0, import_dayjs8.default)(start_date).date() === 31 ? 30 : (0, import_dayjs8.default)(start_date).date();
              ed = (0, import_dayjs8.default)(end_date).date() === 31 ? 30 : (0, import_dayjs8.default)(end_date).date();
            } else {
              var smd = (0, import_dayjs8.default)().set({"year": (0, import_dayjs8.default)(start_date).year(), "month": sm + 1, "date": 0}).date();
              var emd = (0, import_dayjs8.default)().set({"year": (0, import_dayjs8.default)(end_date).year(), "month": em + 1, "date": 0}).date();
              sd = (0, import_dayjs8.default)(start_date).date() === smd ? 30 : (0, import_dayjs8.default)(start_date).date();
              if ((0, import_dayjs8.default)(end_date).date() === emd) {
                if (sd < 30) {
                  em++;
                  ed = 1;
                } else {
                  ed = 30;
                }
              } else {
                ed = (0, import_dayjs8.default)(end_date).date();
              }
            }
            var result = 360 * (0, import_dayjs8.default)(end_date).diff((0, import_dayjs8.default)(start_date), "years") + 30 * (em - sm) + (ed - sd);
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DATE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var year = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(year)) {
              return year;
            }
            if (!isRealNum(year)) {
              return formula_default.error.v;
            }
            year = parseInt(year);
            var month = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(month)) {
              return month;
            }
            if (!isRealNum(month)) {
              return formula_default.error.v;
            }
            month = parseInt(month);
            var day = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(day)) {
              return day;
            }
            if (!isRealNum(day)) {
              return formula_default.error.v;
            }
            day = parseInt(day);
            if (year < 0 || year >= 1e4) {
              return formula_default.error.nm;
            } else if (year >= 0 && year <= 1899) {
              year = year + 1900;
            }
            var date = (0, import_dayjs8.default)().set({"year": year, "month": month - 1, "date": day});
            if ((0, import_dayjs8.default)(date).year() < 1900) {
              return formula_default.error.nm;
            }
            return (0, import_dayjs8.default)(date).format("YYYY-MM-DD");
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DATEVALUE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var date_text = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(date_text)) {
              return date_text;
            }
            if (!(0, import_dayjs8.default)(date_text).isValid()) {
              return formula_default.error.v;
            }
            date_text = (0, import_dayjs8.default)(date_text).format("YYYY-MM-DD");
            var result = genarate(date_text)[2];
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DATEDIF": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            for (var i2 = 0; i2 < arguments.length - 1; i2++) {
              arguments[i2] = func_methods_default.getCellDate(arguments[i2]);
              if (!isdatetime(arguments[i2])) {
                return formula_default.error.v;
              }
            }
            var startDate = (0, import_dayjs8.default)(arguments[0]);
            var endDate = (0, import_dayjs8.default)(arguments[1]);
            var unit = arguments[2];
            var result = formula_default.error.v;
            if (window.luckysheet_function.DAYS.f(endDate, startDate) < 0) {
              return formula_default.error.v;
            }
            switch (unit) {
              case "Y":
              case "y":
                result = endDate.diff(startDate, "years", false);
                break;
              case "M":
              case "m":
                result = endDate.diff(startDate, "months", false);
                break;
              case "D":
              case "d":
                result = endDate.diff(startDate, "days", false);
                break;
              case "MD":
              case "md":
                result = endDate.format("DD") - startDate.format("DD");
                break;
              case "YM":
              case "ym":
                var startM = parseInt(startDate.format("M"));
                var endM = parseInt(endDate.format("M"));
                result = startM <= endM ? endM - startM : endM + 12 - startM;
                break;
              case "YD":
              case "yd":
                const format = `${endDate.$y}-MM-DD`;
                var startM = genarate(startDate.format(format))[2];
                var endM = genarate(endDate.format(format))[2];
                result = startM <= endM ? endM - startM : endM + 365 - startM;
                break;
              default:
                result = formula_default.error.v;
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "WORKDAY": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            if (arguments.length == 3) {
              var result = window.luckysheet_function.WORKDAY_INTL.f(arguments[0], arguments[1], 1, arguments[2]);
            } else {
              var result = window.luckysheet_function.WORKDAY_INTL.f(arguments[0], arguments[1], 1);
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "WORKDAY_INTL": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var WEEKEND_TYPES = [
              [],
              [6, 0],
              [0, 1],
              [1, 2],
              [2, 3],
              [3, 4],
              [4, 5],
              [5, 6],
              void 0,
              void 0,
              void 0,
              [0, 0],
              [1, 1],
              [2, 2],
              [3, 3],
              [4, 4],
              [5, 5],
              [6, 6]
            ];
            var start_date = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(start_date)) {
              return start_date;
            }
            if (!(0, import_dayjs8.default)(start_date).isValid()) {
              return formula_default.error.v;
            }
            var days = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(days)) {
              return days;
            }
            if (!isRealNum(days)) {
              return formula_default.error.v;
            }
            days = parseInt(days);
            var weekend = WEEKEND_TYPES[1];
            if (arguments.length >= 3) {
              weekend = arguments[2];
              if (typeof weekend == "string" && weekend.length == "7" && /^[0-1]{7}$/g.test(weekend)) {
              } else {
                weekend = func_methods_default.getFirstValue(arguments[2]);
                if (valueIsError(weekend)) {
                  return weekend;
                }
                if (!isRealNum(weekend)) {
                  return formula_default.error.v;
                }
                weekend = parseInt(weekend);
                if (weekend < 1 || weekend > 7 && weekend < 11 || weekend > 17) {
                  return formula_default.error.nm;
                }
                weekend = WEEKEND_TYPES[weekend];
              }
            }
            var holidays = [];
            if (arguments.length == 4) {
              holidays = func_methods_default.getCellrangeDate(arguments[3]);
              if (valueIsError(holidays)) {
                return holidays;
              }
            }
            for (var i2 = 0; i2 < holidays.length; i2++) {
              if (!(0, import_dayjs8.default)(holidays[i2]).isValid()) {
                return formula_default.error.v;
              }
            }
            var d = 0;
            while (d < days) {
              start_date = (0, import_dayjs8.default)(start_date).add(1, "days");
              var day = (0, import_dayjs8.default)(start_date).weekday();
              if (getObjType(weekend)) {
                if (day === weekend[0] || day === weekend[1]) {
                  continue;
                }
              } else {
                if (day == 0) {
                  day = 7;
                }
                if (weekend.charAt(day - 1) == "0") {
                  continue;
                }
              }
              for (var j = 0; j < holidays.length; j++) {
                if ((0, import_dayjs8.default)(start_date).diff((0, import_dayjs8.default)(holidays[j]), "days") === 0) {
                  d--;
                  break;
                }
              }
              d++;
            }
            return (0, import_dayjs8.default)(start_date).format("YYYY-MM-DD");
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "YEAR": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var serial_number = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(serial_number)) {
              return serial_number;
            }
            if (!(0, import_dayjs8.default)(serial_number).isValid()) {
              return formula_default.error.v;
            }
            return (0, import_dayjs8.default)(serial_number).year();
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "YEARFRAC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var start_date = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(start_date)) {
              return start_date;
            }
            if (!(0, import_dayjs8.default)(start_date).isValid()) {
              return formula_default.error.v;
            }
            var end_date = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(end_date)) {
              return end_date;
            }
            if (!(0, import_dayjs8.default)(end_date).isValid()) {
              return formula_default.error.v;
            }
            var basis = 0;
            if (arguments.length == 3) {
              basis = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            var sd = (0, import_dayjs8.default)(start_date).date();
            var sm = (0, import_dayjs8.default)(start_date).month() + 1;
            var sy = (0, import_dayjs8.default)(start_date).year();
            var ed = (0, import_dayjs8.default)(end_date).date();
            var em = (0, import_dayjs8.default)(end_date).month() + 1;
            var ey = (0, import_dayjs8.default)(end_date).year();
            var result;
            switch (basis) {
              case 0:
                if (sd === 31 && ed === 31) {
                  sd = 30;
                  ed = 30;
                } else if (sd === 31) {
                  sd = 30;
                } else if (sd === 30 && ed === 31) {
                  ed = 30;
                }
                result = (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360)) / 360;
                break;
              case 1:
                var ylength = 365;
                if (sy === ey || sy + 1 === ey && (sm > em || sm === em && sd >= ed)) {
                  if (sy === ey && func_methods_default.isLeapYear(sy) || func_methods_default.feb29Between(start_date, end_date) || em === 1 && ed === 29) {
                    ylength = 366;
                  }
                  return (0, import_dayjs8.default)(end_date).diff((0, import_dayjs8.default)(start_date), "days") / ylength;
                }
                var years = ey - sy + 1;
                var days = ((0, import_dayjs8.default)().set({"year": ey + 1, "month": 0, "date": 1}) - (0, import_dayjs8.default)().set({"year": sy, "month": 0, "date": 1})) / 1e3 / 60 / 60 / 24;
                var average = days / years;
                result = (0, import_dayjs8.default)(end_date).diff((0, import_dayjs8.default)(start_date), "days") / average;
                break;
              case 2:
                result = (0, import_dayjs8.default)(end_date).diff((0, import_dayjs8.default)(start_date), "days") / 360;
                break;
              case 3:
                result = (0, import_dayjs8.default)(end_date).diff((0, import_dayjs8.default)(start_date), "days") / 365;
                break;
              case 4:
                result = (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360)) / 360;
                break;
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TODAY": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            return (0, import_dayjs8.default)().format("YYYY-MM-DD");
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MONTH": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var serial_number = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(serial_number)) {
              return serial_number;
            }
            if (!(0, import_dayjs8.default)(serial_number).isValid()) {
              return formula_default.error.v;
            }
            return (0, import_dayjs8.default)(serial_number).month() + 1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "EFFECT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var nominal_rate = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(nominal_rate)) {
              return nominal_rate;
            }
            if (!isRealNum(nominal_rate)) {
              return formula_default.error.v;
            }
            nominal_rate = parseFloat(nominal_rate);
            var npery = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(npery)) {
              return npery;
            }
            if (!isRealNum(npery)) {
              return formula_default.error.v;
            }
            npery = parseInt(npery);
            if (nominal_rate <= 0 || npery < 1) {
              return formula_default.error.nm;
            }
            return Math.pow(1 + nominal_rate / npery, npery) - 1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DOLLAR": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var decimals = 2;
            if (arguments.length == 2) {
              decimals = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(decimals)) {
                return decimals;
              }
              if (!isRealNum(decimals)) {
                return formula_default.error.v;
              }
              decimals = parseInt(decimals);
            }
            if (decimals > 9) {
              decimals = 9;
            }
            var foucsStatus = "0.";
            for (var i2 = 1; i2 <= decimals; i2++) {
              foucsStatus += "0";
            }
            var sign = number > 0 ? 1 : -1;
            return sign * Math.floor(Math.abs(number) * Math.pow(10, decimals)) / Math.pow(10, decimals);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DOLLARDE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var fractional_dollar = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(fractional_dollar)) {
              return fractional_dollar;
            }
            if (!isRealNum(fractional_dollar)) {
              return formula_default.error.v;
            }
            fractional_dollar = parseFloat(fractional_dollar);
            var fraction = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(fraction)) {
              return fraction;
            }
            if (!isRealNum(fraction)) {
              return formula_default.error.v;
            }
            fraction = parseInt(fraction);
            if (fraction < 0) {
              return formula_default.error.nm;
            } else if (fraction == 0) {
              return formula_default.error.d;
            }
            var result = parseInt(fractional_dollar, 10);
            result += fractional_dollar % 1 * Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN10)) / fraction;
            var power = Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN2) + 1);
            result = Math.round(result * power) / power;
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DOLLARFR": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var decimal_dollar = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(decimal_dollar)) {
              return decimal_dollar;
            }
            if (!isRealNum(decimal_dollar)) {
              return formula_default.error.v;
            }
            decimal_dollar = parseFloat(decimal_dollar);
            var fraction = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(fraction)) {
              return fraction;
            }
            if (!isRealNum(fraction)) {
              return formula_default.error.v;
            }
            fraction = parseInt(fraction);
            if (fraction < 0) {
              return formula_default.error.nm;
            } else if (fraction == 0) {
              return formula_default.error.d;
            }
            var result = parseInt(decimal_dollar, 10);
            result += decimal_dollar % 1 * Math.pow(10, -Math.ceil(Math.log(fraction) / Math.LN10)) * fraction;
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DB": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cost = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(cost)) {
              return cost;
            }
            if (!isRealNum(cost)) {
              return formula_default.error.v;
            }
            cost = parseFloat(cost);
            var salvage = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(salvage)) {
              return salvage;
            }
            if (!isRealNum(salvage)) {
              return formula_default.error.v;
            }
            salvage = parseFloat(salvage);
            var life = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(life)) {
              return life;
            }
            if (!isRealNum(life)) {
              return formula_default.error.v;
            }
            life = parseFloat(life);
            var period = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(period)) {
              return period;
            }
            if (!isRealNum(period)) {
              return formula_default.error.v;
            }
            period = parseInt(period);
            var month = 12;
            if (arguments.length == 5) {
              month = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(month)) {
                return month;
              }
              if (!isRealNum(month)) {
                return formula_default.error.v;
              }
              month = parseInt(month);
            }
            if (cost < 0 || salvage < 0 || life < 0 || period < 0) {
              return formula_default.error.nm;
            }
            if (month < 1 || month > 12) {
              return formula_default.error.nm;
            }
            if (period > life) {
              return formula_default.error.nm;
            }
            if (salvage >= cost) {
              return 0;
            }
            var rate = (1 - Math.pow(salvage / cost, 1 / life)).toFixed(3);
            var initial = cost * rate * month / 12;
            var total = initial;
            var current = 0;
            var ceiling = period === life ? life - 1 : period;
            for (var i2 = 2; i2 <= ceiling; i2++) {
              current = (cost - total) * rate;
              total += current;
            }
            if (period === 1) {
              var result = initial;
            } else if (period === life) {
              var result = (cost - total) * rate;
            } else {
              var result = current;
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DDB": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cost = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(cost)) {
              return cost;
            }
            if (!isRealNum(cost)) {
              return formula_default.error.v;
            }
            cost = parseFloat(cost);
            var salvage = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(salvage)) {
              return salvage;
            }
            if (!isRealNum(salvage)) {
              return formula_default.error.v;
            }
            salvage = parseFloat(salvage);
            var life = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(life)) {
              return life;
            }
            if (!isRealNum(life)) {
              return formula_default.error.v;
            }
            life = parseFloat(life);
            var period = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(period)) {
              return period;
            }
            if (!isRealNum(period)) {
              return formula_default.error.v;
            }
            period = parseInt(period);
            var factor = 2;
            if (arguments.length == 5) {
              factor = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(factor)) {
                return factor;
              }
              if (!isRealNum(factor)) {
                return formula_default.error.v;
              }
              factor = parseFloat(factor);
            }
            if (cost < 0 || salvage < 0 || life < 0 || period < 0 || factor <= 0) {
              return formula_default.error.nm;
            }
            if (period > life) {
              return formula_default.error.nm;
            }
            if (salvage >= cost) {
              return 0;
            }
            var total = 0;
            var current = 0;
            for (var i2 = 1; i2 <= period; i2++) {
              current = Math.min((cost - total) * (factor / life), cost - salvage - total);
              total += current;
            }
            return current;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "RATE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var nper = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(nper)) {
              return nper;
            }
            if (!isRealNum(nper)) {
              return formula_default.error.v;
            }
            nper = parseFloat(nper);
            var pmt = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(pmt)) {
              return pmt;
            }
            if (!isRealNum(pmt)) {
              return formula_default.error.v;
            }
            pmt = parseFloat(pmt);
            var pv = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(pv)) {
              return pv;
            }
            if (!isRealNum(pv)) {
              return formula_default.error.v;
            }
            pv = parseFloat(pv);
            var fv = 0;
            if (arguments.length >= 4) {
              fv = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(fv)) {
                return fv;
              }
              if (!isRealNum(fv)) {
                return formula_default.error.v;
              }
              fv = parseFloat(fv);
            }
            var type = 0;
            if (arguments.length >= 5) {
              type = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(type)) {
                return type;
              }
              if (!isRealNum(type)) {
                return formula_default.error.v;
              }
              type = parseFloat(type);
            }
            var guess = 0.1;
            if (arguments.length == 6) {
              guess = func_methods_default.getFirstValue(arguments[5]);
              if (valueIsError(guess)) {
                return guess;
              }
              if (!isRealNum(guess)) {
                return formula_default.error.v;
              }
              guess = parseFloat(guess);
            }
            if (type != 0 && type != 1) {
              return formula_default.error.nm;
            }
            var epsMax = 1e-6;
            var iterMax = 100;
            var iter = 0;
            var close = false;
            var rate = guess;
            while (iter < iterMax && !close) {
              var t1 = Math.pow(rate + 1, nper);
              var t2 = Math.pow(rate + 1, nper - 1);
              var f1 = fv + t1 * pv + pmt * (t1 - 1) * (rate * type + 1) / rate;
              var f2 = nper * t2 * pv - pmt * (t1 - 1) * (rate * type + 1) / Math.pow(rate, 2);
              var f3 = nper * pmt * t2 * (rate * type + 1) / rate + pmt * (t1 - 1) * type / rate;
              var newRate = rate - f1 / (f2 + f3);
              if (Math.abs(newRate - rate) < epsMax)
                close = true;
              iter++;
              rate = newRate;
            }
            if (!close)
              return formula_default.error.nm;
            return rate;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "CUMPRINC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var rate = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var nper = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(nper)) {
              return nper;
            }
            if (!isRealNum(nper)) {
              return formula_default.error.v;
            }
            nper = parseFloat(nper);
            var pv = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(pv)) {
              return pv;
            }
            if (!isRealNum(pv)) {
              return formula_default.error.v;
            }
            pv = parseFloat(pv);
            var start_period = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(start_period)) {
              return start_period;
            }
            if (!isRealNum(start_period)) {
              return formula_default.error.v;
            }
            start_period = parseInt(start_period);
            var end_period = func_methods_default.getFirstValue(arguments[4]);
            if (valueIsError(end_period)) {
              return end_period;
            }
            if (!isRealNum(end_period)) {
              return formula_default.error.v;
            }
            end_period = parseInt(end_period);
            var type = func_methods_default.getFirstValue(arguments[5]);
            if (valueIsError(type)) {
              return type;
            }
            if (!isRealNum(type)) {
              return formula_default.error.v;
            }
            type = parseFloat(type);
            if (rate <= 0 || nper <= 0 || pv <= 0) {
              return formula_default.error.nm;
            }
            if (start_period < 1 || end_period < 1 || start_period > end_period) {
              return formula_default.error.nm;
            }
            if (type != 0 && type != 1) {
              return formula_default.error.nm;
            }
            var payment = window.luckysheet_function.PMT.f(rate, nper, pv, 0, type);
            var principal = 0;
            if (start_period === 1) {
              if (type === 0) {
                principal = payment + pv * rate;
              } else {
                principal = payment;
              }
              start_period++;
            }
            for (var i2 = start_period; i2 <= end_period; i2++) {
              if (type > 0) {
                principal += payment - (window.luckysheet_function.FV.f(rate, i2 - 2, payment, pv, 1) - payment) * rate;
              } else {
                principal += payment - window.luckysheet_function.FV.f(rate, i2 - 1, payment, pv, 0) * rate;
              }
            }
            return principal;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COUPNUM": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var frequency = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(frequency)) {
              return frequency;
            }
            if (!isRealNum(frequency)) {
              return formula_default.error.v;
            }
            frequency = parseInt(frequency);
            var basis = 0;
            if (arguments.length == 4) {
              var basis = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (frequency != 1 && frequency != 2 && frequency != 4) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var sd = (0, import_dayjs8.default)(settlement).date();
            var sm = (0, import_dayjs8.default)(settlement).month() + 1;
            var sy = (0, import_dayjs8.default)(settlement).year();
            var ed = (0, import_dayjs8.default)(maturity).date();
            var em = (0, import_dayjs8.default)(maturity).month() + 1;
            var ey = (0, import_dayjs8.default)(maturity).year();
            var result;
            switch (basis) {
              case 0:
                if (sd === 31 && ed === 31) {
                  sd = 30;
                  ed = 30;
                } else if (sd === 31) {
                  sd = 30;
                } else if (sd === 30 && ed === 31) {
                  ed = 30;
                }
                result = (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360)) / (360 / frequency);
                break;
              case 1:
                var ylength = 365;
                if (sy === ey || sy + 1 === ey && (sm > em || sm === em && sd >= ed)) {
                  if (sy === ey && func_methods_default.isLeapYear(sy) || func_methods_default.feb29Between(settlement, maturity) || em === 1 && ed === 29) {
                    ylength = 366;
                  }
                  return (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days") / (ylength / frequency);
                }
                var years = ey - sy + 1;
                var days = ((0, import_dayjs8.default)().set({"year": ey + 1, "month": 0, "date": 1}) - (0, import_dayjs8.default)().set({"year": sy, "month": 0, "date": 1})) / 1e3 / 60 / 60 / 24;
                var average = days / years;
                result = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days") / (average / frequency);
                break;
              case 2:
                result = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days") / (360 / frequency);
                break;
              case 3:
                result = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days") / (365 / frequency);
                break;
              case 4:
                result = (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360)) / (360 / frequency);
                break;
            }
            return Math.round(result);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SYD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cost = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(cost)) {
              return cost;
            }
            if (!isRealNum(cost)) {
              return formula_default.error.v;
            }
            cost = parseFloat(cost);
            var salvage = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(salvage)) {
              return salvage;
            }
            if (!isRealNum(salvage)) {
              return formula_default.error.v;
            }
            salvage = parseFloat(salvage);
            var life = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(life)) {
              return life;
            }
            if (!isRealNum(life)) {
              return formula_default.error.v;
            }
            life = parseFloat(life);
            var period = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(period)) {
              return period;
            }
            if (!isRealNum(period)) {
              return formula_default.error.v;
            }
            period = parseInt(period);
            if (life == 0) {
              return formula_default.error.nm;
            }
            if (period < 1 || period > life) {
              return formula_default.error.nm;
            }
            return (cost - salvage) * (life - period + 1) * 2 / (life * (life + 1));
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TBILLEQ": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var discount = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(discount)) {
              return discount;
            }
            if (!isRealNum(discount)) {
              return formula_default.error.v;
            }
            discount = parseFloat(discount);
            if (discount <= 0) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) > 0) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(maturity) - (0, import_dayjs8.default)(settlement) > 365 * 24 * 60 * 60 * 1e3) {
              return formula_default.error.nm;
            }
            return 365 * discount / (360 - discount * (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days"));
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TBILLYIELD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var pr = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(pr)) {
              return pr;
            }
            if (!isRealNum(pr)) {
              return formula_default.error.v;
            }
            pr = parseFloat(pr);
            if (pr <= 0) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(maturity) - (0, import_dayjs8.default)(settlement) > 365 * 24 * 60 * 60 * 1e3) {
              return formula_default.error.nm;
            }
            return (100 - pr) / pr * (360 / (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days"));
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TBILLPRICE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var discount = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(discount)) {
              return discount;
            }
            if (!isRealNum(discount)) {
              return formula_default.error.v;
            }
            discount = parseFloat(discount);
            if (discount <= 0) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) > 0) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(maturity) - (0, import_dayjs8.default)(settlement) > 365 * 24 * 60 * 60 * 1e3) {
              return formula_default.error.nm;
            }
            return 100 * (1 - discount * (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days") / 360);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PV": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var rate = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var nper = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(nper)) {
              return nper;
            }
            if (!isRealNum(nper)) {
              return formula_default.error.v;
            }
            nper = parseFloat(nper);
            var pmt = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(pmt)) {
              return pmt;
            }
            if (!isRealNum(pmt)) {
              return formula_default.error.v;
            }
            pmt = parseFloat(pmt);
            var fv = 0;
            if (arguments.length >= 4) {
              fv = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(fv)) {
                return fv;
              }
              if (!isRealNum(fv)) {
                return formula_default.error.v;
              }
              fv = parseFloat(fv);
            }
            var type = 0;
            if (arguments.length >= 5) {
              type = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(type)) {
                return type;
              }
              if (!isRealNum(type)) {
                return formula_default.error.v;
              }
              type = parseFloat(type);
            }
            if (type != 0 && type != 1) {
              return formula_default.error.nm;
            }
            if (rate === 0) {
              var result = -pmt * nper - fv;
            } else {
              var result = ((1 - Math.pow(1 + rate, nper)) / rate * pmt * (1 + rate * type) - fv) / Math.pow(1 + rate, nper);
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ACCRINT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var issue = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(issue)) {
              return issue;
            }
            if (!(0, import_dayjs8.default)(issue).isValid()) {
              return formula_default.error.v;
            }
            var first_interest = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(first_interest)) {
              return first_interest;
            }
            if (!(0, import_dayjs8.default)(first_interest).isValid()) {
              return formula_default.error.v;
            }
            var settlement = func_methods_default.getCellDate(arguments[2]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var rate = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var par = func_methods_default.getFirstValue(arguments[4]);
            if (valueIsError(par)) {
              return par;
            }
            if (!isRealNum(par)) {
              return formula_default.error.v;
            }
            par = parseFloat(par);
            var frequency = func_methods_default.getFirstValue(arguments[5]);
            if (valueIsError(frequency)) {
              return frequency;
            }
            if (!isRealNum(frequency)) {
              return formula_default.error.v;
            }
            frequency = parseInt(frequency);
            var basis = 0;
            if (arguments.length >= 7) {
              basis = func_methods_default.getFirstValue(arguments[6]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            var calc_method = true;
            if (arguments.length == 8) {
              calc_method = func_methods_default.getCellBoolen(arguments[7]);
              if (valueIsError(calc_method)) {
                return calc_method;
              }
            }
            if (rate <= 0 || par <= 0) {
              return formula_default.error.nm;
            }
            if (frequency != 1 && frequency != 2 && frequency != 4) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(issue) - (0, import_dayjs8.default)(settlement) >= 0) {
              return formula_default.error.nm;
            }
            var result;
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(first_interest) >= 0 && !calc_method) {
              var sd = (0, import_dayjs8.default)(first_interest).date();
              var sm = (0, import_dayjs8.default)(first_interest).month() + 1;
              var sy = (0, import_dayjs8.default)(first_interest).year();
              var ed = (0, import_dayjs8.default)(settlement).date();
              var em = (0, import_dayjs8.default)(settlement).month() + 1;
              var ey = (0, import_dayjs8.default)(settlement).year();
              switch (basis) {
                case 0:
                  if (sd === 31 && ed === 31) {
                    sd = 30;
                    ed = 30;
                  } else if (sd === 31) {
                    sd = 30;
                  } else if (sd === 30 && ed === 31) {
                    ed = 30;
                  }
                  result = (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360)) / 360;
                  break;
                case 1:
                  var ylength = 365;
                  if (sy === ey || sy + 1 === ey && (sm > em || sm === em && sd >= ed)) {
                    if (sy === ey && func_methods_default.isLeapYear(sy) || func_methods_default.feb29Between(first_interest, settlement) || em === 1 && ed === 29) {
                      ylength = 366;
                    }
                    return (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(first_interest), "days") / ylength;
                  }
                  var years = ey - sy + 1;
                  var days = ((0, import_dayjs8.default)().set({"year": ey + 1, "month": 0, "date": 1}) - (0, import_dayjs8.default)().set({"year": sy, "month": 0, "date": 1})) / 1e3 / 60 / 60 / 24;
                  var average = days / years;
                  result = (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(first_interest), "days") / average;
                  break;
                case 2:
                  result = (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(first_interest), "days") / 360;
                  break;
                case 3:
                  result = (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(first_interest), "days") / 365;
                  break;
                case 4:
                  result = (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360)) / 360;
                  break;
              }
            } else {
              var sd = (0, import_dayjs8.default)(issue).date();
              var sm = (0, import_dayjs8.default)(issue).month() + 1;
              var sy = (0, import_dayjs8.default)(issue).year();
              var ed = (0, import_dayjs8.default)(settlement).date();
              var em = (0, import_dayjs8.default)(settlement).month() + 1;
              var ey = (0, import_dayjs8.default)(settlement).year();
              switch (basis) {
                case 0:
                  if (sd === 31 && ed === 31) {
                    sd = 30;
                    ed = 30;
                  } else if (sd === 31) {
                    sd = 30;
                  } else if (sd === 30 && ed === 31) {
                    ed = 30;
                  }
                  result = (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360)) / 360;
                  break;
                case 1:
                  var ylength = 365;
                  if (sy === ey || sy + 1 === ey && (sm > em || sm === em && sd >= ed)) {
                    if (sy === ey && func_methods_default.isLeapYear(sy) || func_methods_default.feb29Between(issue, settlement) || em === 1 && ed === 29) {
                      ylength = 366;
                    }
                    return (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(issue), "days") / ylength;
                  }
                  var years = ey - sy + 1;
                  var days = ((0, import_dayjs8.default)().set({"year": ey + 1, "month": 0, "date": 1}) - (0, import_dayjs8.default)().set({"year": sy, "month": 0, "date": 1})) / 1e3 / 60 / 60 / 24;
                  var average = days / years;
                  result = (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(issue), "days") / average;
                  break;
                case 2:
                  result = (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(issue), "days") / 360;
                  break;
                case 3:
                  result = (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(issue), "days") / 365;
                  break;
                case 4:
                  result = (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360)) / 360;
                  break;
              }
            }
            return par * rate * result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ACCRINTM": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var issue = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(issue)) {
              return issue;
            }
            if (!(0, import_dayjs8.default)(issue).isValid()) {
              return formula_default.error.v;
            }
            var settlement = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var rate = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var par = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(par)) {
              return par;
            }
            if (!isRealNum(par)) {
              return formula_default.error.v;
            }
            par = parseFloat(par);
            var basis = 0;
            if (arguments.length == 5) {
              basis = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (rate <= 0 || par <= 0) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(issue) - (0, import_dayjs8.default)(settlement) >= 0) {
              return formula_default.error.nm;
            }
            var sd = (0, import_dayjs8.default)(issue).date();
            var sm = (0, import_dayjs8.default)(issue).month() + 1;
            var sy = (0, import_dayjs8.default)(issue).year();
            var ed = (0, import_dayjs8.default)(settlement).date();
            var em = (0, import_dayjs8.default)(settlement).month() + 1;
            var ey = (0, import_dayjs8.default)(settlement).year();
            var result;
            switch (basis) {
              case 0:
                if (sd === 31 && ed === 31) {
                  sd = 30;
                  ed = 30;
                } else if (sd === 31) {
                  sd = 30;
                } else if (sd === 30 && ed === 31) {
                  ed = 30;
                }
                result = (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360)) / 360;
                break;
              case 1:
                var ylength = 365;
                if (sy === ey || sy + 1 === ey && (sm > em || sm === em && sd >= ed)) {
                  if (sy === ey && func_methods_default.isLeapYear(sy) || func_methods_default.feb29Between(issue, settlement) || em === 1 && ed === 29) {
                    ylength = 366;
                  }
                  return (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(issue), "days") / ylength;
                }
                var years = ey - sy + 1;
                var days = ((0, import_dayjs8.default)().set({"year": ey + 1, "month": 0, "date": 1}) - (0, import_dayjs8.default)().set({"year": sy, "month": 0, "date": 1})) / 1e3 / 60 / 60 / 24;
                var average = days / years;
                result = (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(issue), "days") / average;
                break;
              case 2:
                result = (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(issue), "days") / 360;
                break;
              case 3:
                result = (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(issue), "days") / 365;
                break;
              case 4:
                result = (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360)) / 360;
                break;
            }
            return par * rate * result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COUPDAYBS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var frequency = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(frequency)) {
              return frequency;
            }
            if (!isRealNum(frequency)) {
              return formula_default.error.v;
            }
            frequency = parseInt(frequency);
            var basis = 0;
            if (arguments.length == 4) {
              basis = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (frequency != 1 && frequency != 2 && frequency != 4) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var interest;
            var maxCount = Math.ceil((0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "months") / (12 / frequency)) + 1;
            for (var i2 = 1; i2 <= maxCount; i2++) {
              var di = (0, import_dayjs8.default)(maturity).subtract(12 / frequency * i2, "months");
              if (di <= (0, import_dayjs8.default)(settlement)) {
                interest = di;
                break;
              }
            }
            var result;
            switch (basis) {
              case 0:
                var sd = (0, import_dayjs8.default)(interest).date();
                var sm = (0, import_dayjs8.default)(interest).month() + 1;
                var sy = (0, import_dayjs8.default)(interest).year();
                var ed = (0, import_dayjs8.default)(settlement).date();
                var em = (0, import_dayjs8.default)(settlement).month() + 1;
                var ey = (0, import_dayjs8.default)(settlement).year();
                if (sd === 31 && ed === 31) {
                  sd = 30;
                  ed = 30;
                } else if (sd === 31) {
                  sd = 30;
                } else if (sd === 30 && ed === 31) {
                  ed = 30;
                }
                result = ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360);
                break;
              case 1:
              case 2:
              case 3:
                result = (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(interest), "days");
                break;
              case 4:
                var sd = (0, import_dayjs8.default)(interest).date();
                var sm = (0, import_dayjs8.default)(interest).month() + 1;
                var sy = (0, import_dayjs8.default)(interest).year();
                var ed = (0, import_dayjs8.default)(settlement).date();
                var em = (0, import_dayjs8.default)(settlement).month() + 1;
                var ey = (0, import_dayjs8.default)(settlement).year();
                result = ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360);
                break;
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COUPDAYS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var frequency = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(frequency)) {
              return frequency;
            }
            if (!isRealNum(frequency)) {
              return formula_default.error.v;
            }
            frequency = parseInt(frequency);
            var basis = 0;
            if (arguments.length == 4) {
              basis = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (frequency != 1 && frequency != 2 && frequency != 4) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var result;
            switch (basis) {
              case 0:
                result = 360 / frequency;
                break;
              case 1:
                var maxCount = Math.ceil((0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "months") / (12 / frequency)) + 1;
                for (var i2 = 1; i2 <= maxCount; i2++) {
                  var d1 = (0, import_dayjs8.default)(maturity).subtract(12 / frequency * i2, "months");
                  if (d1 <= (0, import_dayjs8.default)(settlement)) {
                    var d2 = (0, import_dayjs8.default)(maturity).subtract(12 / frequency * (i2 - 1), "months");
                    result = (0, import_dayjs8.default)(d2).diff((0, import_dayjs8.default)(d1), "days");
                    break;
                  }
                }
                break;
              case 2:
                result = 360 / frequency;
                break;
              case 3:
                result = 365 / frequency;
                break;
              case 4:
                result = 360 / frequency;
                break;
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COUPDAYSNC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var frequency = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(frequency)) {
              return frequency;
            }
            if (!isRealNum(frequency)) {
              return formula_default.error.v;
            }
            frequency = parseInt(frequency);
            var basis = 0;
            if (arguments.length == 4) {
              basis = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (frequency != 1 && frequency != 2 && frequency != 4) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var interest;
            var maxCount = Math.ceil((0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "months") / (12 / frequency)) + 1;
            for (var i2 = 1; i2 <= maxCount; i2++) {
              var di = (0, import_dayjs8.default)(maturity).subtract(12 / frequency * i2, "months");
              if (di <= (0, import_dayjs8.default)(settlement)) {
                interest = (0, import_dayjs8.default)(maturity).subtract(12 / frequency * (i2 - 1), "months");
                break;
              }
            }
            var result;
            switch (basis) {
              case 0:
                var sd = (0, import_dayjs8.default)(settlement).date();
                var sm = (0, import_dayjs8.default)(settlement).month() + 1;
                var sy = (0, import_dayjs8.default)(settlement).year();
                var ed = (0, import_dayjs8.default)(interest).date();
                var em = (0, import_dayjs8.default)(interest).month() + 1;
                var ey = (0, import_dayjs8.default)(interest).year();
                if (sd === 31 && ed === 31) {
                  sd = 30;
                  ed = 30;
                } else if (sd === 31) {
                  sd = 30;
                } else if (sd === 30 && ed === 31) {
                  ed = 30;
                }
                result = ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360);
                break;
              case 1:
              case 2:
              case 3:
                result = (0, import_dayjs8.default)(interest).diff((0, import_dayjs8.default)(settlement), "days");
                break;
              case 4:
                var sd = (0, import_dayjs8.default)(settlement).date();
                var sm = (0, import_dayjs8.default)(settlement).month() + 1;
                var sy = (0, import_dayjs8.default)(settlement).year();
                var ed = (0, import_dayjs8.default)(interest).date();
                var em = (0, import_dayjs8.default)(interest).month() + 1;
                var ey = (0, import_dayjs8.default)(interest).year();
                result = ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360);
                break;
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COUPNCD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var frequency = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(frequency)) {
              return frequency;
            }
            if (!isRealNum(frequency)) {
              return formula_default.error.v;
            }
            frequency = parseInt(frequency);
            var basis = 0;
            if (arguments.length == 4) {
              basis = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (frequency != 1 && frequency != 2 && frequency != 4) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var interest;
            var maxCount = Math.ceil((0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "months") / (12 / frequency)) + 1;
            for (var i2 = 1; i2 <= maxCount; i2++) {
              var di = (0, import_dayjs8.default)(maturity).subtract(12 / frequency * i2, "months");
              if (di <= (0, import_dayjs8.default)(settlement)) {
                interest = (0, import_dayjs8.default)(maturity).subtract(12 / frequency * (i2 - 1), "months");
                break;
              }
            }
            return (0, import_dayjs8.default)(interest).format("YYYY-MM-DD");
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COUPPCD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var frequency = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(frequency)) {
              return frequency;
            }
            if (!isRealNum(frequency)) {
              return formula_default.error.v;
            }
            frequency = parseInt(frequency);
            var basis = 0;
            if (arguments.length == 4) {
              basis = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (frequency != 1 && frequency != 2 && frequency != 4) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var interest;
            var maxCount = Math.ceil((0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "months") / (12 / frequency)) + 1;
            for (var i2 = 1; i2 <= maxCount; i2++) {
              var di = (0, import_dayjs8.default)(maturity).subtract(12 / frequency * i2, "months");
              if (di <= (0, import_dayjs8.default)(settlement)) {
                interest = di;
                break;
              }
            }
            return (0, import_dayjs8.default)(interest).format("YYYY-MM-DD");
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "FV": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var rate = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var nper = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(nper)) {
              return nper;
            }
            if (!isRealNum(nper)) {
              return formula_default.error.v;
            }
            nper = parseFloat(nper);
            var pmt = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(pmt)) {
              return pmt;
            }
            if (!isRealNum(pmt)) {
              return formula_default.error.v;
            }
            pmt = parseFloat(pmt);
            var pv = 0;
            if (arguments.length >= 4) {
              pv = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(pv)) {
                return pv;
              }
              if (!isRealNum(pv)) {
                return formula_default.error.v;
              }
              pv = parseFloat(pv);
            }
            var type = 0;
            if (arguments.length >= 5) {
              type = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(type)) {
                return type;
              }
              if (!isRealNum(type)) {
                return formula_default.error.v;
              }
              type = parseFloat(type);
            }
            if (type != 0 && type != 1) {
              return formula_default.error.nm;
            }
            var result;
            if (rate === 0) {
              result = pv + pmt * nper;
            } else {
              var term = Math.pow(1 + rate, nper);
              if (type === 1) {
                result = pv * term + pmt * (1 + rate) * (term - 1) / rate;
              } else {
                result = pv * term + pmt * (term - 1) / rate;
              }
            }
            return -result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "FVSCHEDULE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var principal = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(principal)) {
              return principal;
            }
            if (!isRealNum(principal)) {
              return formula_default.error.v;
            }
            principal = parseFloat(principal);
            var data_schedule = arguments[1];
            var schedule = [];
            if (getObjType(data_schedule) == "array") {
              if (getObjType(data_schedule[0]) == "array" && !func_methods_default.isDyadicArr(data_schedule)) {
                return formula_default.error.v;
              }
              schedule = schedule.concat(func_methods_default.getDataArr(data_schedule, false));
            } else if (getObjType(data_schedule) == "object" && data_schedule.startCell != null) {
              schedule = schedule.concat(func_methods_default.getCellDataArr(data_schedule, "number", false));
            } else {
              schedule.push(data_schedule);
            }
            var schedule_n = [];
            for (var i2 = 0; i2 < schedule.length; i2++) {
              var number = schedule[i2];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              schedule_n.push(parseFloat(number));
            }
            var n = schedule_n.length;
            var future = principal;
            for (var i2 = 0; i2 < n; i2++) {
              future *= 1 + schedule_n[i2];
            }
            return future;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "YIELD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var rate = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var pr = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(pr)) {
              return pr;
            }
            if (!isRealNum(pr)) {
              return formula_default.error.v;
            }
            pr = parseFloat(pr);
            var redemption = func_methods_default.getFirstValue(arguments[4]);
            if (valueIsError(redemption)) {
              return redemption;
            }
            if (!isRealNum(redemption)) {
              return formula_default.error.v;
            }
            redemption = parseFloat(redemption);
            var frequency = func_methods_default.getFirstValue(arguments[5]);
            if (valueIsError(frequency)) {
              return frequency;
            }
            if (!isRealNum(frequency)) {
              return formula_default.error.v;
            }
            frequency = parseInt(frequency);
            var basis = 0;
            if (arguments.length == 7) {
              basis = func_methods_default.getFirstValue(arguments[6]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (rate < 0) {
              return formula_default.error.nm;
            }
            if (pr <= 0 || redemption <= 0) {
              return formula_default.error.nm;
            }
            if (frequency != 1 && frequency != 2 && frequency != 4) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var num = window.luckysheet_function.COUPNUM.f(settlement, maturity, frequency, basis);
            if (num > 1) {
              var a = 1;
              var b = 0;
              var yld = a;
              for (var i2 = 1; i2 <= 100; i2++) {
                var price = window.luckysheet_function.PRICE.f(settlement, maturity, rate, yld, redemption, frequency, basis);
                if (Math.abs(price - pr) < 1e-6) {
                  break;
                }
                if (price > pr) {
                  b = yld;
                } else {
                  a = yld;
                }
                yld = (a + b) / 2;
              }
              var result = yld;
            } else {
              var DSR = window.luckysheet_function.COUPDAYSNC.f(settlement, maturity, frequency, basis);
              var E = window.luckysheet_function.COUPDAYS.f(settlement, maturity, frequency, basis);
              var A = window.luckysheet_function.COUPDAYBS.f(settlement, maturity, frequency, basis);
              var T1 = redemption / 100 + rate / frequency;
              var T2 = pr / 100 + A / E * (rate / frequency);
              var T3 = frequency * E / DSR;
              var result = (T1 - T2) / T2 * T3;
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "YIELDDISC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var pr = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(pr)) {
              return pr;
            }
            if (!isRealNum(pr)) {
              return formula_default.error.v;
            }
            pr = parseFloat(pr);
            var redemption = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(redemption)) {
              return redemption;
            }
            if (!isRealNum(redemption)) {
              return formula_default.error.v;
            }
            redemption = parseFloat(redemption);
            var basis = 0;
            if (arguments.length == 5) {
              basis = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (pr <= 0 || redemption <= 0) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var yearfrac = window.luckysheet_function.YEARFRAC.f(settlement, maturity, basis);
            return (redemption / pr - 1) / yearfrac;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "NOMINAL": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var effect_rate = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(effect_rate)) {
              return effect_rate;
            }
            if (!isRealNum(effect_rate)) {
              return formula_default.error.v;
            }
            effect_rate = parseFloat(effect_rate);
            var npery = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(npery)) {
              return npery;
            }
            if (!isRealNum(npery)) {
              return formula_default.error.v;
            }
            npery = parseInt(npery);
            if (effect_rate <= 0 || npery < 1) {
              return formula_default.error.nm;
            }
            return (Math.pow(effect_rate + 1, 1 / npery) - 1) * npery;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "XIRR": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_values = arguments[0];
            var values = [];
            if (getObjType(data_values) == "array") {
              if (getObjType(data_values[0]) == "array" && !func_methods_default.isDyadicArr(data_values)) {
                return formula_default.error.v;
              }
              values = values.concat(func_methods_default.getDataArr(data_values, false));
            } else if (getObjType(data_values) == "object" && data_values.startCell != null) {
              values = values.concat(func_methods_default.getCellDataArr(data_values, "number", false));
            } else {
              values.push(data_values);
            }
            var values_n = [];
            for (var i2 = 0; i2 < values.length; i2++) {
              var number = values[i2];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              values_n.push(parseFloat(number));
            }
            var dates = func_methods_default.getCellrangeDate(arguments[1]);
            if (valueIsError(dates)) {
              return dates;
            }
            for (var i2 = 0; i2 < dates.length; i2++) {
              if (!(0, import_dayjs8.default)(dates[i2]).isValid()) {
                return formula_default.error.v;
              }
            }
            var guess = 0.1;
            if (arguments.length == 3) {
              guess = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(guess)) {
                return guess;
              }
              if (!isRealNum(guess)) {
                return formula_default.error.v;
              }
              guess = parseFloat(guess);
            }
            var positive = false;
            var negative = false;
            for (var i2 = 0; i2 < values_n.length; i2++) {
              if (values_n[i2] > 0) {
                positive = true;
              }
              if (values_n[i2] < 0) {
                negative = true;
              }
              if (positive && negative) {
                break;
              }
            }
            if (!positive || !negative) {
              return formula_default.error.nm;
            }
            if (values_n.length != dates.length) {
              return formula_default.error.nm;
            }
            var irrResult = function(values2, dates2, rate) {
              var r2 = rate + 1;
              var result = values2[0];
              for (var i3 = 1; i3 < values2.length; i3++) {
                result += values2[i3] / Math.pow(r2, window.luckysheet_function.DAYS.f(dates2[i3], dates2[0]) / 365);
              }
              return result;
            };
            var irrResultDeriv = function(values2, dates2, rate) {
              var r2 = rate + 1;
              var result = 0;
              for (var i3 = 1; i3 < values2.length; i3++) {
                var frac = window.luckysheet_function.DAYS.f(dates2[i3], dates2[0]) / 365;
                result -= frac * values2[i3] / Math.pow(r2, frac + 1);
              }
              return result;
            };
            var resultRate = guess;
            var epsMax = 1e-10;
            var newRate, epsRate, resultValue;
            var contLoop = true;
            do {
              resultValue = irrResult(values_n, dates, resultRate);
              newRate = resultRate - resultValue / irrResultDeriv(values_n, dates, resultRate);
              epsRate = Math.abs(newRate - resultRate);
              resultRate = newRate;
              contLoop = epsRate > epsMax && Math.abs(resultValue) > epsMax;
            } while (contLoop);
            return resultRate;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MIRR": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_values = arguments[0];
            var values = [];
            if (getObjType(data_values) == "array") {
              if (getObjType(data_values[0]) == "array" && !func_methods_default.isDyadicArr(data_values)) {
                return formula_default.error.v;
              }
              values = values.concat(func_methods_default.getDataArr(data_values, false));
            } else if (getObjType(data_values) == "object" && data_values.startCell != null) {
              values = values.concat(func_methods_default.getCellDataArr(data_values, "number", false));
            } else {
              values.push(data_values);
            }
            var values_n = [];
            for (var i2 = 0; i2 < values.length; i2++) {
              var number = values[i2];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              values_n.push(parseFloat(number));
            }
            var finance_rate = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(finance_rate)) {
              return finance_rate;
            }
            if (!isRealNum(finance_rate)) {
              return formula_default.error.v;
            }
            finance_rate = parseFloat(finance_rate);
            var reinvest_rate = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(reinvest_rate)) {
              return reinvest_rate;
            }
            if (!isRealNum(reinvest_rate)) {
              return formula_default.error.v;
            }
            reinvest_rate = parseFloat(reinvest_rate);
            var n = values_n.length;
            var payments = [];
            var incomes = [];
            for (var i2 = 0; i2 < n; i2++) {
              if (values_n[i2] < 0) {
                payments.push(values_n[i2]);
              } else {
                incomes.push(values_n[i2]);
              }
            }
            if (payments.length == 0 || incomes.length == 0) {
              return formula_default.error.d;
            }
            var num = -window.luckysheet_function.NPV.f(reinvest_rate, incomes) * Math.pow(1 + reinvest_rate, n - 1);
            var den = window.luckysheet_function.NPV.f(finance_rate, payments) * (1 + finance_rate);
            return Math.pow(num / den, 1 / (n - 1)) - 1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "IRR": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_values = arguments[0];
            var values = [];
            if (getObjType(data_values) == "array") {
              if (getObjType(data_values[0]) == "array" && !func_methods_default.isDyadicArr(data_values)) {
                return formula_default.error.v;
              }
              values = values.concat(func_methods_default.getDataArr(data_values, false));
            } else if (getObjType(data_values) == "object" && data_values.startCell != null) {
              values = values.concat(func_methods_default.getCellDataArr(data_values, "number", true));
            } else {
              values.push(data_values);
            }
            var values_n = [];
            for (var i2 = 0; i2 < values.length; i2++) {
              var number = values[i2];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              values_n.push(parseFloat(number));
            }
            var guess = 0.1;
            if (arguments.length == 2) {
              guess = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(guess)) {
                return guess;
              }
              if (!isRealNum(guess)) {
                return formula_default.error.v;
              }
              guess = parseFloat(guess);
            }
            var dates = [];
            var positive = false;
            var negative = false;
            for (var i2 = 0; i2 < values.length; i2++) {
              dates[i2] = i2 === 0 ? 0 : dates[i2 - 1] + 365;
              if (values[i2] > 0) {
                positive = true;
              }
              if (values[i2] < 0) {
                negative = true;
              }
            }
            if (!positive || !negative) {
              return formula_default.error.nm;
            }
            var irrResult = function(values2, dates2, rate) {
              var r2 = rate + 1;
              var result = values2[0];
              for (var i3 = 1; i3 < values2.length; i3++) {
                result += values2[i3] / Math.pow(r2, (dates2[i3] - dates2[0]) / 365);
              }
              return result;
            };
            var irrResultDeriv = function(values2, dates2, rate) {
              var r2 = rate + 1;
              var result = 0;
              for (var i3 = 1; i3 < values2.length; i3++) {
                var frac = (dates2[i3] - dates2[0]) / 365;
                result -= frac * values2[i3] / Math.pow(r2, frac + 1);
              }
              return result;
            };
            var resultRate = guess;
            var epsMax = 1e-10;
            var newRate, epsRate, resultValue;
            var contLoop = true;
            do {
              resultValue = irrResult(values_n, dates, resultRate);
              newRate = resultRate - resultValue / irrResultDeriv(values_n, dates, resultRate);
              epsRate = Math.abs(newRate - resultRate);
              resultRate = newRate;
              contLoop = epsRate > epsMax && Math.abs(resultValue) > epsMax;
            } while (contLoop);
            return resultRate;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "NPV": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var rate = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var values = [];
            for (var i2 = 1; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                values = values.concat(func_methods_default.getDataArr(data, true));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                values = values.concat(func_methods_default.getCellDataArr(data, "number", true));
              } else {
                values.push(data);
              }
            }
            var values_n = [];
            for (var i2 = 0; i2 < values.length; i2++) {
              var number = values[i2];
              if (isRealNum(number)) {
                values_n.push(parseFloat(number));
              }
            }
            var result = 0;
            if (values_n.length > 0) {
              for (var i2 = 0; i2 < values_n.length; i2++) {
                result += values_n[i2] / Math.pow(1 + rate, i2 + 1);
              }
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "XNPV": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var rate = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var data_values = arguments[1];
            var values = [];
            if (getObjType(data_values) == "array") {
              if (getObjType(data_values[0]) == "array" && !func_methods_default.isDyadicArr(data_values)) {
                return formula_default.error.v;
              }
              values = values.concat(func_methods_default.getDataArr(data_values, false));
            } else if (getObjType(data_values) == "object" && data_values.startCell != null) {
              values = values.concat(func_methods_default.getCellDataArr(data_values, "number", false));
            } else {
              values.push(data_values);
            }
            var values_n = [];
            for (var i2 = 0; i2 < values.length; i2++) {
              var number = values[i2];
              if (!isRealNum(number)) {
                return formula_default.error.v;
              }
              values_n.push(parseFloat(number));
            }
            var dates = func_methods_default.getCellrangeDate(arguments[2]);
            if (valueIsError(dates)) {
              return dates;
            }
            for (var i2 = 0; i2 < dates.length; i2++) {
              if (!(0, import_dayjs8.default)(dates[i2]).isValid()) {
                return formula_default.error.v;
              }
            }
            if (values_n.length != dates.length) {
              return formula_default.error.nm;
            }
            var result = 0;
            for (var i2 = 0; i2 < values_n.length; i2++) {
              result += values_n[i2] / Math.pow(1 + rate, window.luckysheet_function.DAYS.f(dates[i2], dates[0]) / 365);
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "CUMIPMT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var rate = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var nper = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(nper)) {
              return nper;
            }
            if (!isRealNum(nper)) {
              return formula_default.error.v;
            }
            nper = parseFloat(nper);
            var pv = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(pv)) {
              return pv;
            }
            if (!isRealNum(pv)) {
              return formula_default.error.v;
            }
            pv = parseFloat(pv);
            var start_period = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(start_period)) {
              return start_period;
            }
            if (!isRealNum(start_period)) {
              return formula_default.error.v;
            }
            start_period = parseInt(start_period);
            var end_period = func_methods_default.getFirstValue(arguments[4]);
            if (valueIsError(end_period)) {
              return end_period;
            }
            if (!isRealNum(end_period)) {
              return formula_default.error.v;
            }
            end_period = parseInt(end_period);
            var type = func_methods_default.getFirstValue(arguments[5]);
            if (valueIsError(type)) {
              return type;
            }
            if (!isRealNum(type)) {
              return formula_default.error.v;
            }
            type = parseFloat(type);
            if (rate <= 0 || nper <= 0 || pv <= 0) {
              return formula_default.error.nm;
            }
            if (start_period < 1 || end_period < 1 || start_period > end_period) {
              return formula_default.error.nm;
            }
            if (type != 0 && type != 1) {
              return formula_default.error.nm;
            }
            var payment = window.luckysheet_function.PMT.f(rate, nper, pv, 0, type);
            var interest = 0;
            if (start_period === 1) {
              if (type === 0) {
                interest = -pv;
                start_period++;
              }
            }
            for (var i2 = start_period; i2 <= end_period; i2++) {
              if (type === 1) {
                interest += window.luckysheet_function.FV.f(rate, i2 - 2, payment, pv, 1) - payment;
              } else {
                interest += window.luckysheet_function.FV.f(rate, i2 - 1, payment, pv, 0);
              }
            }
            interest *= rate;
            return interest;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PMT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var rate = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var nper = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(nper)) {
              return nper;
            }
            if (!isRealNum(nper)) {
              return formula_default.error.v;
            }
            nper = parseFloat(nper);
            var pv = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(pv)) {
              return pv;
            }
            if (!isRealNum(pv)) {
              return formula_default.error.v;
            }
            pv = parseFloat(pv);
            var fv = 0;
            if (arguments.length >= 4) {
              fv = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(fv)) {
                return fv;
              }
              if (!isRealNum(fv)) {
                return formula_default.error.v;
              }
              fv = parseFloat(fv);
            }
            var type = 0;
            if (arguments.length == 5) {
              type = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(type)) {
                return type;
              }
              if (!isRealNum(type)) {
                return formula_default.error.v;
              }
              type = parseFloat(type);
            }
            if (type != 0 && type != 1) {
              return formula_default.error.nm;
            }
            var result;
            if (rate === 0) {
              result = (pv + fv) / nper;
            } else {
              var term = Math.pow(1 + rate, nper);
              if (type === 1) {
                result = (fv * rate / (term - 1) + pv * rate / (1 - 1 / term)) / (1 + rate);
              } else {
                result = fv * rate / (term - 1) + pv * rate / (1 - 1 / term);
              }
            }
            return -result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "IPMT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var rate = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var per = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(per)) {
              return per;
            }
            if (!isRealNum(per)) {
              return formula_default.error.v;
            }
            per = parseFloat(per);
            var nper = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(nper)) {
              return nper;
            }
            if (!isRealNum(nper)) {
              return formula_default.error.v;
            }
            nper = parseFloat(nper);
            var pv = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(pv)) {
              return pv;
            }
            if (!isRealNum(pv)) {
              return formula_default.error.v;
            }
            pv = parseFloat(pv);
            var fv = 0;
            if (arguments.length >= 5) {
              fv = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(fv)) {
                return fv;
              }
              if (!isRealNum(fv)) {
                return formula_default.error.v;
              }
              fv = parseFloat(fv);
            }
            var type = 0;
            if (arguments.length >= 6) {
              type = func_methods_default.getFirstValue(arguments[5]);
              if (valueIsError(type)) {
                return type;
              }
              if (!isRealNum(type)) {
                return formula_default.error.v;
              }
              type = parseFloat(type);
            }
            if (per < 1 || per > nper) {
              return formula_default.error.nm;
            }
            if (type != 0 && type != 1) {
              return formula_default.error.nm;
            }
            var payment = window.luckysheet_function.PMT.f(rate, nper, pv, fv, type);
            var interest;
            if (per === 1) {
              if (type === 1) {
                interest = 0;
              } else {
                interest = -pv;
              }
            } else {
              if (type === 1) {
                interest = window.luckysheet_function.FV.f(rate, per - 2, payment, pv, 1) - payment;
              } else {
                interest = window.luckysheet_function.FV.f(rate, per - 1, payment, pv, 0);
              }
            }
            var result = interest * rate;
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PPMT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var rate = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var per = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(per)) {
              return per;
            }
            if (!isRealNum(per)) {
              return formula_default.error.v;
            }
            per = parseFloat(per);
            var nper = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(nper)) {
              return nper;
            }
            if (!isRealNum(nper)) {
              return formula_default.error.v;
            }
            nper = parseFloat(nper);
            var pv = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(pv)) {
              return pv;
            }
            if (!isRealNum(pv)) {
              return formula_default.error.v;
            }
            pv = parseFloat(pv);
            var fv = 0;
            if (arguments.length >= 5) {
              fv = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(fv)) {
                return fv;
              }
              if (!isRealNum(fv)) {
                return formula_default.error.v;
              }
              fv = parseFloat(fv);
            }
            var type = 0;
            if (arguments.length >= 6) {
              type = func_methods_default.getFirstValue(arguments[5]);
              if (valueIsError(type)) {
                return type;
              }
              if (!isRealNum(type)) {
                return formula_default.error.v;
              }
              type = parseFloat(type);
            }
            if (per < 1 || per > nper) {
              return formula_default.error.nm;
            }
            if (type != 0 && type != 1) {
              return formula_default.error.nm;
            }
            var payment = window.luckysheet_function.PMT.f(rate, nper, pv, fv, type);
            var payment2 = window.luckysheet_function.IPMT.f(rate, per, nper, pv, fv, type);
            return payment - payment2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "INTRATE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var investment = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(investment)) {
              return investment;
            }
            if (!isRealNum(investment)) {
              return formula_default.error.v;
            }
            investment = parseFloat(investment);
            var redemption = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(redemption)) {
              return redemption;
            }
            if (!isRealNum(redemption)) {
              return formula_default.error.v;
            }
            redemption = parseFloat(redemption);
            var basis = 0;
            if (arguments.length == 5) {
              basis = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (investment <= 0 || redemption <= 0) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var sd = (0, import_dayjs8.default)(settlement).date();
            var sm = (0, import_dayjs8.default)(settlement).month() + 1;
            var sy = (0, import_dayjs8.default)(settlement).year();
            var ed = (0, import_dayjs8.default)(maturity).date();
            var em = (0, import_dayjs8.default)(maturity).month() + 1;
            var ey = (0, import_dayjs8.default)(maturity).year();
            var result;
            switch (basis) {
              case 0:
                if (sd === 31 && ed === 31) {
                  sd = 30;
                  ed = 30;
                } else if (sd === 31) {
                  sd = 30;
                } else if (sd === 30 && ed === 31) {
                  ed = 30;
                }
                result = 360 / (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360));
                break;
              case 1:
                var ylength = 365;
                if (sy === ey || sy + 1 === ey && (sm > em || sm === em && sd >= ed)) {
                  if (sy === ey && func_methods_default.isLeapYear(sy) || func_methods_default.feb29Between(settlement, maturity) || em === 1 && ed === 29) {
                    ylength = 366;
                  }
                  result = ylength / (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                  result = (redemption - investment) / investment * result;
                  return result;
                }
                var years = ey - sy + 1;
                var days = ((0, import_dayjs8.default)().set({"year": ey + 1, "month": 0, "date": 1}) - (0, import_dayjs8.default)().set({"year": sy, "month": 0, "date": 1})) / 1e3 / 60 / 60 / 24;
                var average = days / years;
                result = average / (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                break;
              case 2:
                result = 360 / (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                break;
              case 3:
                result = 365 / (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                break;
              case 4:
                result = 360 / (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360));
                break;
            }
            result = (redemption - investment) / investment * result;
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PRICE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var rate = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var yld = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(yld)) {
              return yld;
            }
            if (!isRealNum(yld)) {
              return formula_default.error.v;
            }
            yld = parseFloat(yld);
            var redemption = func_methods_default.getFirstValue(arguments[4]);
            if (valueIsError(redemption)) {
              return redemption;
            }
            if (!isRealNum(redemption)) {
              return formula_default.error.v;
            }
            redemption = parseFloat(redemption);
            var frequency = func_methods_default.getFirstValue(arguments[5]);
            if (valueIsError(frequency)) {
              return frequency;
            }
            if (!isRealNum(frequency)) {
              return formula_default.error.v;
            }
            frequency = parseInt(frequency);
            var basis = 0;
            if (arguments.length == 7) {
              basis = func_methods_default.getFirstValue(arguments[6]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (rate < 0 || yld < 0) {
              return formula_default.error.nm;
            }
            if (redemption <= 0) {
              return formula_default.error.nm;
            }
            if (frequency != 1 && frequency != 2 && frequency != 4) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var DSC = window.luckysheet_function.COUPDAYSNC.f(settlement, maturity, frequency, basis);
            var E = window.luckysheet_function.COUPDAYS.f(settlement, maturity, frequency, basis);
            var A = window.luckysheet_function.COUPDAYBS.f(settlement, maturity, frequency, basis);
            var num = window.luckysheet_function.COUPNUM.f(settlement, maturity, frequency, basis);
            if (num > 1) {
              var T1 = redemption / Math.pow(1 + yld / frequency, num - 1 + DSC / E);
              var T2 = 0;
              for (var i2 = 1; i2 <= num; i2++) {
                T2 += 100 * rate / frequency / Math.pow(1 + yld / frequency, i2 - 1 + DSC / E);
              }
              var T3 = 100 * (rate / frequency) * (A / E);
              var result = T1 + T2 - T3;
            } else {
              var DSR = E - A;
              var T1 = 100 * (rate / frequency) + redemption;
              var T2 = yld / frequency * (DSR / E) + 1;
              var T3 = 100 * (rate / frequency) * (A / E);
              var result = T1 / T2 - T3;
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PRICEDISC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var discount = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(discount)) {
              return discount;
            }
            if (!isRealNum(discount)) {
              return formula_default.error.v;
            }
            discount = parseFloat(discount);
            var redemption = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(redemption)) {
              return redemption;
            }
            if (!isRealNum(redemption)) {
              return formula_default.error.v;
            }
            redemption = parseFloat(redemption);
            var basis = 0;
            if (arguments.length == 5) {
              basis = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (discount <= 0 || redemption <= 0) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var sd = (0, import_dayjs8.default)(settlement).date();
            var sm = (0, import_dayjs8.default)(settlement).month() + 1;
            var sy = (0, import_dayjs8.default)(settlement).year();
            var ed = (0, import_dayjs8.default)(maturity).date();
            var em = (0, import_dayjs8.default)(maturity).month() + 1;
            var ey = (0, import_dayjs8.default)(maturity).year();
            var result;
            switch (basis) {
              case 0:
                if (sd === 31 && ed === 31) {
                  sd = 30;
                  ed = 30;
                } else if (sd === 31) {
                  sd = 30;
                } else if (sd === 30 && ed === 31) {
                  ed = 30;
                }
                result = (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360)) / 360;
                break;
              case 1:
                var ylength = 365;
                if (sy === ey || sy + 1 === ey && (sm > em || sm === em && sd >= ed)) {
                  if (sy === ey && func_methods_default.isLeapYear(sy) || func_methods_default.feb29Between(settlement, maturity) || em === 1 && ed === 29) {
                    ylength = 366;
                  }
                  result = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days") / ylength;
                  result = redemption - discount * redemption * result;
                  return result;
                }
                var years = ey - sy + 1;
                var days = ((0, import_dayjs8.default)().set({"year": ey + 1, "month": 0, "date": 1}) - (0, import_dayjs8.default)().set({"year": sy, "month": 0, "date": 1})) / 1e3 / 60 / 60 / 24;
                var average = days / years;
                result = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days") / average;
                break;
              case 2:
                result = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days") / 360;
                break;
              case 3:
                result = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days") / 365;
                break;
              case 4:
                result = (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360)) / 360;
                break;
            }
            result = redemption - discount * redemption * result;
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PRICEMAT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var issue = func_methods_default.getCellDate(arguments[2]);
            if (valueIsError(issue)) {
              return issue;
            }
            if (!(0, import_dayjs8.default)(issue).isValid()) {
              return formula_default.error.v;
            }
            var rate = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var yld = func_methods_default.getFirstValue(arguments[4]);
            if (valueIsError(yld)) {
              return yld;
            }
            if (!isRealNum(yld)) {
              return formula_default.error.v;
            }
            yld = parseFloat(yld);
            var basis = 0;
            if (arguments.length == 6) {
              basis = func_methods_default.getFirstValue(arguments[5]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (rate < 0 || yld < 0) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var sd = (0, import_dayjs8.default)(settlement).date();
            var sm = (0, import_dayjs8.default)(settlement).month() + 1;
            var sy = (0, import_dayjs8.default)(settlement).year();
            var ed = (0, import_dayjs8.default)(maturity).date();
            var em = (0, import_dayjs8.default)(maturity).month() + 1;
            var ey = (0, import_dayjs8.default)(maturity).year();
            var td = (0, import_dayjs8.default)(issue).date();
            var tm = (0, import_dayjs8.default)(issue).month() + 1;
            var ty = (0, import_dayjs8.default)(issue).year();
            var result;
            switch (basis) {
              case 0:
                if (sd == 31) {
                  sd = 30;
                }
                if (ed == 31) {
                  ed = 30;
                }
                if (td == 31) {
                  td = 30;
                }
                var B = 360;
                var DSM = ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360);
                var DIM = ed + em * 30 + ey * 360 - (td + tm * 30 + ty * 360);
                var A = sd + sm * 30 + sy * 360 - (td + tm * 30 + ty * 360);
                break;
              case 1:
                var ylength = 365;
                if (sy === ey || sy + 1 === ey && (sm > em || sm === em && sd >= ed)) {
                  if (sy === ey && func_methods_default.isLeapYear(sy) || func_methods_default.feb29Between(settlement, maturity) || em === 1 && ed === 29) {
                    ylength = 366;
                  }
                  var B = ylength;
                  var DSM = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                  var DIM = (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(issue), "days");
                  var A = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(issue), "days");
                  result = (100 + DIM / B * rate * 100) / (1 + DSM / B * yld) - A / B * rate * 100;
                  return result;
                }
                var years = ey - sy + 1;
                var days = ((0, import_dayjs8.default)().set({"year": ey + 1, "month": 0, "date": 1}) - (0, import_dayjs8.default)().set({"year": sy, "month": 0, "date": 1})) / 1e3 / 60 / 60 / 24;
                var average = days / years;
                var B = average;
                var DSM = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                var DIM = (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(issue), "days");
                var A = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(issue), "days");
                break;
              case 2:
                var B = 360;
                var DSM = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                var DIM = (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(issue), "days");
                var A = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(issue), "days");
                break;
              case 3:
                var B = 365;
                var DSM = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                var DIM = (0, import_dayjs8.default)(settlement).diff((0, import_dayjs8.default)(issue), "days");
                var A = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(issue), "days");
                break;
              case 4:
                var B = 360;
                var DSM = ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360);
                var DIM = ed + em * 30 + ey * 360 - (td + tm * 30 + ty * 360);
                var A = sd + sm * 30 + sy * 360 - (td + tm * 30 + ty * 360);
                break;
            }
            result = (100 + DIM / B * rate * 100) / (1 + DSM / B * yld) - A / B * rate * 100;
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "RECEIVED": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var investment = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(investment)) {
              return investment;
            }
            if (!isRealNum(investment)) {
              return formula_default.error.v;
            }
            investment = parseFloat(investment);
            var discount = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(discount)) {
              return discount;
            }
            if (!isRealNum(discount)) {
              return formula_default.error.v;
            }
            discount = parseFloat(discount);
            var basis = 0;
            if (arguments.length == 5) {
              basis = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseFloat(basis);
            }
            if (investment <= 0 || discount <= 0) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var sd = (0, import_dayjs8.default)(settlement).date();
            var sm = (0, import_dayjs8.default)(settlement).month() + 1;
            var sy = (0, import_dayjs8.default)(settlement).year();
            var ed = (0, import_dayjs8.default)(maturity).date();
            var em = (0, import_dayjs8.default)(maturity).month() + 1;
            var ey = (0, import_dayjs8.default)(maturity).year();
            var result;
            switch (basis) {
              case 0:
                if (sd == 31) {
                  sd = 30;
                }
                if (ed == 31) {
                  ed = 30;
                }
                var B = 360;
                var DIM = ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360);
                break;
              case 1:
                var ylength = 365;
                if (sy === ey || sy + 1 === ey && (sm > em || sm === em && sd >= ed)) {
                  if (sy === ey && func_methods_default.isLeapYear(sy) || func_methods_default.feb29Between(settlement, maturity) || em === 1 && ed === 29) {
                    ylength = 366;
                  }
                  var B = ylength;
                  var DIM = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                  result = investment / (1 - discount * DIM / B);
                  return result;
                }
                var years = ey - sy + 1;
                var days = ((0, import_dayjs8.default)().set({"year": ey + 1, "month": 0, "date": 1}) - (0, import_dayjs8.default)().set({"year": sy, "month": 0, "date": 1})) / 1e3 / 60 / 60 / 24;
                var average = days / years;
                var B = average;
                var DIM = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                break;
              case 2:
                var B = 360;
                var DIM = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                break;
              case 3:
                var B = 365;
                var DIM = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                break;
              case 4:
                var B = 360;
                var DIM = ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360);
                break;
            }
            result = investment / (1 - discount * DIM / B);
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DISC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var pr = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(pr)) {
              return pr;
            }
            if (!isRealNum(pr)) {
              return formula_default.error.v;
            }
            pr = parseFloat(pr);
            var redemption = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(redemption)) {
              return redemption;
            }
            if (!isRealNum(redemption)) {
              return formula_default.error.v;
            }
            redemption = parseFloat(redemption);
            var basis = 0;
            if (arguments.length == 5) {
              basis = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseFloat(basis);
            }
            if (pr <= 0 || redemption <= 0) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var sd = (0, import_dayjs8.default)(settlement).date();
            var sm = (0, import_dayjs8.default)(settlement).month() + 1;
            var sy = (0, import_dayjs8.default)(settlement).year();
            var ed = (0, import_dayjs8.default)(maturity).date();
            var em = (0, import_dayjs8.default)(maturity).month() + 1;
            var ey = (0, import_dayjs8.default)(maturity).year();
            var result;
            switch (basis) {
              case 0:
                if (sd == 31) {
                  sd = 30;
                }
                if (ed == 31) {
                  ed = 30;
                }
                var B = 360;
                var DSM = ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360);
                break;
              case 1:
                var ylength = 365;
                if (sy === ey || sy + 1 === ey && (sm > em || sm === em && sd >= ed)) {
                  if (sy === ey && func_methods_default.isLeapYear(sy) || func_methods_default.feb29Between(settlement, maturity) || em === 1 && ed === 29) {
                    ylength = 366;
                  }
                  var B = ylength;
                  var DSM = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                  result = (redemption - pr) / redemption * (B / DSM);
                  return result;
                }
                var years = ey - sy + 1;
                var days = ((0, import_dayjs8.default)().set({"year": ey + 1, "month": 0, "date": 1}) - (0, import_dayjs8.default)().set({"year": sy, "month": 0, "date": 1})) / 1e3 / 60 / 60 / 24;
                var average = days / years;
                var B = average;
                var DSM = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                break;
              case 2:
                var B = 360;
                var DSM = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                break;
              case 3:
                var B = 365;
                var DSM = (0, import_dayjs8.default)(maturity).diff((0, import_dayjs8.default)(settlement), "days");
                break;
              case 4:
                var B = 360;
                var DSM = ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360);
                break;
            }
            result = (redemption - pr) / redemption * (B / DSM);
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "NPER": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var rate = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(rate)) {
              return rate;
            }
            if (!isRealNum(rate)) {
              return formula_default.error.v;
            }
            rate = parseFloat(rate);
            var pmt = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(pmt)) {
              return pmt;
            }
            if (!isRealNum(pmt)) {
              return formula_default.error.v;
            }
            pmt = parseFloat(pmt);
            var pv = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(pv)) {
              return pv;
            }
            if (!isRealNum(pv)) {
              return formula_default.error.v;
            }
            pv = parseFloat(pv);
            var fv = 0;
            if (arguments.length >= 4) {
              fv = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(fv)) {
                return fv;
              }
              if (!isRealNum(fv)) {
                return formula_default.error.v;
              }
              fv = parseFloat(fv);
            }
            var type = 0;
            if (arguments.length >= 5) {
              type = func_methods_default.getFirstValue(arguments[4]);
              if (valueIsError(type)) {
                return type;
              }
              if (!isRealNum(type)) {
                return formula_default.error.v;
              }
              type = parseFloat(type);
            }
            if (type != 0 && type != 1) {
              return formula_default.error.nm;
            }
            var num = pmt * (1 + rate * type) - fv * rate;
            var den = pv * rate + pmt * (1 + rate * type);
            return Math.log(num / den) / Math.log(1 + rate);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SLN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cost = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(cost)) {
              return cost;
            }
            if (!isRealNum(cost)) {
              return formula_default.error.v;
            }
            cost = parseFloat(cost);
            var salvage = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(salvage)) {
              return salvage;
            }
            if (!isRealNum(salvage)) {
              return formula_default.error.v;
            }
            salvage = parseFloat(salvage);
            var life = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(life)) {
              return life;
            }
            if (!isRealNum(life)) {
              return formula_default.error.v;
            }
            life = parseFloat(life);
            if (life == 0) {
              return formula_default.error.d;
            }
            return (cost - salvage) / life;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DURATION": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var coupon = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(coupon)) {
              return coupon;
            }
            if (!isRealNum(coupon)) {
              return formula_default.error.v;
            }
            coupon = parseFloat(coupon);
            var yld = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(yld)) {
              return yld;
            }
            if (!isRealNum(yld)) {
              return formula_default.error.v;
            }
            yld = parseFloat(yld);
            var frequency = func_methods_default.getFirstValue(arguments[4]);
            if (valueIsError(frequency)) {
              return frequency;
            }
            if (!isRealNum(frequency)) {
              return formula_default.error.v;
            }
            frequency = parseInt(frequency);
            var basis = 0;
            if (arguments.length == 6) {
              basis = func_methods_default.getFirstValue(arguments[5]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (coupon < 0 || yld < 0) {
              return formula_default.error.nm;
            }
            if (frequency != 1 && frequency != 2 && frequency != 4) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var nper = window.luckysheet_function.COUPNUM.f(settlement, maturity, frequency, basis);
            var sum1 = 0;
            var sum2 = 0;
            for (var i2 = 1; i2 <= nper; i2++) {
              sum1 += 100 * (coupon / frequency) * i2 / Math.pow(1 + yld / frequency, i2);
              sum2 += 100 * (coupon / frequency) / Math.pow(1 + yld / frequency, i2);
            }
            var result = (sum1 + 100 * nper / Math.pow(1 + yld / frequency, nper)) / (sum2 + 100 / Math.pow(1 + yld / frequency, nper));
            result = result / frequency;
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MDURATION": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var settlement = func_methods_default.getCellDate(arguments[0]);
            if (valueIsError(settlement)) {
              return settlement;
            }
            if (!(0, import_dayjs8.default)(settlement).isValid()) {
              return formula_default.error.v;
            }
            var maturity = func_methods_default.getCellDate(arguments[1]);
            if (valueIsError(maturity)) {
              return maturity;
            }
            if (!(0, import_dayjs8.default)(maturity).isValid()) {
              return formula_default.error.v;
            }
            var coupon = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(coupon)) {
              return coupon;
            }
            if (!isRealNum(coupon)) {
              return formula_default.error.v;
            }
            coupon = parseFloat(coupon);
            var yld = func_methods_default.getFirstValue(arguments[3]);
            if (valueIsError(yld)) {
              return yld;
            }
            if (!isRealNum(yld)) {
              return formula_default.error.v;
            }
            yld = parseFloat(yld);
            var frequency = func_methods_default.getFirstValue(arguments[4]);
            if (valueIsError(frequency)) {
              return frequency;
            }
            if (!isRealNum(frequency)) {
              return formula_default.error.v;
            }
            frequency = parseInt(frequency);
            var basis = 0;
            if (arguments.length == 6) {
              basis = func_methods_default.getFirstValue(arguments[5]);
              if (valueIsError(basis)) {
                return basis;
              }
              if (!isRealNum(basis)) {
                return formula_default.error.v;
              }
              basis = parseInt(basis);
            }
            if (coupon < 0 || yld < 0) {
              return formula_default.error.nm;
            }
            if (frequency != 1 && frequency != 2 && frequency != 4) {
              return formula_default.error.nm;
            }
            if (basis < 0 || basis > 4) {
              return formula_default.error.nm;
            }
            if ((0, import_dayjs8.default)(settlement) - (0, import_dayjs8.default)(maturity) >= 0) {
              return formula_default.error.nm;
            }
            var duration2 = window.luckysheet_function.DURATION.f(settlement, maturity, coupon, yld, frequency, basis);
            return duration2 / (1 + yld / frequency);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "BIN2DEC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!/^[01]{1,10}$/g.test(number)) {
              return formula_default.error.nm;
            }
            var result = parseInt(number, 2);
            var stringified = number.toString();
            if (stringified.length === 10 && stringified.substring(0, 1) === "1") {
              return parseInt(stringified.substring(1), 2) - 512;
            } else {
              return result;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "BIN2HEX": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            var places = null;
            if (arguments.length == 2) {
              places = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(places)) {
                return places;
              }
              if (!isRealNum(places)) {
                return formula_default.error.v;
              }
              places = parseInt(places);
            }
            if (!/^[01]{1,10}$/g.test(number)) {
              return formula_default.error.nm;
            }
            var result = parseInt(number, 2).toString(16).toUpperCase();
            if (places == null) {
              return result;
            } else {
              if (places < 0 || places < result.length) {
                return formula_default.error.nm;
              }
              return new Array(places - result.length + 1).join("0") + result;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "BIN2OCT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            var places = null;
            if (arguments.length == 2) {
              places = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(places)) {
                return places;
              }
              if (!isRealNum(places)) {
                return formula_default.error.v;
              }
              places = parseInt(places);
            }
            if (!/^[01]{1,10}$/g.test(number)) {
              return formula_default.error.nm;
            }
            var stringified = number.toString();
            if (stringified.length === 10 && stringified.substring(0, 1) === "1") {
              return (1073741312 + parseInt(stringified.substring(1), 2)).toString(8);
            }
            var result = parseInt(number, 2).toString(8);
            if (places == null) {
              return result;
            } else {
              if (places < 0 || places < result.length) {
                return formula_default.error.nm;
              }
              return new Array(places - result.length + 1).join("0") + result;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DEC2BIN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var places = null;
            if (arguments.length == 2) {
              places = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(places)) {
                return places;
              }
              if (!isRealNum(places)) {
                return formula_default.error.v;
              }
              places = parseInt(places);
            }
            if (!/^-?[0-9]{1,3}$/.test(number) || number < -512 || number > 511) {
              return formula_default.error.nm;
            }
            if (number < 0) {
              return "1" + new Array(9 - (512 + number).toString(2).length).join("0") + (512 + number).toString(2);
            }
            var result = parseInt(number, 10).toString(2);
            if (places == null) {
              return result;
            } else {
              if (places < 0 || places < result.length) {
                return formula_default.error.nm;
              }
              return new Array(places - result.length + 1).join("0") + result;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DEC2HEX": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var places = null;
            if (arguments.length == 2) {
              places = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(places)) {
                return places;
              }
              if (!isRealNum(places)) {
                return formula_default.error.v;
              }
              places = parseInt(places);
            }
            if (!/^-?[0-9]{1,12}$/.test(number) || number < -549755813888 || number > 549755813887) {
              return formula_default.error.nm;
            }
            if (number < 0) {
              return (1099511627776 + number).toString(16).toUpperCase();
            }
            var result = parseInt(number, 10).toString(16).toUpperCase();
            if (places == null) {
              return result;
            } else {
              if (places < 0 || places < result.length) {
                return formula_default.error.nm;
              }
              return new Array(places - result.length + 1).join("0") + result;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DEC2OCT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var places = null;
            if (arguments.length == 2) {
              places = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(places)) {
                return places;
              }
              if (!isRealNum(places)) {
                return formula_default.error.v;
              }
              places = parseInt(places);
            }
            if (!/^-?[0-9]{1,9}$/.test(number) || number < -536870912 || number > 536870911) {
              return formula_default.error.nm;
            }
            if (number < 0) {
              return (1073741824 + number).toString(8);
            }
            var result = parseInt(number, 10).toString(8);
            if (places == null) {
              return result;
            } else {
              if (places < 0 || places < result.length) {
                return formula_default.error.nm;
              }
              return new Array(places - result.length + 1).join("0") + result;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "HEX2BIN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            var places = null;
            if (arguments.length == 2) {
              places = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(places)) {
                return places;
              }
              if (!isRealNum(places)) {
                return formula_default.error.v;
              }
              places = parseInt(places);
            }
            if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {
              return formula_default.error.nm;
            }
            var negative = number.length === 10 && number.substring(0, 1).toLowerCase() === "f" ? true : false;
            var decimal = negative ? parseInt(number, 16) - 1099511627776 : parseInt(number, 16);
            if (decimal < -512 || decimal > 511) {
              return formula_default.error.nm;
            }
            if (negative) {
              return "1" + new Array(9 - (512 + decimal).toString(2).length).join("0") + (512 + decimal).toString(2);
            }
            var result = decimal.toString(2);
            if (places == null) {
              return result;
            } else {
              if (places < 0 || places < result.length) {
                return formula_default.error.nm;
              }
              return new Array(places - result.length + 1).join("0") + result;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "HEX2DEC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {
              return formula_default.error.nm;
            }
            var decimal = parseInt(number, 16);
            return decimal >= 549755813888 ? decimal - 1099511627776 : decimal;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "HEX2OCT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            var places = null;
            if (arguments.length == 2) {
              places = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(places)) {
                return places;
              }
              if (!isRealNum(places)) {
                return formula_default.error.v;
              }
              places = parseInt(places);
            }
            if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {
              return formula_default.error.nm;
            }
            var decimal = parseInt(number, 16);
            if (decimal > 536870911 && decimal < 1098974756864) {
              return formula_default.error.nm;
            }
            if (decimal >= 1098974756864) {
              return (decimal - 1098437885952).toString(8);
            }
            var result = decimal.toString(8);
            if (places == null) {
              return result;
            } else {
              if (places < 0 || places < result.length) {
                return formula_default.error.nm;
              }
              return new Array(places - result.length + 1).join("0") + result;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "OCT2BIN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            var places = null;
            if (arguments.length == 2) {
              places = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(places)) {
                return places;
              }
              if (!isRealNum(places)) {
                return formula_default.error.v;
              }
              places = parseInt(places);
            }
            if (!/^[0-7]{1,10}$/.test(number)) {
              return formula_default.error.nm;
            }
            number = number.toString();
            var negative = number.length === 10 && number.substring(0, 1) === "7" ? true : false;
            var decimal = negative ? parseInt(number, 8) - 1073741824 : parseInt(number, 8);
            if (decimal < -512 || decimal > 511) {
              return error.num;
            }
            if (negative) {
              return "1" + new Array(9 - (512 + decimal).toString(2).length).join("0") + (512 + decimal).toString(2);
            }
            var result = decimal.toString(2);
            if (places == null) {
              return result;
            } else {
              if (places < 0 || places < result.length) {
                return formula_default.error.nm;
              }
              return new Array(places - result.length + 1).join("0") + result;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "OCT2DEC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!/^[0-7]{1,10}$/.test(number)) {
              return formula_default.error.nm;
            }
            var decimal = parseInt(number, 8);
            return decimal >= 536870912 ? decimal - 1073741824 : decimal;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "OCT2HEX": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            var places = null;
            if (arguments.length == 2) {
              places = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(places)) {
                return places;
              }
              if (!isRealNum(places)) {
                return formula_default.error.v;
              }
              places = parseInt(places);
            }
            if (!/^[0-7]{1,10}$/.test(number)) {
              return formula_default.error.nm;
            }
            var decimal = parseInt(number, 8);
            if (decimal >= 536870912) {
              return "FF" + (decimal + 3221225472).toString(16).toUpperCase();
            }
            var result = decimal.toString(16).toUpperCase();
            if (places == null) {
              return result;
            } else {
              if (places < 0 || places < result.length) {
                return formula_default.error.nm;
              }
              return new Array(places - result.length + 1).join("0") + result;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COMPLEX": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var real_num = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(real_num)) {
              return real_num;
            }
            if (!isRealNum(real_num)) {
              return formula_default.error.v;
            }
            real_num = parseFloat(real_num);
            var i_num = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(i_num)) {
              return i_num;
            }
            if (!isRealNum(i_num)) {
              return formula_default.error.v;
            }
            i_num = parseFloat(i_num);
            var suffix = "i";
            if (arguments.length == 3) {
              suffix = arguments[2].toString();
            }
            if (suffix != "i" && suffix != "j") {
              return formula_default.error.v;
            }
            if (real_num === 0 && i_num === 0) {
              return 0;
            } else if (real_num === 0) {
              return i_num === 1 ? suffix : i_num.toString() + suffix;
            } else if (i_num === 0) {
              return real_num.toString();
            } else {
              var sign = i_num > 0 ? "+" : "";
              return real_num.toString() + sign + (i_num === 1 ? suffix : i_num.toString() + suffix);
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "IMREAL": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var inumber = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(inumber)) {
              return inumber;
            }
            inumber = inumber.toString();
            if (inumber.toLowerCase() == "true" || inumber.toLowerCase() == "false") {
              return formula_default.error.v;
            }
            if (inumber == "0") {
              return 0;
            }
            if (["i", "+i", "1i", "+1i", "-i", "-1i", "j", "+j", "1j", "+1j", "-j", "-1j"].indexOf(inumber) >= 0) {
              return 0;
            }
            var plus = inumber.indexOf("+");
            var minus = inumber.indexOf("-");
            if (plus === 0) {
              plus = inumber.indexOf("+", 1);
            }
            if (minus === 0) {
              minus = inumber.indexOf("-", 1);
            }
            var last = inumber.substring(inumber.length - 1, inumber.length);
            var unit = last === "i" || last === "j";
            if (plus >= 0 || minus >= 0) {
              if (!unit) {
                return formula_default.error.nm;
              }
              if (plus >= 0) {
                return isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1)) ? formula_default.error.nm : Number(inumber.substring(0, plus));
              } else {
                return isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1)) ? formula_default.error.nm : Number(inumber.substring(0, minus));
              }
            } else {
              if (unit) {
                return isNaN(inumber.substring(0, inumber.length - 1)) ? formula_default.error.nm : 0;
              } else {
                return isNaN(inumber) ? formula_default.error.nm : inumber;
              }
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "IMAGINARY": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var inumber = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(inumber)) {
              return inumber;
            }
            inumber = inumber.toString();
            if (inumber.toLowerCase() == "true" || inumber.toLowerCase() == "false") {
              return formula_default.error.v;
            }
            if (inumber == "0") {
              return 0;
            }
            if (["i", "j"].indexOf(inumber) >= 0) {
              return 1;
            }
            inumber = inumber.replace("+i", "+1i").replace("-i", "-1i").replace("+j", "+1j").replace("-j", "-1j");
            var plus = inumber.indexOf("+");
            var minus = inumber.indexOf("-");
            if (plus === 0) {
              plus = inumber.indexOf("+", 1);
            }
            if (minus === 0) {
              minus = inumber.indexOf("-", 1);
            }
            var last = inumber.substring(inumber.length - 1, inumber.length);
            var unit = last === "i" || last === "j";
            if (plus >= 0 || minus >= 0) {
              if (!unit) {
                return formula_default.error.nm;
              }
              if (plus >= 0) {
                return isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1)) ? formula_default.error.nm : Number(inumber.substring(plus + 1, inumber.length - 1));
              } else {
                return isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1)) ? formula_default.error.nm : -Number(inumber.substring(minus + 1, inumber.length - 1));
              }
            } else {
              if (unit) {
                return isNaN(inumber.substring(0, inumber.length - 1)) ? formula_default.error.nm : inumber.substring(0, inumber.length - 1);
              } else {
                return isNaN(inumber) ? formula_default.error.nm : 0;
              }
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "IMCONJUGATE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var inumber = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(inumber)) {
              return inumber;
            }
            inumber = inumber.toString();
            var x = window.luckysheet_function.IMREAL.f(inumber);
            if (valueIsError(x)) {
              return x;
            }
            var y = window.luckysheet_function.IMAGINARY.f(inumber);
            if (valueIsError(y)) {
              return y;
            }
            var unit = inumber.substring(inumber.length - 1);
            unit = unit === "i" || unit === "j" ? unit : "i";
            return y !== 0 ? window.luckysheet_function.COMPLEX.f(x, -y, unit) : inumber;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "IMABS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = window.luckysheet_function.IMREAL.f(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            var y = window.luckysheet_function.IMAGINARY.f(arguments[0]);
            if (valueIsError(y)) {
              return y;
            }
            return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DELTA": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number1 = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number1)) {
              return number1;
            }
            if (!isRealNum(number1)) {
              return formula_default.error.v;
            }
            number1 = parseFloat(number1);
            var number2 = 0;
            if (arguments.length == 2) {
              number2 = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(number2)) {
                return number2;
              }
              if (!isRealNum(number2)) {
                return formula_default.error.v;
              }
              number2 = parseFloat(number2);
            }
            return number1 === number2 ? 1 : 0;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "IMSUM": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = window.luckysheet_function.IMREAL.f(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            var y = window.luckysheet_function.IMAGINARY.f(arguments[0]);
            if (valueIsError(y)) {
              return y;
            }
            var result = arguments[0];
            for (var i2 = 1; i2 < arguments.length; i2++) {
              var a = window.luckysheet_function.IMREAL.f(result);
              if (valueIsError(a)) {
                return a;
              }
              var b = window.luckysheet_function.IMAGINARY.f(result);
              if (valueIsError(b)) {
                return b;
              }
              var c2 = window.luckysheet_function.IMREAL.f(arguments[i2]);
              if (valueIsError(c2)) {
                return c2;
              }
              var d = window.luckysheet_function.IMAGINARY.f(arguments[i2]);
              if (valueIsError(d)) {
                return d;
              }
              result = window.luckysheet_function.COMPLEX.f(a + c2, b + d);
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "IMSUB": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var inumber1 = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(inumber1)) {
              return inumber1;
            }
            inumber1 = inumber1.toString();
            if (inumber1.toLowerCase() == "true" || inumber1.toLowerCase() == "false") {
              return formula_default.error.v;
            }
            var a = window.luckysheet_function.IMREAL.f(inumber1);
            if (valueIsError(a)) {
              return a;
            }
            var b = window.luckysheet_function.IMAGINARY.f(inumber1);
            if (valueIsError(b)) {
              return b;
            }
            var inumber2 = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(inumber2)) {
              return inumber2;
            }
            inumber2 = inumber2.toString();
            if (inumber2.toLowerCase() == "true" || inumber2.toLowerCase() == "false") {
              return formula_default.error.v;
            }
            var c2 = window.luckysheet_function.IMREAL.f(inumber2);
            if (valueIsError(c2)) {
              return c2;
            }
            var d = window.luckysheet_function.IMAGINARY.f(inumber2);
            if (valueIsError(d)) {
              return d;
            }
            var unit1 = inumber1.substring(inumber1.length - 1);
            var unit2 = inumber2.substring(inumber2.length - 1);
            var unit = "i";
            if (unit1 === "j") {
              unit = "j";
            } else if (unit2 === "j") {
              unit = "j";
            }
            return window.luckysheet_function.COMPLEX.f(a - c2, b - d, unit);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "IMPRODUCT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var x = window.luckysheet_function.IMREAL.f(arguments[0]);
            if (valueIsError(x)) {
              return x;
            }
            var y = window.luckysheet_function.IMAGINARY.f(arguments[0]);
            if (valueIsError(y)) {
              return y;
            }
            var result = arguments[0];
            for (var i2 = 1; i2 < arguments.length; i2++) {
              var a = window.luckysheet_function.IMREAL.f(result);
              if (valueIsError(a)) {
                return a;
              }
              var b = window.luckysheet_function.IMAGINARY.f(result);
              if (valueIsError(b)) {
                return b;
              }
              var c2 = window.luckysheet_function.IMREAL.f(arguments[i2]);
              if (valueIsError(c2)) {
                return c2;
              }
              var d = window.luckysheet_function.IMAGINARY.f(arguments[i2]);
              if (valueIsError(d)) {
                return d;
              }
              result = window.luckysheet_function.COMPLEX.f(a * c2 - b * d, a * d + b * c2);
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "IMDIV": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var inumber1 = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(inumber1)) {
              return inumber1;
            }
            inumber1 = inumber1.toString();
            if (inumber1.toLowerCase() == "true" || inumber1.toLowerCase() == "false") {
              return formula_default.error.v;
            }
            var a = window.luckysheet_function.IMREAL.f(inumber1);
            if (valueIsError(a)) {
              return a;
            }
            var b = window.luckysheet_function.IMAGINARY.f(inumber1);
            if (valueIsError(b)) {
              return b;
            }
            var inumber2 = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(inumber2)) {
              return inumber2;
            }
            inumber2 = inumber2.toString();
            if (inumber2.toLowerCase() == "true" || inumber2.toLowerCase() == "false") {
              return formula_default.error.v;
            }
            var c2 = window.luckysheet_function.IMREAL.f(inumber2);
            if (valueIsError(c2)) {
              return c2;
            }
            var d = window.luckysheet_function.IMAGINARY.f(inumber2);
            if (valueIsError(d)) {
              return d;
            }
            var unit1 = inumber1.substring(inumber1.length - 1);
            var unit2 = inumber2.substring(inumber2.length - 1);
            var unit = "i";
            if (unit1 === "j") {
              unit = "j";
            } else if (unit2 === "j") {
              unit = "j";
            }
            if (c2 === 0 && d === 0) {
              return formula_default.error.nm;
            }
            var den = c2 * c2 + d * d;
            return window.luckysheet_function.COMPLEX.f((a * c2 + b * d) / den, (b * c2 - a * d) / den, unit);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "NOT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var logical = func_methods_default.getCellBoolen(arguments[0]);
            if (valueIsError(logical)) {
              return logical;
            }
            return !logical;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TRUE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            return true;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "FALSE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            return false;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "AND": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var result = true;
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var logical = func_methods_default.getCellBoolen(arguments[i2]);
              if (valueIsError(logical)) {
                return logical;
              }
              if (!logical) {
                result = false;
                break;
              }
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "IFERROR": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value_if_error = func_methods_default.getFirstValue(arguments[1], "text");
            var value = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(value) || getObjType(value) === "string" && $.trim(value) === "") {
              return value_if_error;
            }
            return value;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "IF": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var logical_test = func_methods_default.getCellBoolen(arguments[0]);
            if (valueIsError(logical_test)) {
              return logical_test;
            }
            var value_if_true = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(value_if_true) && value_if_false != error.d) {
              return value_if_true;
            }
            var value_if_false = "";
            if (arguments.length == 3) {
              value_if_false = func_methods_default.getFirstValue(arguments[2], "text");
              if (valueIsError(value_if_false) && value_if_false != error.d) {
                return value_if_false;
              }
            }
            if (logical_test) {
              return value_if_true;
            } else {
              return value_if_false;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "OR": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var result = false;
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var logical = func_methods_default.getCellBoolen(arguments[i2]);
              if (valueIsError(logical)) {
                return logical;
              }
              if (logical) {
                result = true;
                break;
              }
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "NE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value1 = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(value1)) {
              return value1;
            }
            var value2 = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(value2)) {
              return value2;
            }
            return value1 != value2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "EQ": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value1 = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(value1)) {
              return value1;
            }
            var value2 = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(value2)) {
              return value2;
            }
            return value1 == value2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "GT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value1 = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(value1)) {
              return value1;
            }
            if (!isRealNum(value1)) {
              return formula_default.error.v;
            }
            value1 = parseFloat(value1);
            var value2 = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(value2)) {
              return value2;
            }
            if (!isRealNum(value2)) {
              return formula_default.error.v;
            }
            value2 = parseFloat(value2);
            return value1 > value2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "GTE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value1 = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(value1)) {
              return value1;
            }
            if (!isRealNum(value1)) {
              return formula_default.error.v;
            }
            value1 = parseFloat(value1);
            var value2 = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(value2)) {
              return value2;
            }
            if (!isRealNum(value2)) {
              return formula_default.error.v;
            }
            value2 = parseFloat(value2);
            return value1 >= value2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value1 = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(value1)) {
              return value1;
            }
            if (!isRealNum(value1)) {
              return formula_default.error.v;
            }
            value1 = parseFloat(value1);
            var value2 = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(value2)) {
              return value2;
            }
            if (!isRealNum(value2)) {
              return formula_default.error.v;
            }
            value2 = parseFloat(value2);
            return value1 < value2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LTE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value1 = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(value1)) {
              return value1;
            }
            if (!isRealNum(value1)) {
              return formula_default.error.v;
            }
            value1 = parseFloat(value1);
            var value2 = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(value2)) {
              return value2;
            }
            if (!isRealNum(value2)) {
              return formula_default.error.v;
            }
            value2 = parseFloat(value2);
            return value1 <= value2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ADD": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value1 = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(value1)) {
              return value1;
            }
            if (!isRealNum(value1)) {
              return formula_default.error.v;
            }
            value1 = parseFloat(value1);
            var value2 = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(value2)) {
              return value2;
            }
            if (!isRealNum(value2)) {
              return formula_default.error.v;
            }
            value2 = parseFloat(value2);
            return value1 + value2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MINUS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value1 = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(value1)) {
              return value1;
            }
            if (!isRealNum(value1)) {
              return formula_default.error.v;
            }
            value1 = parseFloat(value1);
            var value2 = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(value2)) {
              return value2;
            }
            if (!isRealNum(value2)) {
              return formula_default.error.v;
            }
            value2 = parseFloat(value2);
            return value1 - value2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MULTIPLY": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value1 = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(value1)) {
              return value1;
            }
            if (!isRealNum(value1)) {
              return formula_default.error.v;
            }
            value1 = parseFloat(value1);
            var value2 = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(value2)) {
              return value2;
            }
            if (!isRealNum(value2)) {
              return formula_default.error.v;
            }
            value2 = parseFloat(value2);
            return value1 * value2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DIVIDE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value1 = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(value1)) {
              return value1;
            }
            if (!isRealNum(value1)) {
              return formula_default.error.v;
            }
            value1 = parseFloat(value1);
            var value2 = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(value2)) {
              return value2;
            }
            if (!isRealNum(value2)) {
              return formula_default.error.v;
            }
            value2 = parseFloat(value2);
            if (value2 == 0) {
              return formula_default.error.d;
            }
            return value1 / value2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "CONCAT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value1 = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(value1)) {
              return value1;
            }
            var value2 = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(value2)) {
              return value2;
            }
            return value1 + "" + value2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "UNARY_PERCENT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var result = number / 100;
            return Math.round(result * 100) / 100;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "CONCATENATE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var result = "";
            for (var i2 = 0; i2 < arguments.length; i2++) {
              var text = func_methods_default.getFirstValue(arguments[i2], "text");
              if (valueIsError(text)) {
                return text;
              }
              result = result + "" + text;
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "CODE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            if (text == "") {
              return formula_default.error.v;
            }
            return text.charCodeAt(0);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "CHAR": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseInt(number);
            if (number < 1 || number > 255) {
              return formula_default.error.v;
            }
            return String.fromCharCode(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ARABIC": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            text = text.toString().toUpperCase();
            if (!/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/.test(text)) {
              return formula_default.error.v;
            }
            var r2 = 0;
            text.replace(/[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, function(i3) {
              r2 += {
                M: 1e3,
                CM: 900,
                D: 500,
                CD: 400,
                C: 100,
                XC: 90,
                L: 50,
                XL: 40,
                X: 10,
                IX: 9,
                V: 5,
                IV: 4,
                I: 1
              }[i3];
            });
            return r2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ROMAN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            let convert = function(num) {
              var a = [
                ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"],
                ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"],
                ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"],
                ["", "M", "MM", "MMM"]
              ];
              var i3 = a[3][Math.floor(num / 1e3)];
              var j = a[2][Math.floor(num % 1e3 / 100)];
              var k = a[1][Math.floor(num % 100 / 10)];
              var l = a[0][num % 10];
              return i3 + j + k + l;
            };
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseInt(number);
            if (number == 0) {
              return "";
            } else if (number < 1 || number > 3999) {
              return formula_default.error.v;
            }
            return convert(number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "REGEXEXTRACT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            var regular_expression = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(regular_expression)) {
              return regular_expression;
            }
            var match = text.match(new RegExp(regular_expression));
            return match ? match[match.length > 1 ? match.length - 1 : 0] : null;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "REGEXMATCH": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            var regular_expression = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(regular_expression)) {
              return regular_expression;
            }
            var match = text.match(new RegExp(regular_expression));
            return match ? true : false;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "REGEXREPLACE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            var regular_expression = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(regular_expression)) {
              return regular_expression;
            }
            var replacement = func_methods_default.getFirstValue(arguments[2], "text");
            if (valueIsError(replacement)) {
              return replacement;
            }
            return text.replace(new RegExp(regular_expression), replacement);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "T": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(value)) {
              return value;
            }
            return getObjType(value) == "string" ? value : "";
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "FIXED": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var decimals = 2;
            if (arguments.length >= 2) {
              decimals = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(decimals)) {
                return decimals;
              }
              if (!isRealNum(decimals)) {
                return formula_default.error.v;
              }
              decimals = parseInt(decimals);
            }
            var no_commas = false;
            if (arguments.length == 3) {
              no_commas = func_methods_default.getCellBoolen(arguments[2]);
              if (valueIsError(no_commas)) {
                return no_commas;
              }
            }
            if (decimals > 127) {
              return formula_default.error.v;
            }
            var format = no_commas ? "0" : "#,##0";
            if (decimals <= 0) {
              number = Math.round(number * Math.pow(10, decimals)) / Math.pow(10, decimals);
            } else if (decimals > 0) {
              format += "." + new Array(decimals + 1).join("0");
            }
            return update(format, number);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "FIND": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var find_text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(find_text)) {
              return find_text;
            }
            find_text = find_text.toString();
            var within_text = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(within_text)) {
              return within_text;
            }
            within_text = within_text.toString();
            var start_num = 1;
            if (arguments.length == 3) {
              start_num = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(start_num)) {
                return start_num;
              }
              if (!isRealNum(start_num)) {
                return formula_default.error.v;
              }
              start_num = parseFloat(start_num);
            }
            if (start_num < 0 || start_num > within_text.length) {
              return formula_default.error.v;
            }
            if (find_text == "") {
              return start_num;
            }
            if (within_text.indexOf(find_text) == -1) {
              return formula_default.error.v;
            }
            var result = within_text.indexOf(find_text, start_num - 1) + 1;
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "FINDB": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var find_text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(find_text)) {
              return find_text;
            }
            find_text = find_text.toString();
            var within_text = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(within_text)) {
              return within_text;
            }
            within_text = within_text.toString();
            var start_num = 1;
            if (arguments.length == 3) {
              start_num = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(start_num)) {
                return start_num;
              }
              if (!isRealNum(start_num)) {
                return formula_default.error.v;
              }
              start_num = parseFloat(start_num);
            }
            if (start_num < 0 || start_num > within_text.length) {
              return formula_default.error.v;
            }
            if (find_text == "") {
              return start_num;
            }
            if (within_text.indexOf(find_text) == -1) {
              return formula_default.error.v;
            }
            var strArr = within_text.split("");
            var index2 = within_text.indexOf(find_text, start_num - 1);
            var result = 0;
            for (var i2 = 0; i2 < index2; i2++) {
              if (/[^\x00-\xff]/g.test(strArr[i2])) {
                result += 2;
              } else {
                result += 1;
              }
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "JOIN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var separator = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(separator)) {
              return separator;
            }
            var dataArr = [];
            for (var i2 = 1; i2 < arguments.length; i2++) {
              var data = arguments[i2];
              if (getObjType(data) == "array") {
                if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                  return formula_default.error.v;
                }
                dataArr = dataArr.concat(func_methods_default.getDataArr(data, false));
              } else if (getObjType(data) == "object" && data.startCell != null) {
                dataArr = dataArr.concat(func_methods_default.getCellDataArr(data, "text", false));
              } else {
                dataArr.push(data);
              }
            }
            return dataArr.join(separator);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LEFT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            text = text.toString();
            var num_chars = 1;
            if (arguments.length == 2) {
              num_chars = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(num_chars)) {
                return num_chars;
              }
              if (!isRealNum(num_chars)) {
                return formula_default.error.v;
              }
              num_chars = parseInt(num_chars);
            }
            if (num_chars < 0) {
              return formula_default.error.v;
            }
            if (num_chars >= text.length) {
              return text;
            } else if (num_chars == 0) {
              return "";
            } else {
              return text.substr(0, num_chars);
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "RIGHT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            text = text.toString();
            var num_chars = 1;
            if (arguments.length == 2) {
              num_chars = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(num_chars)) {
                return num_chars;
              }
              if (!isRealNum(num_chars)) {
                return formula_default.error.v;
              }
              num_chars = parseInt(num_chars);
            }
            if (num_chars < 0) {
              return formula_default.error.v;
            }
            if (num_chars >= text.length) {
              return text;
            } else if (num_chars == 0) {
              return "";
            } else {
              return text.substr(-num_chars, num_chars);
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MID": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            text = text.toString();
            var start_num = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(start_num)) {
              return start_num;
            }
            if (!isRealNum(start_num)) {
              return formula_default.error.v;
            }
            start_num = parseInt(start_num);
            var num_chars = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(num_chars)) {
              return num_chars;
            }
            if (!isRealNum(num_chars)) {
              return formula_default.error.v;
            }
            num_chars = parseInt(num_chars);
            if (start_num < 1 || num_chars < 0) {
              return formula_default.error.v;
            }
            if (start_num > text.length) {
              return "";
            }
            if (start_num + num_chars > text.length) {
              return text.substr(start_num - 1, text.length - start_num + 1);
            }
            return text.substr(start_num - 1, num_chars);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LEN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            text = text.toString();
            return text.length;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LENB": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            text = text.toString();
            return text.replace(/[^\x00-\xff]/g, "aa").length;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LOWER": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            text = text.toString();
            return text ? text.toLowerCase() : text;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "UPPER": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            text = text.toString();
            return text ? text.toUpperCase() : text;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "EXACT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text1 = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text1)) {
              return text1;
            }
            text1 = text1.toString();
            var text2 = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(text2)) {
              return text2;
            }
            text2 = text2.toString();
            return text1 === text2;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "REPLACE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var old_text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(old_text)) {
              return old_text;
            }
            old_text = old_text.toString();
            var start_num = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(start_num)) {
              return start_num;
            }
            if (!isRealNum(start_num)) {
              return formula_default.error.v;
            }
            start_num = parseInt(start_num);
            var num_chars = func_methods_default.getFirstValue(arguments[2]);
            if (valueIsError(num_chars)) {
              return num_chars;
            }
            if (!isRealNum(num_chars)) {
              return formula_default.error.v;
            }
            num_chars = parseInt(num_chars);
            var new_text = func_methods_default.getFirstValue(arguments[3], "text");
            if (valueIsError(new_text)) {
              return new_text;
            }
            new_text = new_text.toString();
            return old_text.substr(0, start_num - 1) + new_text + old_text.substr(start_num - 1 + num_chars);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "REPT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            text = text.toString();
            var number_times = func_methods_default.getFirstValue(arguments[1]);
            if (valueIsError(number_times)) {
              return number_times;
            }
            if (!isRealNum(number_times)) {
              return formula_default.error.v;
            }
            number_times = parseInt(number_times);
            if (number_times < 0) {
              return formula_default.error.v;
            }
            if (number_times > 100) {
              number_times = 100;
            }
            return new Array(number_times + 1).join(text);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SEARCH": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var find_text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(find_text)) {
              return find_text;
            }
            find_text = find_text.toString();
            var within_text = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(within_text)) {
              return within_text;
            }
            within_text = within_text.toString();
            var start_num = 1;
            if (arguments.length == 3) {
              start_num = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(start_num)) {
                return start_num;
              }
              if (!isRealNum(start_num)) {
                return formula_default.error.v;
              }
              start_num = parseInt(start_num);
            }
            if (start_num <= 0 || start_num > within_text.length) {
              return formula_default.error.v;
            }
            var foundAt = within_text.toLowerCase().indexOf(find_text.toLowerCase(), start_num - 1) + 1;
            return foundAt === 0 ? formula_default.error.v : foundAt;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SUBSTITUTE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            text = text.toString();
            var old_text = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(old_text)) {
              return old_text;
            }
            old_text = old_text.toString();
            var new_text = func_methods_default.getFirstValue(arguments[2], "text");
            if (valueIsError(new_text)) {
              return new_text;
            }
            new_text = new_text.toString();
            var instance_num = null;
            if (arguments.length == 4) {
              instance_num = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(instance_num)) {
                return instance_num;
              }
              if (!isRealNum(instance_num)) {
                return formula_default.error.v;
              }
              instance_num = parseInt(instance_num);
            }
            var reg = new RegExp(old_text, "g");
            var result;
            if (instance_num == null) {
              result = text.replace(reg, new_text);
            } else {
              if (instance_num <= 0) {
                return formula_default.error.v;
              }
              var match = text.match(reg);
              if (match == null || instance_num > match.length) {
                return text;
              } else {
                var len = old_text.length;
                var index2 = 0;
                for (var i2 = 1; i2 <= instance_num; i2++) {
                  index2 = text.indexOf(old_text, index2) + 1;
                }
                result = text.substring(0, index2 - 1) + new_text + text.substring(index2 - 1 + len);
              }
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "CLEAN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            text = text.toString();
            var textArr = [];
            for (var i2 = 0; i2 < text.length; i2++) {
              var code = text.charCodeAt(i2);
              if (/[\u4e00-\u9fa5]/g.test(text.charAt(i2)) || code > 31 && code < 127) {
                textArr.push(text.charAt(i2));
              }
            }
            return textArr.join("");
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TEXT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(value)) {
              return value;
            }
            if (!isRealNum(value)) {
              return formula_default.error.v;
            }
            value = parseFloat(value);
            var format_text = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(format_text)) {
              return format_text;
            }
            format_text = format_text.toString();
            return update(format_text, value);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TRIM": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            text = text.toString();
            return text.replace(/ +/g, " ").trim();
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "VALUE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            text = text.toString();
            return genarate(text)[2];
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PROPER": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var text = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(text)) {
              return text;
            }
            text = text.toString().toLowerCase();
            return text.replace(/[a-zA-Z]+/g, function(word) {
              return word.substring(0, 1).toUpperCase() + word.substring(1);
            });
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "CONVERT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var number = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(number)) {
              return number;
            }
            if (!isRealNum(number)) {
              return formula_default.error.v;
            }
            number = parseFloat(number);
            var from_unit = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(from_unit)) {
              return from_unit;
            }
            from_unit = from_unit.toString();
            var to_unit = func_methods_default.getFirstValue(arguments[2], "text");
            if (valueIsError(to_unit)) {
              return to_unit;
            }
            to_unit = to_unit.toString();
            var units = [
              ["a.u. of action", "?", null, "action", false, false, 105457168181818e-48],
              ["a.u. of charge", "e", null, "electric_charge", false, false, 160217653141414e-33],
              ["a.u. of energy", "Eh", null, "energy", false, false, 435974417757576e-32],
              ["a.u. of length", "a?", null, "length", false, false, 529177210818182e-25],
              ["a.u. of mass", "m?", null, "mass", false, false, 910938261616162e-45],
              ["a.u. of time", "?/Eh", null, "time", false, false, 241888432650516e-31],
              ["admiralty knot", "admkn", null, "speed", false, true, 0.514773333],
              ["ampere", "A", null, "electric_current", true, false, 1],
              ["ampere per meter", "A/m", null, "magnetic_field_intensity", true, false, 1],
              ["\xE5ngstr\xF6m", "\xC5", ["ang"], "length", false, true, 1e-10],
              ["are", "ar", null, "area", false, true, 100],
              ["astronomical unit", "ua", null, "length", false, false, 149597870691667e-25],
              ["bar", "bar", null, "pressure", false, false, 1e5],
              ["barn", "b", null, "area", false, false, 1e-28],
              ["becquerel", "Bq", null, "radioactivity", true, false, 1],
              ["bit", "bit", ["b"], "information", false, true, 1],
              ["btu", "BTU", ["btu"], "energy", false, true, 1055.05585262],
              ["byte", "byte", null, "information", false, true, 8],
              ["candela", "cd", null, "luminous_intensity", true, false, 1],
              ["candela per square metre", "cd/m?", null, "luminance", true, false, 1],
              ["coulomb", "C", null, "electric_charge", true, false, 1],
              ["cubic \xE5ngstr\xF6m", "ang3", ["ang^3"], "volume", false, true, 1e-30],
              ["cubic foot", "ft3", ["ft^3"], "volume", false, true, 0.028316846592],
              ["cubic inch", "in3", ["in^3"], "volume", false, true, 16387064e-12],
              ["cubic light-year", "ly3", ["ly^3"], "volume", false, true, 846786664623715e-61],
              ["cubic metre", "m?", null, "volume", true, true, 1],
              ["cubic mile", "mi3", ["mi^3"], "volume", false, true, 416818182544058e-5],
              ["cubic nautical mile", "Nmi3", ["Nmi^3"], "volume", false, true, 6352182208],
              ["cubic Pica", "Pica3", ["Picapt3", "Pica^3", "Picapt^3"], "volume", false, true, 758660370370369e-22],
              ["cubic yard", "yd3", ["yd^3"], "volume", false, true, 0.764554857984],
              ["cup", "cup", null, "volume", false, true, 2365882365e-13],
              ["dalton", "Da", ["u"], "mass", false, false, 166053886282828e-41],
              ["day", "d", ["day"], "time", false, true, 86400],
              ["degree", "\xB0", null, "angle", false, false, 0.0174532925199433],
              ["degrees Rankine", "Rank", null, "temperature", false, true, 0.555555555555556],
              ["dyne", "dyn", ["dy"], "force", false, true, 1e-5],
              ["electronvolt", "eV", ["ev"], "energy", false, true, 1.60217656514141],
              ["ell", "ell", null, "length", false, true, 1.143],
              ["erg", "erg", ["e"], "energy", false, true, 1e-7],
              ["farad", "F", null, "electric_capacitance", true, false, 1],
              ["fluid ounce", "oz", null, "volume", false, true, 295735295625e-16],
              ["foot", "ft", null, "length", false, true, 0.3048],
              ["foot-pound", "flb", null, "energy", false, true, 1.3558179483314],
              ["gal", "Gal", null, "acceleration", false, false, 0.01],
              ["gallon", "gal", null, "volume", false, true, 0.003785411784],
              ["gauss", "G", ["ga"], "magnetic_flux_density", false, true, 1],
              ["grain", "grain", null, "mass", false, true, 647989e-10],
              ["gram", "g", null, "mass", false, true, 1e-3],
              ["gray", "Gy", null, "absorbed_dose", true, false, 1],
              ["gross registered ton", "GRT", ["regton"], "volume", false, true, 2.8316846592],
              ["hectare", "ha", null, "area", false, true, 1e4],
              ["henry", "H", null, "inductance", true, false, 1],
              ["hertz", "Hz", null, "frequency", true, false, 1],
              ["horsepower", "HP", ["h"], "power", false, true, 745.69987158227],
              ["horsepower-hour", "HPh", ["hh", "hph"], "energy", false, true, 2684519538e-3],
              ["hour", "h", ["hr"], "time", false, true, 3600],
              ["imperial gallon (U.K.)", "uk_gal", null, "volume", false, true, 454609e-8],
              ["imperial hundredweight", "lcwt", ["uk_cwt", "hweight"], "mass", false, true, 50.802345],
              ["imperial quart (U.K)", "uk_qt", null, "volume", false, true, 0.0011365225],
              ["imperial ton", "brton", ["uk_ton", "LTON"], "mass", false, true, 1016.046909],
              ["inch", "in", null, "length", false, true, 0.0254],
              ["international acre", "uk_acre", null, "area", false, true, 4046.8564224],
              ["IT calorie", "cal", null, "energy", false, true, 4.1868],
              ["joule", "J", null, "energy", true, true, 1],
              ["katal", "kat", null, "catalytic_activity", true, false, 1],
              ["kelvin", "K", ["kel"], "temperature", true, true, 1],
              ["kilogram", "kg", null, "mass", true, true, 1],
              ["knot", "kn", null, "speed", false, true, 0.514444444444444],
              ["light-year", "ly", null, "length", false, true, 9460730472580800],
              ["litre", "L", ["l", "lt"], "volume", false, true, 1e-3],
              ["lumen", "lm", null, "luminous_flux", true, false, 1],
              ["lux", "lx", null, "illuminance", true, false, 1],
              ["maxwell", "Mx", null, "magnetic_flux", false, false, 1e-18],
              ["measurement ton", "MTON", null, "volume", false, true, 1.13267386368],
              ["meter per hour", "m/h", ["m/hr"], "speed", false, true, 27777777777778e-17],
              ["meter per second", "m/s", ["m/sec"], "speed", true, true, 1],
              ["meter per second squared", "m?s??", null, "acceleration", true, false, 1],
              ["parsec", "pc", ["parsec"], "length", false, true, 30856775814671900],
              ["meter squared per second", "m?/s", null, "kinematic_viscosity", true, false, 1],
              ["metre", "m", null, "length", true, true, 1],
              ["miles per hour", "mph", null, "speed", false, true, 0.44704],
              ["millimetre of mercury", "mmHg", null, "pressure", false, false, 133.322],
              ["minute", "?", null, "angle", false, false, 290888208665722e-18],
              ["minute", "min", ["mn"], "time", false, true, 60],
              ["modern teaspoon", "tspm", null, "volume", false, true, 5e-6],
              ["mole", "mol", null, "amount_of_substance", true, false, 1],
              ["morgen", "Morgen", null, "area", false, true, 2500],
              ["n.u. of action", "?", null, "action", false, false, 105457168181818e-48],
              ["n.u. of mass", "m?", null, "mass", false, false, 910938261616162e-45],
              ["n.u. of speed", "c?", null, "speed", false, false, 299792458],
              ["n.u. of time", "?/(me?c??)", null, "time", false, false, 128808866778687e-35],
              ["nautical mile", "M", ["Nmi"], "length", false, true, 1852],
              ["newton", "N", null, "force", true, true, 1],
              ["\u0153rsted", "Oe ", null, "magnetic_field_intensity", false, false, 79.5774715459477],
              ["ohm", "\u03A9", null, "electric_resistance", true, false, 1],
              ["ounce mass", "ozm", null, "mass", false, true, 0.028349523125],
              ["pascal", "Pa", null, "pressure", true, false, 1],
              ["pascal second", "Pa?s", null, "dynamic_viscosity", true, false, 1],
              ["pferdest\xE4rke", "PS", null, "power", false, true, 735.49875],
              ["phot", "ph", null, "illuminance", false, false, 1e-4],
              ["pica (1/6 inch)", "pica", null, "length", false, true, 35277777777778e-17],
              ["pica (1/72 inch)", "Pica", ["Picapt"], "length", false, true, 0.00423333333333333],
              ["poise", "P", null, "dynamic_viscosity", false, false, 0.1],
              ["pond", "pond", null, "force", false, true, 980665e-8],
              ["pound force", "lbf", null, "force", false, true, 4.4482216152605],
              ["pound mass", "lbm", null, "mass", false, true, 0.45359237],
              ["quart", "qt", null, "volume", false, true, 946352946e-12],
              ["radian", "rad", null, "angle", true, false, 1],
              ["second", "?", null, "angle", false, false, 484813681109536e-20],
              ["second", "s", ["sec"], "time", true, true, 1],
              ["short hundredweight", "cwt", ["shweight"], "mass", false, true, 45.359237],
              ["siemens", "S", null, "electrical_conductance", true, false, 1],
              ["sievert", "Sv", null, "equivalent_dose", true, false, 1],
              ["slug", "sg", null, "mass", false, true, 14.59390294],
              ["square \xE5ngstr\xF6m", "ang2", ["ang^2"], "area", false, true, 1e-20],
              ["square foot", "ft2", ["ft^2"], "area", false, true, 0.09290304],
              ["square inch", "in2", ["in^2"], "area", false, true, 64516e-8],
              ["square light-year", "ly2", ["ly^2"], "area", false, true, 895054210748189e17],
              ["square meter", "m?", null, "area", true, true, 1],
              ["square mile", "mi2", ["mi^2"], "area", false, true, 2589988110336e-6],
              ["square nautical mile", "Nmi2", ["Nmi^2"], "area", false, true, 3429904],
              ["square Pica", "Pica2", ["Picapt2", "Pica^2", "Picapt^2"], "area", false, true, 1792111111111e-17],
              ["square yard", "yd2", ["yd^2"], "area", false, true, 0.83612736],
              ["statute mile", "mi", null, "length", false, true, 1609.344],
              ["steradian", "sr", null, "solid_angle", true, false, 1],
              ["stilb", "sb", null, "luminance", false, false, 1e-4],
              ["stokes", "St", null, "kinematic_viscosity", false, false, 1e-4],
              ["stone", "stone", null, "mass", false, true, 6.35029318],
              ["tablespoon", "tbs", null, "volume", false, true, 147868e-10],
              ["teaspoon", "tsp", null, "volume", false, true, 492892e-11],
              ["tesla", "T", null, "magnetic_flux_density", true, true, 1],
              ["thermodynamic calorie", "c", null, "energy", false, true, 4.184],
              ["ton", "ton", null, "mass", false, true, 907.18474],
              ["tonne", "t", null, "mass", false, false, 1e3],
              ["U.K. pint", "uk_pt", null, "volume", false, true, 56826125e-11],
              ["U.S. bushel", "bushel", null, "volume", false, true, 0.03523907],
              ["U.S. oil barrel", "barrel", null, "volume", false, true, 0.158987295],
              ["U.S. pint", "pt", ["us_pt"], "volume", false, true, 473176473e-12],
              ["U.S. survey mile", "survey_mi", null, "length", false, true, 1609.347219],
              ["U.S. survey/statute acre", "us_acre", null, "area", false, true, 4046.87261],
              ["volt", "V", null, "voltage", true, false, 1],
              ["watt", "W", null, "power", true, true, 1],
              ["watt-hour", "Wh", ["wh"], "energy", false, true, 3600],
              ["weber", "Wb", null, "magnetic_flux", true, false, 1],
              ["yard", "yd", null, "length", false, true, 0.9144],
              ["year", "yr", null, "time", false, true, 31557600]
            ];
            var binary_prefixes = {
              Yi: ["yobi", 80, 12089258196146292e8, "Yi", "yotta"],
              Zi: ["zebi", 70, 11805916207174113e5, "Zi", "zetta"],
              Ei: ["exbi", 60, 1152921504606847e3, "Ei", "exa"],
              Pi: ["pebi", 50, 1125899906842624, "Pi", "peta"],
              Ti: ["tebi", 40, 1099511627776, "Ti", "tera"],
              Gi: ["gibi", 30, 1073741824, "Gi", "giga"],
              Mi: ["mebi", 20, 1048576, "Mi", "mega"],
              ki: ["kibi", 10, 1024, "ki", "kilo"]
            };
            var unit_prefixes = {
              Y: ["yotta", 1e24, "Y"],
              Z: ["zetta", 1e21, "Z"],
              E: ["exa", 1e18, "E"],
              P: ["peta", 1e15, "P"],
              T: ["tera", 1e12, "T"],
              G: ["giga", 1e9, "G"],
              M: ["mega", 1e6, "M"],
              k: ["kilo", 1e3, "k"],
              h: ["hecto", 100, "h"],
              e: ["dekao", 10, "e"],
              d: ["deci", 0.1, "d"],
              c: ["centi", 0.01, "c"],
              m: ["milli", 1e-3, "m"],
              u: ["micro", 1e-6, "u"],
              n: ["nano", 1e-9, "n"],
              p: ["pico", 1e-12, "p"],
              f: ["femto", 1e-15, "f"],
              a: ["atto", 1e-18, "a"],
              z: ["zepto", 1e-21, "z"],
              y: ["yocto", 1e-24, "y"]
            };
            var from = null;
            var to = null;
            var base_from_unit = from_unit;
            var base_to_unit = to_unit;
            var from_multiplier = 1;
            var to_multiplier = 1;
            var alt;
            for (var i2 = 0; i2 < units.length; i2++) {
              alt = units[i2][2] === null ? [] : units[i2][2];
              if (units[i2][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) {
                from = units[i2];
              }
              if (units[i2][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) {
                to = units[i2];
              }
            }
            if (from === null) {
              var from_binary_prefix = binary_prefixes[from_unit.substring(0, 2)];
              var from_unit_prefix = unit_prefixes[from_unit.substring(0, 1)];
              if (from_unit.substring(0, 2) === "da") {
                from_unit_prefix = ["dekao", 10, "da"];
              }
              if (from_binary_prefix) {
                from_multiplier = from_binary_prefix[2];
                base_from_unit = from_unit.substring(2);
              } else if (from_unit_prefix) {
                from_multiplier = from_unit_prefix[1];
                base_from_unit = from_unit.substring(from_unit_prefix[2].length);
              }
              for (var j = 0; j < units.length; j++) {
                alt = units[j][2] === null ? [] : units[j][2];
                if (units[j][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) {
                  from = units[j];
                }
              }
            }
            if (to === null) {
              var to_binary_prefix = binary_prefixes[to_unit.substring(0, 2)];
              var to_unit_prefix = unit_prefixes[to_unit.substring(0, 1)];
              if (to_unit.substring(0, 2) === "da") {
                to_unit_prefix = ["dekao", 10, "da"];
              }
              if (to_binary_prefix) {
                to_multiplier = to_binary_prefix[2];
                base_to_unit = to_unit.substring(2);
              } else if (to_unit_prefix) {
                to_multiplier = to_unit_prefix[1];
                base_to_unit = to_unit.substring(to_unit_prefix[2].length);
              }
              for (var k = 0; k < units.length; k++) {
                alt = units[k][2] === null ? [] : units[k][2];
                if (units[k][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) {
                  to = units[k];
                }
              }
            }
            if (from === null || to === null) {
              return formula_default.error.na;
            }
            if (from[3] !== to[3]) {
              return formula_default.error.na;
            }
            return number * from[6] * from_multiplier / (to[6] * to_multiplier);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SUMX2MY2": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_array_x = arguments[0];
            var array_x = [];
            if (getObjType(data_array_x) == "array") {
              if (getObjType(data_array_x[0]) == "array" && !func_methods_default.isDyadicArr(data_array_x)) {
                return formula_default.error.v;
              }
              array_x = array_x.concat(func_methods_default.getDataArr(data_array_x, false));
            } else if (getObjType(data_array_x) == "object" && data_array_x.startCell != null) {
              array_x = array_x.concat(func_methods_default.getCellDataArr(data_array_x, "text", false));
            } else {
              array_x.push(data_array_x);
            }
            var data_array_y = arguments[1];
            var array_y = [];
            if (getObjType(data_array_y) == "array") {
              if (getObjType(data_array_y[0]) == "array" && !func_methods_default.isDyadicArr(data_array_y)) {
                return formula_default.error.v;
              }
              array_y = array_y.concat(func_methods_default.getDataArr(data_array_y, false));
            } else if (getObjType(data_array_y) == "object" && data_array_y.startCell != null) {
              array_y = array_y.concat(func_methods_default.getCellDataArr(data_array_y, "text", false));
            } else {
              array_y.push(data_array_y);
            }
            if (array_x.length != array_y.length) {
              return formula_default.error.na;
            }
            var data_x = [], data_y = [];
            for (var i2 = 0; i2 < array_x.length; i2++) {
              var num_x = array_x[i2];
              var num_y = array_y[i2];
              if (isRealNum(num_x) && isRealNum(num_y)) {
                data_x.push(parseFloat(num_x));
                data_y.push(parseFloat(num_y));
              }
            }
            var sum = 0;
            for (var i2 = 0; i2 < data_x.length; i2++) {
              sum += Math.pow(data_x[i2], 2) - Math.pow(data_y[i2], 2);
            }
            return sum;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SUMX2PY2": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_array_x = arguments[0];
            var array_x = [];
            if (getObjType(data_array_x) == "array") {
              if (getObjType(data_array_x[0]) == "array" && !func_methods_default.isDyadicArr(data_array_x)) {
                return formula_default.error.v;
              }
              array_x = array_x.concat(func_methods_default.getDataArr(data_array_x, false));
            } else if (getObjType(data_array_x) == "object" && data_array_x.startCell != null) {
              array_x = array_x.concat(func_methods_default.getCellDataArr(data_array_x, "text", false));
            } else {
              array_x.push(data_array_x);
            }
            var data_array_y = arguments[1];
            var array_y = [];
            if (getObjType(data_array_y) == "array") {
              if (getObjType(data_array_y[0]) == "array" && !func_methods_default.isDyadicArr(data_array_y)) {
                return formula_default.error.v;
              }
              array_y = array_y.concat(func_methods_default.getDataArr(data_array_y, false));
            } else if (getObjType(data_array_y) == "object" && data_array_y.startCell != null) {
              array_y = array_y.concat(func_methods_default.getCellDataArr(data_array_y, "text", false));
            } else {
              array_y.push(data_array_y);
            }
            if (array_x.length != array_y.length) {
              return formula_default.error.na;
            }
            var data_x = [], data_y = [];
            for (var i2 = 0; i2 < array_x.length; i2++) {
              var num_x = array_x[i2];
              var num_y = array_y[i2];
              if (isRealNum(num_x) && isRealNum(num_y)) {
                data_x.push(parseFloat(num_x));
                data_y.push(parseFloat(num_y));
              }
            }
            var sum = 0;
            for (var i2 = 0; i2 < data_x.length; i2++) {
              sum += Math.pow(data_x[i2], 2) + Math.pow(data_y[i2], 2);
            }
            return sum;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SUMXMY2": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_array_x = arguments[0];
            var array_x = [];
            if (getObjType(data_array_x) == "array") {
              if (getObjType(data_array_x[0]) == "array" && !func_methods_default.isDyadicArr(data_array_x)) {
                return formula_default.error.v;
              }
              array_x = array_x.concat(func_methods_default.getDataArr(data_array_x, false));
            } else if (getObjType(data_array_x) == "object" && data_array_x.startCell != null) {
              array_x = array_x.concat(func_methods_default.getCellDataArr(data_array_x, "text", false));
            } else {
              array_x.push(data_array_x);
            }
            var data_array_y = arguments[1];
            var array_y = [];
            if (getObjType(data_array_y) == "array") {
              if (getObjType(data_array_y[0]) == "array" && !func_methods_default.isDyadicArr(data_array_y)) {
                return formula_default.error.v;
              }
              array_y = array_y.concat(func_methods_default.getDataArr(data_array_y, false));
            } else if (getObjType(data_array_y) == "object" && data_array_y.startCell != null) {
              array_y = array_y.concat(func_methods_default.getCellDataArr(data_array_y, "text", false));
            } else {
              array_y.push(data_array_y);
            }
            if (array_x.length != array_y.length) {
              return formula_default.error.na;
            }
            var data_x = [], data_y = [];
            for (var i2 = 0; i2 < array_x.length; i2++) {
              var num_x = array_x[i2];
              var num_y = array_y[i2];
              if (isRealNum(num_x) && isRealNum(num_y)) {
                data_x.push(parseFloat(num_x));
                data_y.push(parseFloat(num_y));
              }
            }
            var sum = 0;
            for (var i2 = 0; i2 < data_x.length; i2++) {
              sum += Math.pow(data_x[i2] - data_y[i2], 2);
            }
            return sum;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TRANSPOSE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_array = arguments[0];
            var array = [];
            if (getObjType(data_array) == "array") {
              if (getObjType(data_array[0]) == "array" && !func_methods_default.isDyadicArr(data_array)) {
                return formula_default.error.v;
              }
              array = func_methods_default.getDataDyadicArr(data_array);
            } else if (getObjType(data_array) == "object" && data_array.startCell != null) {
              array = func_methods_default.getCellDataDyadicArr(data_array, "number");
            }
            array = array[0].map(function(col, a) {
              return array.map(function(row) {
                return row[a];
              });
            });
            return array;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TREND": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            let leastSquare = function(arr_x, arr_y) {
              var xSum = 0, ySum = 0, xySum = 0, x2Sum = 0;
              for (var i3 = 0; i3 < arr_x.length; i3++) {
                for (var j2 = 0; j2 < arr_x[i3].length; j2++) {
                  xSum += arr_x[i3][j2];
                  ySum += arr_y[i3][j2];
                  xySum += arr_x[i3][j2] * arr_y[i3][j2];
                  x2Sum += arr_x[i3][j2] * arr_x[i3][j2];
                }
              }
              var n = arr_x.length * arr_x[0].length;
              var xMean = xSum / n;
              var yMean = ySum / n;
              var xyMean = xySum / n;
              var x2Mean = x2Sum / n;
              var m2 = (xyMean - xMean * yMean) / (x2Mean - xMean * xMean);
              var b2 = yMean - m2 * xMean;
              return [m2, b2];
            };
            var data_known_y = arguments[0];
            var known_y = [];
            if (getObjType(data_known_y) == "array") {
              if (getObjType(data_known_y[0]) == "array" && !func_methods_default.isDyadicArr(data_known_y)) {
                return formula_default.error.v;
              }
              known_y = func_methods_default.getDataDyadicArr(data_known_y);
            } else if (getObjType(data_known_y) == "object" && data_known_y.startCell != null) {
              known_y = func_methods_default.getCellDataDyadicArr(data_known_y, "text");
            } else {
              if (!isRealNum(data_known_y)) {
                return formula_default.error.v;
              }
              var rowArr = [];
              rowArr.push(parseFloat(data_known_y));
              known_y.push(rowArr);
            }
            var known_y_rowlen = known_y.length;
            var known_y_collen = known_y[0].length;
            for (var i2 = 0; i2 < known_y_rowlen; i2++) {
              for (var j = 0; j < known_y_collen; j++) {
                if (!isRealNum(known_y[i2][j])) {
                  return formula_default.error.v;
                }
                known_y[i2][j] = parseFloat(known_y[i2][j]);
              }
            }
            var known_x = [];
            for (var i2 = 1; i2 <= known_y_rowlen; i2++) {
              for (var j = 1; j <= known_y_collen; j++) {
                var number = (i2 - 1) * known_y_collen + j;
                known_x.push(number);
              }
            }
            if (arguments.length >= 2) {
              var data_known_x = arguments[1];
              known_x = [];
              if (getObjType(data_known_x) == "array") {
                if (getObjType(data_known_x[0]) == "array" && !func_methods_default.isDyadicArr(data_known_x)) {
                  return formula_default.error.v;
                }
                known_x = func_methods_default.getDataDyadicArr(data_known_x);
              } else if (getObjType(data_known_x) == "object" && data_known_x.startCell != null) {
                known_x = func_methods_default.getCellDataDyadicArr(data_known_x, "text");
              } else {
                if (!isRealNum(data_known_x)) {
                  return formula_default.error.v;
                }
                var rowArr = [];
                rowArr.push(parseFloat(data_known_x));
                known_x.push(rowArr);
              }
              for (var i2 = 0; i2 < known_x.length; i2++) {
                for (var j = 0; j < known_x[0].length; j++) {
                  if (!isRealNum(known_x[i2][j])) {
                    return formula_default.error.v;
                  }
                  known_x[i2][j] = parseFloat(known_x[i2][j]);
                }
              }
            }
            var known_x_rowlen = known_x.length;
            var known_x_collen = known_x[0].length;
            var new_x = known_x;
            if (arguments.length >= 3) {
              var data_new_x = arguments[2];
              new_x = [];
              if (getObjType(data_new_x) == "array") {
                if (getObjType(data_new_x[0]) == "array" && !func_methods_default.isDyadicArr(data_new_x)) {
                  return formula_default.error.v;
                }
                new_x = func_methods_default.getDataDyadicArr(data_new_x);
              } else if (getObjType(data_new_x) == "object" && data_new_x.startCell != null) {
                new_x = func_methods_default.getCellDataDyadicArr(data_new_x, "text");
              } else {
                if (!isRealNum(data_new_x)) {
                  return formula_default.error.v;
                }
                var rowArr = [];
                rowArr.push(parseFloat(data_new_x));
                new_x.push(rowArr);
              }
              for (var i2 = 0; i2 < new_x.length; i2++) {
                for (var j = 0; j < new_x[0].length; j++) {
                  if (!isRealNum(new_x[i2][j])) {
                    return formula_default.error.v;
                  }
                  new_x[i2][j] = parseFloat(new_x[i2][j]);
                }
              }
            }
            var const_b = true;
            if (arguments.length == 4) {
              const_b = func_methods_default.getCellBoolen(arguments[3]);
              if (valueIsError(const_b)) {
                return const_b;
              }
            }
            if (known_y_rowlen != known_x_rowlen || known_y_collen != known_x_collen) {
              return formula_default.error.r;
            }
            var ls = leastSquare(known_x, known_y);
            var m = ls[0];
            if (const_b) {
              var b = ls[1];
            } else {
              var b = 0;
            }
            var result = [];
            for (var i2 = 0; i2 < new_x.length; i2++) {
              for (var j = 0; j < new_x[i2].length; j++) {
                var x = new_x[i2][j];
                var y = m * x + b;
                result.push(Math.round(y * 1e9) / 1e9);
              }
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "FREQUENCY": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_data_array = arguments[0];
            var data_array = [];
            if (getObjType(data_data_array) == "array") {
              if (getObjType(data_data_array[0]) == "array" && !func_methods_default.isDyadicArr(data_data_array)) {
                return formula_default.error.v;
              }
              data_array = data_array.concat(func_methods_default.getDataArr(data_data_array, true));
            } else if (getObjType(data_data_array) == "object" && data_data_array.startCell != null) {
              data_array = data_array.concat(func_methods_default.getCellDataArr(data_data_array, "number", true));
            } else {
              if (!isRealNum(data_data_array)) {
                return formula_default.error.v;
              }
              data_array.push(data_data_array);
            }
            var data_array_n = [];
            for (var i2 = 0; i2 < data_array.length; i2++) {
              if (isRealNum(data_array[i2])) {
                data_array_n.push(parseFloat(data_array[i2]));
              }
            }
            var data_bins_array = arguments[1];
            var bins_array = [];
            if (getObjType(data_bins_array) == "array") {
              if (getObjType(data_bins_array[0]) == "array" && !func_methods_default.isDyadicArr(data_bins_array)) {
                return formula_default.error.v;
              }
              bins_array = bins_array.concat(func_methods_default.getDataArr(data_bins_array, true));
            } else if (getObjType(data_bins_array) == "object" && data_bins_array.startCell != null) {
              bins_array = bins_array.concat(func_methods_default.getCellDataArr(data_bins_array, "number", true));
            } else {
              if (!isRealNum(data_bins_array)) {
                return formula_default.error.v;
              }
              bins_array.push(data_bins_array);
            }
            var bins_array_n = [];
            for (var i2 = 0; i2 < bins_array.length; i2++) {
              if (isRealNum(bins_array[i2])) {
                bins_array_n.push(parseFloat(bins_array[i2]));
              }
            }
            if (data_array_n.length == 0 && bins_array_n.length == 0) {
              return [[0], [0]];
            } else if (data_array_n.length == 0) {
              var result = [[0]];
              for (var i2 = 0; i2 < bins_array_n.length; i2++) {
                result.push([0]);
              }
              return result;
            } else if (bins_array_n.length == 0) {
              return [[0], [data_array_n.length]];
            } else {
              bins_array_n.sort(function(a, b) {
                return a - b;
              });
              var result = [];
              for (var i2 = 0; i2 < bins_array_n.length; i2++) {
                if (i2 == 0) {
                  var count = 0;
                  for (var j = 0; j < data_array_n.length; j++) {
                    if (data_array_n[j] <= bins_array_n[0]) {
                      count++;
                    }
                  }
                  result.push([count]);
                } else if (i2 == bins_array_n.length - 1) {
                  var count1 = 0, count2 = 0;
                  for (var j = 0; j < data_array_n.length; j++) {
                    if (data_array_n[j] <= bins_array_n[i2] && data_array_n[j] > bins_array_n[i2 - 1]) {
                      count1++;
                    }
                    if (data_array_n[j] > bins_array_n[i2]) {
                      count2++;
                    }
                  }
                  result.push([count1]);
                  result.push([count2]);
                } else {
                  var count = 0;
                  for (var j = 0; j < data_array_n.length; j++) {
                    if (data_array_n[j] <= bins_array_n[i2] && data_array_n[j] > bins_array_n[i2 - 1]) {
                      count++;
                    }
                  }
                  result.push([count]);
                }
              }
              return result;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "GROWTH": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            let leastSquare = function(arr_x, arr_y) {
              var xSum = 0, ySum = 0, xySum = 0, x2Sum = 0;
              for (var i3 = 0; i3 < arr_x.length; i3++) {
                for (var j2 = 0; j2 < arr_x[i3].length; j2++) {
                  xSum += arr_x[i3][j2];
                  ySum += Math.log(arr_y[i3][j2]);
                  xySum += arr_x[i3][j2] * Math.log(arr_y[i3][j2]);
                  x2Sum += arr_x[i3][j2] * arr_x[i3][j2];
                }
              }
              var n = arr_x.length * arr_x[0].length;
              var xMean = xSum / n;
              var yMean = ySum / n;
              var xyMean = xySum / n;
              var x2Mean = x2Sum / n;
              var m2 = (xyMean - xMean * yMean) / (x2Mean - xMean * xMean);
              var b2 = yMean - m2 * xMean;
              return [Math.exp(m2), Math.exp(b2)];
            };
            var data_known_y = arguments[0];
            var known_y = [];
            if (getObjType(data_known_y) == "array") {
              if (getObjType(data_known_y[0]) == "array" && !func_methods_default.isDyadicArr(data_known_y)) {
                return formula_default.error.v;
              }
              known_y = func_methods_default.getDataDyadicArr(data_known_y);
            } else if (getObjType(data_known_y) == "object" && data_known_y.startCell != null) {
              known_y = func_methods_default.getCellDataDyadicArr(data_known_y, "text");
            } else {
              if (!isRealNum(data_known_y)) {
                return formula_default.error.v;
              }
              var rowArr = [];
              rowArr.push(parseFloat(data_known_y));
              known_y.push(rowArr);
            }
            var known_y_rowlen = known_y.length;
            var known_y_collen = known_y[0].length;
            for (var i2 = 0; i2 < known_y_rowlen; i2++) {
              for (var j = 0; j < known_y_collen; j++) {
                if (!isRealNum(known_y[i2][j])) {
                  return formula_default.error.v;
                }
                known_y[i2][j] = parseFloat(known_y[i2][j]);
              }
            }
            var known_x = [];
            for (var i2 = 1; i2 <= known_y_rowlen; i2++) {
              for (var j = 1; j <= known_y_collen; j++) {
                var number = (i2 - 1) * known_y_collen + j;
                known_x.push(number);
              }
            }
            if (arguments.length >= 2) {
              var data_known_x = arguments[1];
              known_x = [];
              if (getObjType(data_known_x) == "array") {
                if (getObjType(data_known_x[0]) == "array" && !func_methods_default.isDyadicArr(data_known_x)) {
                  return formula_default.error.v;
                }
                known_x = func_methods_default.getDataDyadicArr(data_known_x);
              } else if (getObjType(data_known_x) == "object" && data_known_x.startCell != null) {
                known_x = func_methods_default.getCellDataDyadicArr(data_known_x, "text");
              } else {
                if (!isRealNum(data_known_x)) {
                  return formula_default.error.v;
                }
                var rowArr = [];
                rowArr.push(parseFloat(data_known_x));
                known_x.push(rowArr);
              }
              for (var i2 = 0; i2 < known_x.length; i2++) {
                for (var j = 0; j < known_x[0].length; j++) {
                  if (!isRealNum(known_x[i2][j])) {
                    return formula_default.error.v;
                  }
                  known_x[i2][j] = parseFloat(known_x[i2][j]);
                }
              }
            }
            var known_x_rowlen = known_x.length;
            var known_x_collen = known_x[0].length;
            var new_x = known_x;
            if (arguments.length >= 3) {
              var data_new_x = arguments[2];
              new_x = [];
              if (getObjType(data_new_x) == "array") {
                if (getObjType(data_new_x[0]) == "array" && !func_methods_default.isDyadicArr(data_new_x)) {
                  return formula_default.error.v;
                }
                new_x = func_methods_default.getDataDyadicArr(data_new_x);
              } else if (getObjType(data_new_x) == "object" && data_new_x.startCell != null) {
                new_x = func_methods_default.getCellDataDyadicArr(data_new_x, "text");
              } else {
                if (!isRealNum(data_new_x)) {
                  return formula_default.error.v;
                }
                var rowArr = [];
                rowArr.push(parseFloat(data_new_x));
                new_x.push(rowArr);
              }
              for (var i2 = 0; i2 < new_x.length; i2++) {
                for (var j = 0; j < new_x[0].length; j++) {
                  if (!isRealNum(new_x[i2][j])) {
                    return formula_default.error.v;
                  }
                  new_x[i2][j] = parseFloat(new_x[i2][j]);
                }
              }
            }
            var const_b = true;
            if (arguments.length == 4) {
              const_b = func_methods_default.getCellBoolen(arguments[3]);
              if (valueIsError(const_b)) {
                return const_b;
              }
            }
            if (known_y_rowlen != known_x_rowlen || known_y_collen != known_x_collen) {
              return formula_default.error.r;
            }
            var ls = leastSquare(known_x, known_y);
            var m = ls[0];
            if (const_b) {
              var b = ls[1];
            } else {
              var b = 1;
            }
            var result = [];
            for (var i2 = 0; i2 < new_x.length; i2++) {
              for (var j = 0; j < new_x[i2].length; j++) {
                var x = new_x[i2][j];
                var y = b * Math.pow(m, x);
                result.push(Math.round(y * 1e9) / 1e9);
              }
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LINEST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            return formula_default.error.v;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LOGEST": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            return formula_default.error.v;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MDETERM": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            let Ma = function(a, n) {
              var A;
              var b = new Array();
              if (n == 1) {
                A = a[0][0];
                return A;
              } else if (n == 2) {
                A = a[0][0] * a[1][1] - a[0][1] * a[1][0];
                return A;
              } else if (n == 3) {
                A = a[0][0] * a[1][1] * a[2][2] + a[1][0] * a[2][1] * a[0][2] + a[2][0] * a[0][1] * a[1][2] - a[2][0] * a[1][1] * a[0][2] - a[0][0] * a[2][1] * a[1][2] - a[1][0] * a[0][1] * a[2][2];
                return A;
              } else {
                A = 0;
                var c2 = new Array();
                var e = new Array();
                for (var i3 = 0; i3 < n; i3++) {
                  b[i3] = a[i3][0] * Math.pow(-1, i3 + 1 + 1);
                }
                for (var i3 = 0; i3 < n; i3++) {
                  e[i3] = new Array();
                  for (var j2 = 0; j2 < n - 1; j2++) {
                    e[i3][j2] = a[i3][j2 + 1];
                  }
                }
                for (var i3 = 0; i3 < n; i3++) {
                  for (var j2 = 0; j2 < n; j2++) {
                    c2[j2] = new Array();
                    for (var k = 0; k < n - 1; k++) {
                      if (i3 > j2) {
                        c2[j2][k] = e[j2][k];
                      } else if (i3 < j2) {
                        c2[j2 - 1][k] = e[j2][k];
                      }
                    }
                  }
                  A += b[i3] * arguments.callee(c2, n - 1);
                }
                return A;
              }
            };
            var data_array = arguments[0];
            var array = [];
            if (getObjType(data_array) == "array") {
              if (getObjType(data_array[0]) == "array" && !func_methods_default.isDyadicArr(data_array)) {
                return formula_default.error.v;
              }
              array = func_methods_default.getDataDyadicArr(data_array);
            } else if (getObjType(data_array) == "object" && data_array.startCell != null) {
              array = func_methods_default.getCellDataDyadicArr(data_array, "text");
            } else {
              var rowArr = [];
              rowArr.push(data_array);
              array.push(rowArr);
            }
            for (var i2 = 0; i2 < array.length; i2++) {
              for (var j = 0; j < array[i2].length; j++) {
                if (!isRealNum(array[i2][j])) {
                  return formula_default.error.v;
                }
                array[i2][j] = parseFloat(array[i2][j]);
              }
            }
            if (array.length != array[0].length) {
              return formula_default.error.v;
            }
            return Ma(array, array.length);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MINVERSE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_array = arguments[0];
            var array = [];
            if (getObjType(data_array) == "array") {
              if (getObjType(data_array[0]) == "array" && !func_methods_default.isDyadicArr(data_array)) {
                return formula_default.error.v;
              }
              array = func_methods_default.getDataDyadicArr(data_array);
            } else if (getObjType(data_array) == "object" && data_array.startCell != null) {
              array = func_methods_default.getCellDataDyadicArr(data_array, "text");
            } else {
              var rowArr = [];
              rowArr.push(data_array);
              array.push(rowArr);
            }
            for (var i2 = 0; i2 < array.length; i2++) {
              for (var j = 0; j < array[i2].length; j++) {
                if (!isRealNum(array[i2][j])) {
                  return formula_default.error.v;
                }
                array[i2][j] = parseFloat(array[i2][j]);
              }
            }
            if (array.length != array[0].length) {
              return formula_default.error.v;
            }
            return inverse(array);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "MMULT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_array1 = arguments[0];
            var array1 = [];
            if (getObjType(data_array1) == "array") {
              if (getObjType(data_array1[0]) == "array" && !func_methods_default.isDyadicArr(data_array1)) {
                return formula_default.error.v;
              }
              array1 = func_methods_default.getDataDyadicArr(data_array1);
            } else if (getObjType(data_array1) == "object" && data_array1.startCell != null) {
              array1 = func_methods_default.getCellDataDyadicArr(data_array1, "text");
            } else {
              var rowArr = [];
              rowArr.push(data_array1);
              array1.push(rowArr);
            }
            for (var i2 = 0; i2 < array1.length; i2++) {
              for (var j = 0; j < array1[i2].length; j++) {
                if (!isRealNum(array1[i2][j])) {
                  return formula_default.error.v;
                }
                array1[i2][j] = parseFloat(array1[i2][j]);
              }
            }
            var data_array2 = arguments[1];
            var array2 = [];
            if (getObjType(data_array2) == "array") {
              if (getObjType(data_array2[0]) == "array" && !func_methods_default.isDyadicArr(data_array2)) {
                return formula_default.error.v;
              }
              array2 = func_methods_default.getDataDyadicArr(data_array2);
            } else if (getObjType(data_array2) == "object" && data_array2.startCell != null) {
              array2 = func_methods_default.getCellDataDyadicArr(data_array2, "text");
            } else {
              var rowArr = [];
              rowArr.push(data_array2);
              array2.push(rowArr);
            }
            for (var i2 = 0; i2 < array2.length; i2++) {
              for (var j = 0; j < array2[i2].length; j++) {
                if (!isRealNum(array2[i2][j])) {
                  return formula_default.error.v;
                }
                array2[i2][j] = parseFloat(array2[i2][j]);
              }
            }
            if (array1[0].length != array2.length) {
              return formula_default.error.v;
            }
            var rowlen = array1.length;
            var collen = array2[0].length;
            var result = [];
            for (var m = 0; m < rowlen; m++) {
              var rowArr = [];
              for (var n = 0; n < collen; n++) {
                var value = 0;
                for (var p = 0; p < array1[0].length; p++) {
                  value += array1[m][p] * array2[p][n];
                }
                rowArr.push(value);
              }
              result.push(rowArr);
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SUMPRODUCT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_array1 = arguments[0];
            var array1 = [];
            if (getObjType(data_array1) == "array") {
              if (getObjType(data_array1[0]) == "array" && !func_methods_default.isDyadicArr(data_array1)) {
                return formula_default.error.v;
              }
              array1 = func_methods_default.getDataDyadicArr(data_array1);
            } else if (getObjType(data_array1) == "object" && data_array1.startCell != null) {
              array1 = func_methods_default.getCellDataDyadicArr(data_array1, "text");
            } else {
              var rowArr = [];
              rowArr.push(data_array1);
              array1.push(rowArr);
            }
            for (var i2 = 0; i2 < array1.length; i2++) {
              for (var j = 0; j < array1[i2].length; j++) {
                if (!isRealNum(array1[i2][j])) {
                  array1[i2][j] = 0;
                } else {
                  array1[i2][j] = parseFloat(array1[i2][j]);
                }
              }
            }
            var rowlen = array1.length;
            var collen = array1[0].length;
            if (arguments.length >= 2) {
              for (var i2 = 1; i2 < arguments.length; i2++) {
                var data = arguments[i2];
                var arr = [];
                if (getObjType(data) == "array") {
                  if (getObjType(data[0]) == "array" && !func_methods_default.isDyadicArr(data)) {
                    return formula_default.error.v;
                  }
                  arr = func_methods_default.getDataDyadicArr(data);
                } else if (getObjType(data) == "object" && data.startCell != null) {
                  arr = func_methods_default.getCellDataDyadicArr(data, "text");
                } else {
                  var rowArr = [];
                  rowArr.push(data);
                  arr.push(rowArr);
                }
                if (arr.length != rowlen || arr[0].length != collen) {
                  return formula_default.error.v;
                }
                for (var m = 0; m < rowlen; m++) {
                  for (var n = 0; n < collen; n++) {
                    if (!isRealNum(arr[m][n])) {
                      array1[m][n] = 0;
                    } else {
                      array1[m][n] = array1[m][n] * parseFloat(arr[m][n]);
                    }
                  }
                }
              }
            }
            var sum = 0;
            for (var m = 0; m < rowlen; m++) {
              for (var n = 0; n < collen; n++) {
                sum += array1[m][n];
              }
            }
            return sum;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISFORMULA": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_cell = arguments[0];
            var cell;
            if (getObjType(data_cell) == "object" && data_cell.startCell != null) {
              if (data_cell.data == null) {
                return false;
              }
              if (getObjType(data_cell.data) == "array") {
                cell = data_cell.data[0][0];
              } else {
                cell = data_cell.data;
              }
              if (cell != null && cell.f != null) {
                return true;
              } else {
                return false;
              }
            } else {
              return formula_default.error.v;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "CELL": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_info_type = arguments[0];
            var info_type;
            if (getObjType(data_info_type) == "array") {
              if (getObjType(data_info_type[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_info_type)) {
                  return formula_default.error.v;
                }
                info_type = data_info_type[0][0];
              } else {
                info_type = data_info_type[0];
              }
            } else if (getObjType(data_info_type) == "object" && data_info_type.startCell != null) {
              if (data_info_type.data == null) {
                return formula_default.error.v;
              } else {
                if (getObjType(data_info_type.data) == "array") {
                  return formula_default.error.v;
                }
                info_type = data_info_type.data.v;
                if (isRealNull(info_type)) {
                  return formula_default.error.v;
                }
              }
            } else {
              info_type = data_info_type;
            }
            var data_reference = arguments[1];
            var reference;
            if (getObjType(data_reference) == "object" && data_reference.startCell != null) {
              reference = data_reference.startCell;
            } else {
              return formula_default.error.v;
            }
            if (["address", "col", "color", "contents", "filename", "format", "parentheses", "prefix", "protect", "row", "type", "width"].indexOf(info_type) == -1) {
              return formula_default.error.v;
            }
            var file = getluckysheetfile()[getSheetIndex(store_default.currentSheetIndex)];
            var cellrange = formula_default.getcellrange(reference);
            var row_index = cellrange.row[0];
            var col_index = cellrange.column[0];
            let luckysheetfile = getluckysheetfile();
            let index2 = getSheetIndex(store_default.calculateSheetIndex);
            let sheetdata = luckysheetfile[index2].data;
            let value;
            if (formula_default.execFunctionGlobalData != null && formula_default.execFunctionGlobalData[row_index + "_" + col_index + "_" + store_default.calculateSheetIndex] != null) {
              value = formula_default.execFunctionGlobalData[row_index + "_" + col_index + "_" + store_default.calculateSheetIndex].v;
            } else if (sheetdata[row_index][col_index] != null && sheetdata[row_index][col_index].v != null && sheetdata[row_index][col_index].v != "") {
              value = sheetdata[row_index][col_index];
              if (value instanceof Object) {
                value = value.v;
              }
            } else {
              value = 0;
            }
            switch (info_type) {
              case "address":
                return reference;
                break;
              case "col":
                return col_index + 1;
                break;
              case "color":
                return 0;
                break;
              case "contents":
                return value;
                break;
              case "filename":
                return file.name;
                break;
              case "format":
                if (sheetdata[row_index][col_index] == null || sheetdata[row_index][col_index].ct == null) {
                  return "G";
                }
                return sheetdata[row_index][col_index].ct.fa;
                break;
              case "parentheses":
                if (sheetdata[row_index][col_index] == null || sheetdata[row_index][col_index].v == null || sheetdata[row_index][col_index].v == "") {
                  return 0;
                }
                if (sheetdata[row_index][col_index].v > 0) {
                  return 1;
                } else {
                  return 0;
                }
                break;
              case "prefix":
                if (value == 0) {
                  return "";
                }
                if (sheetdata[row_index][col_index].ht == 0) {
                  return "^";
                } else if (sheetdata[row_index][col_index].ht == 1) {
                  return "'";
                } else if (sheetdata[row_index][col_index].ht == 2) {
                  return '"';
                } else {
                  return "";
                }
                break;
              case "protect":
                return 0;
                break;
              case "row":
                return row_index + 1;
                break;
              case "type":
                if (value == 0) {
                  return "b";
                }
                return "l";
                break;
              case "width":
                var cfg = file.config;
                if (cfg["columnlen"] != null && col_index in cfg["columnlen"]) {
                  return cfg["columnlen"][col_index];
                }
                return store_default.defaultcollen;
                break;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "NA": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            return formula_default.error.na;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ERROR_TYPE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_error_val = arguments[0];
            var error_val;
            if (getObjType(data_error_val) == "array") {
              if (getObjType(data_error_val[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_error_val)) {
                  return formula_default.error.v;
                }
                error_val = data_error_val[0][0];
              } else {
                error_val = data_error_val[0];
              }
            } else if (getObjType(data_error_val) == "object" && data_error_val.startCell != null) {
              if (data_error_val.data == null) {
                return formula_default.error.na;
              }
              if (getObjType(data_error_val.data) == "array") {
                error_val = data_error_val.data[0][0];
                if (error_val == null || isRealNull(error_val.v)) {
                  return formula_default.error.na;
                }
                error_val = error_val.v;
              } else {
                if (isRealNull(data_error_val.data.v)) {
                  return formula_default.error.na;
                }
                error_val = data_error_val.data.v;
              }
            } else {
              error_val = data_error_val;
            }
            var error_obj = {
              "#NULL!": 1,
              "#DIV/0!": 2,
              "#VALUE!": 3,
              "#REF!": 4,
              "#NAME?": 5,
              "#NUM!": 6,
              "#N/A": 7,
              "#GETTING_DATA": 8
            };
            if (error_val in error_obj) {
              return error_obj[error_val];
            } else {
              return formula_default.error.na;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISBLANK": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_error_val = arguments[0];
            var error_val;
            if (getObjType(data_error_val) == "object" && data_error_val.startCell != null) {
              if (data_error_val.data == null) {
                return true;
              } else {
                return false;
              }
            } else {
              return false;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISERR": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_value = arguments[0];
            var value;
            if (getObjType(data_value) == "array") {
              if (getObjType(data_value[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_value)) {
                  return formula_default.error.v;
                }
                value = data_value[0][0];
              } else {
                value = data_value[0];
              }
            } else if (getObjType(data_value) == "object" && data_value.startCell != null) {
              if (getObjType(data_value.data) == "array") {
                return true;
              }
              if (data_value.data == null || isRealNull(data_value.data.v)) {
                return false;
              }
              value = data_value.data.v;
            } else {
              value = data_value;
            }
            if (["#VALUE!", "#REF!", "#DIV/0!", "#NUM!", "#NAME?", "#NULL!"].indexOf(value) > -1) {
              return true;
            } else {
              return false;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISERROR": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_value = arguments[0];
            var value;
            if (getObjType(data_value) == "array") {
              if (getObjType(data_value[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_value)) {
                  return formula_default.error.v;
                }
                value = data_value[0][0];
              } else {
                value = data_value[0];
              }
            } else if (getObjType(data_value) == "object" && data_value.startCell != null) {
              if (getObjType(data_value.data) == "array") {
                return true;
              }
              if (data_value.data == null || isRealNull(data_value.data.v)) {
                return false;
              }
              value = data_value.data.v;
            } else {
              value = data_value;
            }
            if (["#N/A", "#VALUE!", "#REF!", "#DIV/0!", "#NUM!", "#NAME?", "#NULL!"].indexOf(value) > -1) {
              return true;
            } else {
              return false;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISLOGICAL": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_value = arguments[0];
            var value;
            if (getObjType(data_value) == "array") {
              if (getObjType(data_value[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_value)) {
                  return formula_default.error.v;
                }
                value = data_value[0][0];
              } else {
                value = data_value[0];
              }
            } else if (getObjType(data_value) == "object" && data_value.startCell != null) {
              if (getObjType(data_value.data) == "array") {
                return false;
              }
              if (data_value.data == null || isRealNull(data_value.data.v)) {
                return false;
              }
              value = data_value.data.v;
            } else {
              value = data_value;
            }
            if (value.toString().toLowerCase() == "true" || value.toString().toLowerCase() == "false") {
              return true;
            } else {
              return false;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISNA": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_value = arguments[0];
            var value;
            if (getObjType(data_value) == "array") {
              if (getObjType(data_value[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_value)) {
                  return formula_default.error.v;
                }
                value = data_value[0][0];
              } else {
                value = data_value[0];
              }
            } else if (getObjType(data_value) == "object" && data_value.startCell != null) {
              if (getObjType(data_value.data) == "array") {
                return false;
              }
              if (data_value.data == null || isRealNull(data_value.data.v)) {
                return false;
              }
              value = data_value.data.v;
            } else {
              value = data_value;
            }
            if (value.toString() == "#N/A") {
              return true;
            } else {
              return false;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISNONTEXT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_value = arguments[0];
            var value;
            if (getObjType(data_value) == "array") {
              if (getObjType(data_value[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_value)) {
                  return formula_default.error.v;
                }
                value = data_value[0][0];
              } else {
                value = data_value[0];
              }
            } else if (getObjType(data_value) == "object" && data_value.startCell != null) {
              if (getObjType(data_value.data) == "array") {
                return true;
              }
              if (data_value.data == null || isRealNull(data_value.data.v)) {
                return true;
              }
              value = data_value.data.v;
            } else {
              value = data_value;
            }
            if (["#N/A", "#VALUE!", "#REF!", "#DIV/0!", "#NUM!", "#NAME?", "#NULL!"].indexOf(value) > -1) {
              return true;
            } else if (value.toString().toLowerCase() == "true" || value.toString().toLowerCase() == "false") {
              return true;
            } else if (isRealNum(value)) {
              return true;
            } else {
              return false;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISNUMBER": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_value = arguments[0];
            var value;
            if (getObjType(data_value) == "array") {
              if (getObjType(data_value[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_value)) {
                  return formula_default.error.v;
                }
                value = data_value[0][0];
              } else {
                value = data_value[0];
              }
            } else if (getObjType(data_value) == "object" && data_value.startCell != null) {
              if (getObjType(data_value.data) == "array") {
                return false;
              }
              if (data_value.data == null || isRealNull(data_value.data.v)) {
                return false;
              }
              value = data_value.data.v;
            } else {
              value = data_value;
            }
            if (isRealNum(value)) {
              return true;
            } else {
              return false;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISREF": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            if (getObjType(arguments[0]) == "object" && arguments[0].startCell != null) {
              return true;
            } else {
              return false;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "ISTEXT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_value = arguments[0];
            var value;
            if (getObjType(data_value) == "array") {
              if (getObjType(data_value[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_value)) {
                  return formula_default.error.v;
                }
                value = data_value[0][0];
              } else {
                value = data_value[0];
              }
            } else if (getObjType(data_value) == "object" && data_value.startCell != null) {
              if (getObjType(data_value.data) == "array") {
                return false;
              }
              if (data_value.data == null || isRealNull(data_value.data.v)) {
                return false;
              }
              value = data_value.data.v;
            } else {
              value = data_value;
            }
            if (["#N/A", "#VALUE!", "#REF!", "#DIV/0!", "#NUM!", "#NAME?", "#NULL!"].indexOf(value) > -1) {
              return false;
            } else if (value.toString().toLowerCase() == "true" || value.toString().toLowerCase() == "false") {
              return false;
            } else if (isRealNum(value)) {
              return false;
            } else {
              return true;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TYPE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_value = arguments[0];
            var value;
            if (getObjType(data_value) == "array") {
              return 64;
            } else if (getObjType(data_value) == "object" && data_value.startCell != null) {
              if (getObjType(data_value.data) == "array") {
                return 16;
              }
              if (data_value.data == null || isRealNull(data_value.data.v)) {
                return 1;
              }
              value = data_value.data.v;
            } else {
              value = data_value;
            }
            if (["#N/A", "#VALUE!", "#REF!", "#DIV/0!", "#NUM!", "#NAME?", "#NULL!"].indexOf(value) > -1) {
              return 16;
            } else if (value.toString().toLowerCase() == "true" || value.toString().toLowerCase() == "false") {
              return 4;
            } else if (isRealNum(value)) {
              return 1;
            } else {
              return 2;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "N": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_value = arguments[0];
            var value;
            if (getObjType(data_value) == "array") {
              if (getObjType(data_value[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_value)) {
                  return formula_default.error.v;
                }
                value = data_value[0][0];
              } else {
                value = data_value[0];
              }
            } else if (getObjType(data_value) == "object" && data_value.startCell != null) {
              if (getObjType(data_value.data) == "array") {
                value = data_value.data[0][0];
                if (value == null || isRealNull(value.v)) {
                  return 0;
                }
                value = value.v;
              } else {
                if (data_value.data == null || isRealNull(data_value.data.v)) {
                  return 0;
                }
                value = data_value.data.v;
              }
            } else {
              value = data_value;
            }
            if (["#N/A", "#VALUE!", "#REF!", "#DIV/0!", "#NUM!", "#NAME?", "#NULL!"].indexOf(value) > -1) {
              return value;
            } else if (value.toString().toLowerCase() == "true" || value.toString().toLowerCase() == "false") {
              if (value.toString().toLowerCase() == "true") {
                return 1;
              } else {
                return 0;
              }
            } else if (isRealNum(value)) {
              return parseFloat(value);
            } else {
              return 0;
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TO_DATE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(value)) {
              return value;
            }
            if (!isRealNum(value)) {
              return formula_default.error.v;
            }
            value = parseFloat(value);
            return update("yyyy-mm-dd", value);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TO_PURE_NUMBER": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(value)) {
              return value;
            }
            if ((0, import_dayjs8.default)(value).isValid()) {
              return genarate(value)[2];
            } else {
              return (0, import_numeral6.default)(value).value() == null ? value : (0, import_numeral6.default)(value).value();
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TO_TEXT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value = func_methods_default.getFirstValue(arguments[0], "text");
            if (valueIsError(value)) {
              return value;
            }
            return update("@", value);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TO_DOLLARS": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(value)) {
              return value;
            }
            if (!isRealNum(value)) {
              return formula_default.error.v;
            }
            value = parseFloat(value);
            return update("$ 0.00", value);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TO_PERCENT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var value = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(value)) {
              return value;
            }
            if (!isRealNum(value)) {
              return formula_default.error.v;
            }
            value = parseFloat(value);
            return update("0%", value);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DGET": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_database = arguments[0];
            var database = [];
            if (getObjType(data_database) == "object" && data_database.startCell != null) {
              if (data_database.data == null) {
                return formula_default.error.v;
              }
              database = func_methods_default.getCellDataDyadicArr(data_database, "text");
            } else {
              return formula_default.error.v;
            }
            var field = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(field)) {
              return field;
            }
            if (isRealNull(field)) {
              return formula_default.error.v;
            }
            var data_criteria = arguments[2];
            var criteria = [];
            if (getObjType(data_criteria) == "object" && data_criteria.startCell != null) {
              if (data_criteria.data == null) {
                return formula_default.error.v;
              }
              criteria = func_methods_default.getCellDataDyadicArr(data_criteria, "text");
            } else {
              return formula_default.error.v;
            }
            if (!isRealNum(field) && getObjType(field) !== "string") {
              return formula_default.error.v;
            }
            var resultIndexes = func_methods_default.findResultIndex(database, criteria);
            var targetFields = [];
            if (getObjType(field) === "string") {
              var index2 = func_methods_default.findField(database, field);
              targetFields = func_methods_default.rest(database[index2]);
            } else {
              targetFields = func_methods_default.rest(database[field]);
            }
            if (resultIndexes.length === 0) {
              return formula_default.error.v;
            }
            if (resultIndexes.length > 1) {
              return formula_default.error.nm;
            }
            return targetFields[resultIndexes[0]];
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DMAX": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_database = arguments[0];
            var database = [];
            if (getObjType(data_database) == "object" && data_database.startCell != null) {
              if (data_database.data == null) {
                return formula_default.error.v;
              }
              database = func_methods_default.getCellDataDyadicArr(data_database, "text");
            } else {
              return formula_default.error.v;
            }
            var field = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(field)) {
              return field;
            }
            if (isRealNull(field)) {
              return formula_default.error.v;
            }
            var data_criteria = arguments[2];
            var criteria = [];
            if (getObjType(data_criteria) == "object" && data_criteria.startCell != null) {
              if (data_criteria.data == null) {
                return formula_default.error.v;
              }
              criteria = func_methods_default.getCellDataDyadicArr(data_criteria, "text");
            } else {
              return formula_default.error.v;
            }
            if (!isRealNum(field) && getObjType(field) !== "string") {
              return formula_default.error.v;
            }
            var resultIndexes = func_methods_default.findResultIndex(database, criteria);
            var targetFields = [];
            if (getObjType(field) === "string") {
              var index2 = func_methods_default.findField(database, field);
              targetFields = func_methods_default.rest(database[index2]);
            } else {
              targetFields = func_methods_default.rest(database[field]);
            }
            var maxValue = targetFields[resultIndexes[0]];
            for (var i2 = 1; i2 < resultIndexes.length; i2++) {
              if (maxValue < targetFields[resultIndexes[i2]]) {
                maxValue = targetFields[resultIndexes[i2]];
              }
            }
            return maxValue;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DMIN": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_database = arguments[0];
            var database = [];
            if (getObjType(data_database) == "object" && data_database.startCell != null) {
              if (data_database.data == null) {
                return formula_default.error.v;
              }
              database = func_methods_default.getCellDataDyadicArr(data_database, "text");
            } else {
              return formula_default.error.v;
            }
            var field = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(field)) {
              return field;
            }
            if (isRealNull(field)) {
              return formula_default.error.v;
            }
            var data_criteria = arguments[2];
            var criteria = [];
            if (getObjType(data_criteria) == "object" && data_criteria.startCell != null) {
              if (data_criteria.data == null) {
                return formula_default.error.v;
              }
              criteria = func_methods_default.getCellDataDyadicArr(data_criteria, "text");
            } else {
              return formula_default.error.v;
            }
            if (!isRealNum(field) && getObjType(field) !== "string") {
              return formula_default.error.v;
            }
            var resultIndexes = findResultIndex(database, criteria);
            var targetFields = [];
            if (getObjType(field) === "string") {
              var index2 = findField(database, field);
              targetFields = rest(database[index2]);
            } else {
              targetFields = rest(database[field]);
            }
            var minValue = targetFields[resultIndexes[0]];
            for (var i2 = 1; i2 < resultIndexes.length; i2++) {
              if (minValue > targetFields[resultIndexes[i2]]) {
                minValue = targetFields[resultIndexes[i2]];
              }
            }
            return minValue;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DAVERAGE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_database = arguments[0];
            var database = [];
            if (getObjType(data_database) == "object" && data_database.startCell != null) {
              if (data_database.data == null) {
                return formula_default.error.v;
              }
              database = func_methods_default.getCellDataDyadicArr(data_database, "text");
            } else {
              return formula_default.error.v;
            }
            var field = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(field)) {
              return field;
            }
            if (isRealNull(field)) {
              return formula_default.error.v;
            }
            var data_criteria = arguments[2];
            var criteria = [];
            if (getObjType(data_criteria) == "object" && data_criteria.startCell != null) {
              if (data_criteria.data == null) {
                return formula_default.error.v;
              }
              criteria = func_methods_default.getCellDataDyadicArr(data_criteria, "text");
            } else {
              return formula_default.error.v;
            }
            if (!isRealNum(field) && getObjType(field) !== "string") {
              return formula_default.error.v;
            }
            var resultIndexes = func_methods_default.findResultIndex(database, criteria);
            var targetFields = [];
            if (getObjType(field) === "string") {
              var index2 = func_methods_default.findField(database, field);
              targetFields = func_methods_default.rest(database[index2]);
            } else {
              targetFields = func_methods_default.rest(database[field]);
            }
            var sum = 0;
            for (var i2 = 0; i2 < resultIndexes.length; i2++) {
              sum += targetFields[resultIndexes[i2]];
            }
            return resultIndexes.length === 0 ? formula_default.error.d : sum / resultIndexes.length;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DCOUNT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_database = arguments[0];
            var database = [];
            if (getObjType(data_database) == "object" && data_database.startCell != null) {
              if (data_database.data == null) {
                return formula_default.error.v;
              }
              database = func_methods_default.getCellDataDyadicArr(data_database, "text");
            } else {
              return formula_default.error.v;
            }
            var field = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(field)) {
              return field;
            }
            if (isRealNull(field)) {
              return formula_default.error.v;
            }
            var data_criteria = arguments[2];
            var criteria = [];
            if (getObjType(data_criteria) == "object" && data_criteria.startCell != null) {
              if (data_criteria.data == null) {
                return formula_default.error.v;
              }
              criteria = func_methods_default.getCellDataDyadicArr(data_criteria, "text");
            } else {
              return formula_default.error.v;
            }
            if (!isRealNum(field) && getObjType(field) !== "string") {
              return formula_default.error.v;
            }
            var resultIndexes = func_methods_default.findResultIndex(database, criteria);
            var targetFields = [];
            if (getObjType(field) === "string") {
              var index2 = func_methods_default.findField(database, field);
              targetFields = func_methods_default.rest(database[index2]);
            } else {
              targetFields = func_methods_default.rest(database[field]);
            }
            var targetValues = [];
            for (var i2 = 0; i2 < resultIndexes.length; i2++) {
              targetValues[i2] = targetFields[resultIndexes[i2]];
            }
            return window.luckysheet_function.COUNT.f.apply(window.luckysheet_function.COUNT, targetValues);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DCOUNTA": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_database = arguments[0];
            var database = [];
            if (getObjType(data_database) == "object" && data_database.startCell != null) {
              if (data_database.data == null) {
                return formula_default.error.v;
              }
              database = func_methods_default.getCellDataDyadicArr(data_database, "text");
            } else {
              return formula_default.error.v;
            }
            var field = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(field)) {
              return field;
            }
            if (isRealNull(field)) {
              return formula_default.error.v;
            }
            var data_criteria = arguments[2];
            var criteria = [];
            if (getObjType(data_criteria) == "object" && data_criteria.startCell != null) {
              if (data_criteria.data == null) {
                return formula_default.error.v;
              }
              criteria = func_methods_default.getCellDataDyadicArr(data_criteria, "text");
            } else {
              return formula_default.error.v;
            }
            if (!isRealNum(field) && getObjType(field) !== "string") {
              return formula_default.error.v;
            }
            var resultIndexes = func_methods_default.findResultIndex(database, criteria);
            var targetFields = [];
            if (getObjType(field) === "string") {
              var index2 = func_methods_default.findField(database, field);
              targetFields = func_methods_default.rest(database[index2]);
            } else {
              targetFields = func_methods_default.rest(database[field]);
            }
            var targetValues = [];
            for (var i2 = 0; i2 < resultIndexes.length; i2++) {
              targetValues[i2] = targetFields[resultIndexes[i2]];
            }
            return window.luckysheet_function.COUNTA.f.apply(window.luckysheet_function.COUNTA, targetValues);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DPRODUCT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_database = arguments[0];
            var database = [];
            if (getObjType(data_database) == "object" && data_database.startCell != null) {
              if (data_database.data == null) {
                return formula_default.error.v;
              }
              database = func_methods_default.getCellDataDyadicArr(data_database, "text");
            } else {
              return formula_default.error.v;
            }
            var field = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(field)) {
              return field;
            }
            if (isRealNull(field)) {
              return formula_default.error.v;
            }
            var data_criteria = arguments[2];
            var criteria = [];
            if (getObjType(data_criteria) == "object" && data_criteria.startCell != null) {
              if (data_criteria.data == null) {
                return formula_default.error.v;
              }
              criteria = func_methods_default.getCellDataDyadicArr(data_criteria, "text");
            } else {
              return formula_default.error.v;
            }
            if (!isRealNum(field) && getObjType(field) !== "string") {
              return formula_default.error.v;
            }
            var resultIndexes = func_methods_default.findResultIndex(database, criteria);
            var targetFields = [];
            if (getObjType(field) === "string") {
              var index2 = func_methods_default.findField(database, field);
              targetFields = func_methods_default.rest(database[index2]);
            } else {
              targetFields = func_methods_default.rest(database[field]);
            }
            var targetValues = [];
            for (var i2 = 0; i2 < resultIndexes.length; i2++) {
              targetValues[i2] = targetFields[resultIndexes[i2]];
            }
            targetValues = func_methods_default.compact(targetValues);
            var result = 1;
            for (i2 = 0; i2 < targetValues.length; i2++) {
              result *= targetValues[i2];
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DSTDEV": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_database = arguments[0];
            var database = [];
            if (getObjType(data_database) == "object" && data_database.startCell != null) {
              if (data_database.data == null) {
                return formula_default.error.v;
              }
              database = func_methods_default.getCellDataDyadicArr(data_database, "text");
            } else {
              return formula_default.error.v;
            }
            var field = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(field)) {
              return field;
            }
            if (isRealNull(field)) {
              return formula_default.error.v;
            }
            var data_criteria = arguments[2];
            var criteria = [];
            if (getObjType(data_criteria) == "object" && data_criteria.startCell != null) {
              if (data_criteria.data == null) {
                return formula_default.error.v;
              }
              criteria = func_methods_default.getCellDataDyadicArr(data_criteria, "text");
            } else {
              return formula_default.error.v;
            }
            if (!isRealNum(field) && getObjType(field) !== "string") {
              return formula_default.error.v;
            }
            var resultIndexes = func_methods_default.findResultIndex(database, criteria);
            var targetFields = [];
            if (getObjType(field) === "string") {
              var index2 = func_methods_default.findField(database, field);
              targetFields = func_methods_default.rest(database[index2]);
            } else {
              targetFields = func_methods_default.rest(database[field]);
            }
            var targetValues = [];
            for (var i2 = 0; i2 < resultIndexes.length; i2++) {
              targetValues[i2] = targetFields[resultIndexes[i2]];
            }
            targetValues = func_methods_default.compact(targetValues);
            return window.luckysheet_function.STDEVA.f.apply(window.luckysheet_function.STDEVA, targetValues);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DSTDEVP": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_database = arguments[0];
            var database = [];
            if (getObjType(data_database) == "object" && data_database.startCell != null) {
              if (data_database.data == null) {
                return formula_default.error.v;
              }
              database = func_methods_default.getCellDataDyadicArr(data_database, "text");
            } else {
              return formula_default.error.v;
            }
            var field = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(field)) {
              return field;
            }
            if (isRealNull(field)) {
              return formula_default.error.v;
            }
            var data_criteria = arguments[2];
            var criteria = [];
            if (getObjType(data_criteria) == "object" && data_criteria.startCell != null) {
              if (data_criteria.data == null) {
                return formula_default.error.v;
              }
              criteria = func_methods_default.getCellDataDyadicArr(data_criteria, "text");
            } else {
              return formula_default.error.v;
            }
            if (!isRealNum(field) && getObjType(field) !== "string") {
              return formula_default.error.v;
            }
            var resultIndexes = func_methods_default.findResultIndex(database, criteria);
            var targetFields = [];
            if (getObjType(field) === "string") {
              var index2 = func_methods_default.findField(database, field);
              targetFields = func_methods_default.rest(database[index2]);
            } else {
              targetFields = func_methods_default.rest(database[field]);
            }
            var targetValues = [];
            for (var i2 = 0; i2 < resultIndexes.length; i2++) {
              targetValues[i2] = targetFields[resultIndexes[i2]];
            }
            targetValues = func_methods_default.compact(targetValues);
            return window.luckysheet_function.STDEVP.f.apply(window.luckysheet_function.STDEVP, targetValues);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DSUM": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_database = arguments[0];
            var database = [];
            if (getObjType(data_database) == "object" && data_database.startCell != null) {
              if (data_database.data == null) {
                return formula_default.error.v;
              }
              database = func_methods_default.getCellDataDyadicArr(data_database, "text");
            } else {
              return formula_default.error.v;
            }
            var field = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(field)) {
              return field;
            }
            if (isRealNull(field)) {
              return formula_default.error.v;
            }
            var data_criteria = arguments[2];
            var criteria = [];
            if (getObjType(data_criteria) == "object" && data_criteria.startCell != null) {
              if (data_criteria.data == null) {
                return formula_default.error.v;
              }
              criteria = func_methods_default.getCellDataDyadicArr(data_criteria, "text");
            } else {
              return formula_default.error.v;
            }
            if (!isRealNum(field) && getObjType(field) !== "string") {
              return formula_default.error.v;
            }
            var resultIndexes = func_methods_default.findResultIndex(database, criteria);
            var targetFields = [];
            if (getObjType(field) === "string") {
              var index2 = func_methods_default.findField(database, field);
              targetFields = func_methods_default.rest(database[index2]);
            } else {
              targetFields = func_methods_default.rest(database[field]);
            }
            var targetValues = [];
            for (var i2 = 0; i2 < resultIndexes.length; i2++) {
              targetValues[i2] = targetFields[resultIndexes[i2]];
            }
            targetValues = func_methods_default.compact(targetValues);
            var result = 0;
            for (i2 = 0; i2 < targetValues.length; i2++) {
              result += targetValues[i2];
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DVAR": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_database = arguments[0];
            var database = [];
            if (getObjType(data_database) == "object" && data_database.startCell != null) {
              if (data_database.data == null) {
                return formula_default.error.v;
              }
              database = func_methods_default.getCellDataDyadicArr(data_database, "text");
            } else {
              return formula_default.error.v;
            }
            var field = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(field)) {
              return field;
            }
            if (isRealNull(field)) {
              return formula_default.error.v;
            }
            var data_criteria = arguments[2];
            var criteria = [];
            if (getObjType(data_criteria) == "object" && data_criteria.startCell != null) {
              if (data_criteria.data == null) {
                return formula_default.error.v;
              }
              criteria = func_methods_default.getCellDataDyadicArr(data_criteria, "text");
            } else {
              return formula_default.error.v;
            }
            if (!isRealNum(field) && getObjType(field) !== "string") {
              return formula_default.error.v;
            }
            var resultIndexes = func_methods_default.findResultIndex(database, criteria);
            var targetFields = [];
            if (getObjType(field) === "string") {
              var index2 = func_methods_default.findField(database, field);
              targetFields = func_methods_default.rest(database[index2]);
            } else {
              targetFields = func_methods_default.rest(database[field]);
            }
            var targetValues = [];
            for (var i2 = 0; i2 < resultIndexes.length; i2++) {
              targetValues[i2] = targetFields[resultIndexes[i2]];
            }
            targetValues = func_methods_default.compact(targetValues);
            return window.luckysheet_function.VAR_S.f.apply(window.luckysheet_function.VAR_S, targetValues);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DVARP": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_database = arguments[0];
            var database = [];
            if (getObjType(data_database) == "object" && data_database.startCell != null) {
              if (data_database.data == null) {
                return formula_default.error.v;
              }
              database = func_methods_default.getCellDataDyadicArr(data_database, "text");
            } else {
              return formula_default.error.v;
            }
            var field = func_methods_default.getFirstValue(arguments[1], "text");
            if (valueIsError(field)) {
              return field;
            }
            if (isRealNull(field)) {
              return formula_default.error.v;
            }
            var data_criteria = arguments[2];
            var criteria = [];
            if (getObjType(data_criteria) == "object" && data_criteria.startCell != null) {
              if (data_criteria.data == null) {
                return formula_default.error.v;
              }
              criteria = func_methods_default.getCellDataDyadicArr(data_criteria, "text");
            } else {
              return formula_default.error.v;
            }
            if (!isRealNum(field) && getObjType(field) !== "string") {
              return formula_default.error.v;
            }
            var resultIndexes = func_methods_default.findResultIndex(database, criteria);
            var targetFields = [];
            if (getObjType(field) === "string") {
              var index2 = func_methods_default.findField(database, field);
              targetFields = func_methods_default.rest(database[index2]);
            } else {
              targetFields = func_methods_default.rest(database[field]);
            }
            var targetValues = [];
            for (var i2 = 0; i2 < resultIndexes.length; i2++) {
              targetValues[i2] = targetFields[resultIndexes[i2]];
            }
            targetValues = func_methods_default.compact(targetValues);
            return window.luckysheet_function.VAR_P.f.apply(window.luckysheet_function.VAR_P, targetValues);
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "LINESPLINES": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var colorList = formula_default.colorList;
            var rangeValue = arguments[0];
            var lineColor = arguments[1];
            var lineWidth = arguments[2];
            var normalValue = arguments[3];
            var normalColor = arguments[4];
            var maxSpot = arguments[5];
            var minSpot = arguments[6];
            var spotRadius = arguments[7];
            let luckysheetfile = getluckysheetfile();
            let index2 = getSheetIndex(store_default.calculateSheetIndex);
            let sheetdata = luckysheetfile[index2].data;
            var dataformat = formula_default.readCellDataToOneArray(rangeValue);
            var cellSize = menuButton_default.getCellRealSize(sheetdata, cell_r, cell_c);
            var width = cellSize[0];
            var height = cellSize[1];
            var sparksetting = {};
            if (lineWidth == null) {
              lineWidth = 1;
            }
            sparksetting["lineWidth"] = lineWidth;
            sparksetting["offsetY"] = lineWidth + 1;
            sparksetting.height = height - (lineWidth + 1);
            sparksetting.width = width;
            var sparkColorSetting = function(attr, value) {
              if (!!value) {
                if (typeof value == "number") {
                  if (value > 19) {
                    value = value % 20;
                  }
                  value = colorList[value];
                }
                sparksetting[attr] = value;
              }
            };
            if (lineColor == null) {
              lineColor = "#2ec7c9";
            }
            sparkColorSetting("lineColor", lineColor);
            sparksetting["fillColor"] = 0;
            if (!!normalValue) {
              if (typeof normalValue == "string") {
                normalValue = normalValue.toLowerCase();
                var nv = null;
                if (normalValue == "min") {
                  nv = window.luckysheet_function.MIN.f({"data": dataformat});
                } else if (normalValue == "max") {
                  nv = window.luckysheet_function.MAX.f({"data": dataformat});
                } else if (normalValue == "avg" || normalValue == "mean") {
                  nv = window.luckysheet_function.AVERAGE.f({"data": dataformat});
                } else if (normalValue == "median") {
                  nv = window.luckysheet_function.MEDIAN.f({"data": dataformat});
                }
                if (!!nv) {
                  sparksetting["normalRangeMin"] = nv;
                  sparksetting["normalRangeMax"] = nv;
                }
              } else {
                sparksetting["normalRangeMin"] = normalValue;
                sparksetting["normalRangeMax"] = normalValue;
              }
            }
            if (normalColor == null) {
              normalColor = "#000";
            }
            sparkColorSetting("normalRangeColor", normalColor);
            sparkColorSetting("maxSpotColor", maxSpot);
            sparkColorSetting("minSpotColor", minSpot);
            if (spotRadius == null) {
              spotRadius = "1.5";
            }
            sparksetting["spotRadius"] = spotRadius;
            var temp1 = sparkline_default.init(dataformat, sparksetting);
            return temp1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "AREASPLINES": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var colorList = formula_default.colorList;
            var rangeValue = arguments[0];
            var lineColor = arguments[1];
            var fillColor = arguments[2];
            var lineWidth = arguments[3];
            var normalValue = arguments[4];
            var normalColor = arguments[5];
            var dataformat = formula_default.readCellDataToOneArray(rangeValue);
            let luckysheetfile = getluckysheetfile();
            let index2 = getSheetIndex(store_default.calculateSheetIndex);
            let sheetdata = luckysheetfile[index2].data;
            var cellSize = menuButton_default.getCellRealSize(sheetdata, cell_r, cell_c);
            var width = cellSize[0];
            var height = cellSize[1];
            var sparksetting = {};
            if (lineWidth == null) {
              lineWidth = 1;
            }
            sparksetting["lineWidth"] = lineWidth;
            sparksetting["offsetY"] = lineWidth + 1;
            sparksetting.height = height - (lineWidth + 1);
            sparksetting.width = width;
            var sparkColorSetting = function(attr, value) {
              if (!!value) {
                if (typeof value == "number") {
                  if (value > 19) {
                    value = value % 20;
                  }
                  value = colorList[value];
                }
                sparksetting[attr] = value;
              }
            };
            if (lineColor == null) {
              lineColor = "#2ec7c9";
            }
            sparkColorSetting("lineColor", lineColor);
            sparkColorSetting("fillColor", fillColor);
            if (lineWidth == null) {
              lineWidth = "1";
            }
            sparksetting["lineWidth"] = lineWidth;
            if (!!normalValue) {
              if (typeof normalValue == "string") {
                normalValue = normalValue.toLowerCase();
                var nv = null;
                if (normalValue == "min") {
                  nv = window.luckysheet_function.MIN.f({"data": dataformat});
                } else if (normalValue == "max") {
                  nv = window.luckysheet_function.MAX.f({"data": dataformat});
                } else if (normalValue == "avg" || normalValue == "mean") {
                  nv = window.luckysheet_function.AVERAGE.f({"data": dataformat});
                } else if (normalValue == "median") {
                  nv = window.luckysheet_function.MEDIAN.f({"data": dataformat});
                }
                if (!!nv) {
                  sparksetting["normalRangeMin"] = nv;
                  sparksetting["normalRangeMax"] = nv;
                }
              } else {
                sparksetting["normalRangeMin"] = normalValue;
                sparksetting["normalRangeMax"] = normalValue;
              }
            }
            if (normalColor == null) {
              normalColor = "#000";
            }
            sparkColorSetting("normalRangeColor", normalColor);
            var temp1 = sparkline_default.init(dataformat, sparksetting);
            return temp1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "COLUMNSPLINES": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var colorList = formula_default.colorList;
            var rangeValue = arguments[0];
            var dataformat = formula_default.readCellDataToOneArray(rangeValue);
            let luckysheetfile = getluckysheetfile();
            let index2 = getSheetIndex(store_default.calculateSheetIndex);
            let sheetdata = luckysheetfile[index2].data;
            var cellSize = menuButton_default.getCellRealSize(sheetdata, cell_r, cell_c);
            var width = cellSize[0];
            var height = cellSize[1];
            var sparksetting = {};
            sparksetting.height = height;
            sparksetting.width = width;
            var sparkColorSetting = function(attr, value) {
              if (!!value) {
                if (typeof value == "number") {
                  if (value > 19) {
                    value = value % 20;
                  }
                  value = colorList[value];
                }
                sparksetting[attr] = value;
              }
            };
            var barSpacing = arguments[1];
            var barColor = arguments[2];
            var negBarColor = arguments[3];
            var chartRangeMax = arguments[4];
            sparksetting["type"] = "column";
            if (barSpacing == null) {
              barSpacing = "1";
            }
            sparksetting["barSpacing"] = barSpacing;
            if (barColor == null) {
              barColor = "#fc5c5c";
            }
            sparkColorSetting("barColor", barColor);
            if (negBarColor == null) {
              negBarColor = "#97b552";
            }
            sparkColorSetting("negBarColor", negBarColor);
            if (chartRangeMax == null || chartRangeMax === false || typeof chartRangeMax != "number") {
              sparksetting["chartRangeMax"] = void 0;
            } else {
              sparksetting["chartRangeMax"] = chartRangeMax;
            }
            var colorLists = formula_default.sparklinesColorMap(arguments);
            if (!!colorLists) {
              sparksetting["colorMap"] = colorLists;
            }
            var temp1 = sparkline_default.init(dataformat, sparksetting);
            return temp1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "STACKCOLUMNSPLINES": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var colorList = formula_default.colorList;
            var rangeValue = arguments[0];
            var dataformat = [];
            var data = [];
            if (rangeValue != null && rangeValue.data != null) {
              data = rangeValue.data;
            }
            if (getObjType(data) == "array") {
              data = formula_default.getPureValueByData(data);
            } else if (getObjType(data) == "object") {
              data = data.v;
              return [data];
            } else {
              if (/\{.*?\}/.test(data)) {
                data = data.replace(/\{/g, "[").replace(/\}/g, "]");
              }
              data = new Function("return " + data)();
            }
            var stackconfig = arguments[1];
            var offsetY = data.length;
            if (stackconfig == null || !!stackconfig) {
              for (var c2 = 0; c2 < data[0].length; c2++) {
                var colstr = "";
                for (var r2 = 0; r2 < data.length; r2++) {
                  colstr += data[r2][c2] + ":";
                }
                colstr = colstr.substr(0, colstr.length - 1);
                dataformat.push(colstr);
              }
            } else {
              for (var r2 = 0; r2 < data.length; r2++) {
                var rowstr = "";
                for (var c2 = 0; c2 < data[0].length; c2++) {
                  rowstr += data[r2][c2] + ":";
                }
                rowstr = rowstr.substr(0, rowstr.length - 1);
                dataformat.push(rowstr);
              }
              var offsetY = data[0].length;
            }
            let luckysheetfile = getluckysheetfile();
            let index2 = getSheetIndex(store_default.calculateSheetIndex);
            let sheetdata = luckysheetfile[index2].data;
            var cellSize = menuButton_default.getCellRealSize(sheetdata, cell_r, cell_c);
            var width = cellSize[0];
            var height = cellSize[1];
            var sparksetting = {};
            sparksetting.height = height;
            sparksetting.width = width;
            var sparkColorSetting = function(attr, value) {
              if (!!value) {
                if (typeof value == "number") {
                  if (value > 19) {
                    value = value % 20;
                  }
                  value = colorList[value];
                }
                sparksetting[attr] = value;
              }
            };
            var barSpacing = arguments[2];
            var chartRangeMax = arguments[3];
            sparksetting["type"] = "column";
            if (barSpacing == null) {
              barSpacing = "1";
            }
            sparksetting["barSpacing"] = barSpacing;
            if (chartRangeMax == null || chartRangeMax === false || typeof chartRangeMax != "number") {
              sparksetting["chartRangeMax"] = void 0;
            } else {
              sparksetting["chartRangeMax"] = chartRangeMax;
            }
            var colorLists = formula_default.sparklinesColorMap(arguments, 4);
            if (!!colorLists) {
              sparksetting["colorMap"] = colorLists;
            }
            var temp1 = sparkline_default.init(dataformat, sparksetting);
            return temp1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "BARSPLINES": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var colorList = formula_default.colorList;
            var rangeValue = arguments[0];
            var dataformat = formula_default.readCellDataToOneArray(rangeValue);
            let luckysheetfile = getluckysheetfile();
            let index2 = getSheetIndex(store_default.calculateSheetIndex);
            let sheetdata = luckysheetfile[index2].data;
            var cellSize = menuButton_default.getCellRealSize(sheetdata, cell_r, cell_c);
            var width = cellSize[0];
            var height = cellSize[1];
            var sparksetting = {};
            sparksetting.height = height;
            sparksetting.width = width;
            var sparkColorSetting = function(attr, value) {
              if (!!value) {
                if (typeof value == "number") {
                  if (value > 19) {
                    value = value % 20;
                  }
                  value = colorList[value];
                }
                sparksetting[attr] = value;
              }
            };
            var barSpacing = arguments[1];
            var barColor = arguments[2];
            var negBarColor = arguments[3];
            var chartRangeMax = arguments[4];
            sparksetting["type"] = "bar";
            if (barSpacing == null) {
              barSpacing = "1";
            }
            sparksetting["barSpacing"] = barSpacing;
            if (barColor == null) {
              barColor = "#fc5c5c";
            }
            sparkColorSetting("barColor", barColor);
            if (negBarColor == null) {
              negBarColor = "#97b552";
            }
            sparkColorSetting("negBarColor", negBarColor);
            if (chartRangeMax == null || chartRangeMax === false || typeof chartRangeMax != "number") {
              sparksetting["chartRangeMax"] = void 0;
            } else {
              sparksetting["chartRangeMax"] = chartRangeMax;
            }
            var colorLists = formula_default.sparklinesColorMap(arguments);
            if (!!colorLists) {
              sparksetting["colorMap"] = colorLists;
            }
            var temp1 = sparkline_default.init(dataformat, sparksetting);
            return temp1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "STACKBARSPLINES": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var colorList = formula_default.colorList;
            var rangeValue = arguments[0];
            var dataformat = [];
            var data = [];
            if (rangeValue != null && rangeValue.data != null) {
              data = rangeValue.data;
            }
            if (getObjType(data) == "array") {
              data = formula_default.getPureValueByData(data);
            } else if (getObjType(data) == "object") {
              data = data.v;
              return [data];
            } else {
              if (/\{.*?\}/.test(data)) {
                data = data.replace(/\{/g, "[").replace(/\}/g, "]");
              }
              data = new Function("return " + data)();
            }
            var stackconfig = arguments[1];
            var offsetY = data.length;
            if (stackconfig == null || !!stackconfig) {
              for (var c2 = 0; c2 < data[0].length; c2++) {
                var colstr = "";
                for (var r2 = 0; r2 < data.length; r2++) {
                  colstr += data[r2][c2] + ":";
                }
                colstr = colstr.substr(0, colstr.length - 1);
                dataformat.push(colstr);
              }
            } else {
              for (var r2 = 0; r2 < data.length; r2++) {
                var rowstr = "";
                for (var c2 = 0; c2 < data[0].length; c2++) {
                  rowstr += data[r2][c2] + ":";
                }
                rowstr = rowstr.substr(0, rowstr.length - 1);
                dataformat.push(rowstr);
              }
              var offsetY = data[0].length;
            }
            let luckysheetfile = getluckysheetfile();
            let index2 = getSheetIndex(store_default.calculateSheetIndex);
            let sheetdata = luckysheetfile[index2].data;
            var cellSize = menuButton_default.getCellRealSize(sheetdata, cell_r, cell_c);
            var width = cellSize[0];
            var height = cellSize[1];
            var sparksetting = {};
            sparksetting.height = height;
            sparksetting.width = width;
            var sparkColorSetting = function(attr, value) {
              if (!!value) {
                if (typeof value == "number") {
                  if (value > 19) {
                    value = value % 20;
                  }
                  value = colorList[value];
                }
                sparksetting[attr] = value;
              }
            };
            var barSpacing = arguments[2];
            var chartRangeMax = arguments[3];
            sparksetting["type"] = "bar";
            if (barSpacing == null) {
              barSpacing = "1";
            }
            sparksetting["barSpacing"] = barSpacing;
            if (chartRangeMax == null || chartRangeMax === false || typeof chartRangeMax != "number") {
              sparksetting["chartRangeMax"] = void 0;
            } else {
              sparksetting["chartRangeMax"] = chartRangeMax;
            }
            var colorLists = formula_default.sparklinesColorMap(arguments, 4);
            if (!!colorLists) {
              sparksetting["colorMap"] = colorLists;
            }
            var temp1 = sparkline_default.init(dataformat, sparksetting);
            return temp1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "DISCRETESPLINES": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var colorList = formula_default.colorList;
            var rangeValue = arguments[0];
            var dataformat = formula_default.readCellDataToOneArray(rangeValue);
            let luckysheetfile = getluckysheetfile();
            let index2 = getSheetIndex(store_default.calculateSheetIndex);
            let sheetdata = luckysheetfile[index2].data;
            var cellSize = menuButton_default.getCellRealSize(sheetdata, cell_r, cell_c);
            var width = cellSize[0];
            var height = cellSize[1];
            var sparksetting = {};
            sparksetting.height = height;
            sparksetting.width = width;
            var sparkColorSetting = function(attr, value) {
              if (!!value) {
                if (typeof value == "number") {
                  if (value > 19) {
                    value = value % 20;
                  }
                  value = colorList[value];
                }
                sparksetting[attr] = value;
              }
            };
            var thresholdValue = arguments[1];
            var barColor = arguments[2];
            var negBarColor = arguments[3];
            sparksetting["type"] = "discrete";
            if (thresholdValue == null) {
              thresholdValue = 0;
            }
            sparksetting["thresholdValue"] = thresholdValue;
            if (barColor == null) {
              barColor = "#2ec7c9";
            }
            sparkColorSetting("lineColor", barColor);
            if (negBarColor == null) {
              negBarColor = "#fc5c5c";
            }
            sparkColorSetting("thresholdColor", negBarColor);
            var temp1 = sparkline_default.init(dataformat, sparksetting);
            return temp1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "TRISTATESPLINES": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var colorList = formula_default.colorList;
            var rangeValue = arguments[0];
            var dataformat = formula_default.readCellDataToOneArray(rangeValue);
            let luckysheetfile = getluckysheetfile();
            let index2 = getSheetIndex(store_default.calculateSheetIndex);
            let sheetdata = luckysheetfile[index2].data;
            var cellSize = menuButton_default.getCellRealSize(sheetdata, cell_r, cell_c);
            var width = cellSize[0];
            var height = cellSize[1];
            var sparksetting = {};
            sparksetting.height = height;
            sparksetting.width = width;
            var sparkColorSetting = function(attr, value) {
              if (!!value) {
                if (typeof value == "number") {
                  if (value > 19) {
                    value = value % 20;
                  }
                  value = colorList[value];
                }
                sparksetting[attr] = value;
              }
            };
            var barSpacing = arguments[1];
            var barColor = arguments[2];
            var negBarColor = arguments[3];
            var zeroBarColor = arguments[4];
            sparksetting["type"] = "tristate";
            if (barSpacing == null) {
              barSpacing = "1";
            }
            sparksetting["barSpacing"] = barSpacing;
            if (barColor == null) {
              barColor = "#fc5c5c";
            }
            sparkColorSetting("barColor", barColor);
            if (negBarColor == null) {
              negBarColor = "#97b552";
            }
            sparkColorSetting("negBarColor", negBarColor);
            if (zeroBarColor == null) {
              zeroBarColor = "#999";
            }
            sparkColorSetting("zeroBarColor", zeroBarColor);
            var colorLists = formula_default.sparklinesColorMap(arguments);
            if (!!colorLists) {
              sparksetting["colorMap"] = colorLists;
            }
            var temp1 = sparkline_default.init(dataformat, sparksetting);
            return temp1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "PIESPLINES": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var colorList = formula_default.colorList;
            var rangeValue = arguments[0];
            var dataformat = formula_default.readCellDataToOneArray(rangeValue);
            let luckysheetfile = getluckysheetfile();
            let index2 = getSheetIndex(store_default.calculateSheetIndex);
            let sheetdata = luckysheetfile[index2].data;
            var cellSize = menuButton_default.getCellRealSize(sheetdata, cell_r, cell_c);
            var width = cellSize[0];
            var height = cellSize[1];
            var sparksetting = {};
            sparksetting.height = height;
            sparksetting.width = width;
            var sparkColorSetting = function(attr, value) {
              if (!!value) {
                if (typeof value == "number") {
                  if (value > 19) {
                    value = value % 20;
                  }
                  value = colorList[value];
                }
                sparksetting[attr] = value;
              }
            };
            var offset = arguments[1];
            var borderWidth = arguments[2];
            var borderColor = arguments[3];
            sparksetting["type"] = "pie";
            if (offset == null) {
              offset = 0;
            }
            sparksetting["offset"] = offset;
            if (borderWidth == null) {
              borderWidth = 0;
            }
            sparkColorSetting("borderWidth", borderWidth);
            if (borderColor == null) {
              borderColor = "#97b552";
            }
            sparkColorSetting("borderColor", borderColor);
            var colorLists = formula_default.sparklinesColorMap(arguments, 4);
            if (!!colorLists) {
              sparksetting["colorMap"] = colorLists;
            }
            var temp1 = sparkline_default.init(dataformat, sparksetting);
            return temp1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "BOXSPLINES": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var colorList = formula_default.colorList;
            var rangeValue = arguments[0];
            var dataformat = formula_default.readCellDataToOneArray(rangeValue);
            let luckysheetfile = getluckysheetfile();
            let index2 = getSheetIndex(store_default.calculateSheetIndex);
            let sheetdata = luckysheetfile[index2].data;
            var cellSize = menuButton_default.getCellRealSize(sheetdata, cell_r, cell_c);
            var width = cellSize[0];
            var height = cellSize[1];
            var sparksetting = {};
            sparksetting.height = height;
            sparksetting.width = width;
            var sparkColorSetting = function(attr, value) {
              if (!!value) {
                if (typeof value == "number") {
                  if (value > 19) {
                    value = value % 20;
                  }
                  value = colorList[value];
                }
                sparksetting[attr] = value;
              }
            };
            var outlierIQR = arguments[1];
            var target = arguments[2];
            var spotRadius = arguments[3];
            sparksetting["type"] = "box";
            if (outlierIQR == null) {
              outlierIQR = 1.5;
            }
            sparksetting["outlierIQR"] = outlierIQR;
            if (target == null) {
              target = 0;
            } else {
              sparkColorSetting("target", target);
            }
            if (spotRadius == null) {
              spotRadius = 1.5;
            }
            sparkColorSetting("spotRadius", spotRadius);
            var temp1 = sparkline_default.init(dataformat, sparksetting);
            return temp1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "BULLETSPLINES": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var cell_fp = window.luckysheetCurrentFunction;
            var colorList = formula_default.colorList;
            let luckysheetfile = getluckysheetfile();
            let index2 = getSheetIndex(store_default.calculateSheetIndex);
            let sheetdata = luckysheetfile[index2].data;
            var cellSize = menuButton_default.getCellRealSize(sheetdata, cell_r, cell_c);
            var width = cellSize[0];
            var height = cellSize[1];
            var sparksetting = {};
            sparksetting.height = height;
            sparksetting.width = width;
            var sparkColorSetting = function(attr, value) {
              if (!!value) {
                if (typeof value == "number") {
                  if (value > 19) {
                    value = value % 20;
                  }
                  value = colorList[value];
                }
                sparksetting[attr] = value;
              }
            };
            var dataformat = [];
            luckysheet_getValue(arguments);
            var data1 = formula_default.getValueByFuncData(arguments[0]);
            var data2 = formula_default.getValueByFuncData(arguments[1]);
            dataformat.push(data1);
            dataformat.push(data2);
            for (var i2 = 2; i2 < arguments.length; i2++) {
              dataformat.push(formula_default.getValueByFuncData(arguments[i2]));
            }
            sparksetting["type"] = "bullet";
            var temp1 = sparkline_default.init(dataformat, sparksetting);
            return temp1;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SORT": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_array = arguments[0];
            var array = [], rowlen = 1, collen = 1;
            if (getObjType(data_array) == "array") {
              if (getObjType(data_array[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_array)) {
                  return formula_default.error.v;
                }
                for (var i2 = 0; i2 < data_array.length; i2++) {
                  var rowArr = [];
                  for (var j = 0; j < data_array[i2].length; j++) {
                    var number = data_array[i2][j];
                    rowArr.push(number);
                  }
                  array.push(rowArr);
                }
                rowlen = array.length;
                collen = array[0].length;
              } else {
                for (var i2 = 0; i2 < data_array.length; i2++) {
                  var number = data_array[i2];
                  array.push(number);
                }
                rowlen = array.length;
              }
            } else if (getObjType(data_array) == "object" && data_array.startCell != null) {
              if (data_array.data != null) {
                if (getObjType(data_array.data) == "array") {
                  for (var i2 = 0; i2 < data_array.data.length; i2++) {
                    var rowArr = [];
                    for (var j = 0; j < data_array.data[i2].length; j++) {
                      if (data_array.data[i2][j] != null) {
                        var number = data_array.data[i2][j].v;
                        if (isRealNull(number)) {
                          number = 0;
                        }
                        rowArr.push(number);
                      } else {
                        rowArr.push(0);
                      }
                    }
                    array.push(rowArr);
                  }
                  rowlen = array.length;
                  collen = array[0].length;
                } else {
                  var number = data_array.data.v;
                  if (isRealNull(number)) {
                    number = 0;
                  }
                  array.push(number);
                }
              } else {
                array.push(0);
              }
            } else {
              var number = data_array;
              array.push(number);
            }
            var sort_index = 1;
            if (arguments.length >= 2) {
              sort_index = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(sort_index)) {
                return sort_index;
              }
              if (!isRealNum(sort_index)) {
                return formula_default.error.v;
              }
              sort_index = parseInt(sort_index);
            }
            var sort_order = 1;
            if (arguments.length >= 3) {
              sort_order = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(sort_order)) {
                return sort_order;
              }
              if (!isRealNum(sort_order)) {
                return formula_default.error.v;
              }
              sort_order = Math.floor(parseFloat(sort_order));
            }
            var by_col = false;
            if (arguments.length == 4) {
              by_col = func_methods_default.getCellBoolen(arguments[3]);
              if (valueIsError(by_col)) {
                return by_col;
              }
            }
            if (by_col) {
              if (sort_index < 1 || sort_index > rowlen) {
                return formula_default.error.v;
              }
            } else {
              if (sort_index < 1 || sort_index > collen) {
                return formula_default.error.v;
              }
            }
            if (sort_order != 1 && sort_order != -1) {
              return formula_default.error.v;
            }
            var asc = function(x, y) {
              if (getObjType(x) == "array") {
                x = x[sort_index - 1];
              }
              if (getObjType(y) == "array") {
                y = y[sort_index - 1];
              }
              if (!isNaN(x) && !isNaN(y)) {
                return x - y;
              } else if (!isNaN(x)) {
                return -1;
              } else if (!isNaN(y)) {
                return 1;
              } else {
                if (x > y) {
                  return 1;
                } else if (x < y) {
                  return -1;
                }
              }
            };
            var desc = function(x, y) {
              if (getObjType(x) == "array") {
                x = x[sort_index - 1];
              }
              if (getObjType(y) == "array") {
                y = y[sort_index - 1];
              }
              if (!isNaN(x) && !isNaN(y)) {
                return y - x;
              } else if (!isNaN(x)) {
                return 1;
              } else if (!isNaN(y)) {
                return -1;
              } else {
                if (x > y) {
                  return -1;
                } else if (x < y) {
                  return 1;
                }
              }
            };
            if (by_col) {
              array = array[0].map(function(col, a) {
                return array.map(function(row) {
                  return row[a];
                });
              });
              if (sort_order == 1) {
                array.sort(asc);
              }
              if (sort_order == -1) {
                array.sort(desc);
              }
              array = array[0].map(function(col, b) {
                return array.map(function(row) {
                  return row[b];
                });
              });
            } else {
              if (sort_order == 1) {
                array.sort(asc);
              }
              if (sort_order == -1) {
                array.sort(desc);
              }
            }
            return array;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "FILTER": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_array = arguments[0];
            var array = [];
            if (getObjType(data_array) == "array") {
              if (getObjType(data_array[0]) == "array" && !func_methods_default.isDyadicArr(data_array)) {
                return formula_default.error.v;
              }
              array = func_methods_default.getDataDyadicArr(data_array);
            } else if (getObjType(data_array) == "object" && data_array.startCell != null) {
              array = func_methods_default.getCellDataDyadicArr(data_array, "number");
            } else {
              var rowArr = [];
              rowArr.push(parseFloat(data_array));
              array.push(rowArr);
            }
            var rowlen = array.length, collen = array[0].length;
            var data_include = arguments[1];
            var include = [];
            var type = "row";
            if (getObjType(data_include) == "array") {
              if (getObjType(data_include[0]) == "array") {
                if (!func_methods_default.isDyadicArr(data_include)) {
                  return formula_default.error.v;
                }
                if (data_include.length > 1 && data_include[0].length > 1) {
                  return formula_default.error.v;
                }
                if (data_include.length > 1) {
                  if (data_include.length != array.length) {
                    return formula_default.error.v;
                  }
                  type = "row";
                  for (var i2 = 0; i2 < data_include.length; i2++) {
                    var txt = data_include[i2][0];
                    if (getObjType(txt) == "boolean") {
                    } else if (getObjType(txt) == "string" && (txt.toLowerCase() == "true" || txt.toLowerCase() == "false")) {
                      if (txt.toLowerCase() == "true") {
                        txt = true;
                      } else if (txt.toLowerCase() == "false") {
                        txt = false;
                      }
                    } else if (isRealNum(txt)) {
                      txt = parseFloat(txt);
                      txt = txt == 0 ? false : true;
                    } else {
                      return formula_default.error.v;
                    }
                    include.push(txt);
                  }
                }
                if (data_include[0].length > 1) {
                  if (data_include[0].length != array[0].length) {
                    return formula_default.error.v;
                  }
                  type = "col";
                  for (var i2 = 0; i2 < data_include[0].length; i2++) {
                    var txt = data_include[0][i2];
                    if (getObjType(txt) == "boolean") {
                    } else if (getObjType(txt) == "string" && (txt.toLowerCase() == "true" || txt.toLowerCase() == "false")) {
                      if (txt.toLowerCase() == "true") {
                        txt = true;
                      } else if (txt.toLowerCase() == "false") {
                        txt = false;
                      }
                    } else if (isRealNum(txt)) {
                      txt = parseFloat(txt);
                      txt = txt == 0 ? false : true;
                    } else {
                      return formula_default.error.v;
                    }
                    include.push(txt);
                  }
                }
              } else {
                if (data_include.length != array[0].length) {
                  return formula_default.error.v;
                }
                type = "col";
                for (var i2 = 0; i2 < data_include.length; i2++) {
                  var txt = data_include[i2];
                  if (getObjType(txt) == "boolean") {
                  } else if (getObjType(txt) == "string" && (txt.toLowerCase() == "true" || txt.toLowerCase() == "false")) {
                    if (txt.toLowerCase() == "true") {
                      txt = true;
                    } else if (txt.toLowerCase() == "false") {
                      txt = false;
                    }
                  } else if (isRealNum(txt)) {
                    txt = parseFloat(txt);
                    txt = txt == 0 ? false : true;
                  } else {
                    return formula_default.error.v;
                  }
                  include.push(txt);
                }
              }
            } else if (getObjType(data_include) == "object" && data_include.data != null && getObjType(data_include.data) == "array") {
              if (data_include.data.length > 1 && data_include.data[0].length > 1) {
                return formula_default.error.v;
              }
              if (data_include.data.length > 1) {
                if (data_include.data.length != array.length) {
                  return formula_default.error.v;
                }
                type = "row";
                for (var i2 = 0; i2 < data_include.data.length; i2++) {
                  var txt = data_include.data[i2][0].v;
                  if (isRealNull(txt)) {
                    txt = 0;
                  }
                  if (getObjType(txt) == "boolean") {
                  } else if (getObjType(txt) == "string" && (txt.toLowerCase() == "true" || txt.toLowerCase() == "false")) {
                    if (txt.toLowerCase() == "true") {
                      txt = true;
                    } else if (txt.toLowerCase() == "false") {
                      txt = false;
                    }
                  } else if (isRealNum(txt)) {
                    txt = parseFloat(txt);
                    txt = txt == 0 ? false : true;
                  } else {
                    return formula_default.error.v;
                  }
                  include.push(txt);
                }
              }
              if (data_include.data[0].length > 1) {
                if (data_include.data[0].length != array[0].length) {
                  return formula_default.error.v;
                }
                type = "col";
                for (var i2 = 0; i2 < data_include.data[0].length; i2++) {
                  var txt = data_include.data[0][i2].v;
                  if (isRealNull(txt)) {
                    txt = 0;
                  }
                  if (getObjType(txt) == "boolean") {
                  } else if (getObjType(txt) == "string" && (txt.toLowerCase() == "true" || txt.toLowerCase() == "false")) {
                    if (txt.toLowerCase() == "true") {
                      txt = true;
                    } else if (txt.toLowerCase() == "false") {
                      txt = false;
                    }
                  } else if (isRealNum(txt)) {
                    txt = parseFloat(txt);
                    txt = txt == 0 ? false : true;
                  } else {
                    return formula_default.error.v;
                  }
                  include.push(txt);
                }
              }
            } else {
              return formula_default.error.v;
            }
            var if_empty = "";
            if (arguments.length == 3) {
              if_empty = func_methods_default.getFirstValue(arguments[2], "text");
              if (valueIsError(if_empty)) {
                return if_empty;
              }
            }
            var result = [];
            if (type == "row") {
              for (var i2 = 0; i2 < array.length; i2++) {
                if (include[i2]) {
                  result.push(array[i2]);
                }
              }
            } else {
              for (var i2 = 0; i2 < array.length; i2++) {
                var rowArr = [];
                for (var j = 0; j < array[0].length; j++) {
                  if (include[j]) {
                    rowArr.push(array[i2][j]);
                  }
                }
                if (rowArr.length > 0) {
                  result.push(rowArr);
                }
              }
            }
            if (result.length == 0) {
              return if_empty;
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "UNIQUE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var data_array = arguments[0];
            var array = [];
            if (getObjType(data_array) == "array") {
              if (getObjType(data_array[0]) == "array" && !func_methods_default.isDyadicArr(data_array)) {
                return formula_default.error.v;
              }
              array = func_methods_default.getDataDyadicArr(data_array);
            } else if (getObjType(data_array) == "object" && data_array.startCell != null) {
              array = func_methods_default.getCellDataDyadicArr(data_array, "number");
            } else {
              var rowArr = [];
              rowArr.push(parseFloat(data_array));
              array.push(rowArr);
            }
            var by_col = false;
            if (arguments.length >= 2) {
              by_col = func_methods_default.getCellBoolen(arguments[1]);
              if (valueIsError(by_col)) {
                return by_col;
              }
            }
            var occurs_once = false;
            if (arguments.length == 3) {
              occurs_once = func_methods_default.getCellBoolen(arguments[2]);
              if (valueIsError(occurs_once)) {
                return occurs_once;
              }
            }
            if (by_col) {
              array = array[0].map(function(col, a) {
                return array.map(function(row) {
                  return row[a];
                });
              });
              var strObj = {}, strArr = [];
              var allUnique = [];
              for (var i2 = 0; i2 < array.length; i2++) {
                var str = "";
                for (var j = 0; j < array[i2].length; j++) {
                  str += array[i2][j].toString() + "|||";
                }
                strArr.push(str);
                if (!(str in strObj)) {
                  strObj[str] = 0;
                  allUnique.push(array[i2]);
                }
              }
              if (occurs_once) {
                var oneUnique = [];
                for (var i2 = 0; i2 < strArr.length; i2++) {
                  if (strArr.indexOf(strArr[i2]) == strArr.lastIndexOf(strArr[i2])) {
                    oneUnique.push(array[i2]);
                  }
                }
                oneUnique = oneUnique[0].map(function(col, a) {
                  return oneUnique.map(function(row) {
                    return row[a];
                  });
                });
                return oneUnique;
              } else {
                allUnique = allUnique[0].map(function(col, a) {
                  return allUnique.map(function(row) {
                    return row[a];
                  });
                });
                return allUnique;
              }
            } else {
              var strObj = {}, strArr = [];
              var allUnique = [];
              for (var i2 = 0; i2 < array.length; i2++) {
                var str = "";
                for (var j = 0; j < array[i2].length; j++) {
                  str += array[i2][j].toString() + "|||";
                }
                strArr.push(str);
                if (!(str in strObj)) {
                  strObj[str] = 0;
                  allUnique.push(array[i2]);
                }
              }
              if (occurs_once) {
                var oneUnique = [];
                for (var i2 = 0; i2 < strArr.length; i2++) {
                  if (strArr.indexOf(strArr[i2]) == strArr.lastIndexOf(strArr[i2])) {
                    oneUnique.push(array[i2]);
                  }
                }
                return oneUnique;
              } else {
                return allUnique;
              }
            }
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "RANDARRAY": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var rows = 1;
            if (arguments.length >= 1) {
              rows = func_methods_default.getFirstValue(arguments[0]);
              if (valueIsError(rows)) {
                return rows;
              }
              if (!isRealNum(rows)) {
                return formula_default.error.v;
              }
              rows = parseInt(rows);
            }
            var cols = 1;
            if (arguments.length == 2) {
              cols = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(cols)) {
                return cols;
              }
              if (!isRealNum(cols)) {
                return formula_default.error.v;
              }
              cols = parseInt(cols);
            }
            if (rows <= 0 || cols <= 0) {
              return formula_default.error.v;
            }
            var result = [];
            for (var i2 = 0; i2 < rows; i2++) {
              var result_row = [];
              for (var j = 0; j < cols; j++) {
                result_row.push(Math.random().toFixed(9));
              }
              result.push(result_row);
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "SEQUENCE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var rows = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(rows)) {
              return rows;
            }
            if (!isRealNum(rows)) {
              return formula_default.error.v;
            }
            rows = parseInt(rows);
            var cols = 1;
            if (arguments.length >= 2) {
              cols = func_methods_default.getFirstValue(arguments[1]);
              if (valueIsError(cols)) {
                return cols;
              }
              if (!isRealNum(cols)) {
                return formula_default.error.v;
              }
              cols = parseInt(cols);
            }
            var start = 1;
            if (arguments.length >= 3) {
              start = func_methods_default.getFirstValue(arguments[2]);
              if (valueIsError(start)) {
                return start;
              }
              if (!isRealNum(start)) {
                return formula_default.error.v;
              }
              start = parseFloat(start);
            }
            var step = 1;
            if (arguments.length == 4) {
              step = func_methods_default.getFirstValue(arguments[3]);
              if (valueIsError(step)) {
                return step;
              }
              if (!isRealNum(step)) {
                return formula_default.error.v;
              }
              step = parseFloat(step);
            }
            if (rows <= 0 || cols <= 0) {
              return formula_default.error.v;
            }
            var result = [];
            for (var i2 = 0; i2 < rows; i2++) {
              var result_row = [];
              for (var j = 0; j < cols; j++) {
                var number = start + step * (j + cols * i2);
                result_row.push(number);
              }
              result.push(result_row);
            }
            return result;
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "EVALUATE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          for (var i2 = 0; i2 < arguments.length; i2++) {
            var p = formula_default.errorParamCheck(this.p, arguments[i2], i2);
            if (!p[0]) {
              return formula_default.error.v;
            }
          }
          try {
            var cell_r = window.luckysheetCurrentRow;
            var cell_c = window.luckysheetCurrentColumn;
            var sheetindex_now = window.luckysheetCurrentIndex;
            var strtext = func_methods_default.getFirstValue(arguments[0]).toString();
            if (valueIsError(strtext)) {
              return strtext;
            }
            if (strtext.trim().indexOf("=") != 0) {
              strtext = "=" + strtext;
            }
            var result_this = formula_default.execstringformula(strtext, cell_r, cell_c, sheetindex_now);
            return result_this[1];
          } catch (e) {
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        },
        "REMOTE": function() {
          if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
            return formula_default.error.na;
          }
          try {
            const cellRow = window.luckysheetCurrentRow;
            const cellColumn = window.luckysheetCurrentColumn;
            const cellFunction = window.luckysheetCurrentFunction;
            const remoteFunction = func_methods_default.getFirstValue(arguments[0]);
            if (valueIsError(remoteFunction)) {
              return remoteFunction;
            }
            luckysheetConfigsetting_default.remoteFunction(remoteFunction, (data) => {
              const flowData = editor_default.deepCopyFlowData(store_default.flowdata);
              formula_default.execFunctionGroup(cellRow, cellColumn, data);
              flowData[cellRow][cellColumn] = {
                "v": data,
                "f": cellFunction
              };
              jfrefreshgrid(flowData, [{"row": [cellRow, cellRow], "column": [cellColumn, cellColumn]}]);
            });
            return "Loading...";
          } catch (e) {
            console.log(e);
            var err = e;
            err = formula_default.errorInfo(err);
            return [formula_default.error.v, err];
          }
        }
      };
      functionImplementation_default = functionImplementation;
    }
  });

  // src/function/functionListDescriptor.js
  var functionListDescriptor_default;
  var init_functionListDescriptor = __esm({
    "src/function/functionListDescriptor.js"() {
      functionListDescriptor_default = [
        {
          "n": "SUMIF",
          "t": 0,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "A1:A10",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": '">20"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "B1:B10",
              "require": "o",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "TAN",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "45*PI()/180",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "TANH",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "CEILING",
          "t": 0,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "23.25",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ATAN",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "0",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ASINH",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "0.9",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ABS",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "-2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ACOS",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "0",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ACOSH",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MULTINOMIAL",
          "t": 0,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ATANH",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "0.9",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ATAN2",
          "t": 0,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "3",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "COUNTBLANK",
          "t": 1,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2:C100",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "COSH",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "INT",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "99.44",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ISEVEN",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ISODD",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "LCM",
          "t": 0,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A5",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "3",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "LN",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "LOG",
          "t": 0,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "128",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "LOG10",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MOD",
          "t": 0,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "10",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MROUND",
          "t": 0,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "21",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "14",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ODD",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SUMSQ",
          "t": 0,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "COMBIN",
          "t": 0,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SUM",
          "t": 0,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "SUBTOTAL",
          "t": 0,
          "m": [
            2,
            256
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A2:A5",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "B2:B8",
              "require": "o",
              "repeat": "y",
              "type": "range"
            }
          ]
        },
        {
          "n": "ASIN",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "0",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "COUNTIF",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A1:A10",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": '">20"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "RADIANS",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "180",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "RAND",
          "t": 0,
          "m": [
            0,
            0
          ],
          "p": []
        },
        {
          "n": "COUNTUNIQUE",
          "t": 0,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A1:C100",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "DEGREES",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "PI()",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ERFC",
          "t": 9,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "EVEN",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "3",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "EXP",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "FACT",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "3",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "FACTDOUBLE",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "6",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "PI",
          "t": 0,
          "m": [
            0,
            0
          ],
          "p": []
        },
        {
          "n": "FLOOR",
          "t": 0,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "23.25",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "GCD",
          "t": 0,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A5",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "96",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "RANDBETWEEN",
          "t": 0,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "10",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ROUND",
          "t": 0,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "99.44",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ROUNDDOWN",
          "t": 0,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "99.44",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ROUNDUP",
          "t": 0,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "99.44",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SERIESSUM",
          "t": 0,
          "m": [
            4,
            4
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "{FACT(0)",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SIGN",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "-42",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SIN",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "PI()",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SINH",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SQRT",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "9",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SQRTPI",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "9",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "GAMMALN",
          "t": 1,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "COS",
          "t": 0,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "PI()",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "TRUNC",
          "t": 0,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "3.141592654",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "QUOTIENT",
          "t": 0,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "POWER",
          "t": 0,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.5",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SUMIFS",
          "t": 0,
          "m": [
            3,
            257
          ],
          "p": [
            {
              "example": "A1:A10",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": " B1:B10",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": ' ">20"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": " C1:C10",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "COUNTIFS",
          "t": 1,
          "m": [
            2,
            256
          ],
          "p": [
            {
              "example": "A1:A10",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": ' ">20"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": " B1:B10",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "PRODUCT",
          "t": 0,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "HARMEAN",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "HYPGEOMDIST",
          "t": 1,
          "m": [
            5,
            5
          ],
          "p": [
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "20",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "40",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "TRUE()",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "INTERCEPT",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "KURT",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "LARGE",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:B100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "STDEVA",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "STDEVP",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "GEOMEAN",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "RANK_EQ",
          "t": 1,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "A10",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A1:A100",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "TRUE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "RANK_AVG",
          "t": 1,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "A10",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A1:A100",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "TRUE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "PERCENTRANK_EXC",
          "t": 1,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "A1:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "4",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "PERCENTRANK_INC",
          "t": 1,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "A1:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": " A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "4",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "FORECAST",
          "t": 1,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "FISHERINV",
          "t": 1,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "0.962",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "FISHER",
          "t": 1,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "0.962",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MODE_SNGL",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "WEIBULL_DIST",
          "t": 1,
          "m": [
            4,
            4
          ],
          "p": [
            {
              "example": "2.4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "3",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "TRUE()",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "COUNT",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "B2:B100",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "COUNTA",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "B2:B100",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "AVEDEV",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "AVERAGE",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "B2:B100",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "AVERAGEA",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "B2:B100",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "BINOM_DIST",
          "t": 1,
          "m": [
            4,
            4
          ],
          "p": [
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.005",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "FALSE()",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "BINOM_INV",
          "t": 1,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.005",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.8",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "CONFIDENCE_NORM",
          "t": 1,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "0.05",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1.6",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "250",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "CORREL",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "COVARIANCE_P",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "B2:B100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "COVARIANCE_S",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DEVSQ",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "EXPON_DIST",
          "t": 1,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.5",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "FALSE()",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "AVERAGEIF",
          "t": 1,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "A1:A10",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '">20"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "B1:B10",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "AVERAGEIFS",
          "t": 1,
          "m": [
            2,
            255
          ],
          "p": [
            {
              "example": "A1:A10",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": " B1:B10",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": ' ">20"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": " C1:C10",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "PERMUT",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "TRIMMEAN",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "0.1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "PERCENTILE_EXC",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.25",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "PERCENTILE_INC",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.25",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "PEARSON",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "NORM_S_INV",
          "t": 1,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "0.75",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "NORM_S_DIST",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "2.4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "FALSE()",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "NORM_INV",
          "t": 1,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "0.75",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "NORM_DIST",
          "t": 1,
          "m": [
            4,
            4
          ],
          "p": [
            {
              "example": "2.4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "FALSE()",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "NEGBINOM_DIST",
          "t": 1,
          "m": [
            4,
            4
          ],
          "p": [
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "FALSE()",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "MINA",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MIN",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MEDIAN",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MAXA",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MAX",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "LOGNORM_INV",
          "t": 1,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "0.4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "6",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "LOGNORM_DIST",
          "t": 1,
          "m": [
            4,
            4
          ],
          "p": [
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "6",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "FALSE()",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "Z_TEST",
          "t": 1,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "B2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "3",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "PROB",
          "t": 1,
          "m": [
            3,
            4
          ],
          "p": [
            {
              "example": "A3:A6",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "3",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "4",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "QUARTILE_EXC",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "3",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "QUARTILE_INC",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "3",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "POISSON_DIST",
          "t": 1,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "FALSE()",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "RSQ",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "T_DIST",
          "t": 1,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "30",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "TRUE()",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "T_DIST_2T",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "30",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "T_DIST_RT",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "30",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "T_INV",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "0.35",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "T_INV_2T",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "0.35",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "T_TEST",
          "t": 1,
          "m": [
            4,
            4
          ],
          "p": [
            {
              "example": "A1:A4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B1:B4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "F_DIST",
          "t": 1,
          "m": [
            4,
            4
          ],
          "p": [
            {
              "example": "15.35",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "7",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "6",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "TRUE()",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "F_DIST_RT",
          "t": 1,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "15.35",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "7",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "6",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "VAR_P",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "VAR_S",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "VARA",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "VARPA",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "STEYX",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "STANDARDIZE",
          "t": 1,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "96",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "80",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "6.7",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SMALL",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:B100",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SLOPE",
          "t": 1,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SKEW",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "SKEW_P",
          "t": 1,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "VLOOKUP",
          "t": 2,
          "m": [
            3,
            4
          ],
          "p": [
            {
              "example": "10003",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A2:B26",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "FALSE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "HLOOKUP",
          "t": 2,
          "m": [
            3,
            4
          ],
          "p": [
            {
              "example": "10003",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A2:Z6",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "FALSE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "LOOKUP",
          "t": 2,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "10003",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A1:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "B1:B100",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ADDRESS",
          "t": 2,
          "m": [
            2,
            5
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "4",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "FALSE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"Sheet2"',
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "INDIRECT",
          "t": 2,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": '"Sheet2!"&B10',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "FALSE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ROW",
          "t": 2,
          "m": [
            0,
            1
          ],
          "p": [
            {
              "example": "A9",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ROWS",
          "t": 2,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A9:A62",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "COLUMN",
          "t": 2,
          "m": [
            0,
            1
          ],
          "p": [
            {
              "example": "A9",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "COLUMNS",
          "t": 2,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A9:W62",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "OFFSET",
          "t": 2,
          "m": [
            3,
            5
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "3",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MATCH",
          "t": 2,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": '"Sunday"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A2:A9",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "INDEX",
          "t": 2,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "A1:C20",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "5",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "GETPIVOTDATA",
          "t": 2,
          "m": [
            2,
            254
          ],
          "p": [
            {
              "example": '"SUM of number of units"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "'Pivot table'!A1",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"division"',
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            },
            {
              "example": '"east"',
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "CHOOSE",
          "t": 2,
          "m": [
            2,
            255
          ],
          "p": [
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": '"A"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"B"',
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "HYPERLINK",
          "t": 2,
          "p": [
            {
              "example": '"http://www.luckysheet.com/"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"luckysheet"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "TIME",
          "t": 6,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "11",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "40",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "59",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "TIMEVALUE",
          "t": 6,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"2:15 PM"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "EOMONTH",
          "t": 6,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "7",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "EDATE",
          "t": 6,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "7",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SECOND",
          "t": 6,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "TIME(11",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "MINUTE",
          "t": 6,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "TIME(11",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "HOUR",
          "t": 6,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "TIME(11",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "NOW",
          "t": 6,
          "m": [
            0,
            0
          ],
          "p": []
        },
        {
          "n": "NETWORKDAYS",
          "t": 6,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "7",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "16)",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "NETWORKDAYS_INTL",
          "t": 6,
          "m": [
            2,
            4
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "7",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "16)",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(1969",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ISOWEEKNUM",
          "t": 6,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "WEEKNUM",
          "t": 6,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "7",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "WEEKDAY",
          "t": 6,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "7",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DAY",
          "t": 6,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "DAYS",
          "t": 6,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "2011-3-15",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2011-2-1",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "DAYS360",
          "t": 6,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "7",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "FALSE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "DATE",
          "t": 6,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "1969",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "7",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "20",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DATEVALUE",
          "t": 6,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"1969-7-20"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "DATEDIF",
          "t": 6,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "7",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "16)",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "WORKDAY",
          "t": 6,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "7",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "16)",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "WORKDAY_INTL",
          "t": 6,
          "m": [
            2,
            4
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "7",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "16)",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(1969",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "YEAR",
          "t": 6,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "YEARFRAC",
          "t": 6,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "7",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "16)",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "TODAY",
          "t": 6,
          "m": [
            0,
            0
          ],
          "p": []
        },
        {
          "n": "MONTH",
          "t": 6,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "EFFECT",
          "t": 8,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "0.99",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DOLLAR",
          "t": 12,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "1.2351",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DOLLARDE",
          "t": 8,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "100.10",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "32",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DOLLARFR",
          "t": 8,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "100.125",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "32",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DB",
          "t": 8,
          "m": [
            4,
            5
          ],
          "p": [
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "50",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "10",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "10",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DDB",
          "t": 8,
          "m": [
            4,
            5
          ],
          "p": [
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "50",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "10",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2.25",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "RATE",
          "t": 8,
          "m": [
            3,
            6
          ],
          "p": [
            {
              "example": "12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "-100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "400",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.1",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "CUMPRINC",
          "t": 8,
          "m": [
            6,
            6
          ],
          "p": [
            {
              "example": "0.12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "5",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "COUPNUM",
          "t": 8,
          "m": [
            3,
            4
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "02",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SYD",
          "t": 8,
          "m": [
            4,
            4
          ],
          "p": [
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "50",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "10",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "TBILLEQ",
          "t": 8,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2)",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "TBILLYIELD",
          "t": 8,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "95",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "TBILLPRICE",
          "t": 8,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "0.09",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "PV",
          "t": 8,
          "m": [
            3,
            5
          ],
          "p": [
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "D2",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ACCRINT",
          "t": 8,
          "m": [
            6,
            8
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "0.1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "10000",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "TRUE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ACCRINTM",
          "t": 8,
          "m": [
            4,
            5
          ],
          "p": [
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(1969",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "0.1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1000",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "COUPDAYBS",
          "t": 8,
          "m": [
            3,
            4
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "COUPDAYS",
          "t": 8,
          "m": [
            3,
            4
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "COUPDAYSNC",
          "t": 8,
          "m": [
            3,
            4
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "COUPNCD",
          "t": 8,
          "m": [
            3,
            4
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "01)",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "DATE(2019",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "COUPPCD",
          "t": 8,
          "m": [
            3,
            4
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "01)",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "DATE(2019",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "FV",
          "t": 8,
          "m": [
            3,
            5
          ],
          "p": [
            {
              "example": "0.12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "400",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "FVSCHEDULE",
          "t": 8,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "10000",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "YIELD",
          "t": 8,
          "m": [
            6,
            7
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "0.057",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "95",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "YIELDDISC",
          "t": 8,
          "m": [
            4,
            5
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "95",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "NOMINAL",
          "t": 8,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "0.85",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "XIRR",
          "t": 8,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "B2:B25",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "C2:C25",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "250",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MIRR",
          "t": 8,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2:A25",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "0.1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "IRR",
          "t": 8,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "A2:A25",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "200",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "NPV",
          "t": 8,
          "m": [
            2,
            255
          ],
          "p": [
            {
              "example": "0.1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "200",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "250",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "XNPV",
          "t": 8,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B25",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "C2:C25",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "CUMIPMT",
          "t": 8,
          "m": [
            6,
            6
          ],
          "p": [
            {
              "example": "0.12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "5",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "PMT",
          "t": 8,
          "m": [
            3,
            5
          ],
          "p": [
            {
              "example": "0.08",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": " 100000",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "D2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "IPMT",
          "t": 8,
          "m": [
            4,
            6
          ],
          "p": [
            {
              "example": "0.1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "80000",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "E2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "PPMT",
          "t": 8,
          "m": [
            4,
            6
          ],
          "p": [
            {
              "example": "0.1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "3*12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "100000",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "INTRATE",
          "t": 8,
          "m": [
            4,
            5
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "100000",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "101200",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "PRICE",
          "t": 8,
          "m": [
            6,
            7
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "0.057",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.065",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "PRICEDISC",
          "t": 8,
          "m": [
            4,
            5
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "0.0525",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "PRICEMAT",
          "t": 8,
          "m": [
            5,
            6
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "0.061",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.061",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "RECEIVED",
          "t": 8,
          "m": [
            4,
            5
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "10000000",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.0575",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "12",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DISC",
          "t": 8,
          "m": [
            4,
            5
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "97.975",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "12",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "NPER",
          "t": 8,
          "m": [
            3,
            5
          ],
          "p": [
            {
              "example": "0.12",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "500",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "40000",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SLN",
          "t": 8,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "300000",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "75000",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "10",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DURATION",
          "t": 8,
          "m": [
            5,
            6
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "0.08",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.09",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MDURATION",
          "t": 8,
          "m": [
            5,
            6
          ],
          "p": [
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "DATE(2010",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "0.08",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0.09",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "BIN2DEC",
          "t": 9,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "101",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "BIN2HEX",
          "t": 9,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "101",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "8",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "BIN2OCT",
          "t": 9,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "101",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "8",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DEC2BIN",
          "t": 9,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "8",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DEC2HEX",
          "t": 9,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "8",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DEC2OCT",
          "t": 9,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "8",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "HEX2BIN",
          "t": 9,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": '"f3"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "8",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "HEX2DEC",
          "t": 9,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"f3"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "HEX2OCT",
          "t": 9,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": '"f3"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "8",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "OCT2BIN",
          "t": 9,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "37",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "8",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "OCT2DEC",
          "t": 9,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "37",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "OCT2HEX",
          "t": 9,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "37",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "8",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "COMPLEX",
          "t": 9,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "3",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": '"j"',
              "require": "o",
              "repeat": "n",
              "type": "rangestring"
            }
          ]
        },
        {
          "n": "IMREAL",
          "t": 9,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"4+5i"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "IMAGINARY",
          "t": 9,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"4+5i"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "IMCONJUGATE",
          "t": 9,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"3+4i"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "IMABS",
          "t": 9,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"3+4i"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "DELTA",
          "t": 9,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "IMSUM",
          "t": 9,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": '"3+4i"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"5-3i"',
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "IMSUB",
          "t": 9,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": '"6+5i"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"2+3i"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "IMPRODUCT",
          "t": 9,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": '"3+4i"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"5-3i"',
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "IMDIV",
          "t": 9,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": '"11+16i"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"3+2i"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "NOT",
          "t": 10,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "TRUE",
          "t": 10,
          "m": [
            0,
            0
          ],
          "p": []
        },
        {
          "n": "FALSE",
          "t": 10,
          "m": [
            0,
            0
          ],
          "p": []
        },
        {
          "n": "AND",
          "t": 10,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": 'A2 = "foo"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": 'A3 = "bar"',
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "IFERROR",
          "t": 10,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A1",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"Error in cell A1"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "IF",
          "t": 10,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": 'A2 = "foo"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"A2 is foo"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"A2 was false"',
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "OR",
          "t": 10,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": 'A2 = "foo"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": ' A3 = "bar"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "NE",
          "t": 11,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A3",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "EQ",
          "t": 11,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A3",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "GT",
          "t": 11,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A3",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "GTE",
          "t": 11,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A3",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "LT",
          "t": 11,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A3",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "LTE",
          "t": 11,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A3",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ADD",
          "t": 11,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A3",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MINUS",
          "t": 11,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A3",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MULTIPLY",
          "t": 11,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DIVIDE",
          "t": 11,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "CONCAT",
          "t": 11,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": '"de"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"mystify"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "UNARY_PERCENT",
          "t": 11,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "CONCATENATE",
          "t": 12,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": '"Super"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"calla"',
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "CODE",
          "t": 12,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"a"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "CHAR",
          "t": 12,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "97",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ARABIC",
          "t": 12,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"XIV"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ROMAN",
          "t": 12,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "499",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "REGEXEXTRACT",
          "t": 12,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": '"Needle in a haystack"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '".e{2}dle"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "REGEXMATCH",
          "t": 12,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": '"Spreadsheets"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"S.r"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "REGEXREPLACE",
          "t": 12,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": '"Spreadsheets"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"S.*d"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"Bed"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "T",
          "t": 12,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "FIXED",
          "t": 12,
          "m": [
            1,
            3
          ],
          "p": [
            {
              "example": "3.141592653",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "FALSE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "FIND",
          "t": 12,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": '"n"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "14",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "FINDB",
          "t": 12,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": '"new"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"new year"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "JOIN",
          "t": 12,
          "m": [
            2,
            255
          ],
          "p": [
            {
              "example": '" and-a "',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "{1",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "LEFT",
          "t": 12,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "RIGHT",
          "t": 12,
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MID",
          "t": 12,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": '"get this"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "5",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "LEN",
          "t": 12,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "LENB",
          "t": 12,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "LOWER",
          "t": 12,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"LOREM IPSUM"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "UPPER",
          "t": 12,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"lorem ipsum"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "EXACT",
          "t": 12,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A1",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "REPLACE",
          "t": 12,
          "m": [
            4,
            4
          ],
          "p": [
            {
              "example": '"Spreadsheets"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "6",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": '"Bed"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "REPT",
          "t": 12,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": '"ha"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SEARCH",
          "t": 12,
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": '"n"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "14",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SUBSTITUTE",
          "t": 12,
          "m": [
            3,
            4
          ],
          "p": [
            {
              "example": '"search for it"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"search for"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"Google"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "3",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "CLEAN",
          "t": 12,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"AF"&CHAR(31)',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "TEXT",
          "t": 12,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "1.23",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": '"$0.00"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "TRIM",
          "t": 12,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '" lorem ipsum"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "VALUE",
          "t": 12,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"123"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "PROPER",
          "t": 12,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"united states"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "CONVERT",
          "t": 13,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "5.1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": '"g"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"kg"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "SUMX2MY2",
          "t": 14,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SUMX2PY2",
          "t": 14,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SUMXMY2",
          "t": 14,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B100",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "TRANSPOSE",
          "t": 14,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "{1,2}",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "TREND",
          "t": 14,
          "m": [
            1,
            4
          ],
          "p": [
            {
              "example": "B2:B10",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A2:A10",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A11:A13",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "TRUE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "FREQUENCY",
          "t": 14,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A2:A40",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "B2:B5",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "GROWTH",
          "t": 14,
          "m": [
            1,
            4
          ],
          "p": [
            {
              "example": "B2:B10",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A2:A10",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A11:A13",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "TRUE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "LINEST",
          "t": 14,
          "m": [
            1,
            4
          ],
          "p": [
            {
              "example": "B2:B10",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A2:A10",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "TRUE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "TRUE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "LOGEST",
          "t": 14,
          "m": [
            1,
            4
          ],
          "p": [
            {
              "example": "B2:B10",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "A2:A10",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "TRUE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "TRUE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "MDETERM",
          "t": 14,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A1:D4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MINVERSE",
          "t": 14,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A1:D4",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "MMULT",
          "t": 14,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": "A1:B3",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "C1:F2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SUMPRODUCT",
          "t": 14,
          "m": [
            1,
            255
          ],
          "p": [
            {
              "example": "A2:C5",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "D2:F5",
              "require": "o",
              "repeat": "y",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ISFORMULA",
          "t": 15,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "CELL",
          "t": 15,
          "m": [
            2,
            2
          ],
          "p": [
            {
              "example": '"type"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "C2",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "NA",
          "t": 15,
          "m": [
            0,
            0
          ],
          "p": []
        },
        {
          "n": "ERROR_TYPE",
          "t": 15,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A3",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ISBLANK",
          "t": 15,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "ISERR",
          "t": 15,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ISERROR",
          "t": 15,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ISLOGICAL",
          "t": 15,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ISNA",
          "t": 15,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ISNONTEXT",
          "t": 15,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ISNUMBER",
          "t": 15,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ISREF",
          "t": 15,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "ISTEXT",
          "t": 15,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "TYPE",
          "t": 15,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "C4",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "N",
          "t": 15,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "TO_DATE",
          "t": 16,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "25405",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "TO_PURE_NUMBER",
          "t": 16,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "50%",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "TO_TEXT",
          "t": 16,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "24",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "TO_DOLLARS",
          "t": 16,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "TO_PERCENT",
          "t": 16,
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "A2",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DGET",
          "t": 17,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2:F20",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "G2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A22:D23",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "DMAX",
          "t": 17,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2:F20",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "G2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A22:D23",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "DMIN",
          "t": 17,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2:F20",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "G2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A22:D23",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "DAVERAGE",
          "t": 17,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2:F20",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "G2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A22:D23",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "DCOUNT",
          "t": 17,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2:F20",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "G2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A22:D23",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "DCOUNTA",
          "t": 17,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2:F20",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "G2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A22:D23",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "DPRODUCT",
          "t": 17,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2:F20",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "G2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A22:D23",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "DSTDEV",
          "t": 17,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2:F20",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "G2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A22:D23",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "DSTDEVP",
          "t": 17,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2:F20",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "G2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A22:D23",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "DSUM",
          "t": 17,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2:F20",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "G2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A22:D23",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "DVAR",
          "t": 17,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2:F20",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "G2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A22:D23",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "DVARP",
          "t": 17,
          "m": [
            3,
            3
          ],
          "p": [
            {
              "example": "A2:F20",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "G2",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "A22:D23",
              "require": "m",
              "repeat": "n",
              "type": "range"
            }
          ]
        },
        {
          "n": "AGE_BY_IDCARD",
          "t": "3",
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": "A1",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": '"2017-10-01"',
              "require": "o",
              "repeat": "n",
              "type": "rangedatetime"
            }
          ]
        },
        {
          "n": "SEX_BY_IDCARD",
          "t": "3",
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"31033519900101XXXX"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "BIRTHDAY_BY_IDCARD",
          "t": "3",
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": '"31033519900101XXXX"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "PROVINCE_BY_IDCARD",
          "t": "3",
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"31033519900101XXXX"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "CITY_BY_IDCARD",
          "t": "3",
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"31033519900101XXXX"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "STAR_BY_IDCARD",
          "t": "3",
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"31033519900101XXXX"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ANIMAL_BY_IDCARD",
          "t": "3",
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"31033519900101XXXX"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "ISIDCARD",
          "t": "3",
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"31033519900101XXXX"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "DM_TEXT_CUTWORD",
          "t": "4",
          "m": [
            1,
            2
          ],
          "p": [
            {
              "example": '"I came to Beijing Tsinghua University"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DM_TEXT_TFIDF",
          "t": "4",
          "m": [
            1,
            3
          ],
          "p": [
            {
              "example": '"I came to Beijing Tsinghua University"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "20",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DM_TEXT_TEXTRANK",
          "t": "4",
          "m": [
            1,
            3
          ],
          "p": [
            {
              "example": '"I came to Beijing Tsinghua University"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "20",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DATA_CN_STOCK_CLOSE",
          "t": "5",
          "m": [
            1,
            3
          ],
          "p": [
            {
              "example": '"000001"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2015-01-08",
              "require": "o",
              "repeat": "n",
              "type": "rangedate"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DATA_CN_STOCK_OPEN",
          "t": "5",
          "m": [
            1,
            3
          ],
          "p": [
            {
              "example": '"000001"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2015-01-08",
              "require": "o",
              "repeat": "n",
              "type": "rangedate"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DATA_CN_STOCK_MAX",
          "t": "5",
          "m": [
            1,
            3
          ],
          "p": [
            {
              "example": '"000001"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2015-01-08",
              "require": "o",
              "repeat": "n",
              "type": "rangedate"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DATA_CN_STOCK_MIN",
          "t": "5",
          "m": [
            1,
            3
          ],
          "p": [
            {
              "example": '"000001"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2015-01-08",
              "require": "o",
              "repeat": "n",
              "type": "rangedate"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DATA_CN_STOCK_VOLUMN",
          "t": "5",
          "m": [
            1,
            3
          ],
          "p": [
            {
              "example": '"000001"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2015-01-08",
              "require": "o",
              "repeat": "n",
              "type": "rangedate"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "DATA_CN_STOCK_AMOUNT",
          "t": "5",
          "m": [
            1,
            3
          ],
          "p": [
            {
              "example": '"000001"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "2015-01-08",
              "require": "o",
              "repeat": "n",
              "type": "rangedate"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "ISDATE",
          "t": "6",
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"1990-01-01"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "LINESPLINES",
          "t": "3",
          "m": [
            1,
            8
          ],
          "p": [
            {
              "example": "A1:A20",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#2ec7c9",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "avg",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#000",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#fc5c5c",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#fc5c5c",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1.5",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "AREASPLINES",
          "t": "3",
          "m": [
            1,
            5
          ],
          "p": [
            {
              "example": "A1:A20",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#2ec7c9",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#CCF3F4",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "avg",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#000",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "COLUMNSPLINES",
          "t": "3",
          "m": [
            1,
            6
          ],
          "p": [
            {
              "example": "A1:A20",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#fc5c5c",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#97b552",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "100",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#97b552",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "STACKCOLUMNSPLINES",
          "t": "3",
          "m": [
            1,
            5
          ],
          "p": [
            {
              "example": "A1:A20",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "100",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#97b552",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "BARSPLINES",
          "t": "3",
          "m": [
            1,
            6
          ],
          "p": [
            {
              "example": "A1:A20",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#fc5c5c",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#97b552",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "100",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#97b552",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "STACKBARSPLINES",
          "t": "3",
          "m": [
            1,
            5
          ],
          "p": [
            {
              "example": "A1:A20",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "100",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#97b552",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "DISCRETESPLINES",
          "t": "3",
          "m": [
            1,
            4
          ],
          "p": [
            {
              "example": "A1:A20",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#2ec7c9",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#fc5c5c",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "TRISTATESPLINES",
          "t": "3",
          "m": [
            1,
            6
          ],
          "p": [
            {
              "example": "A1:A20",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#fc5c5c",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#97b552",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#999",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#97b552",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "PIESPLINES",
          "t": "3",
          "m": [
            1,
            5
          ],
          "p": [
            {
              "example": "A1:A20",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "0",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#000",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "#97b552",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "BOXSPLINES",
          "t": "3",
          "m": [
            1,
            4
          ],
          "p": [
            {
              "example": "A1:A20",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1.5",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "10",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "1.5",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "BULLETSPLINES",
          "t": "3",
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "10",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "8",
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "12",
              "require": "o",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "COMPOSESPLINES",
          "t": "3",
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "PIESPLINES(A1:A20)",
              "require": "m",
              "repeat": "y",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "SORT",
          "t": "14",
          "m": [
            1,
            4
          ],
          "p": [
            {
              "example": "A2:A17",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "-1",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "TRUE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "FILTER",
          "t": "14",
          "m": [
            2,
            3
          ],
          "p": [
            {
              "example": "A5:D20",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "range"
            },
            {
              "example": '""',
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "UNIQUE",
          "t": "14",
          "m": [
            1,
            3
          ],
          "p": [
            {
              "example": "A2:B26",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "TRUE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            },
            {
              "example": "FALSE()",
              "require": "o",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "RANDARRAY",
          "t": "14",
          "m": [
            0,
            2
          ],
          "p": [
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "SEQUENCE",
          "t": "14",
          "m": [
            1,
            4
          ],
          "p": [
            {
              "example": "1",
              "require": "m",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            },
            {
              "example": "1",
              "require": "o",
              "repeat": "n",
              "type": "rangenumber"
            }
          ]
        },
        {
          "n": "EVALUATE",
          "t": "3",
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": '"A1+5*2^2"',
              "require": "m",
              "repeat": "n",
              "type": "rangeall"
            }
          ]
        },
        {
          "n": "REMOTE",
          "t": "5",
          "m": [
            1,
            1
          ],
          "p": [
            {
              "example": "SUM(A1:A10000000)",
              "require": "m",
              "repeat": "n",
              "type": "string"
            }
          ]
        }
      ];
    }
  });

  // src/function/getLocalizedFunctionList.js
  var getLocalizedFunctionList_default;
  var init_getLocalizedFunctionList = __esm({
    "src/function/getLocalizedFunctionList.js"() {
      init_functionListDescriptor();
      getLocalizedFunctionList_default = (localeFunctionList) => {
        functionListDescriptor_default.forEach((f) => {
          const localeFunction = localeFunctionList[f.n];
          f.d = localeFunction.d;
          f.a = localeFunction.a;
          f.p.forEach((p, i2) => {
            Object.assign(p, localeFunction.p[i2]);
          });
        });
        return functionListDescriptor_default;
      };
    }
  });

  // src/function/functionlist.js
  var functionlist, functionlist_default;
  var init_functionlist = __esm({
    "src/function/functionlist.js"() {
      init_functionImplementation();
      init_store();
      init_locale();
      init_getLocalizedFunctionList();
      functionlist = function(customFunctions) {
        let _locale = locale_default();
        let functionListOrigin = [...getLocalizedFunctionList_default(_locale.functionlist)];
        for (let i2 = 0; i2 < functionListOrigin.length; i2++) {
          let func = functionListOrigin[i2];
          func.f = functionImplementation_default[func.n];
        }
        if (customFunctions) {
          functionListOrigin.push(...customFunctions);
        }
        store_default.functionlist = functionListOrigin;
        const luckysheet_function2 = {};
        for (let i2 = 0; i2 < functionListOrigin.length; i2++) {
          let func = functionListOrigin[i2];
          luckysheet_function2[func.n] = func;
        }
        window.luckysheet_function = luckysheet_function2;
        store_default.luckysheet_function = luckysheet_function2;
      };
      functionlist_default = functionlist;
    }
  });

  // src/controllers/print.js
  function viewChange(curType, preType) {
    let currentSheet = sheetmanage_default.getSheetByIndex();
    if (currentSheet.config == null) {
      currentSheet.config = {};
    }
    if (currentSheet.config.sheetViewZoom == null) {
      currentSheet.config.sheetViewZoom = {};
    }
    let defaultZoom = 1, type = "zoomScaleNormal";
    printLineAndNumberDelete(currentSheet);
    if (curType == "viewNormal") {
      type = "viewNormalZoomScale";
    } else if (curType == "viewLayout") {
      type = "viewLayoutZoomScale";
    } else if (curType == "viewPage") {
      type = "viewPageZoomScale";
      defaultZoom = 0.6;
      printLineAndNumberCreate(currentSheet);
    }
    let curZoom = currentSheet.config.sheetViewZoom[type];
    if (curZoom == null) {
      curZoom = defaultZoom;
    }
    currentSheet.config.curentsheetView = curType;
    if (store_default.clearjfundo) {
      store_default.jfredo.push({
        "type": "viewChange",
        "curType": curType,
        "preType": preType,
        "sheetIndex": store_default.currentSheetIndex
      });
    }
    server_default.saveParam("cg", store_default.currentSheetIndex, curType, {"k": "curentsheetView"});
    store_default.currentSheetView = curType;
    zoomChange(curZoom);
  }
  function printLineAndNumberDelete(sheet) {
  }
  function printLineAndNumberCreate(sheet) {
  }
  function switchViewBtn($t) {
    let $viewList = $t.parent(), preType = $viewList.find("luckysheet-print-viewBtn-active").attr("type");
    if ($t.attr("type") == preType) {
      return;
    }
    let curType = $t.attr("type");
    if (curType != null) {
      viewChange(curType, preType);
    } else {
      return;
    }
    $t.parent().find(".luckysheet-print-viewBtn").removeClass("luckysheet-print-viewBtn-active");
    $t.addClass("luckysheet-print-viewBtn-active");
  }
  function printInitial() {
    let container2 = luckysheetConfigsetting_default.container;
    let _this = this;
    $("#" + container2).find(".luckysheet-print-viewBtn").click(function() {
      switchViewBtn($(this));
    });
  }
  var init_print = __esm({
    "src/controllers/print.js"() {
      init_luckysheetConfigsetting();
      init_zoom();
      init_sheetmanage();
      init_server();
      init_location();
      init_store();
    }
  });

  // node_modules/flatpickr/dist/l10n/zh.js
  var require_zh = __commonJS({
    "node_modules/flatpickr/dist/l10n/zh.js"(exports, module) {
      (function(global, factory) {
        typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.zh = {}));
      })(exports, function(exports2) {
        "use strict";
        var fp = typeof window !== "undefined" && window.flatpickr !== void 0 ? window.flatpickr : {
          l10ns: {}
        };
        var Mandarin2 = {
          weekdays: {
            shorthand: ["\u5468\u65E5", "\u5468\u4E00", "\u5468\u4E8C", "\u5468\u4E09", "\u5468\u56DB", "\u5468\u4E94", "\u5468\u516D"],
            longhand: [
              "\u661F\u671F\u65E5",
              "\u661F\u671F\u4E00",
              "\u661F\u671F\u4E8C",
              "\u661F\u671F\u4E09",
              "\u661F\u671F\u56DB",
              "\u661F\u671F\u4E94",
              "\u661F\u671F\u516D"
            ]
          },
          months: {
            shorthand: [
              "\u4E00\u6708",
              "\u4E8C\u6708",
              "\u4E09\u6708",
              "\u56DB\u6708",
              "\u4E94\u6708",
              "\u516D\u6708",
              "\u4E03\u6708",
              "\u516B\u6708",
              "\u4E5D\u6708",
              "\u5341\u6708",
              "\u5341\u4E00\u6708",
              "\u5341\u4E8C\u6708"
            ],
            longhand: [
              "\u4E00\u6708",
              "\u4E8C\u6708",
              "\u4E09\u6708",
              "\u56DB\u6708",
              "\u4E94\u6708",
              "\u516D\u6708",
              "\u4E03\u6708",
              "\u516B\u6708",
              "\u4E5D\u6708",
              "\u5341\u6708",
              "\u5341\u4E00\u6708",
              "\u5341\u4E8C\u6708"
            ]
          },
          rangeSeparator: " \u81F3 ",
          weekAbbreviation: "\u5468",
          scrollTitle: "\u6EDA\u52A8\u5207\u6362",
          toggleTitle: "\u70B9\u51FB\u5207\u6362 12/24 \u5C0F\u65F6\u65F6\u5236"
        };
        fp.l10ns.zh = Mandarin2;
        var zh = fp.l10ns;
        exports2.Mandarin = Mandarin2;
        exports2.default = zh;
        Object.defineProperty(exports2, "__esModule", {value: true});
      });
    }
  });

  // src/controllers/listener.js
  function undoAccessible(len) {
    clearTimeout(undoTimer);
    undoTimer = setTimeout(() => {
      $("#luckysheet-icon-undo")[len ? "removeClass" : "addClass"]("disabled");
    }, 10);
  }
  function redoAccessible(len) {
    clearTimeout(redoTimer);
    redoTimer = setTimeout(() => {
      $("#luckysheet-icon-redo")[len ? "removeClass" : "addClass"]("disabled");
    }, 10);
  }
  var undoTimer, redoTimer, initListener;
  var init_listener = __esm({
    "src/controllers/listener.js"() {
      init_util();
      init_store();
      init_method();
      init_get();
      init_api();
      initListener = function() {
        createProxy(store_default, "jfredo", (target, property, val, receiver) => {
          if (property !== "length") {
            method_default.createHookFunction("updated", val);
          }
          undoAccessible(store_default.jfredo.length);
        });
        createProxy(store_default, "jfundo", (target, property, val, receiver) => {
          redoAccessible(store_default.jfundo.length);
        });
        createProxy(store_default, "asyncLoad", (target, property, val, receiver) => {
          if (property === "length" && val === 0) {
            method_default.createHookFunction("workbookCreateAfter", toJson());
          }
        });
      };
    }
  });

  // src/core.js
  function initialWorkBook() {
    luckysheetHandler();
    initialFilterHandler();
    initialMatrixOperation();
    initialSheetBar();
    formulaBarInitial();
    rowColumnOperationInitial();
    keyboardInitial();
    orderByInitial();
    zoomInitial();
    printInitial();
    initListener();
  }
  var import_zh2, luckysheet2;
  var init_core = __esm({
    "src/core.js"() {
      init_config();
      init_util();
      init_store();
      init_locale();
      init_server();
      init_luckysheetConfigsetting();
      init_sheetmanage();
      init_resize();
      init_handler();
      init_filter();
      init_matrixOperation();
      init_sheetBar();
      init_formulaBar();
      init_rowColumnOperation();
      init_keyboard();
      init_orderBy();
      init_expendPlugins();
      init_get();
      init_set();
      init_refresh();
      init_functionlist();
      init_constant();
      init_getdata();
      init_setdata();
      init_select();
      init_zoom();
      init_print();
      init_method();
      init_api();
      init_esm();
      import_zh2 = __toModule(require_zh());
      init_listener();
      init_loading();
      init_extend();
      luckysheet2 = {};
      luckysheet2 = common_extend(api_exports, luckysheet2);
      luckysheet2.create = function(setting) {
        method_default.destroy();
        store_default.toJsonOptions = {};
        for (let c2 in setting) {
          if (c2 !== "data") {
            store_default.toJsonOptions[c2] = setting[c2];
          }
        }
        let extendsetting = common_extend(config_default, setting);
        let loadurl = extendsetting.loadUrl, menu = extendsetting.menu, title = extendsetting.title;
        let container2 = extendsetting.container;
        store_default.container = container2;
        store_default.luckysheetfile = extendsetting.data;
        store_default.defaultcolumnNum = extendsetting.column;
        store_default.defaultrowNum = extendsetting.row;
        store_default.defaultFontSize = extendsetting.defaultFontSize;
        store_default.fullscreenmode = extendsetting.fullscreenmode;
        store_default.lang = extendsetting.lang;
        store_default.allowEdit = extendsetting.allowEdit;
        store_default.limitSheetNameLength = extendsetting.limitSheetNameLength;
        store_default.defaultSheetNameMaxLength = extendsetting.defaultSheetNameMaxLength;
        store_default.fontList = extendsetting.fontList;
        server_default.gridKey = extendsetting.gridKey;
        server_default.loadUrl = extendsetting.loadUrl;
        server_default.updateUrl = extendsetting.updateUrl;
        server_default.updateImageUrl = extendsetting.updateImageUrl;
        server_default.title = extendsetting.title;
        server_default.loadSheetUrl = extendsetting.loadSheetUrl;
        server_default.allowUpdate = extendsetting.allowUpdate;
        luckysheetConfigsetting_default.autoFormatw = extendsetting.autoFormatw;
        luckysheetConfigsetting_default.accuracy = extendsetting.accuracy;
        luckysheetConfigsetting_default.total = extendsetting.data[0].total;
        luckysheetConfigsetting_default.loading = extendsetting.loading;
        luckysheetConfigsetting_default.allowCopy = extendsetting.allowCopy;
        luckysheetConfigsetting_default.showtoolbar = extendsetting.showtoolbar;
        luckysheetConfigsetting_default.showtoolbarConfig = extendsetting.showtoolbarConfig;
        luckysheetConfigsetting_default.showinfobar = extendsetting.showinfobar;
        luckysheetConfigsetting_default.showsheetbar = extendsetting.showsheetbar;
        luckysheetConfigsetting_default.showsheetbarConfig = extendsetting.showsheetbarConfig;
        luckysheetConfigsetting_default.showstatisticBar = extendsetting.showstatisticBar;
        luckysheetConfigsetting_default.showstatisticBarConfig = extendsetting.showstatisticBarConfig;
        luckysheetConfigsetting_default.sheetFormulaBar = extendsetting.sheetFormulaBar;
        luckysheetConfigsetting_default.cellRightClickConfig = extendsetting.cellRightClickConfig;
        luckysheetConfigsetting_default.sheetRightClickConfig = extendsetting.sheetRightClickConfig;
        luckysheetConfigsetting_default.pointEdit = extendsetting.pointEdit;
        luckysheetConfigsetting_default.pointEditUpdate = extendsetting.pointEditUpdate;
        luckysheetConfigsetting_default.pointEditZoom = extendsetting.pointEditZoom;
        luckysheetConfigsetting_default.userInfo = extendsetting.userInfo;
        luckysheetConfigsetting_default.userMenuItem = extendsetting.userMenuItem;
        luckysheetConfigsetting_default.myFolderUrl = extendsetting.myFolderUrl;
        luckysheetConfigsetting_default.functionButton = extendsetting.functionButton;
        luckysheetConfigsetting_default.showConfigWindowResize = extendsetting.showConfigWindowResize;
        luckysheetConfigsetting_default.enableAddRow = extendsetting.enableAddRow;
        luckysheetConfigsetting_default.enableAddBackTop = extendsetting.enableAddBackTop;
        luckysheetConfigsetting_default.addRowCount = extendsetting.addRowCount;
        luckysheetConfigsetting_default.enablePage = extendsetting.enablePage;
        luckysheetConfigsetting_default.pageInfo = extendsetting.pageInfo;
        luckysheetConfigsetting_default.editMode = extendsetting.editMode;
        luckysheetConfigsetting_default.beforeCreateDom = extendsetting.beforeCreateDom;
        luckysheetConfigsetting_default.workbookCreateBefore = extendsetting.workbookCreateBefore;
        luckysheetConfigsetting_default.workbookCreateAfter = extendsetting.workbookCreateAfter;
        luckysheetConfigsetting_default.remoteFunction = extendsetting.remoteFunction;
        luckysheetConfigsetting_default.customFunctions = extendsetting.customFunctions;
        luckysheetConfigsetting_default.fireMousedown = extendsetting.fireMousedown;
        luckysheetConfigsetting_default.forceCalculation = extendsetting.forceCalculation;
        luckysheetConfigsetting_default.plugins = extendsetting.plugins;
        luckysheetConfigsetting_default.rowHeaderWidth = extendsetting.rowHeaderWidth;
        luckysheetConfigsetting_default.columnHeaderHeight = extendsetting.columnHeaderHeight;
        luckysheetConfigsetting_default.defaultColWidth = extendsetting.defaultColWidth;
        luckysheetConfigsetting_default.defaultRowHeight = extendsetting.defaultRowHeight;
        luckysheetConfigsetting_default.title = extendsetting.title;
        luckysheetConfigsetting_default.container = extendsetting.container;
        luckysheetConfigsetting_default.hook = extendsetting.hook;
        luckysheetConfigsetting_default.pager = extendsetting.pager;
        luckysheetConfigsetting_default.initShowsheetbarConfig = false;
        luckysheetConfigsetting_default.imageUpdateMethodConfig = extendsetting.imageUpdateMethodConfig;
        if (store_default.lang === "zh")
          esm_default.localize(import_zh2.default.zh);
        store_default.asyncLoad.push(...luckysheetConfigsetting_default.plugins);
        initPlugins(extendsetting.plugins, extendsetting.data);
        functionlist_default(extendsetting.customFunctions);
        let devicePixelRatio = extendsetting.devicePixelRatio;
        if (devicePixelRatio == null) {
          devicePixelRatio = 1;
        }
        store_default.devicePixelRatio = Math.ceil(devicePixelRatio);
        const loadingObj = luckysheetlodingHTML("#" + container2);
        store_default.loadingObj = loadingObj;
        if (loadurl == "") {
          sheetmanage_default.initialjfFile(menu, title);
          initialWorkBook();
        } else {
          $.post(loadurl, {"gridKey": server_default.gridKey}, function(d) {
            let data = new Function("return " + d)();
            store_default.luckysheetfile = data;
            sheetmanage_default.initialjfFile(menu, title);
            initialWorkBook();
            if (server_default.allowUpdate) {
              server_default.openWebSocket();
            }
          });
        }
      };
      luckysheet2.getluckysheetfile = getluckysheetfile;
      luckysheet2.getluckysheet_select_save = getluckysheet_select_save;
      luckysheet2.setluckysheet_select_save = setluckysheet_select_save;
      luckysheet2.getconfig = getconfig;
      luckysheet2.getGridData = sheetmanage_default.getGridData;
      luckysheet2.buildGridData = sheetmanage_default.buildGridData;
      luckysheet2.luckysheetrefreshgrid = luckysheetrefreshgrid;
      luckysheet2.jfrefreshgrid = jfrefreshgrid;
      luckysheet2.getcellvalue = getcellvalue;
      luckysheet2.setcellvalue = setcellvalue;
      luckysheet2.getdatabyselection = getdatabyselection;
      luckysheet2.sheetmanage = sheetmanage_default;
      luckysheet2.flowdata = function() {
        return store_default.flowdata;
      };
      luckysheet2.selectHightlightShow = selectHightlightShow;
      luckysheet2.destroy = method_default.destroy;
      luckysheet2.showLoadingProgress = showloading;
      luckysheet2.hideLoadingProgress = hideloading;
      luckysheet2.luckysheetextendData = luckysheetextendData;
      luckysheet2.locales = locales;
    }
  });

  // src/utils/polyfill.js
  function __firefox() {
    HTMLElement.prototype.__defineGetter__("runtimeStyle", __element_style);
    window.constructor.prototype.__defineGetter__("event", __window_event);
    Event.prototype.__defineGetter__("srcElement", __event_srcElement);
  }
  function __element_style() {
    return this.style;
  }
  function __window_event() {
    return __window_event_constructor();
  }
  function __event_srcElement() {
    return this.target;
  }
  function __window_event_constructor() {
    if (document.all) {
      return window.event;
    }
    var _caller = __window_event_constructor.caller;
    while (_caller != null) {
      var _argument = _caller.arguments[0];
      if (_argument) {
        var _temp = _argument.constructor;
        if (_temp.toString().indexOf("Event") != -1) {
          return _argument;
        }
      }
      _caller = _caller.caller;
    }
    return null;
  }
  var polyfill_default;
  var init_polyfill = __esm({
    "src/utils/polyfill.js"() {
      polyfill_default = __firefox;
    }
  });

  // src/index.js
  var require_src = __commonJS({
    "src/index.js"(exports, module) {
      init_math();
      init_core();
      init_polyfill();
      if (window.addEventListener && navigator.userAgent.indexOf("Firefox") > 0) {
        polyfill_default();
      }
      module.exports = luckysheet2;
    }
  });
  return require_src();
})();
/*!
 * escape-html
 * Copyright(c) 2012-2013 TJ Holowaychuk
 * Copyright(c) 2015 Andreas Lubbe
 * Copyright(c) 2015 Tiancheng "Timothy" Gu
 * MIT Licensed
 */
/*! @preserve
 * numeral.js
 * version : 2.0.6
 * author : Adam Draper
 * license : MIT
 * http://adamwdraper.github.com/Numeral-js/
 */
//# sourceMappingURL=luckysheet.umd.js.map
